解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

@world を編集する

Gentoo では、意図してインストールした(自動でなく、インストールしたくてした)パッケージのリストは、 /var/lib/portage/world に保存されています。

man 5 portage

world
Every time you emerge a package, the package that you requested is recorded here. Then when you run emerge world -up, the list of packages is read from this file. Note that this does not mean that the packages that were installed as dependencies are listed here. For example, if you run emerge mod_wsgi and you do not have apache already, then "www-apache/mod_wsgi" is recorded in the world file but "www-servers/apache" is not.

man 1 emerge

/var/lib/portage/world
Contains a list of all user-specified packages. You can safely edit this file, adding packages that you want to be considered in world set updates and removing those that you do not want to be considered.

world という名称はおそらく、Portage を創るきっかけになった、FreeBSDports システムの影響だと思います。

world を編集する

さて、ときに、 world に入れるつもりがなかったのに加えられてしまったとか、入っていないけど加えたいとかいうこともあります。 dependency のパッケージを更新したいのについ、単に emerge してしまった(--oneshot つまり -1 を忘れた)ということもおそらくよくあります。

上記の通り man 1 emerge には、編集してよいですよ、って書いてありますから、sudoedit かなんかで編集してもいいわけではあります。単なるテキストファイルなので。

ただ、Filesystem Hierarchy Standard によると、 /var/lib はプログラムが状態情報などを保管する場所で、ユーザが編集する場所ではないというのが本来のありかたです。

そして当然といえばそうなのですけれども、 emerge には、 world にパッケージを加えたり消したりするためのオプションがあり、テキストエディタなどで直接に編集する必要はありません(そもそも本来はやはり、パッケージマネージャで編集すべきですよね)。

world に加える

インストール時には、パッケージを指定して emerge すれば、 --oneshot (-1)のオプションがないかぎりは world に加えられるので、問題ありません。

インストール後に world に加えたいときの方法として、 --select [ y | n ] (-w) というマニアックなオプションがあります。

ただ、単に -w だけでは、 emerge は再インストールしようとするかもしれません。 そこで、 --noreplace (-n) を加えると、再インストール作業はされません。

それでも emerge は、 dependency を解決するための計算をします。 すでにインストールされているのにそんなことをされてもムダですから、 --nodeps (-O) も加えます。

つまり、

emerge -wnO [package]

となります。

world から消す

--deselect [y | n] というオプションがありますので、同じように、消す方もやれます。

emerge --deselect y [package]

--deselect の実例

Gentoo WikiXfce の項目にも実例があります。

Xfce - Gentoo Wiki

Without explicitly including xfce-extra/xfce4-notifyd in the emerge command, virtual/notification-daemon will draw in GNOME's x11-misc/notification-daemon instead. So install it together with xfce-base/xfce4-meta and later deselect it so it is not included in the world file:
root #emerge --ask xfce-base/xfce4-meta xfce-extra/xfce4-notifyd
root #emerge --ask --deselect=y xfce-extra/xfce4-notifyd

一体なにが起こっているのかというと、 xfce4-meta の runtime depend の中には、 xfce4-settings や xf-desktop のように、 USE="libnotify" だと x11-libs/libnotify を要求するものがあります。 x11-libs/libnotify の post depend に、 virtual/notification-daemon があります。

virtual/notification-daemon の runtime depend では、 USE="xfce" にしているときはよいのですが、 それが抜けていて、かつどの通知デーモンもまだインストールされていないときには、 ebuild ファイルに書いてある上から順にどれかをインストールします。 (これは ebuild(5) の仕様です。 man 5 ebuild の「|| ( Atom Atom ... )」の項目を参照)

そのため、最初に書いてある x11-misc/notification-daemon がインストールされてしまうわけです。これは、 GNOMEコンポーネントにある通知デーモンです。おそらくこれでも動くんですが、Xfce 入れたい人が通知デーモンだけ GNOME にしたいとは思えません(笑)。

もう察しが良ければ判ると思うのですが、

root #emerge --ask xfce-base/xfce4-meta xfce-extra/xfce4-notifyd
root #emerge --ask --deselect=y xfce-extra/xfce4-notifyd

ではなくって

emerge -1 xfce-extra/xfce4-notifyd && emerge xfce-base/xfce4-meta

でも正しいわけです

Paludis の場合

設計思想が全く異なる Paludis をパッケージマネージャに用いている場合は、

cave update-world

というそのままのコマンドがありますので、平易ですね。 Paludis, the Other Package Mangler

オプション無しで追加。削除は --remove (-r) です。


この投稿は qiita.com 1日目の記事です。

広告を非表示にする