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

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

【Gentoo】パッケージの「安定バージョン」「非安定バージョン」

多くのディストリビューションでは、ディストリビューション全体のメジャーバージョンごとに、安定版や非安定版、「開発版」となどと決められています。例えば Debian だと LTS、stable、unstable、sid といったように分かれています。

しかし、Gentooでは、各パッケージのバージョンごとに、 "stable" "unstable" の認定がなされています。

ここでは例として、GNU sed (sys-apps/sed) を見てみます。

eix で調べてみる

試しに手元の eix で検索してみると、以下のように出ました。

$ eix -e sed
[I] sys-apps/sed
     Available versions:  4.2.1-r1  (~)4.2.2 {acl nls selinux static}
     Installed versions:  4.2.2(09時28分55秒 2014年05月15日)(acl nls -selinux -static)
     Homepage:            http://sed.sourceforge.net/
     Description:         Super-useful stream editor

この表示からは、 sys-apps/sed には現在、4.2.1-r1 と 4.2.2 の2つのバージョンが提供されている(ebuildファイルがある)ことがわかります。 そして、 ~ が "unstable" を意味します。 ちなみに、(~)のように括弧が付いているのはeix特有の表記ですがユーザの設定によりインストール可能になっていることを意味します。

${KEYWORDS}

さて、実際に ebuild ファイルを見てみると ( https://github.com/gentoo/gentoo/tree/master/sys-apps/sed )

sed-4.2.1-r1.ebuild

KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"

という行があります。

この KEYWORDS というvariable(いわゆる「変数」)で、stable か unstable か、テストの段階に至っていないのか、あるいはそもそも動作不可能か、記載しているのです。

そして、動作確認はアーキテクチャ(及びカーネル)ごとに行われています。(※Gentoo では、Linuxカーネル以外もあります)

上記の sed-4.2.1-r1.ebuild では、

ということです。 (ちなみに、fbsdが付いているのは、FreeBSDカーネルですね。)

上記の例では、ありませんでしたが、動作不能が確認されたものがもしあったら、 - が付きます。

ユーザ側にとっては、

  • stable は安定動作
  • ~ は不安定(なにか支障が起こる可能性もある)
  • - はインストールするな(動かないから)
  • キーワード無しは、無保証

という捉え方になるでしょう。

Gentoo developer の側にとっては実際には

  • stable は動作確認完了
  • ~ は動作確認報告募集中
  • - は不動作確認完了
  • キーワード無しは、動作確認不要

ということです。 動作確認テストは、アーキテクチャによってはユーザが極少数ということもあります。そうすると実証件数が少なくても動作確認完了として、 stable のキーワードが付けられる(stabilize)アーキテクチャもあります。実際に例えば、 HPPA なんか入手困難ですし、使っている人は少ないです。

冒頭の eix の表示例では、私の手元のマシンが amd64 *1 ですので、amd64 のキーワードが表示されています。

eix における「キーワード無し」の表示

ちなみに eix では、キーワード無し(no keywords)だと ** と表示されます。

例えば

$ eix letsencrypt          
* app-crypt/letsencrypt
     Available versions:  **9999 {test PYTHON_TARGETS="python2_7"}
     Homepage:            https://github.com/letsencrypt/letsencrypt https://letsencrypt.org/
     Description:         Let's encrypt client to automate deployment of X.509 certificates

$ eix -e acme
* app-crypt/acme
     Available versions:  (~)0.1.0-r1 **9999 {test PYTHON_TARGETS="python2_7 python3_4 python3_5"}
     Homepage:            https://github.com/letsencrypt/letsencrypt https://letsencrypt.org/
     Description:         An implementation of the ACME protocol

この記事を書いている現在のところ、 Let's Encrypt のクライアントはキーワード無しで、いわば実験中の段階です(動作確認テストが募集されていない)。 Let's Encrypt が使用する ACME のクライアントは、 0.1.0-r1 の方は unstable ですね。

なお、私の手元のマシンでは、 global に unstable のインストールを許可している設定なので(/etc/portage/make.conf で設定)、 ~ はすべて、括弧付きで表示されています。 また、もしキーワード無し ** のものをインストールしたいならば、 /etc/portage/package.accept_keywords で設定します。 (これらについて詳しくは、 Gentoo Wikiman 5 make.conf LC_ALL=C man 5 portage などを読んでください。)


この記事は、 Gentoo Advent Calendar 2015 - Qiita 10日めの記事です。 ほぼ独りほぼ日刊Gentoo新聞になってきました。

*1:AMDが始めた、多く普及している、いわゆる x86_64 のこと。Intelが始めた64ビットアーキテクチャの IA64 とは異なります。