ebuildの作成メモ(前半)
ebuildファイルの作成に関するメモを幾つか残しておく。内容を全てカバーするのは無理なので、偏ってはいるが、メモしたいところを書いている。
公式のドキュメント(英語)はGentoo Development Guideで、その中のQuickstart Ebuild Guideも参考になる。
ライセンス指定
変数LICENSEの値は${PORTDIR}/licenses/以下のファイル名に対応させる。
変数EAPI
変数EAPIの値を上げると、新しい記法を用いて、記述の手間を省いたり分かりやすく書いたりすることができるようになる。2008年秋に「EAPI="2"」が利用可能となっている。
関連URL:
- http://ciaranm.wordpress.com/2008/09/28/whats-in-eapi-2/ - 「EAPI="2"」の新しい点
変数SRC_URI
パッケージを取得するURIを記述する変数で、具体的なURLを書くこともできるが、ミラーサーバを用いる記法もあり
- mirror://gentoo/
- mirror://debian/
- mirror://sourceforge/
などがある。
また、「EAPI="2"」なebuildでは、公式(本家/上流/upstream)側のファイル名で保存する上での問題*2に対処するため、「->」によって名前を変更して保存することができるようになっている。
DEPEND,RDEPEND,PDEPEND
依存するパッケージのatomを並べて文字列に記述する。区切り方は、改行をした後に次の行の先頭にタブ文字を付ける形。下は例。文字列全体をくくるダブルクォートを最初と最後に付ける点にも注意。
RDEPEND=">=dev-lang/python-2.5 dev-python/pygtk"
依存には3つの種類があり
となる。
例として、「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)自作ebuildのemergeでのインストール時に「ebuildに記述したはずのUSEフラグが指定できない」となったとき、IUSEの付け忘れだったということが過去にあった。
変数RESTRICT
パッケージの取得時や一時ディレクトリへのインストール後などにおける細かい挙動を制御する。
- mirror: パッケージの転載ができず、公式のURLからダウンロードさせたいもの(Gentooのサーバにミラーされない)
- fetch: 配布上の都合やダウンロードのさせ方の都合によりパッケージの自動ダウンロードができないパッケージのとき、ユーザが手動でWebブラウザなどを使用してファイルをダウンロードして${DISTDIR}*3へ配置することになる・未ダウンロード時にメッセージ*4表示とインストール中止を行うpkg_nofetch()関数の記述が必要
- primaryuri: ソースの取得時に変数SRC_URIを最初の候補とする(失敗するとGentooのミラーサーバを試行する)
- strip: 実行ファイルや共有オブジェクトの余分なシンボル情報を捨てる処理を行わない(既に行われている場合や、行うと不具合が出る場合、実行ファイルや共有オブジェクトを含まないパッケージなどで指定)
- binchecks: 実行ファイルや共有オブジェクトのチェックをしない・これらを含まないデータやドキュメントなどのパッケージで「strip」と併用して指定する
- test: パッケージのビルド時におけるテストを禁止(失敗することが知られている場合や、何らかの理由でテストが意味を成さないと考えられている場合など)
その他変数
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:
- http://devmanual.gentoo.org/ - 公式のドキュメント(英語)
- http://www.atzm.org/gentoo/ebuilds2.html - 主に変数と関数について(日本語)
関連記事:
- bash/zshのif文について
- Gentoo Linuxにおけるパッケージ管理について(パッケージ、バージョンとその識別子)
- Gentoo Linuxにおけるパッケージ管理について(USEフラグ)
- Gentoo Linuxにおけるパッケージ管理について(Overlay)
- Gentoo Linuxにおけるパッケージ管理について(systemとworldのprofile、未インストールパッケージのインストール済みマーク付け)
- Gentoo Linuxにおけるパッケージ管理について(実際のコマンド操作)
- Gentoo Linux 2008.0 ライブCDのGUIインストーラでGUI構成のインストールをしてみた
- Gentoo Linuxにおけるパッケージ管理について(サービス、ランレベル、環境変数など)
- Gentoo Linuxにおけるパッケージ管理について(スロット、tbz2ファイル)
- ebuildの作成メモ(後半)
*1:${PORTDIR}はPortageツリーの場所で、既定の場所は/usr/portage/
*2:ありふれたファイル名の場合(他のパッケージで使用するものと衝突する恐れがある)や、「http://.../download.php?foo=bar」のようなサーバ上のプログラムからダウンロードするときにファイル名がうまく付かない場合など
*3:ソースパッケージの格納ディレクトリで既定は/usr/portage/distfiles/
*4:「このパッケージをインストールするには以下のURLから手動でファイルをダウンロードして適切な場所に配置してください」と知らせつつ、「インストールはできません」と、エラーであることも知らせる