portage の autounmask 機能

なんかちょっと前のアップデートで portage に autounmask の機能が統合されてたのでメモしておきます。

autounmask を使わない例

例えば、今日現在 ~amd64 でキーワードマスクされている xorg-server-1.10.4 を入れたい場合 /etc/portage/package.keywords に手動で書いてやる必要があったりしますが、これをそのまま書かずに入れようとすると

$ emerge -pv1 =xorg-server-1.10.4

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     U ~] x11-base/xorg-server-1.10.4 [1.10.2] USE="ipv6 nptl udev xorg -dmx -doc
                         -kdrive -minimal -static-libs -tslib -xnest -xvfb" 5,260 kB

Total: 1 package (1 upgrade), Size of downloads: 5,260 kB

The following keyword changes are necessary to proceed:
#required by =xorg-server-1.10.4 (argument)
=x11-base/xorg-server-1.10.4 ~amd64

NOTE: This --autounmask behavior can be disabled by setting
      EMERGE_DEFAULT_OPTS="--autounmask=n" in make.conf.


となって「キーワードマスクされてるよ」と言われます。これを許可するには /etc/portage/package.keywords を手で編集して明示的に外してやる必要がありました。

これが本来 (従来) のやり方。

autounmask を使ってみる

autounmask を使ってみます。

管理者権限で -p オプション無しで --autounmask-write をつけて実行します。

$ sudo emerge -v1 --autounmask-write =xorg-server-1.10.4

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     U ~] x11-base/xorg-server-1.10.4 [1.10.2] USE="ipv6 nptl udev xorg -dmx -doc
                         -kdrive -minimal -static-libs -tslib -xnest -xvfb" 5,260 kB

Total: 1 package (1 upgrade), Size of downloads: 5,260 kB

The following keyword changes are necessary to proceed:
#required by =xorg-server-1.10.4 (argument)
=x11-base/xorg-server-1.10.4 ~amd64

NOTE: This --autounmask behavior can be disabled by setting
      EMERGE_DEFAULT_OPTS="--autounmask=n" in make.conf.

Autounmask changes successfully written. Remember to run etc-update.

「autounmask が変更を書き込みました、 etc-update して下さい」とでます。てことで etc-update のかわりに最近の流儀で dispatch-conf を実行しておきます。

$ sudo dispatch-conf
--- /etc/portage/package.keywords       2011-08-22 12:09:36.270276250 +0900
+++ /etc/portage/._cfg0000_package.keywords     2011-08-22 12:31:59.466170428 +0900
@@ -54,3 +54,5 @@
 =sys-fs/yaffs-utils-9999       **
 =sys-fs/yaffs2-utils-9999      **

+#required by =xorg-server-1.10.4 (argument)
+=x11-base/xorg-server-1.10.4 ~amd64

>> (1 of 1) -- /etc/portage/package.keywords
>> q quit, h help, n next, e edit-new, z zap-new, u use-new
   m merge, t toggle-merge, l look-merge:


/etc/portage/package.keywords に必要な情報が書き込まれたことがわかります。あとは use-new を選んで書き換えて再度 emerge すればいいだけです。

今回は変更が 1 つだけなのでたいしたことないように見えるわけですが、依存関係で大量にキーワードを外してやる必要がある場合等には楽ができると思います。たとえば今日現在 ~amd64 キーワードでマスクされている kde-base/kde-meta-4.7.0 を入れたいとか、今日現在マスクされている gnome-base/gnome-3.0.0 を入れたいとか。そういうときには楽ができちゃいますね。

常用する

常用するくらいならもう KEYWORDS いじっちゃえばいいんじゃねとか思わなくもないですが、 --autounmask-write は常用することもできます。先ほどのログにちょっと出ているのですが

NOTE: This --autounmask behavior can be disabled by setting
      EMERGE_DEFAULT_OPTS="--autounmask=n" in make.conf.

これにあるとおり /etc/make.conf に EMERGE_DEFAULT_OPTS="--autounmask=y" と書くと常に --autounmask-write な状態になります。

追記:autounmask=n について

autounmask=y にすると常用できると書きましたが、では autounmask=n にすると…これは従来の emerge と同じ動作になり、どのパッケージのマスクを外せばいいかのアナウンスを行わなくなります。鬱陶しいと感じたら n を設定するのもいいでしょう。