そろそろ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]
0 件のコメント:
コメントを投稿