2014年1月18日土曜日

(FreeBSD) pkg updateとかすると、pkg: Unable to find catalogs

そろそろFreeBSD 10も試してみようと、ちょっと前に、VirtualBoxでFreeBSD 10のRC1くらいのものをインストールして、とりあえず利用可能な環境を構築してみたことがありました。



しかも、「よ~し、portsを使わずに、バイナリパッケージだけでどこまでできるか試してみよう!」ということで、pkgコマンドを使いました。pkgngとも呼ばれる、FreeBSDの新しいパッケージ管理の仕組みの勉強にもなって、いいかなと思いまして。



そのときは、なぜかemulators/virtualbox-ose-additionsのバイナリパッケージがなかったので、それだけはportsを使ってインストールしました。たしかちょっとしたコンパイルエラーが出ていたと思います(現在は大丈夫のようです)。



でもって、動く環境ができたら、もうそれで興味が薄れてしまい、放置していたのですが、正式リリース時期が近づいてきたので、再び、動かしてみることが増えてきました。



とりあえず、freebsd-updateで、RC3、RC4、RC5と順調にあげてきまして、そしてそういえばパッケージのアップデートをしていなかったな、と思い出して、pkgコマンドでアップデートしよう!と思ったら・・・



どうもうまくいきません。



# pkg upgrade
Updating repository catalogue
digests.txz                         100%  996KB 996.3KB/s 996.3KB/s   00:01   
packagesite.txz                     100% 4549KB   4.4MB/s   4.4MB/s   00:00   
Incremental update completed, 21327 packages processed:
0 packages updated, 0 removed and 21327 added.
pkg: Unable to find catalogs



わかりにくいんですが、どうやら最後に表示されている「pkg: Unable to find catalogs」が、エラーを意味するメッセージのようです。



ネット検索してみると、freebsd-portsのメーリングリストに投稿された、以下のメールが、自分と同じ症状を訴えているようです(Webのアーカイブのリンクをクリックすると、なぜか全然別のメールが表示されるので、リンクをはれなかった)。

From:    Lundberg, Johannes <johannes@brilliantservice.co.jp>
Date:    16 Jan 2014 06:20:50
Subject: Re: since 10.0rc5 - pkg: Unable to find catalogs

いくらネット検索しても解決方法が見つからないので、pkgコマンドのソースコードを追っかけてみました。gdbとか使わずに、printfデバッグなんですけどね[E:coldsweats01]



ちなみに、pkgコマンドで、デバッグメッセージを出させるには、env DEBUG_LEVEL=9 pkg -d update とかやればいいようです。デバッグレベルはいろいろ変えられます。



エラーで終了する最後のほうか、こんな感じのメッセージが見られます。



DBG(3)> Manifest: parsing array
DBG(2)> Manifest: found key: 'flatsize'
DBG(2)> Manifest: found key: 'pkgsize'
DBG(2)> Manifest: found key: 'desc'
DBG(2)> Manifest: found key: 'deps'
DBG(3)> Manifest: parsing object
DBG(2)> Found p5-Moose
DBG(3)> Pkg: add a new dependency origin: devel/p5-Moose, name: p5-Moose, version: 2.1005,1
DBG(2)> Found p5-Try-Tiny
DBG(3)> Pkg: add a new dependency origin: lang/p5-Try-Tiny, name: p5-Try-Tiny, version: 0.18
DBG(2)> Found perl5
DBG(3)> Pkg: add a new dependency origin: lang/perl5.16, name: perl5, version: 5.16.3_6
DBG(2)> Manifest: found key: 'categories'
DBG(3)> Manifest: parsing array
DBG(2)> Parsing manifest from buffer
DBG(2)> Falling back on yaml
Incremental update completed, 21327 packages processed:
0 packages updated, 0 removed and 21327 added.
DBG(4)> Pkgdb: running 'ROLLBACK TRANSACTION'
pkg: Unable to find catalogs


徐々に場所を追い詰めていって、問題箇所、わかりました。



結論から言ってしまうと、

http://pkg.FreeBSD.org/freebsd:10:x86:64/latest/packagesite.txz
のファイルがぶっ壊れていた!

でした。[E:shock]



後で確認したら、この問題が修正されちゃったようで、現在は問題なくなっているかもしれません。ありがたい[E:happy01]



packagesite.txzを展開すると、packagesite.yamlというファイルが出てくるのですが、これをemacsで開いて眺めていると、以下の箇所に、不正な文字が混じっていました。



{"name":"p5-MooseX-Attribute-ENV","origin":"devel/p5-MooseX-Attribute-ENV","version":"0.02_1","comment":"Set default of an attribute to a value from ^NV","arch":"freebsd:10:x86:64","maintainer":"Alan@Wave2.org","prefix":"/usr/local","www":"http://search.cpan.org/dist/MooseX-Attribute-ENV/","path":"All/p5-MooseX-Attribute-ENV-0.02_1.txz","sum":"2e5a3e43d483165474dc56b87ade527bf8618bd7be56cfe2afc692df7251818c","licenselogic":"or","licenses":["ART10","GPLv1"],"flatsize":28898,"pkgsize":15208,"desc":"MooseX-Attribute-ENV is a Moose attribute trait that you use when\nyou want the default value for an attribute to be populated from\nthe %25ENV hash.\n\nWWW: http://search.cpan.org/dist/MooseX-Attribute-ENV/","deps":{"p5-Moose":{"origin":"devel/p5-Moose","version":"2.1005,1"},"perl5":{"origin":"lang/perl5.16","version":"5.16.3_6"}},"categories":["devel","perl5"]}



commentのところが
「Set default of an attribute to a value from ^NV」
のようになっていて、「Ctrl+N」という制御コードが入ってます。ここは本来
「Set default of an attribute to a value from %ENV」
となるべきところなんですが、「%EN」がCtrl+Nに置き換えられてしまったようです。ああ、なんかそうなりそう・・・ってところですね[E:coldsweats01]



エラーが出るきっかけは、libucfというライブラリだったので、とりあえず「Ctrl+N」という1文字だけはエラーにしないで無視させる小細工をして・・・



    while (p < chunk->end) {
        c = *p;
        if (c < 0x1F) {
            /* Unmasked control character */
            if (c == '\n') {
                ucl_set_err (chunk, UCL_ESYNTAX, "unexpected newline", &parser-\
>err);
            }
            else if ( c == 0x0e ) {
                printf("HOGEHOGE: skip 0x0e\n");
                ucl_chunk_skipc (chunk, p);
                continue;
            }
            else {



portsのpkgをビルドしなおし、pkg updateを実行。うまくいきました



うまく動いていなかったとき、/var/db/pkg/repo-FreeBSD.sqlite というファイルが



-rw-r--r--  1 root  wheel     38912  1月 16 04:51 repo-FreeBSD.sqlite



だったのが、



小細工したpkgコマンドでは



-rw-r--r--  1 root  wheel  32433152  1月 16 04:51 repo-FreeBSD.sqlite



と、サイズが大きくなりました。
pkg statというコマンドでも、何やら表示されます。



# pkg stat
Local package database:
    Installed packages: 616
    Disk space occupied: 3 GB



Remote package database(s):
    Number of repositories: 1
    Packages available: 21327
    Unique packages: 21327
    Total size of packages: 91 GB



エラーでうまくいってなかったときは、Remoteのほうがこんな感じでした。



Remote package database(s):
    Number of repositories: 1
    Packages available: 0
    Unique packages: 0
    Total size of packages: 0 B





これでようやくpkgコマンドがまともに動くようになりました。



さて、パッケージをアップデート・・・



# pkg upgrade
Updating repository catalogue
pkg: Missing dependency matching 'sysutils/policykit-gnome'
pkg: Missing dependency matching 'sysutils/upower'
pkg: Missing dependency matching 'x11/zenity'
pkg: Missing dependency matching 'x11-wm/metacity'
pkg: Missing dependency matching 'x11/zenity'
pkg: Missing dependency matching 'x11-servers/xorg-server'
pkg: Missing dependency matching 'x11-servers/xorg-server'
pkg: Missing dependency matching 'x11-servers/xorg-server'
pkg: Error while trying to install/upgrade packages, as there are unresolved dependencies:
sysutils/gnome-mount: sysutils/policykit-gnome
x11/gnome-session: sysutils/upower, sysutils/gnome-settings-daemon
x11-themes/gnome-themes: x11-wm/metacity
x11-wm/metacity: x11/zenity
emulators/virtualbox-ose-additions: x11-servers/xorg-server
x11-drivers/xf86-input-keyboard: x11-servers/xorg-server
x11-drivers/xf86-input-mouse: x11-servers/xorg-server


ん???



# pkg install x11-servers/xorg-server
Updating repository catalogue
pkg: No packages matching 'x11-servers/xorg-server' available in the repositories



なんだか、足りないバイナリパッケージがいくつかあるようです。なぜ?[E:coldsweats01]







20140117





0 件のコメント:

コメントを投稿