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

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

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フラグを上書きしてインストールすることができる。

関連記事:

*1:ビルド済みの状態をパッケージ化したもので、通常のパッケージと同様にしてインストールできる

*2:機械語形式でパッケージを配布しているディストリでもこのようなことは行われているが、Gentooでは該当機能を有効にした状態で普通のパッケージとしてインストールして使える、ということも言える