Gentoo Linuxにおけるパッケージ管理について(USEフラグ)
Gentoo Linuxでは、パッケージを作成/インストールするときにサポートする機能などを、名前の付いたフラグ「USEフラグ」のON/OFFの状態によって、自由に有効にしたり無効にしたりできる。これはGentoo Linuxが持つOSとしての自由度の高さと非常に密接な関係を持っている。
[引用] http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=1&chap=1 より
Gentoo is all about choices.
Gentooとは選択である、という言葉もあり、Gentoo Linuxというディストリの最大の特徴を示している。
なお、このページの日本語訳は
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=1&chap=1
になる。
また、USEフラグについて書かれたドキュメント
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml?part=2&chap=2
も参照。
USEフラグの例
下はほんの一例。
- doc: 付属のドキュメントの類をインストールする(「-doc」で外せる)
- gtk: GTK+のサポートを有効にする(「GTK+を使用したGUIを有効にする」「複数のGUIツールキットの候補の中からGTK+のサポートを有効にする」など、パッケージによって意味は異なる場合がある)
- bindist: 作成した機械語形式のtbz2パッケージ*1を配布可能にする・このUSEフラグが利用可能なパッケージでは、ライセンスや特許などの問題により、実行できる形式での外部への公開ができず、「USE=bindist」を付けると、その部分の機能を無効にするなどして、問題を回避する*2
- static: 実行ファイルを静的リンクし、(外部のライブラリを使用せず)単独で動作できるようにする
USEフラグには機能を有効にするものが多いが、GCCの「USE=nocxx」のように、付けたときにサポートを外す種類のものもある。「no」が付くものは、機能自体を有効にする場合が多いものに対して用意されている。
パッケージ共通のUSEフラグとパッケージ固有のUSEフラグ
USEフラグには、色々なパッケージで共通のものと、特定のパッケージでのみ使用されるものとがあり、前者は${PORTDIR}/profiles/use.desc、後者は${PORTDIR}/profiles/use.local.descに一覧(説明付き)がある。どちらも指定の方法は同じ。
パッケージがUSEフラグを要求する場合
あるパッケージが、「別のあるパッケージが特定のUSEフラグを付けていること」を要求する場合がある。例えば、(2008年10月現在)x11-libs/gtk+のバージョン2系はx11-libs/cairoが「USE=X」でインストールされていることを要求し、Cairo側にこのUSEフラグが付けていなければGTK+ 2はインストールできない。
このような処理を実現するためのebuild側の記述としては、built_with_use()という関数をpkg_setup()関数内で用いて判別し、必要なUSEフラグがなければエラーを出すような形になるが、Portageのバージョン2.2系では、「EAPI="2"」なebuildの中で「x11-libs/cairo[X]」のような記法により、パッケージの依存としてUSEフラグが指定できるようになっていて、記述の手間が大きく減っている。
指定方法
USEフラグは/etc/make.confで変数USEに指定できる他、/etc/portage/package.useでパッケージ(とそのバージョン/リビジョン)ごとに個別に付け外しの設定が記述できる。また、emergeでインストールするときの環境変数USEによっても一時的に上書き指定することが可能。
変数USEはスペース区切りで複数行に分けて記述し、OFFにしたいUSEフラグは名前の前に「-」を付ける。
下は例。
ファイル名: /etc/make.conf
USE=" nls cjk unicode truetype fontconfig (中略) alsa jack -arts -oss esd pulseaudio "
関連した項目を同じ行にまとめると管理しやすいかもしれない。
/etc/portage/package.useの書式は
[パッケージ識別子(atom)] [USEフラグ...]
となる。パッケージ識別子については「Gentoo Linuxにおけるパッケージ管理について(パッケージ、バージョンとその識別子)」を参照。
下は例。
ファイル名: /etc/portage/package.use
x11-terms/mlterm -truetype -imlib -gtk -nls =x11-libs/qt-4* qt3support
環境変数USEを指定する場合
# USE="[USEフラグ]" emerge -av [パッケージ...]
のような形になるが、sudoを使用する場合、環境変数を渡せるように設定する必要がある(関連記事を参照)。
設定ができれば、sudoを使用して
$ USE="[USEフラグ]" sudo emerge -av [パッケージ...]
のような形で一時的にUSEフラグを上書きしてインストールすることができる。
関連記事:
- sudoコマンドと環境変数
- Gentoo Linuxにおけるパッケージ管理について(パッケージ、バージョンとその識別子)
- Gentoo Linuxにおけるパッケージ管理について(Overlay)
- Gentoo Linuxにおけるパッケージ管理について(systemとworldのprofile、未インストールパッケージのインストール済みマーク付け)
- Gentoo Linuxにおけるパッケージ管理について(実際のコマンド操作)
- Gentoo Linux 2008.0 ライブCDのGUIインストーラでGUI構成のインストールをしてみた
- Gentoo Linuxにおけるパッケージ管理について(サービス、ランレベル、環境変数など)
- Gentoo Linuxにおけるパッケージ管理について(スロット、tbz2ファイル)