Portage(emergeコマンド)の初歩

前置き

まぁ前置きはともかく、Portageシステムとemergeコマンドについて、要点をメモっておきます。使ったことのないオプションも多く、man pageだけではイマイチ理解できないやつ(特にパッケージの削除系)もあります。

本文

emergeの、どのアクションにも使えるオプション

--pretend(-p)
そのアクションを行うふりをする。
--verbose(-v)
表示の情報量を増やす。
--deep(-D)
-uと共に使い、(間接依存も含めた)完全な依存関係を考慮する。
--newuse(-N)
インストールした後で起きたUSEフラグの変更を考慮する。
--oneshot(-1)
worldに加えない。使うのはemerge自体をemergeするときくらいか?
--changelog(-l)
-pと共に使い、更新履歴を表示する。
--nodeps(-O)
依存関係を無視する。
--onlydeps(-o)
依存パッケージだけを処理する。
--buildpkgonly(-B)
ビルドするだけ(組み込まない)。
--usepkgonly(-K)
ビルド済みのパッケージを組み込むだけ。

emergeのアクション

emerge --sync
Portage Treeの更新。
emerge --search(-s) xxx
xxxという名前を含むパッケージを探す。
emerge --searchdesc(-S) xxx
パッケージ名だけでなく、パッケージ説明全文からxxxを検索する。
emerge --info
現行設定の主な環境変数を表示する。
emerge --update(-u) xxx
xxxを(安全な)最新バージョンに更新する。
emerge --clean(-c) xxx
古くなったバージョンのパッケージと、その依存パッケージを安全に削除。古くても、他が依存しているなら削除しない。xxxの代わりにworldでもいい。
emerge --depclean
直接emergeされたわけでもないし、誰からも依存されてない、余計なパッケージを削除。
emerge --unmerge(-C) xxx
xxxの全バージョンと、その依存パッケージを強制削除。リスクが高そう。
emerge --prune(-P) xxx
xxxの古いバージョンと、その依存パッケージを強制削除。リスクが高そう。

USEフラグ

USEフラグ設定方法は3通りです。まず、システム全体に対するUSEフラグを /etc/make.conf に書きます。

  • /etc/make.conf
 USE="-X -kde -gnome xml postgres cjk nls"

次に、特定のパッケージに対するUSEフラグを /etc/portage/package.use に書きます。

  • /etc/portage/package.use
 app-editors/vim ruby
 dev-lang/php apache2 pcre reflection simplexml spl tokenizer

最後に、その場限りのUSEフラグなら、emergeコマンドの前に指定します。

 # USE="foo -bar" emerge xxx -pv

USEフラグの一覧については、gentooの公式サイトを参照して下さい。

 http://www.gentoo.org/dyn/use-index.xml?style=printable

マスク設定/解除、ブランチ制御

emergeは普通、(安全な)最新バージョンをインストールしますが、何かの理由で古いバージョンをインストールしたい場合は、特定バージョンをマスクすることができます。マスク設定には、/etc/portage/package.maskを編集します。

  • /etc/portage/package.mask
 >=sys-apps/groff-1.20.1        →これより新しいバージョンをマスク。
 app-editors/emacs              →バージョンに関係なくマスク。

逆に、Portageが「安全でない」との理由でマスクしているケースがあります。その場合、emergeしたときに下記のような警告が出ます。

 - www-apache/passenger-2.2.11 (masked by: ~x86 keyword)

これは「x86アーキテクチャ用のビルドをテスト中です」という意味です。テスト中のパッケージを利用したい場合は、/etc/portage/package.keywordsを編集します。

 www-apache/passenger ~x86

こうすると、x86のTesting Branchからemergeされます(通常はStable Branchです)。おそらく、package.keywordsの本来の役割は、マスクを回避することではなくTesting Branchを利用することなのでしょう。つまり開発者向けですね(開発者なら、マスクされてなくてもTesting Branchを利用したいケースがある)。

そういうわけで、(直球で)マスクを回避する手段もあります。/etc/portage/package.unmaskを編集します。

  • /etc/portage/package.unmask
 =www-apache/passenger-2.2.11   →このバージョンをマスク解除。

いずれにせよ、マスク設定やマスク解除は、せっかくPortageに任せているパッケージのバージョン制御をねじ曲げる行為なので、自己責任でということになります。

重要なファイルとディレクトリ

/etc/make.conf
システム全体に対するUSEフラグなどの設定ファイル。
/etc/portage/package.use
特定のパッケージに対するUSEフラグの設定ファイル。
/etc/portage/package.mask
マスクを制御する設定ファイル。
/usr/portage/
Portage Tree置き場。
/var/lib/portage/world
直接emergeしたパッケージ一覧。
/etc/make.profile/
プロファイル置き場。プロファイルなんて変えることある?
/etc/make.globals
/etc/make.confと同じ役割。優先順位は下。いつ使うん?
/usr/portage/packages/
ビルド済みパッケージのキャッシュ。のはずだが…。
/usr/portage/distfiles/
ダウンロードしたソース置き場。
/var/db/pkg/
インストールされたパッケージ置き場。
/var/cache/edb/
Portageが使うキャッシュ。

3つのupdateコマンド

etc-update

パッケージをバージョンアップしたときなどに、古いバージョンで使っていた設定ファイルが、新しいバージョンのデフォルトの設定ファイルで上書きされると困りますよね。もちろんemergeは、そんなことはしません。emerge後に、こんなメッセージを出して注意を引くだけです。

 xxx

設定ファイルをメンテするには、etc-updateコマンドを使います。

 # etc-update

diffしてくれるので、古いファイルを採用するか、新しいファイルを採用するか、マージするか、選びます。マージする場合は、エディタが起動するので編集して下さい。

env-update

インストール後に、環境変数を更新するコマンドです。emergeした後は必須なのかどうか、よく分かりません(パッケージによっては不要なんだと思います)。

 # env-update && source /etc/profile

rc-update

インストールしたソフトを、システム起動と同時に起動したいなら、rc-updateしましょう。

 # rc-update add xxx default
 # rc-update show
Last modified:2010/05/04 10:09:34
Keyword(s):
References:[サーバ管理・Linux関連]
This page is frozen.