Gentoo Logo
Gentoo Logo Side

Gentoo Linux 開発者 HOWTO

Contents:

1. Portageツリー

はじめに 

Portageツリーは通常 /usr/portageの下にあり、指定 のパッケージ・ディレクトリに続づけて分類ディレクトリの階層的な構造で構 成されます。 たとえば、util-linux-2.11g.ebuild/usr/portage/sys-apps/util-linuxディレクトリにあります。 そこには、util-linux-2.11g.ebuildと一緒に util-linuxのいくつかのebuildファイルのバージョンがあるかもしれ ません。 それは、特定のパッケージ(不規則バージョンなし)用のebuildファ イルはすべて/usr/portageの中の同じ mycat/mypkgディレクトリを共有するからです。

CVSからPortageツリーのチェックアウト 

もし、あなたがCVSシステムに不案内なら、詳しくは CVS Tutorialをチェックしてください。

Portageツリーはgentoo-x86パッケージのGentoo Linuxツリーにありま す。パッケージ(やや大きめです)をチェックするために、最初に上記のガイドに よってCVSをセットアップし、次に、gentoo-x86ツリーをチェックアウ トします。

なにをPortageツリーに置くか(または置かないか) 

あらゆるebuildを書く前に、あなたが書こうとしているebuildに該当するもの が既にPortageツリーの中に入っていないことをbugs.gentoo.orgで チェックして下さ い。 bugs.gentoo.orgへ行き, productで"Gentoo Linux"、componentで"ebuilds"を選択して質問を決定して ください。 検索項目にはebuildの名前を置き、ステータスとしてNEW、 ASSIGNED、REOPENEDおよびRESOLVED(RESOLVEDは重要です)を選択したうえで質 問をサブミットします。

通常、Portageツリーはパッチやサンプル設定ファイルのような、比較的小さ い関連する.ebuildファイルの保存に使用します。 メインの mycat/mypkgディレクトリを混乱を避けて、これらのタイプのファ イルは、 /usr/portage/mycat/mypkg/filesディレクトリに置く べきでしょう。 さらに、開発者がCVSにバイナリ(非ASCII)ファイルを加える ことはよくないと言えます。 しかし、どうしてもこれが必要な場合(例えば、 何らかの理由でグラフィック用の小さなPNGを加える必要があれば)、 -kbオプションの使用することによりCVSにそれを追加します:

Code listing 1.1

# cvs add -kb myphoto.png

-kb-kbオプションは、myphoto.pngが特別にバイナリファ イルで扱われるべきであるとCVSに伝えます。たとえば、バイナリファイルの2 つの異なるバージョンのマージが起こることが許されないことは明白です。 さらに、変更マージについて言えば、Portageに加えるどんなパッチも通 常は圧縮しないこととします。 これによりCVSは変更マージが可能と なり、矛盾があれば開発者に正確に通知できることとなります。

安定しているものとしてコミットされた時、コミットするパッケージがエンド ユーザのために「箱から取り出す」準備ができているに違いないとい うことを覚えておいてください。 パッケージを使用する大多数のシステムおよびユーザを満たすデフォルト・セッ ティングの、より良い設定がなされていることを確認してください。 あなたのパッケージが壊れており、正常でなかった場合、それを動作させる方 法や、パッケージの自分のバージョンを行った他のいくつかのディストリビュー ションをチェックして下さい。 MandrakeまたはDebianの例を参考に してチェックしてみてください。

CVSにコミットする場合、開発者はそれらのebuildをcvs commitする代 わりにrepoman commitコマンドを使用するべきです。 コミットする前に、lintoolにあなたの要約、変更記録およびebuildを 通してください。

CVSコミット方針 

Warning: 警告しておきますがlintoolはとても破損しやすいです。代わりに repomanを使用するようにしてください。

  • コミットする前に、常にrepomanでスキャンを実行してください。
  • コミットする前に、lintoolを実行してください。
  • あなたがコミットする前に、常に'emerge --pretend glibc'を行ないpackage.maskがOKであるテストをして、それが矛盾を含まないことをチェックします。
  • コミットする前に、常に更新記録をアップデートすること。
  • あなたがpackage.maskをコミットする間に矛盾が生じる場合に備え、パッケー ジのアップデートの前に、最新のpackage.maskを常にコミットするようにして ください。
  • 常に最小限のコミットで。もし、新規のライセンスでコミットする場合、ユー ザのインストール状態を破壊したくなければ、それをマスクして、最初に改訂 されたpackage.maskをコミットしてください。さらにebuild、変更記録、使い たいライセンスの順に行ないます。

ファイルディレクトリ 

前述のとおり、各パッケージのもとではサブディレクトリは filesディレクトリです。 パッケージに要求される全てのパッ チ、設定ファイルあるいは他の付随的なファイルも、このディレクトリに納め られるべきものです。 mypkg-1.0-gentoo.diffのようなバージョ ンに特有の名前で、 パッケージを単にビルドさせるためにあなた自身が作る パッチが指定されることも考慮したいでしょう。 さらにGentoo の拡張がこのパッチは私たちGentoo Linux開発者によって作られたと皆さんに 通知されたり、メーリングリストまたはどこかほかの有力な情報元から知らさ れます。 再度いいますが、CVSがバイナリファイルでは上手く動作しないので、 これらのdiffファイルを圧縮してはなりません。

filesディレクトリの中に入れる、すべてのファイルの後ろに mypkg-1.0のようなサフィックスを加えることを考慮する結果、 あなたのebuildスクリプトの個々のバージョンのために使用された ファイル は互いから識別が可能であり、異なるリビジョン間の変更を見ることができま す。 これは一般なことであり実際によい考えです。:) よりおおざっぱ、また はきめ細かさが要求される場合は、異なるサフィックスを使用したくなること と思います。

filesディレクトリに入るべき多くのファイルを持っている場合は、 files/mypkg-1.0のような サブディレクトリを作成し適切なサ ブディレクトリにあったファイルを入れることを考えてください。 この方法 なら、 このディレクトリ(それは他の方法より便利です)中のファイルの名前 にはサフィックスを加える必要がありません。

2. ebuildスクリプト

イントロダクション 

ebuildスクリプトはPortageシステム全体の基本となるものです。 それらは、 どんなオプションのpre/postまた install/removeも実行する方法と同様に1セッ トのソースをダウンロードし、解凍し、コンパイルし、かつインストール す るのに必要な情報をすべて含んでいます。 ほとんどのPortageがPythonの中で 書かれている一方、私たちがコマンド ラインからbashのコマンドとして実行 できるよう、ebuildスクリプトはそれら自身bashの範囲で書かれています。 ebuildスクリプトの背後にある重要な設計基盤のうちの1つはこのコマンドで あることです。 アナログ的にそれらのパッケージを手動でインストールする 場合、普通はコマンドラインからタイプするでしょう。 この目的のために、 bashの構文を持っていることはよいことだと言えます。

Ebuildスクリプトはebuildemergeコマンドによって解釈されます。 ebuildコマンドは低レベルのビルドツールと見なしてください。 それは単一の ebuildでありビルドしインストールすることは出来ますが、それ以上のもので はありません。 また、依存性を満足するかどうかチェックすることは出来ま すが、自動的な問題解決は行われません。 いっぽうemergeは、ebuild のためのハイ・レベルのエンジンであり、依存性を自動マージする能力を持ってい ますので、もし必要ならば"pretend"mergesを実行することで、どんなebuild がマージされるかなどを、さらに参照することができます。 一般に、emergeは、1つのエリア以外においてはebuildを完全 に破壊します。 ebuildで、パッケージのインストール作業(取得・解 凍・コンパイル・インストール・マージすること)手順を一度に進むことがで きます。 開発者にとって、構造プロセスの特定の部分のebuildに派生する問題を分離す ることが可能であり、非常に貴重なデバッギング・ツールとなります。

ebuildファイルの命名法 

Ebuildファイル名は4つの論理セクションから成ります:

第1のセクションはパッケージ名であり、それは英小文字、数字0-9および任意 の数のハイフン('-')で構成されています。 いくつかの例として util-linux, sysklogd およびglibcなどがあります。

第2のセクションはパッケージのバージョン(それは、メインソースのtarball 上のバージョンと通常同じはず)です。 バージョンは通常、 1.2ある いは4.5.2(非常に長いピリオドで分割された番号シーケンスもサポー トされています)のようなピリオドで分離された2つあるいは3つの数から構成 され、 最後の数字に接続して(例えば1.4bまたは2.6hのように) 一個の文字があっても構いません。 パッケージ・バージョンはハイフンでパッ ケージ名に接続します。 例えばfoo-1.0, bar-2.4.6等々。

Important: あなたのバージョン文字列中に付加文字を使用しようと思っている場合は、 alphaまたはbetaがプレリリースであり、 文字修正がより新しいバー ジョンであるので、パッケージ用、 アルファあるいはベータ・ステータ スを示すためには、 付加文字に使用してはならないことに注意が必要 です。 Portageが、それが同じカテゴリおよび名称である他のパッケージの新旧を決 定するのにebuildの バージョン番号を使用するため、これは重要な区分です。 Portageがその依存性をチェックするという役割を適切に実行するためには、 バージョン番号が誠実にパッケージの バージョンを表わすことは非常に重要 です。

第3(オプション)セクションは特別の接尾辞を含んでいます。 これは _alpha, _beta, _preまたは_rcの組み合わせの いずれかです。 これらの接尾辞のうち、自分の番号として (linux-2.4.0_pre10のように)どれが続いても構いません。 同一のバー ジョン部分を仮定して、_alphaパッケージは_betaより古く、 _beta_pre、および_pre_rcより古いものと 見なします。

Note: _rcを持つパッケージは、下線のない(linux-2.4.0のような)パッ ケージより古いものです。 またlinux-2.4.0は、単一の文字接頭辞(つ まりlinux-2.4.0b)で示すパッケージより古いと言えます。 もうお分 かりのように、linux-2.4.0bパッケージはlinux-2.4.0cより古 いと考えられます。 繰り返しますが、Portageが1つのパッケージあるいは ebuildが同じカテゴリーおよび名前である場合に別のものより新しいかどうか 決めるためにそれを内部に使用しますので、このバージョニングに関する情報 は重要です。

パッケージ名の第4の(オプション)セクションはGentoo Linux特有のリビジョ ン番号で、-r#のように指定されます。この場合の#は (package-4.5.3-r3等)整数となります。このリビジョン番号はソース のバージョンに依存せず、新しく改善された特定のGentoo Linuxリビジョンパッ ケージが利用可能であると通知するために使用されます。

既存のebuildファイルへの有益な改良を作れば、1つインクリメントされたリ ビジョン番号の新しいファイルにebuildファイルをコピーしましょう。 初期 のリリースは通常package-4.5.3のようにリビジョン番号を持っ ていません。 そしてこれはPortageによって、いわゆる0のリビジョン番号であると解釈され ます。 つまりカウントは次のように行なわれることを意味しています:1.0 (初期のバージョン)、1.0-r1, 1.0-r2など。 いつも忘れずにあなたの変更を変更記録をメンテナンスするようにし てください。 これを行なわないと、あなたのCVSアクセスが無効にされ、大変困ったことに なるかもしれません。

また、現実には私たちはebuild名の5番目のセクションを持っていると 思います。 つまり.ebuild拡張子自身です。

ebuildファイルの内容 

1. 変数の設定:

すべてのebuildファイルの第1の部品は多くの変数設定から構成されます。 セッ トすることができる変数は次のとおりです。

P パッケージの名前およびバージョン;ebuildファイルの名前から決定されます ので、これをセットする必要がありません
S パッケージのソースディレクトリ; 通常は ${WORKDIR}/${P}です
D ルートディレクトリ:これはインストール時に仮想の/(root)として扱われます
SLOT Portageの同じインストールプログラムの異なるバージョンを扱います。 あなたがGCC 2.95およびGCC 3.xがインストールしているとしたら、各ebuildの中で スロットを指定します。 すなわち、GCC 2.95はスロット0であり、GCC 3.xはスロット1になるでしょう
LICENSE この変数はどのプログラムライセンスのものにあるかを明記します。 すなわち、GPL, GPL2のように
ARCH この変数は2、3の異なる機能をサポートします。 第一にこの変数は、ebuildがどのアーキテクチャー用に意味されるか明示します。 これらのキーワードは次のものを含んでいます:x86, ppc, alpha, sparc, sparc64 。 これにより、ターゲットマシンのアーキテクチャを明確に反映させるようにな ります。 PortageはARCHUSE変数によって指定されるx86マシンがx86以外で決し て構築しないことを可能にします。 在来のアーキテクチャーでないパッケージは、Portageによって自動的にmask されます。 ARCHフラグがpreceedingする~を持っている場合、それは特別 のebuildが働くことを示すが、与えられたキーワードで安定していると考えら れません。 ARCHフラグがpreceeding―を持っている場合、パッケージは与えられたキーワー ドで作動しません。ARCHをリードするものが何もない場合、パッケー ジは安定していると考えられます。 make.confによってこれらのインストールに異なるタイプのパッ ケージを与えることができます。
DESCRIPTION パッケージの備考として簡潔に1行で示したものです。
SRC_URI パッケージの全てのソースファイルのあるURIでスペースにより分割されます。 通常は、トップに"ftp://ftp.company.com/pub/somepackage/${A}" のように記述されます。
HOMEPAGE あなたのパッケージのホームページです。
IUSE これはあなたのパッケージがどのようなUSE変数を使用するかセットします。 もし、パッケージが使用しなければ、IUSE="" をセットする必要があ ります。
DEPEND ビルド時の依存関係;次を参考にしてください: パッケージの依存関係
RDEPEND ランタイムの依存関係; 次を参考にしてください:パッケージの依存関係

2. ebuildの機能

ここには、あなたのパッケージのビルドおよびインストールプロセスをコントロールするebuildファイルに定義するための様々な機能があります。

pkg_setup この機能の使用により、多岐にわたる先行条件のタスクを実行します。 こ れはシステム・アカウントを加えるか既存の設定ファイルをチェックすること を含んでいるかもしれません。 この機能は、処理が進むために0を返すことで しょう。
src_unpack Usこの機能の使用により、あなたのソースを解凍し、また必要なら autoconf/automake/などを実行します。 デフォルトにより、${A}$の 中のパッケージを解凍します。 デフォルトの開始ディレクトリは ${WORKDIR}で示されます。
src_compile この機能の使用により、パッケージを設定し構築します。 デフォルトの開始 ディレクトリは${S}で示されます。 ディレクトリを始めるデフォルトは ${S}です。
src_install この機能の使用により、${D} へイメージへのパッケージをインストー ルします。 あなたのパッケージがautomakeを使用する場合、単にmake DESTDIR=${D}でインストールすることができます。 もちろんパッ ケージが${D}を使用するためにrootで全てインストールできることを 確認してください。
pkg_preinst このファンクションのコマンドはファイルシステムへパッケージ・イメージを マージする前に実行されます。
pkg_postinst このファンクションのコマンドはファイルシステムへパッケージ・イメージを マージした後に実行されます。
pkg_prerm このファンクションのコマンドはファイルシステムからのパッケージ・イメー ジのマージを解消するのに先立って実行されます。
pkg_postrm このファンクションのコマンドはファイルシステムからのパッケージ・イメー ジのマージを解消したあとに実行されます。
pkg_config このファンクションを使用してセットアップし、その後のパッケージのための 初期設定がインストールされます。 このファンクション中のパスはすべて ${ROOT}を前に付けられるべきです。ユーザが実行すると、このファンクショ ンが単に次のものを実行します: ebuild /var/db/pkg/${CATEGORY}/${PF}/${PF}.ebuild config

ebuildファイルを書くときの規則  

ebuildファイルは実際には単なるにシェルスクリプトですので、それらの編集 のた めにエディタのシェルスクリプトモードを使用するべきです。 タブ文字 だけ を使用して、適切なインデントを使用してください。 この場合、スペー スではありませ ん。4つのスペースでタブ・ストップを置くためにエディタが セットされていることを確認してください。 環境変数のまわりのブレースを 使用することを常に確認してください;例えば$Pと書くべきところ は${P}とします。

長い行の場合は次のように'\'を付けて折り返しを行ないます:

Code listing 2.1

./configure \
	--prefix=/usr || die "configure failed"

その他の詳細に関しては、skel.ebuild(skel.ebuildの中にあり ます)を参照してください。

Vimを使用していれば、Gentooに関連するものをすべて編集する場合に正しい セッティングを使用していることを確実にするために.vimrcの最下行に次の行 を追加することができます。

Code listing 2.2

if (getcwd() =~ 'gentoo-x86\|gentoo-src\|portage')
	set tabstop=4 shiftwidth=4 noexpandtab
endif

Emacsを使っているならば、.emacsrc file (for GNU Emacs) または init.el (for XEmacs)に以下の設定を記述することで、Gentoo関連の編集をするときに、 正しい設定になります。

Code listing 2.3

(defun ebuild-mode ()
  (shell-script-mode)
  (sh-set-shell "bash")
  (make-local-variable 'tab-width)
  (setq tab-width 4))
(setq auto-mode-alist (cons '("\\.ebuild\\'" . ebuild-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.eclass\\'" . ebuild-mode) auto-mode-alist))

USE変数 

USE変数の目的は、あなたが全体的におよび自動的にあるbuild-timeオプショ ンを有効か無効にするPortageを形成することを可能にすることです。 一例と して、あなたがGNOMEファンであるとしましょう。 そうすると、コンパイル中 のオプションのGNOMEサポートのオプションを持っているすべてのebuildを好 まれると思います。 この場合、/etc/make.confの中のUSE変数にgnomeを加え ることと思います。次に、それが利用可能な場合、Portageは自動的にパッケージに オプションのGNOME対応を加えるでしょう。同様に、それらが利用可能な場合 に、オプションのGNOMEサポートをebuildに加えたくないなら、単に /etc/make.confを編集して、gnomeUSE変数の中でセットされていないことを 確認します。 Gentoo Linuxは、あなたが望むようにシステムを形成できる数 多くのUSEオプションを持っています。

Note: あなたがUSE変数(例えばUSEからgnomeを取り除くなど) をセッ トしなおしても、これはGNOMEのbuild-timeサポートのオプションを不 能にするようにPortageに単に命じるだけです。 しかし、あなたがGNOMEを要求するebuildをemergeすれば、期 待通りパッケージは明白にGNOMEサポートを可能にするでしょう。 これは、さ らにGNOMEがまだインストールされていない場合は(依存性として)自動的にイ ンストールされるだろうということを意味します。 そのため、"実際"のemergeの前にemerge --pretendを実行する ことはうまい方法です。 取り込むパッケージを事前に知ることが出来ます。

自分のebuildsでは、use <variable>コマンドの使用により、 USE変数がセットされるかどうかチェックすることができます。 useコマンドは、USEおよびそのコマンドラインの両方の中にあ る、すべての変数の名前を出力します。 通常は以下のように使用します:

if [ "`use X`" ]; then commands; fi

USE変数も依存性をセットするためだけに使用することができます。 例えば、 あるUSE変数がセットされている場合、パッケージを単に要求したいと思うで しょう。 これはあなたのebuildのためのDEPEND変数の中でvariable? ( mycat/mypackage-1.0-r1 )の記述により行われます。 この例において、 変数USEの中にある場合、mycat/mypackage-1.0-r1は 単に要求されるだけです。あたの作成したebuildがこの構文を使い、"if"構文 を使っていないことを確認してください。Bashの条件式はPortage依存キャッシュ (Portage's dependency caching)に干渉してしまい、あなたのebuildを ボロボロに壊してしまいます。

次に、USEを使用する方法に関して重要なTipsを示します。 通常、パッ ケージはコンフィギュレーションステップを実施するために ./configureスクリプトを使用するでしょう。 一般的には、あなたのebuildが./configureを使用する場合、あらゆる オプションのbuild-time機能も、適切な引き数を./configureコマンド へ渡すことにより有効か無効になります。 ここに、これを扱う適切な方法があります。まず、あなたがUSEサポー トを加えたい特別の./configureオプションを探し出し、デフォルトに よりenabledまたはdisabledとします。 そしてデフォルトで enabledになる場合は、以下のような手順をとって下さい:

Code listing 2.4

DEPEND="gnome? ( >=gnome-base/gnome-1.4 )
	mysql? ( >=dev-db/mysql-3.23.49 )"

src_compile() {
	local myconf
	use gnome || myconf="--disable-gnome"
	use mysql || myconf="${myconf} --disable-mysql"

	./configure ${myconf} --prefix=/usr --host=${CHOST} || die
	emake || die
}

上記では、gnomeおよびmysqlUSE変数が無効であるか をどうかをチェックします。 use gnome || の部分は、gnomeUSE変数に存在するか テストし、そうでなければ次にmyconf="--disable-gnome"にセットします。 このパッケージについては、それらが両方ともデフォルトにより有効になるの で、明示的にGNOMEまたはMySQLを有効にする必要はありません。 しかしなが ら、特定の組み込みがデフォルトにより無効になる場合、次のアプローチ方法 を用いてもかまいません:

Code listing 2.5

DEPEND="gnome? ( >=gnome-base/gnome-1.4 )
	mysql? ( >=dev-db/mysql-3.23.49 )"

src_compile() {
	local myconf
	use gnome && myconf="--enable-gnome"
	use mysql && myconf="${myconf} --enable-mysql"

	./configure ${myconf} --prefix=/usr --host=${CHOST} || die
	emake || die
}

この時、それぞれUSE変数でセットされている場合でも、明示的にGNOME とMySQLサポートを可能にします。 use mysql &&部分はUSE変数にmysqlがあるなしに拘わらず、 myconf="${myconf} --enable-mysql"の設定をテストします。

USE変数の常時更新の最新テーブルは、ここを参照してください。

3. ファイルシステムの配置

FHSとは 

Gentoo Linuxの中で使用されるファイルシステム・レイアウトの標準は FHS(Filesystem Hierarchy Standardの略)に準拠します。 標準のシンプルな記述はここで記述しますが、完全な詳細については、 http://www.pathname.com/fhs/を参照して下さい。

Note: /opt階層はFHSのセクション3.12にアドレスされます。セクション4.4は /usr/X11R6ディレクトリに対応します。 KDEとGNOMEは特にアド レスされず、要するにFHSの現行バージョンで公平に言及されていません。

いかにあなたのパッケージをファイルシステムの中へあてはめるか  

通常、パッケージがautoconfおよびautomakeを使用する場合、デフォルトのイ ンストール先は少数の例外を除いて適切になっています。

  • あなたが、/bin, /sbin,/usr/binあるいは /usr/sbinへプログラムをインストールしていれば、プログラムの対応 するmanページが/usr/share/manのツリーへインストールされるべきでしょう。 これはebuildの中の./configure --mandir=/usr/share/manの指定により大抵の場合 は行なえます。
  • X11、GNOMEあるいはKDEに特有のプログラムかツールに関係していたとして もGNU infoファイルは/usr/share/infoに常にインストールされるべきです。 重要事項:/usr/share/infoはGNU infoファイルのための唯一の公式な 場所です。 ほとんどの./configureスクリプトが自動的に/usr/infoにGNU infoファイルをインストールすることになるので、./configure--infodir=/usr/share/info引数で呼ぶことは、多くの場合に必要になります。
  • ドキュメンテーション・ファイルは、特定のプログラム名、バージョンおよ びリビジョンを反映するサブディレクトリの/usr/share/docに インストールされます。 これはGNOME、KDE、X11およびコンソール等々、すべ てのプログラムに当てはまります。しかしながら、いくつかのプログラムは補 足のドキュメンテーションおよびサポートファイルを、自分の目的にあった /usr/shareの階層へインストールするかもしれません。
  • X11に特有のプログラムおよびライブラリは、/usr/X11R6に直接ではなく /usrへインストールされるべきです。 私たちは、Xウィンドウ・ システムのバージョン11リリース6自体のために /usr/X11R6の階層を確保しておきます。これは恐らく他のディ ストリビューションが作ったFHSの拡大解釈です。
  • GNOMEとKDEのプログラムは、同様に/usrへ常にインストールさ れるべきです。

Important: いくつかのディストリビューションでは/optへGNOMEとKDEをイ ンストールするようになっています。 現実にそれらのファイルをインストー ルするべき場所として、これらのデスクトップ環境のための基準はありません。 単純化と一貫性のために、私たちは/usr階層へKDEおよびGNOME パッケージをすべてインストールすることにします。

一般的には、ebuildsに/usrツリーへそれらのファイルをインス トールさせるべきでしょう。 いくつかのプログラムはGNOME、KDEおよ びX11ライブラリ(それらは混乱の原因となる)を使用、または使用せずにコン パイルしリンクすることができます。 私たちの解決方法は、ebuild作者の曖 昧さおよび不必要な複雑さを回避するために、/usrへすべてを インストールすることです。 プログラムのファイルをインストールする位置は、特定のUSE変数の存 在か不在かに依存してはいけません。したがって、Portageツリーの ebuildは、ほとんど常に排他的に/usr階層へインストールする ことにします。

Note: /optディレクトリはGentoo Linuxの中でバイナリのみのパッケー ジのために予約してあります。 例えばmozilla-bin、acroread、Netscapeおよ びRealPlayerなどが含まれています。 ここにインストールされるパッケージ は通常/etc/env.d/fooなどのスタブ・ファイルが要求されます。 システム環境へパスおよび追加の変数を含むことができるようにそうしていま す。

4. Portageスクリプトとユーティリティ群

公開スクリプト 

これらはパッケージをインストールし削除し、かつパッケージ・データベース を維持するためにシステム管理者によって使用されるスクリプトです。

ebuildはPortageシステムの主要なエンジンです。それは、解凍し、コンパイ ルし、インストールし、マージし、マージの解消するような主なタスクをすべ て実行します。 これはebuild path/to/package.ebuild commandのような形式 でコマンドが呼び出されます。 利用可能なコマンドは次のとおりです。

コマンド 備考 ebuild機能との関連
*setup ebuildが進行する前に要求されたあらゆるコマンドの実行 pkg_setup
depend パッケージを構築する際に要求される依存性の表示 n/a
check パッケージ依存関係が満たされていることのチェック n/a
rcheck パッケージのランタイム依存関係が満たされていることのチェック n/a
merge 解凍、コンパイル、インストールおよびファイルシステムへのマージ n/a
*qmerge 既に解凍、コンパイル、インストールされたものと見なしてファイルシステム へパッケージをマージ n/a
*unpack 作業ディレクトリへのソース圧縮ファイルの解凍 src_unpack
*compile パッケージのコンパイル src_compile
rpm パッケージからRPMの作成 n/a
package Gentoo のtbz2パッケージ作成 n/a
*prerm パッケージの事前削除ステージを実行 pkg_prerm
*postrm パッケージの事後削除ステージを実行 pkg_postrm
*preinst パッケージの事前インストールステージの実行 pkg_preinst
*postinst パッケージの事後インストールステージの実行 pkg_postinst
config パッケージがマージされていれば、デフォルトコンフィグレーションをセットアップ pkg_config
*touch パッケージでの各ソースアーカイブのmtimesを更新 n/a
*clean パッケージの作業ディレクトリをクリア n/a
*fetch パッケージソースの圧縮ファイルを取得 n/a
*digest パッケージ用の要約ファイルを作成 n/a
*install イメージ・ディレクトリーへパッケージをインストール src_install
unmerge ファイルシステムからのパッケージのマージ解消 n/a

注:アスタリスク(*)のあるコマンドは、通常、開発者により使用されるも のです。

emergeeは再帰的にあなたのファイルシステムへパッケージおよびその 依存性のすべてをマージします。 このコマンドは多くのオプションを持って います。emerge --helpコマンドを試してしてみて下さい。

env-updateは、インストールされたパッケージによって行なわれた変更を含め るために(/etc/ld.so.confおよび /etc/profile.envに制限されずに取り込まれた) コンフィグレー ションファイルを更新します。

内部スクリプトとコマンド群 

これらは共通のタスクを実行するためにebuildファイルの中で使用することが できるスクリプトです。

より詳細な指示については、/usr/lib/portage/binにあるスク リプト自身を参照してください。

into dobin,dolib, dolib.a, dolib.so, domo, dosbinへのターゲットprefix(DESTTREE)のセット
dobin DESTTREE/binへの特定のバイナリファイルのインストール
dodoc パッケージドキュメンテーションのdocintoにある DOCDESTREEの指定したディレクトリ (/usr/share/doc/${PF}/DOCDESTTREE)への特定のファイルをイ ンストール
doexe EXEDESTTREEEXEOPTIONSモードを指定して特定のファ イルをインストールする。EXEOPTIONSのデフォルトは -m0755であり、 exeoptsコマンドを経由してセットする。 EXEDESTTREEexeintoコマンドを経由してセットする
dohard ${D}を透過的に扱いハードリンクを作成する
dohtml /usr/share/doc/${PF}/htmlディレクトリへ特定ファイルをイン ストール
doinfo gzip形式で圧縮して/usr/share/infoに特定ファイルをインストール
doins INSDESTTREEの中にINSOPTIONSモードで特定ファイルを インストールする。INSOPTIONSのデフォルトは-m0644であり、 insoptsコマンド経由で設定できる。INSDESTTREEinsintoコマンド経由で設定できる
dolib DESTTREE/libの中にLIBOPTIONSモードで特定ファイルを インストールする。 LIBOPTIONSのデフォルトは-m0644であり、 liboptsコマンド経由て設定できる
dolib.a DESTTREE/libへ0644モードで特定ライブラリをインストール
dolib.so DESTTREE/libへ0755モードで特定ライブラリをインストール
doman /usr/share/man/manXの中へ特定ファイルをインストールする。 Xのサフィックスに従う
domo .moファイル(ローカライズされたストリング・データの格納のために使用) を 手動でインストールするために使用される
donewins newinsと同様です。現実にはシンボリックリンクです。これは不本意 ですが、旧ebuildとの互換性のために存在します。newinsの代わりに 使用してください
dosbin DESTTREE/sbinの中へバイナリファイルをインストールする。こ れは実行可能ファイルとして作成されているものです
dosed 指定されたファイルの中で${D}(インストール・プレフィックスパス)の作成し たものをすべて削除
dosym ${D}を透過的に扱いシンボリックリンクを作成
emake 並行makeの実行をします。いくつかのプロジェクトでは並行makeができません のでmakeを使用して下さい
fowners chownコマンドによって指定されたファイル(第2引数)に指定された所有権(第1 引数)を適用し、${D}を透過的に扱います
fperms chmodコマンドによって指定されたファイル(第2引数)に指定されたパーミッショ ン(第1引数)を適用し、${D}を透過的に扱います
newbin DESTTREE/binへ指定のバイナリファイル(第1引数)を透過的に第 2引数の名称へリネームしてインストールするdobinまわりのラッパー です
newdoc /usr/share/doc/${PF}/DOCDESTTREEへ指定のファイル(第1引数) を透過的に第2引数の名称へリネームしてインストールするdodocまわ りのラッパーです
newexe EXEDESTTREEEXEOPTIONSモードで指定のファイル(第1 引数)を透過的に第2引数の名称へリネームしてインストールするdoexe まわりのラッパーです
newins INSDESTTREEへIINSOPTIONSードで指定のファイル(第1引 数)を透過的に第2引数の名称へリネームしてインストールするdoinsま わりのラッパーです
newlib.a DESTTREE/libへ指定のライブラリファイル(第1引数)を透過的に 第2引数の名称へリネームしてインストールするdolib.aまわりのラッ パーです
newlib.so DESTTREE/libへ指定のライブラリファイル(第1引数)を透過的に 第2引数の名称へリネームしてインストールするdolib.soまわりのラッ パーです
newman /usr/share/man/manXへ指定のライブラリファイル(第1引数)を 透過的に第2引数の名称へリネームしてインストールするdomanまわり のラッパーです
newsbin DESTTREE/sbinへ指定のファイル(第1引数)を透過的に第2引数の 名称へリネームしてインストールするdosbinまわりのラッパーです
pmake 不本意ですが、emakeの代わりに使います
prepalldocs /usr/share/docのシンボリックリンクパスも含めて救済用に全 てのdocをgzipします
prepallinfo /usr/share/infoの救済用に全てのinfoファイルをgzipします
prepallman /opt/*/man/*,/usr/share/man/*, /usr/local/man/*,/usr/X11R6/share/man/*およ びシンボリックリンクにあるものもひっくるめて救済用に全てのmanページを gzipします
prepall prepallman, prepallinfoおよびprepallstripまわりの ラッパーです。同じく/opt/*/lib, /lib, /usr/libおよび/usr/X11R6/lib、同じく/usr/share/aclocalのaclocalマクロについてもgzipを行なえます
try 不本意ですが、|| die 構文の代わりに使用します

5. パッケージの依存関係

なぜ依存性が重要か 

Portageは便利なスクリプトである以上に、あなたのどんなプロジェクト(プロ グラムやライブラリ) の構築方法に統一性を与えます。さらに、あなたが ebuildの中でこれらを注意深く指定すれば、それはどんな必要な依存関係も取 得してインストールします。

公式のebuildsでは、全部の依存関係が既に指定されています。 したがって、 あなたがemerge net-www/mozilla/mozilla-1.0のコマンドを発行する時、 Portageは Mozilla自身が構築される前にMozillaの構築および実行するのに必 要なライブラリがすべて適切にインストールされることを保証できます。

Portageは構築時依存関係とランタイム依存関係をさらに識別します。 (警告: 現在、Portageは構築時およびランタイム依存関係をすべてインストールする 場合の成り行きにまかせています。 あとの段階では、ランタイム依存関係だ けがインストールされており、あなたのインストールを整えることが可能でしょ う)。

いかにしてebuildファイルの依存性を指定するか  

foo-x.y.z.ebuild内のDEPEND変数は、foo を構築するために必要なパッケージをPortageへ伝えます。RDEPEND変 数は、fooを実行するためにどのパッケージが必要かを明示しま す。 例えば:

Code listing 5.1

DEPEND="virtual/glibc
        sys-libs/zlib"
RDEPEND="virtual/glibc"

これはPortageにfoo-x.y.zを構築するように命令するのには、パッケージ virtual/glibc(ビット中のvirtualsについて詳細) および sys-libs/zlibは必要です。それは、どれに関して必要なglibc あるいはzlibのバージョンであるかについて言及していません。それは"何で も実行"することを意味します。

"何でも行く"にはもちろん少し恐い気がしますし、一般的な場合はうまく働か ないでしょう。 glibc(それは100%バイナリのために非常に忙しく働きます)の よう中心となるライブラリが必要としないならば、それは現実に作動します。 他のライブラリについても、もちろんバージョン依存性を指定することができ ます。これを行なうためには多数の方法があります:

Code listing 5.2

>=sys-apps/bar-1.2
=sys-apps/baz-1.0

>=と=は、あなたが期待するように動作します。 sys-apps/bar バージョン 1.2か、より新しいく(sys-apps/bar-2.0ならOKという意味)、sys-apps/bazバー ジョン1.0が受け入れられるただ一つのバージョンであるならOKです。

Portageは、バージョン番号への4つの特別の接尾辞のことを知っています。 -rX, -preX,-alphaXおよび-betaX-rX等(この場 合のXはあなたの好きな数字)です。 >=sys-apps/foo-1.0の条件は以下のようになります。

Code listing 5.3

sys-apps/frob-1.0-r1
sys-apps/frob-1.0
sys-apps/frob-1.0_pre1
sys-apps/frob-1.0_beta1
sys-apps/frob-1.0_alpha1

Portageはリストされた順に内部で調整し、先頭であるものを選択するでしょ う。 これは_alphaXより_beta,_betaXより _preX_preXよりサフィックスなし、サフィックスなしより -rXを採用することを意味します。

バージョン依存性を指定する他の方法について、次にあげておきます:

Code listing 5.4

~sys-apps/qux-1.0
=sys-apps/foo-1.2*

~sys-apps/qux-1.0 は、qux-1.0の最新のリビジョンを選択するでしょう。

=sys-apps/foo-1.2* は1.2のシリーズの中で最新のメンバーを選択しますが、 1.3以降のシリーズを無視するでしょう。 すなわち、foo-1.2.3および foo-1.2.0は両方とも有効であるのに対し、foo-1.3.3およびfoo-1.3.0は無視 されることになります。

6. テストおよび展開

変更記録 

さらに、ebuildを更新する(あるいは新しく書く)場合は常に、その変更記録を 更新(あるいは新しく作成)しなければなりません。 skel.ChangeLogは、ベースとして使用してもよい変更記録のサ ンプルを含んでいます。

変更記録の目的は、「何が」「なぜ」「誰によって」 行われているか文書で明らかにすることです。これは、開発者およびユーザの 両方が容易な方法で行なわれた変更をトレースすることを可能にします。

変更記録は、まずユーザをターゲットにしています。したがってあなたが書くために必ず守るポイントとして、短いこと、また内部技術的な詳細に関して冗長を避けます。

有用なテストツール 

私たちはあなたのebuildの記述やメンテナンスの助けとなる有用なツールをい くつか用意しています。

Warning: lintoolについて他の警告が出たら, これは破損しています。代 わりにrepomanを使用して下さい.

  • lintool - 変更記録と要約のファイルの構文的な確認のためのebuildのチェック。
  • change - Can create a new ChangeLog or add an entry to an existing one.
  • gentool-bump-revision - 開発者専用ツール これはリビジョン番号に対照してCVSに新しい修正を加えるとともに古い修正を削除し、変更記録を適切に更新します。
  • repoman - 開発者専用ツール CVSチェックイン手続きを支援するものです。


line
Updated 05 December 2002
line
Donny Davies
Author

Daniel Robbins
Author

Peter Gavin
Author

Karl Trygve Kalleberg
Author

John P. Davis
Author

千里
翻訳

line
Summary:  このドキュメントはGentoo LinuxのPortageについて記述します。 Gentooの新 しいパッケージを作成する方法、またさらに多少はGentoo開発者のための基準 であるというつもりです。 これは進行中の作業であり絶えず更新されかつ変 更されています。従って、決して完全と言うわけではありません。
line

Donate to support our development efforts.

line
The Gentoo Linux Store
line
php|architect

php|architect is the monthly magazine for PHP professionals, available worldwide in print and electronic format. A percentage of all the sales will be donated back into the Gentoo project.

line
Tek Alchemy

Tek Alchemy offers dedicated servers and other hosting solutions running Gentoo Linux.

line
DDR Memory at Crucial.com

Purchase RAM from Crucial.com and a percentage of your sale will go towards further Gentoo Linux development.

line
Win4Lin at NeTraverse

Win4Lin from NeTraverse lets you run Windows applications under Gentoo Linux at native speeds.

line
Copyright 2001-2003 Gentoo Technologies, Inc. Questions, Comments, Corrections? Email [email protected].