- ■ GentooLinux Developers HOWTO
-
http://www.gentoo.org/doc/ja/gentoo-howto.xml
公式な開発者HOWTO.ebuildを作成しようと思うのであれば一度は目を通すべき. - ■ man 5 ebuild
-
端末などで,
$ man 5 ebuild
などと打つと,英語ではありますがマニュアルを読む事が出来ます.
下記のは自分の覚書程度の日本語訳+α. 間違ってたら御報告いただけるととても喜びます.
ちなみに manpages-ja に Portage 関連の man ページの訳が含まれるようになったので, そっちを参照した方が良いと思われます.
- ■ 使える変数の意味
- Index: A | D | DEPEND | IUSE | DESCRIPTION | DESTTREE | DOCDESTTREE | EXEDESTTREE | HOMEPAGE | INSDESTTREE | KEYWORDS | LICENSE | P | PF | PN | PR | PROVIDE | PV | RDEPEND | S | SLOT | SRC_URI | WORKDIR | dobin | docinto | dodir | dodoc | doexe | dohard | dohtml | doinfo | doins | dolib | doman | domo | dosbin | dosed | dosym | econf | einstall | emake | exeinto | exeopts | inherit | insinto | insopts | into | new | pkg_config | pkg_setup | pkginst | pkgrm | src_compile | src_install | src_unpack | unpack | use
-
■ パッケージ名関連
P ファイル名から.ebuildを除いた,パッケージ名.
foobar-1.0.0.ebuildなら,値は「foobar-1.0.0」となる.PN ファイル名から.ebuildとバージョンナンバーを除いた,パッケージ名.
foobar-1.0.0.ebuildなら,値は「foobar」となる.PV パッケージのバージョンナンバー.
foobar-1.0.0.ebuildなら,値は「1.0.0」となる.PR パッケージのリビジョンナンバー.
foobar-1.0.0-r3.ebuildなら,値は「3」となる.
パッケージにリビジョンナンバーがない場合はnull.PF ファイル名から.ebuildを除いた,パッケージの完全な名前.
foobar-1.0.0-r3.ebuildなら,値は「foobar-1.0.0-r3」となる.
${PN}-${PV}-r${PR} と同義.
■ その他
A パッケージで要求される全てのソース.後述のSRC_URIで指定される.
例えばSRC_URI="http://foobar.net/foo/hoge.tgz"
などとしてあった場合,値は「hoge.tgz」となる.WORKDIR ebuildで使用する,ワーキングディレクトリ.通常はこの下で作業をする.
デフォルトでは/var/tmp/portage/<パッケージ名>/work
だが,これは/etc/make.confの中で設定されている値である.ebuildの作成者がこれを意識する必要はない.S src_compileやsrc_install関数で使われることになる,ビルドディレクトリ.
大抵の場合は${WORKDIR}/${P}だが,これは${A}を展開した時に${P}という名前のディレクトリを生成する場合である.D Portageシステムでは,一時的に別ディレクトリにインストールしてから,出来たものをマージするという方法を取るため,このディレクトリが必要になる.その「一時インストールディレクトリ」を指す.
/var/tmp/portage/<パッケージ名>/image
がデフォルトだが,${WORKDIR}と同様,/etc/make.confの中で設定されているものである.ebuildの作成者がこれを意識する必要はない.
■ 自分で書かなければならない変数
IUSE ebuild内で使うUSEフラグを全てこの中に羅列する. DESCRIPTION パッケージの簡単な説明をこの変数の中に書いておく. SRC_URI パッケージをビルドするのに必要となるソースのURIを格納しておく.
もしGENTOO_MIRRORにファイルが無かった場合にここから落としてくることになる.
複数のソースを指定する事も可能.その場合,以下のように書くことになる.
SRC_URI="http://hogehoge.org/hoge.tgz
つまり正規表現で言うところの[[:blank:]]で区切って指定する.
ftp://ftp.hoge.jp/foo.tbz2"HOMEPAGE ソースの一時配布元WebページのURLを格納しておく. LICENSE このパッケージのライセンス形態を書く.代表的なものとしては,GPL, GPL-2, as-is, X11, BSDなどがある.
この情報は,${PORTDIR}/licenses/ 以下に格納されている.DEPEND このパッケージがコンパイル時に依存する,別のパッケージを書いておく.
「media-libs/hogehogeのVer-2.5以上」,「sys-apps/foobarのVer-1.0」などというように詳細に書くことが望ましい.RDEPEND このパッケージが,実行時に依存する,別のパッケージを書いておく.
大抵の場合 RDEPEND="${DEPEND}" などと書いておく.
PROVIDE パッケージの別名を定義する(?).
大抵は PROVIDE="virtual/hogehoge" などと書くが,特に必要なわけではない.KEYWORDS パッケージが対応しているアーキテクチャの種類を x86, ppc, alpha, sparc, sparc64, mips, hppa の中から選んで羅列する.試験中パッケージの場合,頭に ~ をつけて書くこと.すなわち
KEYWORDS="~x86 ~ppc"
などと書く.これによって,変数 ${ACCEPT_KEYWORDS} によって指定しない限りインストールはされない.SLOT 同じパッケージに複数のバージョンがあり他のバージョンのファイルとコンフリクトするような場合,これを定義する.
例えば SLOT="1.2" と記述してある libfoo-1.2.2 をインストールしてある場合,別のバージョンをインストールしたりアンインストールしても,1.2 のファイルは維持される.
ちなみに,そういうことのない ebuild でも SLOT="0" と記述しておくこと.
ただし SLOT を指定したからといって自動的にコンフリクトを回避してくれるわけではなく,自分で回避させる処理を書かなければ意味がない.
- ■ オーバーライド出来る関数
-
pkg_setup 通常は必要ないが,パッケージが,アーカイブの伸長などの前にセットアップなどをしておかなければならないような時,この関数を使う. src_unpack ダウンロードしたアーカイブ(${A})を WORKDIRに展開する作業をこの関数の中で行う.
また,パッチ当てなどの編集作業も,この中ですることが望ましい.src_compile configure,makeなどのコンパイル作業はこの関数の中で行う. src_install 「一時インストールディレクトリ」にインストールする作業を全てこの中に記述する. pkg_preinst,pkg_postinst パッケージがインストールされた後(post)や,される前(pre)にやらなければならないことはこの関数内に記述する.
ここで操作するものは実際にインストールされた(される)ものであり,「一時インストールディレクトリ」ではないことに注意.pkg_prerm,pkg_postrm パッケージがアンインストールされた後(post)や,される前(pre)にやらなければならないことはこの関数内に記述する. pkg_config オプション的で基本的なコンフィギュレーション作業はこの関数内に記述する.
- ■ 補助的な関数
-
■ 単体で効果のある関数
inherit eclass を継承する.この eclass は,${PORTDIR}/eclass/ に用意されているので,場合によって適宜使用すると良い.
詳しくは公式な eclass HOWTO を参照のこと.use USE 変数に,引数で指定されたものが指定されているかどうかを判定するのに使う.すなわち,
if use gtk2
とすれば,/etc/make.conf で指定されている USE 変数に gtk2 が含まれていれば hoge を echo することになる.
then
echo hoge
fi
また,
DEPEND="png? ( media-libs/libpng )"
などと書くと,USE 変数に png が含まれている時にのみ media-libs/libpng を DEPEND するという意味になる.
USE フラグについては ${PORTDIR}/profiles/use.desc に情報がある.unpack Usage: unpack <list of sources>
tarボールの展開などを行う.展開先は ${WORKDIR}. たとえ gz や bz2 などで圧縮されていてもさっくりと伸長してくれるので便利.
ただ,lzh や rar など,イレギュラーなものの解凍は出来ないので注意. 対応している形式は以下の通り.- tar
- tgz
- tbz2
- ZIP, zip
- gz, Z, z
- bz2
dodir Usage: dodir <path>
ディレクトリを作る.
econf ./configure \ --prefix=/usr \ --host=${CHOST} \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ --datadir=/usr/share \ --sysconfdir=/etc \ --localstatedir=/var/lib
と同じ意味を持つ.emake 並列makeを実行する.デフォルトでは make -j2
つまり2つのプロセスを並列で動かすが,これは /etc/make.conf 内の MAKEOPTS で変更される. 注意しなければならないのは,並列makeだとコンパイルに失敗するアプ リケーションが存在するということである.einstall make prefix=${D}/usr \ mandir=${D}/usr/share/man \ infodir=${D}/usr/share/info \ datadir=${D}/usr/share \ sysconfdir=${D}/etc \ localstatedir=${D}/var/lib \ install
と同じ意味を持つ.
■ into に関係のあるもの
into Usage: into <path>
後述の dobin, dosbin, doman, doinfo, dolib のインストール先ディレクトリ(このディレクトリを DESTTREE という)を指定する.デフォルトでは /usr.dobin Usage: dobin <list of binaries>
DESTTREE/bin に,引数で指定されたバイナリをインストールする.また,その時必要なディレクトリも全て作る.dosbin Usage: dosbin <list of binaries>
DESTTREE/sbin に,引数で指定されたバイナリをインストールする.また,その時必要なディレクトリも全て作る.dolib, dolib.a, dolib.so Usage: dolib <list of libraries>
DESTTREE/lib に,引数で指定されたライブラリをインストールする.また,その時必要なディレクトリも全て作る.doman Usage: doman <list of man-pages>
DESTTREE/man/man[1-9] に,引数で指定されたmanページをインストールする.また,その時必要なディレクトリも全て作る.
セクションの指定も勝手にやってくれるらしい.また,勝手にgzip圧縮もかましてくれるらしい.doinfo Usage: doinfo <list of info-files>
DESTTREE/info に,引数で指定されたinfoファイルをインストールする.また,その時必要なディレクトリも全て作る.
自動的にgzip圧縮してくれる.domo Usage: domo <list of locale-files>
DESTDIR/usr/share/locale/<lang> に,ロケールデータ(machine object)をインストールする.
■ insinto に関係のあるもの
insinto Usage: insinto <path>
後述の doins のインストール先ディレクトリ(INSDESTTREE)を指定する.doins Usage: doins <list of files>
INSDESTTREE にファイルをインストールする.また,この関数は内部で install(1) コマンドを呼んでいる.insopts Usage: insopts <options for install(1)>
doins を行う時のオプションを指定する.install(1) と同じオプションを指定する事が出来る.デフォルトでは -m0644 .
■ exeinto に関係のあるもの
exeinto Usage: exeinto <path>
後述の doexe のインストール先ディレクトリ(EXEDESTTREE)を指定する.doexe Usage: doexe <list of executables>
EXEDESTTREE に実行可能ファイルをインストールする.また,この関数は内部で install(1) コマンドを呼んでいる.exeopts Usage: exeopts <options for install(1)>
doexe を行う時のオプションを指定する.install(1) と同じオプションを指定する事が出来る.デフォルトでは -m0755 .
■ docinto に関係のあるもの
docinto Usage: docinto <path>
後述の dodoc のインストール先ディレクトリ(DOCDESTTREE)を指定する.dodoc Usage: dodoc <list of document>
/usr/share/doc/<package>/DOCDESTTREE へドキュメントをインストールする.また,自動的にgzip圧縮してくれる.dohtml Usage: dohtml <list of html>
/usr/share/doc/<package>/DOCDESTTREE へHTMLファイル(CSSなども含む)をインストールする.DOCDESTTREE が指定されていなかった場合,インストール先は /usr/share/doc/<package>/html/DOCDESTTREEになることに注意.
■ その他
dosym Usage: dosym <target> <linkname>
<target>を<linkname>という名前でシンボリックリンクを張る.リンク先は${D}以下の指定した場所.即ちdosym hoge.so.1.2.3 /usr/lib/hoge.so
などとすると,実際は${D}/usr/lib/hoge.soとしてリンクされる(最終的には実システムにマージされるので心配はない).dohard Usage: dohard <target> <linkname>
dosym のハードリンク版.dosed Usage: dosed <式> <filename>
sed のラッパー.mv file file.orig sed -e "s:orig:change:g" file.orig > file
を一行で済ませられる.
ただしこれが適用されるのは ${D} 以下のものであり, 例えばdosed "s:foo:bar:" /usr/share/hoge
とした場合,実際に書き換えが行われるのは ${D}/usr/share/hoge となる.dosed "s:foo:bar:" hoge
とした場合も同様で,この場合 ${D}/hoge が対象になる.
newbin, newsbin, newlib, newlib.so, newlib.a, newman, newinfo, newins, newexe, newdoc Usage: new〜 <file> <new filename>
前述の do* 関数と同じだが,リネームしてインストールしたい場合にはこちらを使う.