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, usually stored in a repository, which identifies a specific software package and tells the Gentoo package manager how to handle it. Ebuilds use a bash-like syntax style and are standardized through the Package Manager Specification, by adhering to a specific EAPI version.

Ebuilds contain metadata about each version of a piece of available software (name, version number, license, home page address...), dependency information (both build-time and run-time), and instructions on how to build and install the software (configure, compile, 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