先日 emerge -uDN @world
しようとして失敗したとき、
# emerge -uDNp @sorl
emerge: There are no sets to satisfy 'sorl'. The following sets exist:
changed-deps
downgrade
installed
live-rebuild
module-rebuild
preserved-rebuild
profile
rebuilt-binaries
security
selected
selected-packages
selected-sets
system
unavailable
unavailable-binaries
world
x11-module-rebuild
と出てきて「え?意外と多いぞ@のつくset!?」と思ったので一通り調べてみることに。
かつてnaota大先生がまとめてくれているものはそれから、それ以外は調べ直し。
changed-deps
その名の通り、依存関係の変更にトリガする。
The emerge --changed-deps option can be used as a means to propagate changes in the dependencies of installed packages, by triggering rebuilds of installed packages for which changed dependencies are detected. Refer to the emerge man page for more information about this option.
依存関係の変更を検知するための代物だが、--changed-deps
オプションと関わりがあるのだろうか?使用例が思いつかないため少し調べてみたい。
downgrade
これも名前の通り、ダウングレードするであろうパッケージにトリガする。
いま「インストールしているバージョン」が「見えているバージョン」よりも新しいものが指定されます。
つまり…
- Super Teokure 3.0がでた!さっそくPortageに入った!
- 颯爽とSuper Teokure 3.0をインストールした!
- でも、3.0に深刻なバグが見つかった!!!
- Portageでは3.0をmaskすることにした
- この時点で、新しくSuper Teokureをemergeしようとする人は3.0がmaskされたので、2.xがインストールされることになります。
この状況で emerge -1 @downgrade すると、 Super Teokure 3.0が入っているけれど、「見える」バージョンは2.xなので2.xをビルドしてdowngradeしてくれます
リストアップされた際に D が付与されているものに当たると思われる。
installed
その名の通り、インストールされているすべてのパッケージにトリガする。
@world
は導入したものだけ、 --deep @world
だとそれに依存する全てとなるが、実際 @world
ではヒットしないパッケージも全て @installed
になる。
具体的には @installed には、「インストールされている全てのパッケージ」が登録されているので "emerge -1 @installed"とすると全てのパッケージをリビルドするので冬にはおすすめです。
パッケージ内容を変えないので、emerge --oneshot @installed
と emerge -e @world
は異なる結果になる可能性もあるという事だ。
live-rebuild
ライブ・ビルドにのみトリガする。
…と言われても追いかけていない人にはわかりづらいと思われるが、githubなどのVCSで管理されているパッケージを追いかける。
module-rebuild
カーネルモジュールに関連するものにのみトリガする。
カーネルモジュールのパッケージです。カーネルを更新した時に、 emerge -1 @module-rebuild で新しいカーネルでカーネルモジュールをリビルドできます。
preserved-rebuild
保存済みの、リビルドしなければならないリンク先にトリガする。
これがどういう意味かは複数バージョンあるライブラリなどを意識すればいい。古いライブラリへのリンクが残っている場合、preserve-libs
というFEATURESが入っている場合はこのリンクを残すため古いライブラリが残り、リンクした状態になる。これを解消するためのもののようだ。
Portage 2.2.xではFEATURES="preserve-libs"というものが入りました。これはパッケージのアップグレードやダウングレードによって、他のパッケージから使われているライブラリのsoname(ライブラリに内部的に付加されている名前、ダイナミックリンクのさいに参照されたりする)の変更があったかどうかを検出し、 sonameが変わっている場合には元のライブラリを削除せずに取っておきます。
すると、元のライブラリにリンクしていたパッケージが、この preserved-rebuild に登録されるわけです。 emerge -1 @preserved-rebuild するとリンクが新しいものにはりかわります。
profile
プロファイルにトリガする。
これは実行してみたほうが早い。
# emerge -p @profile
Performing Global Updates
(Could take a couple of minutes if you have a lot of binary packages.)
.='update pass' *='binary update' #='/var/db update' @='/var/db move'
s='/var/db SLOT move' %='binary move' S='binary SLOT move'
p='update /etc/portage/package.*'
/usr/portage/profiles/updates/1Q-2018.........
と、プロファイルそのもののみを確認したり更新したりするのに使う。(上の例では何も変わってない)
rebuilt-binaries
作り直さなければならない、バイナリパッケージにトリガする。
この判定基準は、naota大先生曰くビルド時刻のようだ。
現在インストールされているものとビルド時刻の違うバイナリパッケージになります。これは例えば、バイナリでなにかインストールした後にバイナリ提供側がバイナリを作りなおした時などにあてはまるかと思います。
バイナリパッケージを使ってない人には無用の長物だが、利用者はそのバイナリが確かに自分の意図したものかをチェックするのに重宝しそう。
security
GLSAにひっかかるものにトリガする。
セキュリティリスクがあるものだけ更新する時に使うようだ。
GLSA(Gentoo Linux Security Advisory)のうち対処されていないセキュリティ上の問題があるパッケージについてリビルドを行ないます。
selected
既に入っていたものを除外した、明示的にインストールしたもののみにトリガする。
ユーザが明示的にインストールことを選択したパッケージです。
…さて、さっきから "emerge -1" と -1 をつけていますが、この意味はおわかりでしょうか。 emergeすると基本的にそのパッケージが /var/lib/portage/world に登録されます。名前から推察できるとおり、ここの内容を元に emerge -uDN world でビルドされるパッケージがきまります。すなわち、 /var/lib/portage/world に登録されているパッケージと、その依存をたどって更新分をビルドしていくわけですね。こうしておくことで、昔は依存していたけれど、いまはいらなくなってしまったライブラリのパッケージなんかを --depcleanで削除できるようになっています。 せっかくGentooなのですから、このworldはなるべく小さくしておいて小さい環境を作りたいものですね。ということで、 -1 (--oneshot)をつけて、worldに登録しないようにしている、というわけです。
The selected set contains the packages the user has explicitly installed. The selected set, together with the system set, make up the world set. With a couple of exceptions, Portage will register select set package atoms to the /var/lib/portage/world file.
selected-packages
/var/lib/portage/world
で保存されたうち、ユーザが選択したものにトリガする。
selected-packages contains the user-selected "world" packages that are listed in /var/lib/portage/world, while selected-sets contains the nested sets that may be listed in /var/lib/portage/world_sets.
selected-sets
selected-packagesの引用文を読んでもらえればわかるが、/var/lib/portage/world
以外にも /var/lib/portage/world_sets
が存在する。
これはこちらにトリガする。
system
システムにトリガする。
これはわかると思うので省略。
アーキテクチャ/システムごとの基本パッケージ集です。 bashとかportgeとかそこらへんになります。
unavailable
パッケージとして導入されているが、ebuildが存在しなくなったものにトリガする。
ebuildがなくなってしまった(同じカテゴリ・パッケージ名・スロットで)パッケージです。
unavailable-binaries
バイナリパッケージの場合はこちらにトリガする。
インストールされているパッケージで、対応するバイナリパッケージが存在していないものです。
world
worldにトリガする。ワールドトリガー
毎日使ってると思うが、これは@selected
と @system
の両方を含む。つまり、/var/lib/portage/world
などという名前だがここには system
が含まれないので、実は @world
とは等価ではないのだ。おのれゴルゴム。
x11-module-rebuild
X11に関わるモジュールにトリガする。@module-rebuild
のX11版。
Xのモジュールパッケージです。Xのメジャーバージョンが上がってABIバージョンが変わると、モジュールを読めなくなるので emerge -1 @x11-module-rebuild でリビルドしちゃいます。
とまあ、調べると色々出てくる。意外と小回りがきくものだなぁと関心しきりである。