突破してみる? / Why don't you get over?

ソフトウェアエンジニアの備忘録 / Memorandum for software engineers

world setを使おう

worldとは?

今回は、Gentoo Linuxのお話です。

worldとはemergeコマンドでインストールされたパッケージを管理する仕組みです。emergeコマンドで直接指定されたパッケージはworldファイル(/var/lib/portage/world)に登録されます。例えばこんな感じです。

# emerge app-misc/hello
  :  snip
# grep hello /var/lib/portage/world
app-misc/hello
#

worldには、依存関係でインストールされたパッケージや、--oneshotオプションを付けてインストールされたものは登録されません。

worldは、--depcleanオプションで削除するパッケージに影響します。worldに登録されたパッケージとそれに依存するものは削除されませんが、それ以外のパッケージは削除されます。

worldの仕組みに則ると、パッケージを簡潔に管理することができるでしょう。

world setを書こう

worldファイルはemergeコマンドが管理するので手で書き換えるようなことは避けたほうがいいかもしれません。幸い、emergeコマンドはworld setという仕組みを持っています。/etc/portage/sets以下に複数のworld setを持つことができます。管理者が手で書き換えてもいいworldファイルを設定ファイルとして複数持つことができるということです。私は、worldファイルのすべてのパッケージをworld setに移してworldファイルは空で運用しています。

world setの記法

atom記法が使えますのでバージョンを固定したり、除外したりすることができます。

world setの使い方のコツ

  • world setの全パッケージのインストール・再インストール
# echo 'app-misc/hello' > /etc/portage/sets/new_set
# emerge --ask @new_set

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

Calculating dependencies... done!
[ebuild  N     ] app-misc/hello-2.9  USE="nls"

Would you like to merge these packages? [Yes/No]
#
  • world setの全パッケージを削除
# emerge --unmerge @my_set
#
  • 既存のworld setにパッケージを追加したとき
# echo 'app-misc/hello' >> /etc/portage/sets/added_set
# emerge --update --ask @added_set

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

Calculating dependencies... done!
[ebuild  N     ] app-misc/hello-2.9  USE="nls"

Would you like to merge these packages? [Yes/No]
#