Gentoo Linuxでtestingブランチを使わないことにする
tl;dr
AMD64環境のGentoo LinuxにXmonadを入れるときに、一部のdev-haskellパッケージのUSEフラグで~amd64を追加するように指示された。
/etc/package/make.conf
にACCEPT_KEYWORDS="~amd64"
と指定してうどんワールド *1 してしまったせいで、次の日から大量の更新パッケージが降ってきてうどんワールドすると大変なことになった。
ACCEPT_KEYWORDS
の指定を外すと、今度は大量のダウングレードとそれに伴う依存性破損が生じて大変なことになった。従って、現行のバージョンをできるだけ維持して、今後はstableブランチを使うようにしようとした。
~amd64とは
amd64環境ではstableでないパッケージをインストールする時に用いるフラグ。
これをつけないと、Firefoxは38が最新だし(現行は45)Dockerは1.7が入ってくるし、割と悲惨な目に遭うが、testing環境ではどんどん新しいパッケージが降ってくるのでコンパイルするだけでやたらと時間をとられる。
今回の問題はグローバルに~amd64
をつけてしまったことにあり、最新のパッケージを使うぶんには良いのだが、毎日emerge
に時間をとられるのが辛い場合は、stableなブランチに戻したくなる。
応急処置
暫定的に、ひたすらmaskをかけて「現行のバージョンより古いバージョンのパッケージをemerge」しないこととした。
<app-i18n/fcitx-anthy-0.2.2 <x11-misc/xfe-1.41 <sys-boot/os-prober-1.71 <media-fonts/jp-ipafonts-003.03 <x11-libs/libdrm-2.4.67 <app-portage/layman-2.3.0-r1 <x11-terms/rxvt-unicode-9.22 <x11-terms/xterm-324
このような形で、現行のバージョン未満の値のパッケージをmaskすれば、それらのパッケージがemerge
されることはなくなるので、とりあえず今のバージョンが保たれる。さすがに全てのパッケージに対してこれを記述するのは大変なので、主立ったツールやコンパイルに時間のかかるfirefoxやghcなどを中心に指定した。
謎のvirtual/パッケージのせいで様々な依存関係が生じる
うどんワールドしたときの依存性をツリーで表示させたときに、例えばvirtual/dev-manager
がsys-fs/static-dev
を要求しているが、sys-fs/static-dev
をemergeしようとすると怒られたとする。
このときは、virtual/dev-manager
をemergeすると何が起こるか見てみることにする。/usr/portage/virutal/dev-manager/dev-manager-0.ebuild
を開く。
# Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ EAPI="2" DESCRIPTION="Virtual for the device filesystem manager" HOMEPAGE="" SRC_URI="" LICENSE="" SLOT="0" KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd" IUSE="" DEPEND="" RDEPEND="|| ( virtual/udev sys-apps/busybox[mdev] sys-fs/devfsd sys-fs/static-dev sys-freebsd/freebsd-sbin )"
ここで大事なのはRDEPENDのところで、||はorのことであるから、列挙されているパッケージのうち、どれか1つをインストールすればよいということである。
Gentooとは選択である。
今回は上から順に、ということでvirtual/udev
をemergeしてみたところ、そのパッケージは既に入っているがstableブランチよりバージョンが新しいので、~amd64
のフラグが足りないと言われた。それを付けると、今度は依存性解決がうまく行ってemergeできた。
参考ページ
*1:sudo emerge -uDN @world