Gentoo Ebuild 執筆基本ガイド

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Basic guide to write Gentoo Ebuilds and the translation is 100% complete.
Other languages:
English • ‎italiano • ‎português do Brasil • ‎中文(中国大陆)‎ • ‎日本語

この記事は ebuild 開発初心者のための指南を含みます。

Portage という名の Gentoo の心臓は、ebuild で動いています!

ebuild ファイルはGentoo パッケージマネージャによって使用されるテキストファイルで、個々のソフトウェアパッケージを識別し、Gentoo パッケージマネージャがソフトウェアパッケージをどのように扱えばよいかを指示します。 bash 風の文法を使用して記述され、EAPI バージョンによって規格化されています。

Gentoo Linux は個々のソフトウェア名のためのパッケージ管理フォーマットとして ebuild を使用します。これらの ebuild はソフトウェアについてのメタデータ(ソフトウェアの名前とバージョン、ソフトウェアが使用するライセンス、ホームページ)や、依存パッケージ情報(ビルド時依存パッケージと実行時依存パッケージ)や、そのソフトウェアをどのように扱うかの指示(構成、ビルド、インストール、テスト、……)を含んでいます。

Ebuilds: どこにいる?

Gentoo リポジトリ (スナップショットで入手可能) からの ebuild の場所は、通常は /var/db/repos/gentoo[1] か、古いインストールでは /usr/portage です。この場所は repos.conf ファイルによって決定されます。カスタム ebuild は、例えば /var/db/repos/larry のようなカスタムリポジトリに置くことが推奨されます。

ebuild の作り方

Vim ユーザは自動で基本となるスケルトンを得られます(app-vim/gentoo-syntax によって提供されます):

root #vim ./foobar.ebuild
FILE foobar.ebuildvim がテンプレートから開始する
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
 
EAPI=7
 
DESCRIPTION=""
HOMEPAGE=""
SRC_URI=""
 
LICENSE=""
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""
 
DEPEND=""
RDEPEND="${DEPEND}"
BDEPEND=""

同様のツールは GNU Emacs または XEmacs のユーザも利用可能です(それぞれapp-emacs/ebuild-mode または app-xemacs/ebuild-mode によって提供されます)。

他のエディタのユーザは skel.ebuild から手動でコピーします:

root #cp /var/db/repos/gentoo/skel.ebuild ./foobar.ebuild

新しいパッケージの基本的な情報はすでに知られているでしょうから、それを ebuild 定義変数 DESCRIPTION、 HOMEPAGESRC_URILICENSE に追加する必要があります。

ソースアーカイブが与えられた場合の例

scrub バージョン 2.6.1 のための ebuild の作成手順(まだ存在しないとして)は次のようになります:

root #mkdir -p /var/db/repos/larry/app-misc/scrub
root #cd $_
root #vim ./scrub-2.6.1.ebuild
FILE scrub-2.6.1.ebuildvim がテンプレートから開始する
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
 
EAPI=7
 
DESCRIPTION="ここに説明を書く"
HOMEPAGE="https://github.com/chaos/scrub"
SRC_URI="https://github.com/chaos/scrub/releases/download/2.6.1/scrub-2.6.1.tar.gz"
 
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""
 
DEPEND=""
RDEPEND="${DEPEND}"
BDEPEND=""
Note
${PN} 変数SRC_URI の中で使用することは可能ですが、推奨はされません。行の長さは短くなりますが、使用すべきでない理由についても考慮する価値があります。
CODE 変数を使用した SRC_URI
SRC_URI="https://github.com/chaos/${PN}/releases/download/${PV}/${P}.tar.gz"

ebuild コマンドを使用して、次のようにテストすることができます:

root #ebuild ./scrub-2.6.1.ebuild clean unpack
Appending /var/db/repos/larry to PORTDIR_OVERLAY...
>>> Downloading 'https://ftp.halifax.rwth-aachen.de/gentoo/distfiles/scrub-2.6.1.tar.gz'
--2019-06-03 16:42:57--  https://ftp.halifax.rwth-aachen.de/gentoo/distfiles/scrub-2.6.1.tar.gz
Resolving ftp.halifax.rwth-aachen.de... 137.226.34.46, 2a00:8a60:e012:a00::21
Connecting to ftp.halifax.rwth-aachen.de|137.226.34.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 362536 (354K) [application/octet-stream]
Saving to: '/usr/portage/distfiles/scrub-2.6.1.tar.gz.__download__'
 
/usr/portage/distfiles/scrub-2.6.1.tar.gz.__download__             100%[==============================================================================================================================================================>] 354.04K  --.-KB/s    in 0.08s   
 
2019-06-03 16:42:58 (4.24 MB/s) - '/usr/portage/distfiles/scrub-2.6.1.tar.gz.__download__' saved [362536/362536]
 
 * scrub-2.6.1.tar.gz BLAKE2B SHA512 size ;-) ...                                                                                                                                                                                                                  [ ok ]
>>> Unpacking source...
>>> Unpacking scrub-2.6.1.tar.gz to /var/tmp/portage/app-misc/scrub-2.6.1/work
>>> Source unpacked in /var/tmp/portage/app-misc/scrub-2.6.1/work

これにより、ソースアーカイブがダウンロードされ、展開されるはずです。一部のまれなケースでは、ebuild にこれ以上の修正を加えることなくパッケージが動作する場合もあります。

パッチを適用する

ソースコードにパッチを適用する必要がある場合は、patches の記事で説明されている通り、展開されたソースコードからパッチを作成することができます。

user $cd /var/tmp/portage/app-misc/scrub-2.6.1/work/scrub-2.6.1/

The patch will then be listed in an array called PATCHES as is explained in the devmanual.

CODE パッチが src_prepare 中で適用される
PATCHES=(
	"${FILESDIR}"/${P}-foo.patch
	"${FILESDIR}"/${P}-bar.patch
)
 
src_prepare() {
    default
    ...
}

ebuild にユーザパッチへの対応を追加する

EAPI 6 より、ユーザパッチへの対応が eapply_user によって提供されます。これは src_prepare 関数の先頭に default を置くことで対応できます:

CODE src_prepare のサンプル
src_prepare() {
    default
    ...
}

EAPI 7 より前の EAPI バージョンは、新しい ebuild では使用すべきではありません。

参考

外部の情報

参照