base/ports split: analysis2006年04月07日 06時31分55秒

/var/db/pkg に ports/packages でインストールした物の情報が保持される。なお、/var/db/ports には、ports のコンパイルオプションが保持される。

pkg 以下を覗くと、@cwd がインストールディレクトリを指定するようだ。


% grep @cwd */+CONT* | cut -f 2 -d' ' | sort | uniq
.
/
/compat/linux
/usr/X11R6
/usr/local
@cwd

何だか変な出力が。もう少し、見やすいようにしてみる。

% awk '/@cwd/{print}' */+CONT* | sort | uniq | less
@comment @cwd /usr/X11R6
@cwd .
@cwd /
@cwd /compat/linux
@cwd /usr/X11R6
@cwd /usr/local

ん。ルートディレクトリに突っ込む ports があるらしい。後で、調べねば。

local はいつも FreeBSD の ports が色々入れるところで、よく知られている。しかし、/usr/local ばかり強調されるが、それは間違っているようだ。/usr/X11R6 には X 関連のものが入るがかなりの量のものが入っている。


# cd /usr; du -s local X11R6
3646588 local
531784  X11R6

Java コンパイラが、linux のも含めて、五つぐらい入っているので /usr/local が大きいのは予想されたことだが、X11R6 も十分大きい。

% grep -A1000 '@cwd \.$' */+C* | less
Hermes-1.3.3_1/usm-1.3.3_1/+CONTENTS:@cwd .
Hermes-1.3.3_1/+CONTENTS-@ignore
Hermes-1.3.3_1/+CONTENTS-+COMMENT
Hermes-1.3.3_1/+CONTENTS-@comment MD5:9310f6d7ee02e038da68b03efdf4d7bc
Hermes-1.3.3_1/+CONTENTS-@ignore
Hermes-1.3.3_1/+CONTENTS-+DESC
Hermes-1.3.3_1/+CONTENTS-@comment MD5:3c56525e4bc1280cba524d194d10be4d
Hermes-1.3.3_1/+CONTENTS-@ignore
Hermes-1.3.3_1/+CONTENTS-+MTREE_DIRS
Hermes-1.3.3_1/+CONTENTS-@comment MD5:fb5c522ba3ebbed5ebe23270a8dfc9e5
Hermes-1.3.3_1/+CONTENTS-@mtree +MTREE_DIRS
--
ORBit-0.5.17_2/+CONTENTS:@cwd .
ORBit-0.5.17_2/+CONTENTS-@ignore
ORBit-0.5.17_2/+CONTENTS-+COMMENT
...

これの結果によると、@cwd . は /var/db/pkg を指すらしい。全てのファイルにないところを見ると、少々古いものに入っているのだろうか。

/var/db/pkg は pkg_* が使うディレクトリなので、ports を分けるには、否応なしにも別の方法で分けるしかない。/var/db/ports は ports 自体の設定ファイルになるので、ここでいいと思うが、/var/db/pkg は感心できない。/usr/local/var/db/pkg や /var/local/db/pkg 等、/usr/local 以下に置いた方が、ベースシステムから切り離すのに向いている。

pkg tools はこのデータベースを指定する方法がないので、何らかの対処を施す必要がある


% grep compat */+C* | grep cwd
linux-atk-1.2.0_3/+CONTENTS:@cwd /compat/linux
linux-esound-0.2.22_4/+CONTENTS:@cwd /compat/linux
linux-expat-1.95.5_3/+CONTENTS:@cwd /compat/linux
linux-fontconfig-2.2.3/+CONTENTS:@cwd /compat/linux
linux-jpeg-6b.15_4/+CONTENTS:@cwd /compat/linux
linux-libaudiofile-0.1.11_5/+CONTENTS:@cwd /compat/linux

linux-png-1.2.7_6/+CONTENTS:@cwd /compat/linux
linux-tiff-3.6.1_3/+CONTENTS:@cwd /compat/linux
linux_base-rh-7.3/+CONTENTS:@cwd /compat/linux

/compat にはもちろん compat のが入っているのである。この内容からすると、ライブラリ関連のみのようだ。

%grep -A1000 '@cwd /$' */+C*
qemu-0.7.2s.20050909_2/+CONTENTS:@cwd /
qemu-0.7.2s.20050909_2/+CONTENTS-@comment %%KMODDIR%%/kqemu.ko

ルートパーティションに突っ込んでたのは、qemu だった。カーネルは別に入れ換えることが多いから、カーネルモジュールは別途に保存しておいた方がよさそうだ。

以上の情報を元に、/ports を作り、以下のように配置する事にした。


# find /ports
/ports
/ports/compat/linux
/ports/X11R6
/ports/db/pkg

恐らく、これを nullfs を利用してと、本来の位置に mount する事になると思われる。ln -s は避けたいところである。

また、linprocfs を使うときには、fstab の順番にも多少気を使う必要がある。今、気がついたのだが、/compat は usr/compat へのリンクになっているようだ。自分で作ったものか ports が作ったものかは定かではない。

前回次回