先日 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

その名の通り、依存関係の変更にトリガする。

https://wiki.gentoo.org/wiki/Project:Portage/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

これも名前の通り、ダウングレードするであろうパッケージにトリガする。

http://d.hatena.ne.jp/meech/20111212/1323702120

いま「インストールしているバージョン」が「見えているバージョン」よりも新しいものが指定されます。

つまり…

  • 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 になる。

http://d.hatena.ne.jp/meech/20111212/1323702120

具体的には @installed には、「インストールされている全てのパッケージ」が登録されているので "emerge -1 @installed"とすると全てのパッケージをリビルドするので冬にはおすすめです。

パッケージ内容を変えないので、emerge --oneshot @installedemerge -e @world は異なる結果になる可能性もあるという事だ。

live-rebuild

ライブ・ビルドにのみトリガする。

…と言われても追いかけていない人にはわかりづらいと思われるが、githubなどのVCSで管理されているパッケージを追いかける。

module-rebuild

カーネルモジュールに関連するものにのみトリガする。

http://d.hatena.ne.jp/meech/20111212/1323702120

カーネルモジュールのパッケージです。カーネルを更新した時に、 emerge -1 @module-rebuild で新しいカーネルでカーネルモジュールをリビルドできます。

preserved-rebuild

保存済みの、リビルドしなければならないリンク先にトリガする。

これがどういう意味かは複数バージョンあるライブラリなどを意識すればいい。古いライブラリへのリンクが残っている場合、preserve-libs というFEATURESが入っている場合はこのリンクを残すため古いライブラリが残り、リンクした状態になる。これを解消するためのもののようだ。

http://d.hatena.ne.jp/meech/20111212/1323702120

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大先生曰くビルド時刻のようだ。

http://d.hatena.ne.jp/meech/20111212/1323702120

現在インストールされているものとビルド時刻の違うバイナリパッケージになります。これは例えば、バイナリでなにかインストールした後にバイナリ提供側がバイナリを作りなおした時などにあてはまるかと思います。

バイナリパッケージを使ってない人には無用の長物だが、利用者はそのバイナリが確かに自分の意図したものかをチェックするのに重宝しそう。

security

GLSAにひっかかるものにトリガする。
セキュリティリスクがあるものだけ更新する時に使うようだ。

http://d.hatena.ne.jp/meech/20111212/1323702120

GLSA(Gentoo Linux Security Advisory)のうち対処されていないセキュリティ上の問題があるパッケージについてリビルドを行ないます。

selected

既に入っていたものを除外した、明示的にインストールしたもののみにトリガする。

http://d.hatena.ne.jp/meech/20111212/1323702120

ユーザが明示的にインストールことを選択したパッケージです。
…さて、さっきから "emerge -1" と -1 をつけていますが、この意味はおわかりでしょうか。 emergeすると基本的にそのパッケージが /var/lib/portage/world に登録されます。名前から推察できるとおり、ここの内容を元に emerge -uDN world でビルドされるパッケージがきまります。すなわち、 /var/lib/portage/world に登録されているパッケージと、その依存をたどって更新分をビルドしていくわけですね。こうしておくことで、昔は依存していたけれど、いまはいらなくなってしまったライブラリのパッケージなんかを --depcleanで削除できるようになっています。 せっかくGentooなのですから、このworldはなるべく小さくしておいて小さい環境を作りたいものですね。ということで、 -1 (--oneshot)をつけて、worldに登録しないようにしている、というわけです。

https://wiki.gentoo.org/wiki/Selected_set_(Portage)

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 で保存されたうち、ユーザが選択したものにトリガする。

https://dev.gentoo.org/~zmedico/portage/doc/man/emerge.1.html

 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

システムにトリガする。
これはわかると思うので省略。

http://d.hatena.ne.jp/meech/20111212/1323702120

アーキテクチャ/システムごとの基本パッケージ集です。 bashとかportgeとかそこらへんになります。

unavailable

パッケージとして導入されているが、ebuildが存在しなくなったものにトリガする。

http://d.hatena.ne.jp/meech/20111212/1323702120

ebuildがなくなってしまった(同じカテゴリ・パッケージ名・スロットで)パッケージです。

unavailable-binaries

バイナリパッケージの場合はこちらにトリガする。

http://d.hatena.ne.jp/meech/20111212/1323702120

インストールされているパッケージで、対応するバイナリパッケージが存在していないものです。

world

worldにトリガする。ワールドトリガー
毎日使ってると思うが、これは@selected@system の両方を含む。つまり、/var/lib/portage/world などという名前だがここには system が含まれないので、実は @world とは等価ではないのだ。おのれゴルゴム。

x11-module-rebuild

X11に関わるモジュールにトリガする。@module-rebuild のX11版。

http://d.hatena.ne.jp/meech/20111212/1323702120

Xのモジュールパッケージです。Xのメジャーバージョンが上がってABIバージョンが変わると、モジュールを読めなくなるので emerge -1 @x11-module-rebuild でリビルドしちゃいます。

とまあ、調べると色々出てくる。意外と小回りがきくものだなぁと関心しきりである。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.