Gentooの新米ユーザに贈るアドバイス
これはGentooディストリビューションを初めて使う場合に特に当てはまることだが、まず最初に行うべきは、用意されている多数のドキュメントを一読しておくことだ。最低でも『Gentoo Handbook』には注意深く目を通しておかないと、Gentooをインストールすることすらできないだろう。
Gentooにはグラフィカルインストーラが用意されているが、初心者ユーザにはお勧めできない。その理由の1つは、従来通りのマニュアル操作でGentooをインストールする場合『Gentoo Handbook』に目を通さない訳にはいかないので、今後の運用に必須となる重要な知識を押さえておくことになるからである。また現行のGentooインストーラは、他のディストリビューションのものとは異なり、必要なドライバを設定し損なう場合があるのだ。そうした事情を踏まえずに、他のディストリビューションのものと同等の性能があることを前提としてGentooのグラフィカルインストーラを使って作業を進めると、判断ミスとそれに伴うフラストレーションに悩まされることとなる。
『Gentoo Handbook』に解説されている内容は、Gentooに関する基本的な情報だけだ。より詳しい情報(XやALSAの設定など)については、『Gentoo Documentation Resources』にまとめられている。その他の情報源としては、Gentoo wikiが頼りになるだろう。
これらの情報源さえ当たればすべての疑問が解決される訳ではないが、その場合は各種のGentoo ForumやIRCチャンネルで質問すれば、誰かが答えてくれるはずだ。
Portageについて
Gentooが他のディストリビューションと一線を画している要素の1つが、Portageという名のパッケージ管理システムであり、これはソフトウェアのインストールを基本的にソースから行うという特色を備えている。こうした仕様は、非常に細かな設定やカスタマイズを施すことを可能としている。これに対して通常のバイナリ系ディストリビューションの場合は、個々のソフトウェアごとに依存性やオプション設定を変えた複数のパッケージが用意されているだけでしかない(この場合必然的に、ソースからパッケージをビルドする方式よりもユーザが指定できるオプション範囲は狭い)。そしてGentooのPortageの場合、ユーザはいわゆるUSEフラグを設定することで、システム全体ないし特定パッケージについてのオプション機能を指定することになる。
例えば、KDEサポートをオンにして全体的なGNOME依存性をオフにしたい場合は、/etc/make.confのUSE変数でkde -gnome
と設定すればよい。USEフラグの詳細については『Gentoo Handbook』に解説されている。
Portageを起動させるにはemergeコマンドを使用する。例えばmooパッケージをインストールするのであれば、emerge moo
とコマンドを送信すればよい。後はPortageが指定パッケージの依存性をチェックし、必要なすべてのソースをアーカイブからダウンロードして、パッケージのコンパイルからインストールまでを処理してくれる。こうした処理に必要な情報はすべてPortageのデータベースに格納されているが、その記述に用いられるのがebuildsという専用のbashスクリプトだ。ebuildの格納先は/usr/portageである。
Portage設定の管理
Gentooを使いこなすに当たって最初に把握すべきは、USEフラグの役割である。例えばemergeにMidnight Commanderを指定して実行するとX.orgがインストールされるが、そうした処理が行われる背景には、ユーザがX USEフラグをオンにしたという設定が潜んでいるのだ。同じく、手元のKDE環境にKPDFが用意されていなければ、それはユーザがpdf USEフラグをオンにしていなかったからなのである(KGhostScriptが収録されている理由を質問されると、説明に窮するが)。
コンパイルの開始前にどのフラグが関係しているかを確認したければ、新規パッケージのインストール時にemerge --ask --verbose
(ないしはemerge -av
)と指定すればよい。なおgentoolkitパッケージをインストールしておくと(emerge gentookit
)、euseユーティリティが使えるようになり、USEフラグの管理が簡単になる。またeuse -i flag
を実行すると、個々のフラグに関する説明およびその設定状況を確認することができる。詳細についてはeuseのmanページを参照して頂きたい(この説明自体はそれほど長くない)。
パッケージのインストールではなく、特定パッケージのUSEフラグのみを変更したい場合は、USE="some flags" emerge moo
などとすればよい。なおここで指定したパッケージについては、次回のアップデート時において既存のフラグ設定を維持した状態で再コンパイルされるようになる。こうしたUSEフラグの変更情報は、/etc/portage/package.useファイルに記録される。ただし記録機能を有効にするには、インストール前にecho "category/moo some flags" >> /etc/portage/package.use
などを実行しておく必要がある。
同様の措置はACCEPT_KEYWORDSでも同じで、この場合は/etc/portage/package.keywordsを使用することになる。なおPortage 2.1ではフラグ管理を簡単化する目的で、package.useおよびpackage.keywordsをファイル形式ではなくディレクトリ形式で扱えるようになっている。
オーバーレイとは何か
インストールしたいパッケージがすべてPortageに用意されているとは限らない。例えば、Portageから削除されたパッケージ(ないしはその特定バージョン)をインストールしたいケースなどもあるはずだ。そのような場合では、PortageのCVSリポジトリから必要なもののebuildを入手すればよい。また新規パッケージのアップデートをしようとしたら、Bugzillaでebuildを見つけたというケースもあるだろう。あるいは、オフィシャルのPortageツリーに用意されているebuildに変更を施さないと使えない、というケースも考えられる。
いずれのケースにせよ、カスタム版のオーバーレイをローカルに用意して、その中に必要なebuildを収めておく必要がある。ここで言うオーバーレイとは、Portageデータベースに登録させる複数のebuildを1つのセットにカスタマイズ化したものを意味する。こうしたカスタムebuildについては、次回の同期時に消去されてしまうので、プライマリのportageツリー(/usr/portage)に格納してはいけない。この場合はオーバーレイ用のディレクトリを作成し、その中に/usr/portageと同様のディレクトリ構造を再現して、カスタマイズしたebuildを該当する位置に格納しておくことになる。後はPORTDIR_OVERLAY="/path/to/local/overlay"
を各自の/etc/make.confファイルに追加すればよい。
オーバーレイが置かれる場所は通常/usr/local/overlaysであるので、独自にカスタマイズしたebuildの格納先は/usr/local/overlays/localとしておけばいいだろう。残された問題は/usr/local/overlaysに他に何を用意しておく必要があるかだ。
多くの場合、オフィシャルのPortageツリーに用意されていないパッケージを探し出すと、ebuildだけではなく同期を取るためのオーバーレイも見つかるはずである。例えば利用頻度の高いオーバーレイの1つにxgl-coffeeというものがあるが、その中にはXglの使用に必要なすべてが収められている。このインストール先は、他のオーバーレイと隔離する意味で/usr/local/overlays/xgl-coffeeとしておけばよく、後はSVN経由でアップデートをするだけだ。
オーバーレイ管理の詳細については、Gentoo Wikiに詳しく解説されている。またここを探すと、サードパーティ製オーバーレイの一覧および、その同期の取り方についての説明が見つかるはずである。
アップデートの適切な頻度
Portageツリーの同期は1日1度も行えば充分であり、通常のケースではむしろ頻繁すぎるくらいだろう。実用的な観点からすれば、packages.gentoo.orgないしgentoo-portage.comサイトにアクセスして(ないしは該当するRSSフィードを登録して)自分にとって必要なパッケージの更新状況を確認し、使用頻度の高いパッケージの新バージョンがPortageに登録された時点で同期とアップデートを行えばいいはずだ。
クリーンなworldリストの維持
emerge some-package
を実行すると、指定したパッケージ名が/var/lib/portage/worldファイルに登録される。ここで作成したパッケージ名リストの用途だが、これは例えばすべてのパッケージを一括してアップグレードしたい場合に通常用いるemerge --update --deep world
などのコマンドで使用されることになる。このパッケージのリストはできるだけ必要最小限にしておくべきで、自分が直接使用するパッケージだけに絞り込んでおけばいいだろう。通常、他のパッケージに対する依存性からインストールされたパッケージについては、自分のworldファイルに登録する必要はない。
例えば、wxWidgetsライブラリを使用するパッケージをいくつかインストールしているような場合、このライブラリは依存性を保つ関係上インストールされたものなので、worldリストに登録する必要はない。そしてこのwxWidgetsライブラリを使用するすべてのパッケージがアンインストールされるとemerge --update (...) world
を実行してもこのライブラリはアップデートされなくなり、最終的にemerge --depclean
を実行することで、このライブラリそのものがアンインストールされる。wxWidgetsライブラリを自分のworldリストに登録する必要があるとすれば、プログラマとしてこのライブラリを参照するアプリケーションを開発しているユーザくらいだろう。
各自のworldリストから不要なパッケージを削除するには、そのための専用スクリプトが用意されている。またworldリストに登録することなくパッケージをインストールするには、--oneshot
(-1
)オプションを使用すればよい。特定のパッケージを一時的に使用したい場合なども、インストール時にこのオプションを指定すればいいはずだ。
パッケージのアンインストール
emerge --uninstall
を実行する場合、削除対象のパッケージが他のパッケージに使用されていないかはチェックされない。またemerge --depclean
を実行しただけでも、必要なパッケージが削除されることがある。このようにソフトウェアをアンインストールする場合は、充分に注意した上で実行しなければならない。
パッケージによっては、必須でない依存性を削除しておける場合がある。ただしそうした措置を施したパッケージについては、emergeを再実行するまで停止し続けるケースがあるので注意が必要だ。そのようなパッケージを特定してemergeを再実行するには、gentoolkitパッケージに同梱されているrevdep-rebuildユーティリティを使えばよい。
Portageの実行ログ
ユーザによるemergeの実行結果は/var/log/emerge.logに記録される。例えば、特定の時点でどのパッケージがコンパイルされているかを確認したければ、tail /var/log/emerge.log
とコマンドを送信すればよい(私の場合は簡単なPythonスクリプトを用いてタイムスタンプを読みやすい形式に変換させている)。またこのログからいくつかの有用な情報を抽出する目的で、genlopというユーティリティが用意されている(emerge genlop
)。例えばgenlop -c
と実行することで、現在コンパイル中であるパッケージおよびコンパイルに要する予測時間が確認できる。
一時作業用ファイルの清掃
何らかのエラーが生じてemergeセッションが中断すると、コンパイル中断時に処理していたパッケージに関する一時作業用ファイルを格納したディレクトリが/var/tmp/portageに残されてしまう。ただし、エラーの発生直後に問題を解決してパッケージの再emergeに成功すると、こうした残存ファイルも自動的に削除されるはずである。逆にそれ以外の場合は、ユーザが手作業で/var/tmp/portageの清掃を行わなければならない。
アップデート作業を何度か実行してゆくと、その結果として/usr/portage/distfilesに多数のファイルが残される場合がある。不要となったソースファイルを削除するには、gentoolkitパッケージに同梱されているecleanユーティリティを使用すればよい。このユーティリティは、ユーザの作成したバイナリパッケージを削除することもできる(状況に応じてeclean-dist
ないしeclean-pkg
と実行)。指定可能なオプションはmanページに説明されている。
Gentooは、ユーザが独自にシステムをカスタマイズできる点において非常に優れている。そうした特長をユーザが生かすにあたって、この記事が参考になれば幸いである。実際、Gentooの機能を充分に使いこなすとなると、それなりのノウハウを習得する必要があるが、そうしたハードルさえ乗り越えれば、システムの細部をユーザが自由に設定できるという喜びを味わえるはずだ。一度体験してみると、その感覚は病みつきになるかもしれない。