試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

ebuildの作成メモ(前半)

ebuildファイルの作成に関するメモを幾つか残しておく。内容を全てカバーするのは無理なので、偏ってはいるが、メモしたいところを書いている。
公式のドキュメント(英語)はGentoo Development Guideで、その中のQuickstart Ebuild Guideも参考になる。

基本的な文法

基本的にはbashスクリプトなので、bashシェルスクリプトの書き方をもとにする。if文は比較的多く用いられ、for文も用いられることがある。これらを知っておくと便利なことがある。

元にするファイル

大まかな構成は${PORTDIR}/skel.ebuild*1の通りなので、これを元にして編集する。
既存のebuildを色々と見て参考にするのが、理解への近道。

ライセンス指定

変数LICENSEの値は${PORTDIR}/licenses/以下のファイル名に対応させる。

変数EAPI

変数EAPIの値を上げると、新しい記法を用いて、記述の手間を省いたり分かりやすく書いたりすることができるようになる。2008年秋に「EAPI="2"」が利用可能となっている。
関連URL:

変数SRC_URI

パッケージを取得するURIを記述する変数で、具体的なURLを書くこともできるが、ミラーサーバを用いる記法もあり

などがある。
また、「EAPI="2"」なebuildでは、公式(本家/上流/upstream)側のファイル名で保存する上での問題*2に対処するため、「->」によって名前を変更して保存することができるようになっている。

DEPEND,RDEPEND,PDEPEND

依存するパッケージのatomを並べて文字列に記述する。区切り方は、改行をした後に次の行の先頭にタブ文字を付ける形。下は例。文字列全体をくくるダブルクォートを最初と最後に付ける点にも注意。

RDEPEND=">=dev-lang/python-2.5
	dev-python/pygtk"

依存には3つの種類があり

  • DEPEND: ビルド時に必要なパッケージのatom
  • RDEPEND: 実行時...
  • PDEPEND: そのパッケージのインストール後にインストールしてほしいパッケージのatom

となる。
例として、「games-arcade/pydance」は「games-arcade/pydance-songs」をPDEPENDで要求していて、「pydance」をインストールしようとすると

[ebuild  N    ] games-arcade/pydance-1.0.3 
[ebuild  N    ] games-arcade/pydance-songs-20040410 

の順で入る。
上のSRC_URIやこの各種依存関係を示す変数では

[USEフラグ]? ( [追加のURLや依存パッケージatom] )

のように、USEフラグによる追加ができる。この他

|| ( [パッケージatom1] [パッケージatom2]...)

のように、「||」の後ろに丸括弧で複数のatomをくくると、その内のどれかがあればよいという依存を表せる。
また、インストールされていると衝突などによって問題の起こるパッケージがある場合、パッケージatomの手前に「!」を付けることで「ブロック」を行い、衝突を防ぐことができる。

変数SLOT

(2008/10/24)「Gentoo Linuxにおけるパッケージ管理について(スロット、tbz2ファイル)」で書いている「スロット」を記述する。
省略不可で、単一のスロットだけのときでも「0」を必ず記述する。
複数のバージョン系列が衝突せず共存可能な上に互換性がないときに分けられることが多い。

変数IUSE

このパッケージに対してユーザが指定できるUSEフラグの一覧をスペース区切りで並べる。名前の1文字目の手前に「+」を付けると、そのUSEフラグは既定で有効になる。逆に「-」を付けると既定で無効なUSEフラグとなる。
(2008/10/24)自作ebuildemergeでのインストール時に「ebuildに記述したはずのUSEフラグが指定できない」となったとき、IUSEの付け忘れだったということが過去にあった。

変数RESTRICT

パッケージの取得時や一時ディレクトリへのインストール後などにおける細かい挙動を制御する。

  • mirror: パッケージの転載ができず、公式のURLからダウンロードさせたいもの(Gentooのサーバにミラーされない)
  • fetch: 配布上の都合やダウンロードのさせ方の都合によりパッケージの自動ダウンロードができないパッケージのとき、ユーザが手動でWebブラウザなどを使用してファイルをダウンロードして${DISTDIR}*3へ配置することになる・未ダウンロード時にメッセージ*4表示とインストール中止を行うpkg_nofetch()関数の記述が必要
  • primaryuri: ソースの取得時に変数SRC_URIを最初の候補とする(失敗するとGentooのミラーサーバを試行する)
  • strip: 実行ファイルや共有オブジェクトの余分なシンボル情報を捨てる処理を行わない(既に行われている場合や、行うと不具合が出る場合、実行ファイルや共有オブジェクトを含まないパッケージなどで指定)
  • binchecks: 実行ファイルや共有オブジェクトのチェックをしない・これらを含まないデータやドキュメントなどのパッケージで「strip」と併用して指定する
  • test: パッケージのビルド時におけるテストを禁止(失敗することが知られている場合や、何らかの理由でテストが意味を成さないと考えられている場合など)

その他変数

http://www.atzm.org/gentoo/ebuilds2.html
を参照。

USEフラグによる分岐

USEフラグによって処理を分岐することができる。下はその例。

if use sqlite; then
  [「USE=sqlite」のときに実行される処理]
fi

if ! built_with_use dev-lang/python sqlite
  [dev-lang/pythonが「USE=sqlite」でビルドされなかったときの処理]
fi

「built_with_use」によってエラーを出すような使い方は、「EAPI="2"」使用時には、場合により、USEフラグ込みの依存関係の記述によって、しなくて済むようになった。

RDEPEND=">=dev-lang/python-2.5[sqlite]
...
"

パッケージatomの後ろに、USEフラグを角括弧でくくって記述することができる。

(「ebuildの作成メモ(後半)」へ続く)
(2008/10/24)項目や脚注(説明)を幾つか追加し、記述も一部調整

関連URL:

関連記事:

*1:${PORTDIR}はPortageツリーの場所で、既定の場所は/usr/portage/

*2:ありふれたファイル名の場合(他のパッケージで使用するものと衝突する恐れがある)や、「http://.../download.php?foo=bar」のようなサーバ上のプログラムからダウンロードするときにファイル名がうまく付かない場合など

*3:ソースパッケージの格納ディレクトリで既定は/usr/portage/distfiles/

*4:「このパッケージをインストールするには以下のURLから手動でファイルをダウンロードして適切な場所に配置してください」と知らせつつ、「インストールはできません」と、エラーであることも知らせる