Gentoo Ebuild 執筆基本ガイド

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Basic guide to write Gentoo Ebuilds and the translation is 64% complete.

Other languages:
English • ‎日本語

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

Portage, the heart of Gentoo, runs on ebuilds!

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

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

Ebuilds: Where do they live?

The location of ebuilds from the Gentoo repository (available in the snapshot) are usually at /var/db/repos/gentoo[1] or in /usr/portage for older installs. The location is determined by the repos.conf file. Custom ebuilds are recommended to be placed in a custom repository, say /var/db/repos/larry.

How to create an ebuild

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

root #vim ./foobar.ebuild
FILE foobar.ebuildvim がテンプレートから開始する
# Copyright 1999-2020 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 に追加する必要があります。

Example for a given source tarball

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-2020 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

This should download and unpack the source tarball. In some rare cases the package should work and no further adjustments is needed in the ebuild.

Patching

In case the source code needs to get patched the patch can be created from the unpacked source code as explained in the patches article.

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 Patches will be applied during src_prepare
PATCHES=(
	"${FILESDIR}"/${P}-foo.patch
	"${FILESDIR}"/${P}-bar.patch
)
 
src_prepare() {
    default
    ...
}

Adding support for user patches to ebuilds

Since EAPI 6, the support for user patches is provided by eapply_user. This can be done by putting default on top in the src_prepare function:

CODE sample src_prepare
src_prepare() {
    default
    ...
}

EAPI versions prior to EAPI 7 should not be used for new ebuilds.

参考

外部の情報

参照