バイナリパッケージを使う

新しくインストールするマシンにパッケージをインストールする際、いちいちコンパイルする時間がもったいない! とか ディスクスペースが (一時的なものであっても) 不安! とか思うことがある。
そんなときは他の PC とパッケージを共有化して、バイナリパッケージを使うと結構いい感じ。


ただし、これが出来るのは同じアーキテクチャの CPU の場合だけ。USE フラグも同じじゃないと意味がないかも。


実例

たとえば、glibc がアップデートされたけど、複数の PC でのコンパイルメンドクセとか思ったらこんな感じでやる。

  • メインPC
$ sudo emerge -avb glibc

みたいに -b オプション (--buildpkg) をつけてマージすると、パッケージが tbz2 形式で作成される。


なお、標準の作成場所は /usr/portage/packages となっている。

$ ls -la /usr/portage/packages/*

 /usr/portage/packages/sys-libs:
 合計 10556
 drwxr-xr-x 2 root root     4096 2009-07-04 19:08 .
 drwxr-xr-x 5 root root     4096 2009-07-04 19:15 ..
 -rw-r--r-- 1 root root 10783654 2009-07-04 19:08 glibc-2.9_p20081201-r2.tbz2
  • サブPC
$ emerge -avk glibc

These are the packages that would be merged, in order:

Calculating dependencies... done!
[binary     U ] sys-libs/glibc-2.9_p20081201-r2 [2.8_p20080602-r1]
 USE="gd* nls -debug -glibc-omitfp (-hardened) (-multilib) -profile (-selinux) -vanilla"

Total: 1 package (1 upgrade), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No] y

みたいに -k オプション (--usepkg) をつけると、バイナリパッケージがあればそれを用いてマージしようとしてくれる。インストールタイプが binary に変わっている (太字) のにも注目。


なお、この場合にバイナリがあるか参照しにいく標準は /usr/portage/packages ディレクトリであり、これは変数 $PKGDIR で指定されている。別の場所にある場合 (CD-ROM とか) は、例えばこんな感じでやるといいらしい。

$ PKGDIR="/mnt/cdrom/packages" emerge -pv glibc

すでにインストールしてあるパッケージは?

quickpkg を使う。

$ sudo /usr/sbin/quickpkg glibc
とか
$ sudo /usr/sbin/quickpkg --include-config=y glibc
とか


やっぱり /usr/portage/packages ディレクトリに tbz2 が作られる。標準では設定関連のファイルが含まれないことに注意。あと root 権限じゃないと読めないパッケージが出来てしまうぽいのが難点かもしれない。権限書き換えれば平気だけど…。

portage ツリーを共有しよう

家にある PC から何度も sync しにいくのは Gentoo サーバの負荷の元だし、ソースファイルなんて一度落としたら共有すればいいので、是非共有すべきである。


てことでこの辺を参考にするといいかな?


一応メモ。

  • net-fs/nfs-utils をインストール
  • メイン PC の /usr/portageNFS マウントできるように /etc/exports を編集
  • メイン PC の NFS サーバサービスを起動
  • サブ PC から NFS をマウント


これだけ。


実はこれをやっておくと、メイン PC で --buildpkg したパッケージをサブ PC で --usepkg してマージするのは何も意識しないでやれるし、ソースファイル (distfiles) もどこかの PC で落とせばそれがそのまま生かされるし。回線にもディスク資源にもとてもやさしいです。