試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Gentoo Linuxにおけるパッケージ管理について(スロット、tbz2ファイル)

スロット

複数バージョンが共存できる一部のパッケージ*1には、同時に入れられるバージョンの「枠」(スロット)が設けられている。
例えば、GUIツールキットと呼ばれるGTK+やQtには、大きなバージョン系統*2ごとにスロットが設けられていて、2008年10月現在では、GTK+は「1」と「2」、Qtは「3」と「4」にそれぞれ1つずつのバージョンをインストールできる。wxGTKのように、「2.6」「2.8」という系統*3でスロットになっているものや、gtkhtmlのように互換性のある範囲ごとに幾つも細かく*4スロットが分かれているものもある。他には、カーネルのソースは全てのebuildのバージョン/リビジョンごとにスロットが用意されている。
新しいスロットにパッケージがインストールされる場合にはemergeによるインストール時に

[ebuild  NS   ] [分野名]/[パッケージ名]-[バージョン]...

のように表示される。
例として、GCCのバージョン4.1.2と4.2.4がシステムにインストールされていて、4.1.2のほうが要らなくなったとしたら

(バージョンによる指定)
$ sudo emerge -aC "=sys-devel/gcc-4.1.2"
(スロットによる指定)
$ sudo emerge -aC "sys-devel/gcc:4.1"

のようにバージョンやスロットによる指定を行って削除することができる。バージョンやスロットの指定をしないと全てのバージョンが消える。

バイナリパッケージ(.tbz2ファイル)

ビルド/インストール済みのパッケージをバイナリパッケージとして.tbz2ファイル*5にまとめることができる。バイナリパッケージを使用すると、ビルド作業を行わずにインストールが行え、Gentoo Linuxを複数台のマシンで使用しているときには便利かもしれないが、不特定多数に配布する用途だとGentooの自由度という特徴が活かされない。USEフラグの構成は、パッケージを作成したシステムとインストールするシステムとで同じものにしておくとよい。
バイナリ配布サーバ(後述)を用いることで、ビルド済みパッケージをダウンロード/インストールすることもできる。

(インストール済みパッケージの.tbz2ファイル化・設定付き)
$ sudo quickpkg --include-config=y [パッケージ名]
(インストール済みパッケージの.tbz2ファイル化・設定無し)
$ sudo quickpkg --include-config=n [パッケージ名]
(パッケージのビルド/インストール時に.tbz2ファイルも作成)
$ sudo emerge -avb [パッケージ名]
(パッケージをビルドして.tbz2ファイルを作成するが、システムにはインストールしない)
$ sudo emerge -avB [パッケージ名]
(ローカル上にバイナリパッケージがある場合に使用する)
$ sudo emerge -avK [パッケージ名]
(バイナリ提供サーバ上にバイナリパッケージがある場合に使用する)
$ sudo emerge -avg [パッケージ名]
(バイナリ提供サーバ上にバイナリパッケージがある場合で全てバイナリを使用したいとき)
$ sudo emerge -avG [パッケージ名]

バイナリパッケージが利用できるときには、インストール確認時に

[binary  N    ] [分野名]/[パッケージ名]-[バージョン]...

のように表示される。インストールはその後あっという間に終わる。
emerge-Bオプションはパッケージをインストールせずに.tbz2ファイルを作成するが、これは「x86_64版Gentoo Linuxの32bitライブラリを自前で管理(概要と、ビルド方法について)」から行っていたような、x86_64上でx86_32版ライブラリを(直接システムにインストールせずに)ビルドする作業などで使える。
.tbz2ファイルの読み書きに使用される場所は/etc/make.confの変数PKGDIRの場所で、省略時の既定の場所は/usr/portage/packages/
バイナリ提供サーバにあるバイナリパッケージを使用する場合

の通りにインストールする。
2008年10月現在、Gentooのミラーサーバ群はバイナリパッケージの配布は行っておらず、個人などが個別に公開・配布しているサーバから取ってくることになる。この配布者が信用できて、かつUSEフラグの構成が配布者が指定したものでよければ、使用する価値がある。
なお、配布されているバイナリパッケージは「USE=bindist」でビルドされている点にも注意。「USE=bindist」については「Gentoo Linuxにおけるパッケージ管理について(USEフラグ)」を参照。
初めてバイナリパッケージ配布サーバからパッケージをインストールしようとしたときには、その情報をダウンロードして保存(キャッシュ)しておくための処理にかなり時間がかかる(2回目からは多少短くなる)。また、/var/cache/edb/に巨大なファイル(metadata.idx.most_recentremote_metadata.pickle)を作成するため、パーティション分けをしている場合は容量にも注意。
手元の環境で、x86_64で利用可能と書かれていたサーバ(packages.ututo.org/k8/)を試したが、うまくいかなかった。そもそも.tbz2ファイルの中身がx86_32*6で、適当なパッケージをインストールしようとしたがバイナリパッケージが使用されない上、「Failed to inject remote binary package:[パッケージatom]」などのメッセージも出ていた。実際にはx86_64向けの利用可能サーバは存在しないようだ。

関連記事:

*1:カーネルソースやGCCの他、ライブラリにも共存できるものがある

*2:動作上の互換性はなく、ライブラリの古いバージョン向けに書かれたコードは新しいバージョンではそのままでは使えない

*3:これも互換性がないため分かれている

*4:2008年10月現在「2」「3.2」「3.6」「3.8」「3.14」の5つがある

*5:tar+bzip2により、複数のファイルやディレクトリを1つにまとめて圧縮したもの

*6:使おうとしても「masked by: CHOST: i686-pc-linux-gnu」とCHOSTによるマスク扱いになってしまう