Guida di base per scrivere Ebuild Gentoo

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 • ‎中文(中国大陆)‎ • ‎日本語

Questo articolo contiene istruzioni per i principianti nella sviluppo degli ebuild.

Portage, il cuore di Gentoo, funziona con gli ebuilds!

An ebuild file is a text file, used by Gentoo package managers, which identifies a specific software package and how the Gentoo package manager should handle it. It uses a bash-like syntax style and is standardized through the EAPI version.

Gentoo Linux uses ebuilds as the package management format for individual software titles. These ebuilds contain metadata about the software (the name and version of the software, which license the software uses, and the home page), dependency information (both build-time as well as run-time dependencies), and instructions on how to deal with the software (configure, build, install, test ...).

Ebuilds: Dove vivono?

La posizione degli ebuilds dal repository di Gentoo (disponibile in snapshot) sono solitamente in /var/db/repos/gentoo[1] o in /usr/portage per le vecchie installazioni. La posizione è determinata dal file repos.conf. Per gli ebuild personalizzati è consigliato posizionarli in una custom repository, come /var/db/repos/larry.

Come creare un ebuild

Utenti di vim ottengono lo schema base automaticamente (ottenuto da app-vim/gentoo-syntax):

root #vim ./foobar.ebuild
FILE foobar.ebuildvim comincia dal template
# 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=""

Un programma similare è disponibile per gli utenti di GNU Emacs o XEmacs (ottenuto rispettivamente da app-emacs/ebuild-mode o app-xemacs/ebuild-mode).

Utenti di altri editro di testo devono manualmente copiare lo skel.ebuild:

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

Informazioni essenziali del nuovo pacchetto devono essere conosciute e aggiunte a ebuild-defined variables DESCRIPTION, HOMEPAGE, SRC_URI, LICENSE.

Esempio per un codice sorgente dato

Creazione di un ebuild per scrub, versione 2.6.1 (se questa non esiste attulmente) potrebbe essere:

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 comincia dal template
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
 
EAPI=7
 
DESCRIPTION="Some words here"
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
Usare la variabile ${PN} è concesso, ma non consigliato. Anche se potrebbe restringere la linea, qualche vale la pena considerare anche il motivo per cui non usarlo.
CODE SRC_URI usando le variabili
SRC_URI="https://github.com/chaos/${PN}/releases/download/${PV}/${P}.tar.gz"

Può essere testato usando il comando 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

Questo dovrebbe scaricare e spacchettare il codice sorgente. In qualche raro caso il pacchetto dovrebbe funzionare e non sono necessarie ulteriori aggiustamenti nell'ebuild

Patching

Nel caso in cui il codice sorgente neccessiti di essere rattoppato il patch può essere creato a partire dal codice sorgente scompattato come spiegato nel articolo sui patches.

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

Il patch sarà quindi elencato in un array chiamato PATCHES come è spiegato nel devmanual.

CODE Patches saranno applicate durante il src_prepare
PATCHES=(
	"${FILESDIR}"/${P}-foo.patch
	"${FILESDIR}"/${P}-bar.patch
)
 
src_prepare() {
    default
    ...
}

Aggiungere il supporto per i patch dell'utente agli ebuilds

Dall'EAPI 6, il supporto per i patch dell'utente è dato da eapply_user. Questo può essere fatto mettendo default in cima alla lista nella funzione src_prepare:

CODE esempio di src_prepare
src_prepare() {
    default
    ...
}

Versioni EAPI precedenti alla EAPI 7 non dovrebbero essere usati per i nuovi ebuilds.

Vedere anche

Risorse esterne

Riferimenti