読者です 読者をやめる 読者になる 読者になる

備忘録 blog

Docker/Machine Learning/Linux

Gentoo Linuxでtestingブランチを使わないことにする

tl;dr

AMD64環境のGentoo LinuxXmonadを入れるときに、一部のdev-haskellパッケージのUSEフラグで~amd64を追加するように指示された。

/etc/package/make.confACCEPT_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されることはなくなるので、とりあえず今のバージョンが保たれる。さすがに全てのパッケージに対してこれを記述するのは大変なので、主立ったツールコンパイルに時間のかかるfirefoxghcなどを中心に指定した。

謎のvirtual/パッケージのせいで様々な依存関係が生じる

うどんワールドしたときの依存性をツリーで表示させたときに、例えばvirtual/dev-managersys-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できた。

参考ページ

d.hatena.ne.jp

ACCEPT_KEYWORDS - Gentoo Wiki

*1:sudo emerge -uDN @world