Gentoo Logo

[ << ] [ < ] [ Home ] [ > ] [ >> ]


1. Guida agli Ebuild

Indice:

1.a. Il Portage tree

Introduzione

Il portage tree si trova tipicamente in /usr/portage ed è organizzato in una struttura gerarchica consistente in directory categorizzate, seguite da directory specifiche per ogni pacchetto, per esempio è possibile trovare il file util-linux-2.11y.ebuild nella directory /usr/portage/sys-apps/util-linux. Possono esserci anche altre versioni di util-linux oltre che util-linux-2.11y.ebuild. Ciò è dovuto al fatto che tutti gli ebuild per un particolare pacchetto (indipendentemente dalla versione), condividono la stessa directory miacategoria/miopacchetto in /usr/portage, a meno che non si abbia installato un overlay di portage.

Effettuare il Check Out del Portage Tree dal CVS

Se il sistema CVS non è familiare, è consigliabile leggere la Guida al CVS di Gentoo Linux per maggiori informazioni.

Il Portage tree si trova nel modulo gentoo-x86 del Gentoo Linux tree. Per fare il check out del modulo (circa 350 megabyte) si deve prima configurare CVS tramite la guida precedente, poi fare il check out del modulo gentoo-x86.

Cosa (non) mettere nel Portage tree

Prima di scrivere un nuovo ebuild, controllare bugs.gentoo.org per verificare che non ci sia già un ebuild corrispondente ma non ancora inserito nel portage tree. Andare su bugs.gentoo.org, scegliere query e selezionare "Advanced Search" (Ricerca Avanzata); scegliere Gentoo Linux come prodotto e come componente ebuilds, nel campo ricerca mettere il nome dell'ebuild e come status scegliere NEW, ASSIGNED, REOPENED e RESOLVED (RESOLVED è importante), dopodiché inviare la query. Le persone pigre possono cliccare qui.

Generalmente, il Portage tree deve essere usato solo per contenere i file .ebuild insieme ad altri file relativamente piccoli, come patch o esempi di configurazione. Questi tipi di file devono essere posizionati nella directory /usr/portage/categoria/pacchetto/files per tenere pulita la directory categoria/pacchetto. Le eccezioni a questa regola sono per patch di grandi dimensioni (lo si raccomanda per patch più grandi di 20KB) che dovrebbero essere messe nei mirror Gentoo in modo che la gente non sprechi eccessivamente la larghezza di banda e lo spazio del disco fisso. Inoltre non si dovrebbero aggiungere al CVS del Portage Tree dei file binari (non ASCII). Se lo si deve fare in un altro ramo del CVS, per esempio, volendo aggiungere una piccola immagine PNG per qualsiasi ragione, assicurarsi di aggiungerla a CVS usando l'opzione -kb nel modo seguente:

Codice 1.1: Aggiungere file binari al CVS

# cvs add -kb miafoto.png

L'opzione -kb dice a CVS che miafoto.png è un file binario e deve essere trattato in maniera particolare. Per esempio, fondere le differenze di due versioni diverse di questo file, non deve essere reso possibile, per ovvie ragioni. Inoltre, riguardo alle fusioni di differenze, tutte le patch che si aggiungono a Portage devono necessariamente non essere compresse. Questo permette a CVS di fondere i cambiamenti e informare correttamente gli sviluppatori in caso di conflitti.

È importante ricordare che i pacchetti di cui si effettua il commit devono essere predisposti a funzionare in modo trasparente per gli utenti finali quando vengono marcati stabili. Assicurarsi di avere un buon insieme di impostazioni predefinite che soddisfino la maggior parte dei sistemi e degli utenti che utilizzeranno questo pacchetto. Se il pacchetto non dovesse funzionare, e non si è molto sicuri su come farlo funzionare, controllare altre distribuzioni che hanno già forgiato le loro versioni del pacchetto. È possibile controllare Mandriva o Debian o Fedora per qualche esempio.

Quando viene fatto il commit su CVS, tutti gli sviluppatori devono usare repoman commit al posto di cvs commit per inviare i propri ebuild. Prima di effettuare il commit, eseguire repoman full per essere sicuri di non aver dimenticato qualcosa.

Politica di Commit su CVS

  • Eseguire sempre repoman scan prima del commit.
  • Eseguire sempre repoman full prima del commit.
  • Controllare sempre la correttezza di package.mask tramite il comando emerge --pretend miopacchetto prima del commit e verificare che non ci siano conflitti.
  • Aggiornare sempre il ChangeLog prima del commit.
  • Fate sempre il commit del file package.mask prima del pacchetto aggiornato, in caso ci siano conflitti durante il commit di package.mask.
  • Fare sempre dei commit in modo atomico (ovvero un pezzo alla volta, non tutto insieme); se si esegue il commit di un pacchetto con una nuova licenza, o marcato "masked" (nascosto), prima eseguire il commit del package.mask rivisto e/o della licenza, poi l'ebuild, il ChangeLog, le patch e il file metadata.xml tutto in una volta, per evitare di rovinare l'installazione degli utenti.

La directory Files

Come indicato in precedenza, dentro ad ogni sottodirectory di ogni pacchetto c'è una directory files/. Qualunque patch, file di configurazione o altri file ausiliari richiesta dal proprio pacchetto vanno posizionati in questa directory; ogni file più grande di 20KB dovrebbe essere posizionato nei mirror per diminuire la quantità di file (non necessari) che gli utenti dovranno scaricare. Si può considerare di denominare le patch create autonomamente solo per far compilare correttamente il pacchetto con un nome specifico in base alla versione, per esempio miopacchetto-1.0-gentoo.diff o più semplicemente 1.0-gentoo.diff. Notare che l'estensione gentoo informa gli utenti che la patch è stata creata dagli sviluppatori Gentoo, piuttosto che recuperata da qualche mailing list o da altre fonti. Si ricorda nuovamente di non comprimere i file diff poiché CVS non gestisce in modo agevole i file binari.

Considerare l'aggiunta di un prefisso o suffisso come miopacchetto-1.0 al nome di ogni file dai posizionare in files/, per far sì che i file usati per ogni versione individuale di un ebuild siano distinguibili dagli altri, e che i cambiamenti fra le differenti revisioni siano visibili. Questa è generalmente una buona idea :). È possibile utilizzare suffissi diversi se si vuole dare maggior significato al nome della patch.

Se si hanno vari file da posizionare in files/, considerare la creazione di sottodirectory come ad esempio files/1.0/ e mettere i rispettivi file nella sottodirectory appropriata. Usando questo metodo, non c'è più bisogno di aggiungere le informazioni di versione ai nomi dei file. e spesso questa soluzione è più conveniente.

1.b. Script ebuild

Introduzione

Gli script ebuild sono la base dell'intero sistema di portage. Essi contengono tutte le informazioni necessarie allo scaricamento, estrazione, compilazione e all'installazione dei sorgenti, come anche ad eseguire qualsiasi installazione/rimozione opzionale o passaggio di configurazione pre/post installazione. Mentre la maggior parte di Portage è scritta in Python, gli ebuild sono scritti in bash, poiché usando bash è possibile richiamare i comandi come da linea di comando. Uno dei più importanti principi di progettazione su cui si basano gli script ebuild è l'avere a disposizione gli stessi comandi che si scriverebbero da riga di comando in un'installazione manuale del pacchetto. Per raggiungere questo scopo, usare la sintassi bash è un'ottima cosa.

Gli script ebuild vengono interpretati dai comandi ebuild ed emerge. Il comando ebuild è uno strumento di costruzione a basso livello. Può compilare ed installare un singolo ebuild. Controlla se le dipendenze sono soddisfatte, non tenta però di risolverle automaticamente. Dall'altra parte, emerge è un motore ad alto livello per ebuild ed ha l'abilità di auto-installare le dipendenze se necessarie, eseguire emerge simulati in modo che che l'utente possa vedere quali ebuild verranno installati, e molto altro. In generale, emerge rimpiazza totalmente ebuild tranne che in una area. Con ebuild è possibile eseguire in modo incrementale le varie parti dell'installazione di un pacchetto (scaricamento, estrazione, compilazione, installazione e "merging" - installazione vera e propria nel filesystem) una per volta. Per gli sviluppatori questo strumento ha un valore inestimabile, perché permette di isolare i problemi degli ebuild in una sua specifica porzione.

Dare il nome ai file ebuild

Il nome dei file ebuild consiste in quattro sezioni logiche:

pkg-ver{_suf{#}}{-r#}.ebuild

Nota: Le parentesi ({}) delineano campi opzionali e non compaiono nel nome del pacchetto. # rappresenta un qualunque numero intero positivo diverso da zero.

La prima sottosezione, pkg, è il nome del pacchetto, che dovrebbe contenere solo lettere minuscole, cifre 0-9 e un qualsiasi numero di questi caratteri : trattino singolo (-), "underscore" (_) o segno più (+). Ad esempio: util-linux, sysklogd e gtk+. Ci sono alcuni pacchetti in portage che non seguono queste regole, però i propri pacchetti dovrebbero farlo.

La seconda sottosezione, ver, è la versione del pacchetto, che dovrebbe essere normalmente la stessa dei sorgenti del tarball principale. La versione è solitamente formata da 2 o 3 (o più) numeri separati da punti, come 1.2 o 4.5.2, e può avere una lettera singola che segue l'ultima cifra, esempi: 1.4b o 2.6h. La versione del pacchetto viene collegata al suo nome con un trattino, ad esempio: foo-1.0, bar-2.4.6.

Importante: Se si sta pensando di usare una lettera nella versione del proprio pacchetto, ricordarsi che le lettere in coda non si possono usare per indicare lo status alpha o beta per un pacchetto, in quanto alpha e beta sono prerelease e le revisioni sono nuove versioni. Questa è un'importante distinzione perché portage usa il numero di versione dell'ebuild per determinare se è più nuova o più vecchia degli altri pacchetti con la stessa categoria e lo stesso nome. È molto importante che questo numero di versione rappresenti fedelmente la versione del pacchetto per permettere a Portage di eseguire in modo appropriato il controllo delle dipendenze.

La terza sottosezione {_suf{#}}, è opzionale e può contenere uno tra questi suffissi predefiniti, ordinati dal meno recente al più recente:

Suffisso Significato
_alpha Alpha release
_beta Beta release
_pre Prerelease
_rc Release candidate
(nessuno) Normale release
_p Livello di patch (seguito da un numero intero)

Ognuno di questi suffissi può essere seguito da un numero intero positivo diverso da zero, per esempio linux-2.4.0_pre10. Assumendo che le parti della versione siano identiche, i suffissi sono ordinati come segue (il più basso significa il più vecchio): _alpha < _beta < _pre < _rc < (nessun suffisso) < _p.

Quando si comparano suffissi identici seguiti da numeri interi, quello con il numero intero più grande sarà considerato più recente. Esempio: foo-1.0_alpha4 è più recente di foo-1.0_alpha3.

La quarta sottosezione del nome di un pacchetto è il numero di revisione specifico di Gentoo Linux, ({-r#}). # è un numero intero positivo diverso da zero; esempio, package-4.5.3-r3.

Questo numero di revisione è indipendente dalla versione del sorgente tarball ed è usato per informare le persone che è disponibile una nuova e migliorata revisione Gentoo Linux di un pacchetto. Le versioni iniziali degli ebuild non devono avere nessun numero di revisione; per esempio, package-4.5.3 viene considerato da portage con un numero di revisione pari a zero. Questo significa che l'ordine è come segue: 1.0 (versione iniziale), 1.0-r1, 1.0-r2, ecc.

Se si introducono miglioramenti significativi ad un ebuild esistente, copiarlo in un nuovo file con il numero di revisione incrementato di 1. Ricordarsi sempre di menzionare i cambiamenti nel ChangeLog quando c'è una revisione e di inserire un messaggio sul CVS riguardante il proprio commit, non farlo è contro la politica del CVS.

Ovviamente c'è la quinta sezione del nome di un ebuild -- l'estensione .ebuild stessa.

Contenuti di un file ebuild

Questa sezione è una introduzione agli ebuild. Per l'elenco completo di ogni cosa possibile riguardante gli ebuild, c'è una pagina man che spiega il formato interno, le variabili, e le funzioni in uno script ebuild: man 5 ebuild.

Header

Quando si invia un ebuild, l'intestazione, o "header", dovrebbe essere esattamente uguale a quello in /usr/portage/header.txt. Ancora più importante, non modificarlo per nessun motivo e accertarsi che la riga $Header: $ sia intatta.

Le prime tre righe dovrebbe essere simile a queste:

Codice 2.1: Header valido

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

Variabili

La prima parte di ogni ebuild è composta da un certo numero di variabili.Consultare la relativa sezione nel devmanual per le informazioni sulle diverse variabili disponibili.

Funzioni

In un file ebuild si possono definire varie funzioni per controllare il processo di compilazione e installazione del proprio pacchetto.

Funzione Scopo
pkg_setup Usare questa funzione per eseguire delle operazioni essenziali di qualunque tipo. Ciò può includere il controllo di file di configurazione esistenti.
pkg_nofetch Informa l'utente sulle azioni necessarie da eseguire se per qualche ragione (per esempio limitazioni della licenza) i sorgenti non possono essere scaricabili automaticamente. Usare questa funzione insieme a RESTRICT="fetch". In questa funzione si devono visualizzare solamente dei messaggi, mai invocare die.
src_unpack Usare questa funzione per estrarre i sorgenti, applicare patch, ed eseguire programmi ausiliari come gli autotools. Il comportamento predefinito di questa funzione è l'estrazione dei pacchetti elencati in A. La directory di lavoro iniziale è definita da WORKDIR.
src_compile Usare questa funzione per configurare e compilare il pacchetto. La directory di lavoro iniziale è S.
src_install Usare questa funzione per installare il pacchetto in un'immagine in D. Se il proprio pacchetto usa automake, si può farlo semplicemente tramite emake DESTDIR=${D} install. Assicurarsi che il pacchetto installi i file utilizzando D come root! La directory di lavoro iniziale è S.
src_test Eseguito solo quando FEATURES="test" è impostato e RESTRICT="test" non è impostato, questa funzione esegue in modo predefinito una funzione di testing offerto da qualsiasi Makefile nella directory ${S}, eseguendo o "make test" o "make check", in base a cosa forniscono i Makefile. Può essere sovrascritto per generare un setup di test personalizzato.
pkg_preinst I comandi vengono eseguiti appena prima dell'installazione (merge) dell'immagine del pacchetto nel filesystem.
pkg_postinst I comandi vengono eseguiti appena dopo l'installazione (merge) dell'immagine del pacchetto nel filesystem.
pkg_prerm I comandi vengono eseguiti appena prima della rimozione (unmerge) dell'immagine del pacchetto dal filesystem.
pkg_postrm I comandi vengono eseguiti appena dopo la rimozione (unmerge) dell'immagine del pacchetto dal filesystem.
pkg_config È possibile usare questa funzione per predisporre una configurazione iniziale del pacchetto dopo la sua installazione. Tutti i percorsi in questa funzione devono avere il prefisso ROOT che punta ad una directory radice specificata dall'utente che potrebbe non essere /. Questa funzione viene eseguita solo e quando l'utente esegue: emerge --config =${PF}.

Funzioni di assistenza

Negli ebuild, inoltre, si possono usare le seguenti funzioni di assistenza .

Funzione Scopo
use Controlla se una o più flag USE prestabilite sono definite. Se ciò è vero, la funzione restituisce "vero" alla shell. In ogni altro caso non viene stampato nulla sullo standard output. Per una versione verbosa, usare usev, che visualizza le flag USE eventualmente definite.
has_version Ritorna 1 se il sistema ha la versione richiesta di un certo pacchetto. Per esempio has_version >=sys-libs/glibc-2.3.0.
best_version Restituisce la categoria/pacchetto-versione del categoria/pacchetto richiesto. Per esempio best_version x11-libs/gtk+extra.
use_with Questa funzione controlla se una flag use è stata definita e di conseguenza restituisce "--with-foobar"; o "--without-foobar". Se viene usato un solo argomento, esso sarà usato sia per la flag USE sia per la stringa with(out)-string. Altrimenti il primo argomento sarà la flag USE e il secondo argomento la stringa with(out)-string. Per esempio use_with truetype freetype restituirà "--with-freetype" se truetype è nelle USE.
use_enable Uguale a use_with, ma restituisce rispettivamente "--enable-foobar" o "--disable-foobar".
check_KV Controlla se Portage conosce la versione del kernel. Se non la conosce, visualizza un errore e termina. Se si necessita della versione del kernel nel proprio script, usare la variabile KV, che viene automaticamente definita da Portage. In un sistema che esegue gentoo-sources-2.4.20-r6, KV avrebbe il valore "2.4.20".
keepdir Crea (se necessario) un file .keep nella directory data in modo da non farla rimuovere automaticamente durante il processo di rimozione del pacchetto. Non creare mai autonomamente un file .keep. Se portage cambiasse la modalità di funzionamento di keepdir, creare autonomamente il file potrebbe corrompere il pacchetto.
econf Esegue ./configure con le opportune modifiche ai percorsi (prefix, host, mandir, infodir, datadir, sysconfdir, localstatedir). Facoltativamente è possibile passare degli argomenti extra a ./configure specificandoli nella chiamata di econf, e gli utenti possono impostare la variabile di ambiente EXTRA_ECONF. Opzioni passate a configure hanno la precedenza in ordine inverso rispetto a come vengono fornite. In altre parole, il primo argomento sarà sempre sovrascritto dall'ultimo.
einstall Esegue make install con le opportune modifiche ai percorsi (prefix, datadir, mandir, infodir, datadir, sysconfdir, localstatedir). Di nuovo, è possibile passare argomenti extra al comando make specificandoli nella chiamata di einstall. Notare che il modo preferito di installare un pacchetto è tramite il comando emake install DESTDIR=${D}, non tramite einstall. Questo comando è soltanto un ripiego per sovrapporsi al comportamento di makefile malfunzionanti.
die Causa l'annullamento del processo corrente. Avviserà l'utente usando l'argomento fornito come motivazione. Non trascurare di passare un messaggio a die se c'è più di una chiamata ad esso in una singola funzione. E' più difficile rintracciare un guasto se non si ha la certezza di dove il pacchetto fallisca.
elog Informa l'utente su qualcosa di importante. L'argomento fornito ad elog è il messaggio che l'utente vedrà. Non usare elog per visualizzare banner come "*************************************". Il fatto che si stia usando elog è sufficiente per ottenere l'attenzione dell'utente. Il messaggio viene inoltre registrato tramite il sistema ELOG di portage.
einfo Visualizza messaggi informativi ma non importanti, che non richiedono la registrazione.

Funzioni di assistenza fornite da eutils.eclass

Si possono usare nei propri ebuild le seguenti funzioni di assistenza fornite dall'eclass "eutils" . Assicurarsi che inherit eutils sia presente affinché queste funzioni vengano eseguite correttamente.

Funzione Scopo
epatch Questa funzione agisce come alternativa semplificata del comando patch e funziona con archivi .bz2, .gz, .zip e patch di puro testo. Non occorre specificare una opzione "-p", ogni opzione che dev'essere specificata può essere dichiarata in EPATCH_OPTS. La funzione prevede come argomenti o un file o una directory - se viene specificata una directory, verranno applicate tutte le patch nella forma di "??_${ARCH}_..." : affinché una patch venga applicata, deve corrispondere all'architettura in esecuzione, avere "_all_" nel nome, o EPATCH_FORCE deve essere impostato a "yes".
gen_usr_ldscript Questa funzione genera script linker in /usr/lib per librerie dinamiche in /lib. Questo corregge problemi di link quando un .so è in /lib mentre un .a è in /usr/lib.
edos2unix Questa funzione effettua la stessa azione del binario dos2unix.
egetent egetent agisce come wrapper per getent per Linux o nidump per Mac OS X (R).
enewuser Crea un nuovo utente. Questa funzione si aspetta un argomento obbligatorio con il nome utente, e possono essere specificati molti argomenti facoltativi : $2 contiene un UID, passare -1 per il successivo ID disponibile; $3 contiene la shell, passare -1 per quella predefinita; $4 contiene una directory home con /dev/null come predefinita, $5 contiene tutti i gruppi ai quali l'utente dovrebbe essere aggiunto, predefinito come vuoto e $6 contiene qualsiasi altra opzione si voglia passare ad useradd.
enewgroup Aggiunge un nuovo gruppo. Questa funzione si aspetta un argomento obbligatorio con il nome del gruppo - un secondo argomento facoltativo assegna al gruppo uno GID specifico.
make_desktop_entry Crea una voce per il menù desktop: il primo argomento contiene il percorso al binario. Facoltativamente il secondo contiene un nome per l'icona - il valore predefinita è ${PN}; il terzo può contenere un percorso all'icona relativo a /usr/share/pixmaps o un percorso completo - il valore predefinito è ${PN}.png; il quarto può contenere una categoria di applicazioni, e il quinto argomento contiene facoltativamente un percorso di avvio per l'applicazione.
check_license Visualizza una licenza che l'utente dovrò accettare, se l'argomento non è specificato allora viene usata la licensa specificata da ${LICENSE}.
unpack_pdv Estrae un archivio pdv generato, il primo argomento deve contenere il file da estrarre e il secondo dovrebbe contenere "off_t" il quale deve essere generato manualmente: eseguire strace -elseek ${file} e ottenendo qualcosa come "lseek(3, -4, SEEK_END)" si potrebbe passare il valore "4".
unpack_makeself Estrae un archivio auto generato, richiede un file da estrarre come argomento.
cdrom_get_cds Tenta di recuperare dei file da un CD, specificati dagli argomenti presente sul sistema e montato su ${CDROM_ROOT}.
cdrom_load_next_cd Carica il prossimo CD una volta finito con il primo CD. Se la funzione ritorna, ${CDROM_ROOT} punterebbe al prossimo CD.
strip-linguas Questa funzione assicura che LINGUAS contenga solo i linguaggi che un pacchetto può supportare specificati dagli argomenti passati alla funzione. Se il primo argomento è -i, viene compilata una lista di file .po nelle directory specificate e viene usata l'intersezione delle liste. Se il primo argomento è -u, viene compilata una lista di file .po nelle directory specificate e viene usata l'unione delle liste.

Funzioni di assistenza fornite da flag-o-matic.eclass

È possibile usare nei propri ebuild le seguenti funzioni di assistenza fornite dall'eclass "flag-o-matic". Assicurarsi che inherit flag-o-matic sia presente affinché queste funzioni vengano eseguite correttamente. Non si dovrebbero mai modificare direttamente le impostazioni del compilatore, usare invece flag-o-matic per effettuare qualsiasi azioni come filtrare le flag che causano problemi.

Funzione Scopo
filter-flags Questa funzione rimuove particolari flag da C[XX]FLAGS - la corrispondenza viene verificata solo su flag complete.
append-flags Questa funzione aggiunge flag extra alle variabili C[XX]FLAGS esistenti.
replace-flags Sostituisce la flag specificata dal primo argomento con quella nel secondo argomento nelle variabili C[XX]FLAGS correnti.
replace-cpu-flags Necessita di due argomenti. Sostituisce un dato valore di mtune/march/mcpu con quello nuovo (tipo così: replace-cpu-flags 'i686' 'i586' sostituirà -mtune/-march/-mcpu=i686 con -mtune/-march/-mcpu=i586).
strip-flags Rimuove tutte le flag, tranne quelle specificate in ALLOWED_FLAGS.
strip-unsupported-flags Rimuove da C[XX]FLAGS ogni flag non supportata dalla versione in uso di GCC.
get-flag Trova una flag e stampa il suo valore.
is-flag Ritorna vero se la flag è impostata nelle variabili C[XX]FLAGS correnti; vengono verificate solamente corrispondenze complete.
append-ldflags Questa funzione aggiunge flag extra alla variabile LDFLAGS esistente.
filter-ldflags Rimuove le flag specificate da LDFLAGS, la corrispondenza viene verificata solo su flag complete.
fstack-flags Aggiunge -fno-stack-protector la quale sopprime -fstack-protector e -fstack-protector-all.

Funzioni di assistenza fornite da toolchain-funcs.eclass

Si possono usare nei propri ebuild le seguenti funzioni di assistenza fornite dall'eclass "toolchain-funcs". Assicurarsi che inherit toolchain-funcs sia presente affinché queste funzioni vengano eseguite correttamente. Non si dovrebbe mai specificare direttamente alcuna impostazione del compilatore o di binutils, usare invece toolchain-funcs per specificare compilatori e binutils.

Lo scopo di usare queste funzioni è quello di supportare il cross-compiling e il compilatore icc. Esse dovrebbero essere usate quando un pacchetto usa esplicitamente gcc, g++, ld, ranlib o qualunque di questi strumenti elencati di seguito. Generalmente i pacchetti che usano strumenti di autoconfigurazione rilevano automaticamente il cross compiling e non necessitano di queste funzioni.

Funzione Scopo
tc-getAR Restituisce il nome dell'archiviatore
tc-getAS Restituisce il nome dell'assemblatore
tc-getCC Restituisce il nome del compilatore C
tc-getCXX Restituisce il nome del compilatore C++
tc-getLD Restituisce il nome del linker
tc-getNM Restituisce il nome dello strumento d'ispezione di oggetti/simboli
tc-getRANLIB Restituisce il nome dell'indicizzatore dell'archiviatore
tc-getF77 Restituisce il nome del compilatore fortran
tc-getGCJ Restituisce il nome del compilatore java
tc-getBUILD_CC Restituisce il nome del compilatore C per la compilazione
tc-is-cross-compiler Un modo semplice per vedere se si sta usando un cross-compiler
gcc-fullversion Ritorna la versione come da $($CC -dumpversion)
gcc-version Ritorna la versione, ma solo <major>.<minor>
gcc-major-version Ritorna la versione maggiore
gcc-minor-version Ritorna la versione minore
gcc-micro-version Ritorna la versione micro

Regole di scrittura di un file ebuild

Poiché i file ebuild sono semplicemente degli shell script, è possibile modificarli tramite gli usuali strumenti con cui si modificano gli script di shell. Si deve usare una certa indentazione, usare solo caratteri di tabulazione -- non spazi. Assicurarsi di configurare il proprio editor in modo da inserire 4 spazi per ogni tabulazione. Assicurarsi ogni volta di usare le parentesi attorno alle variabili d'ambiente; es. ${P} invece di $P.

Le linee lunghe vengono spezzate con ' \', così:

Codice 2.2: Spezzare le righe negli ebuild

./configure \
--prefix=/usr || die "configure failed"

Per ulteriori dettagli, controllare skel.ebuild (di solito residente in /usr/portage).

Se si utilizza Vim per la modifica di ebuild/eclass, il file vimrc predefinito di Gentoo, /etc/vim/vimrc, assicura già che venga usata la corretta indentazione e le impostazioni associate ai tipi di file per gli ebuild e le eclass. Per ottenere risultati migliori, inclusa una speciale sintassi che evidenzia le parole chiave degli ebuild, installare app-vim/gentoo-syntax.

Su sistemi non Gentoo, si possono ottenere risultati simili con le seguenti righe nel proprio vimrc, o meglio ancora installando gli script gentoo-syntax, scaricabili dai mirror Gentoo.

Codice 2.3: Configurare vimrc per la modifica degli ebuild

au BufRead,BufNewFile *.e{build,class} let is_bash=1|setfiletype sh
au BufRead,BufNewFile *.e{build,class} set ts=4 sw=4 noexpandtab

Se si sta usando Emacs, si dovrebbe effettuare l'emerge di app-emacs/gentoo-syntax (per GNU EMacs) o app-xemacs/gentoo-syntax (per XEmacs). Questi pacchetti forniscono le modalità principali per l'indentazione automatica e l'evidenziazione della sintassi per gli ebuild e altri tipi di file specifici di Gentoo.

Se si sta usando nano, si è fortunati! Modificare /etc/nanorc e decommentare la sezione relativa agli ebuild.

Variabili USE

Lo scopo delle variabili USE è permettere di configurare Portage abilitando o disabilitando globalmente e automaticamente certe caratteristiche opzionali durante la compilazione. Per esempio, ipotizzando di essere dei fan di GNOME, potrebbe far piacere che per qualsiasi ebuild avente un'opzione di compilazione per il supporto a GNOME venga attivata questa caratteristica. In questo caso è necessario aggiungere gnome alla variabile USE in /etc/make.conf per far sì che Portage aggiunga in automatico il supporto opzionale GNOME ai pacchetti, se disponibile. Se invece non si vuole il supporto a GNOME, basta modificate /etc/make.conf e assicurarsi che gnome non sia indicato nella variabile USE. Gentoo Linux ha un numero grandissimo di opzioni USE, per permettere di configurare il sistema a proprio piacimento.

Nota: Se viene disattivata una variabile USE (ad esempio rimuovendo gnome da USE), a Portage verrà solamente ordinato di disabilitare il supporto opzionale in fase di compilazione per GNOME. Tuttavia, se si esegue emerge su un ebuild che richiede GNOME, il pacchetto avrà ovviamente il supporto per GNOME attivo, com'era prevedibile. Ciò inoltre implica l'installazione automatica di GNOME (come dipendenza) se non è stata già fatta in precedenza. E` sempre una buona idea eseguire un emerge --pretend prima di eseguire un "reale" emerge; in questo modo si saprà esattamente cosa si sta per ottenere!

Nei propri ebuild, è possibile controllare se una variabile USE è impostata usando il comando use <variable>. Normalmente questo comando si usa in questo modo:

Codice 2.4: Verificare se una flag USE è impostata

if use X ; then
  # comandi specifici per X ...
fi

Le variabili USE possono anche essere usate per impostare le dipendenze. Per esempio, si potrebbe voler installare un pacchetto solo se quella determinata variabile USE è impostata. Ciò viene fatto usando la sintassi flag? ( categoria/pacchetto) nella variabile DEPEND del proprio ebuild. In questo esempio categoria/pacchetto verrà richiesto solo se flag è presente in USE. È inoltre possibile specificare quale dipendenza usare se una flag USE è impostata, e quale dipendenza usare se non è impostata: flag? (categoria/pacchetto) e !flag? (altracategoria/altropacchetto). In questo caso, se flag non è impostata, altracategoria/altropacchetto viene usato al posto di categoria/pacchetto. Assicurarsi che i propri ebuild usino questa sintassi e non gli if di Bash. Le espressioni condizionali di Bash possono interferire con il caching delle dipendenze di Portage, ed il loro uso può rendere inutilizzabile l'ebuild.

Si dà un importante suggerimento su come usare USE. Il più delle volte un pacchetto avrà uno script ./configure utilizzato per eseguire i passaggi di configurazione. Generalmente, se il proprio ebuild usa ./configure, ogni caratteristica opzionale abilitabile durante la compilazione dovrà essere attivata o disattivata passando gli argomenti appropriati al comando ./configure. Questo è il modo migliore per farlo:

Codice 2.5: Espressioni conditionali basate sull'impostazione di USE

DEPEND="X? ( >=x11-base/xfree-4.3 )
mysql? ( >=dev-db/mysql-3.23.49 )
apache2? ( >=net-www/apache-2 )
!apache2? ( =net-www/apache-1* )"

src_compile() {
  econf \
    $(use_enable X x11) \
    $(use_enable mysql) \
    || die "Error: econf failed!"
  emake || die "Error: emake failed!"
}

Questo approccio dà dei buoni risultati. Non ci si deve preoccupare sull'impostazione predefinita per mysql o per X (abilitato/disabilitato),viene detto esplicitamente ad econf cosa fare in base alla variabile USE. Non occorre aggiungere che il codice è piuttosto chiaro in termini di leggibilità :).

A volte, gli ebuild hanno delle caratteristiche facoltative in conflitto fra di loro. Verificare questi conflitti e restituire un errore non è una soluzione fattibile. Piuttosto bisogna favorire una di queste caratteristiche rispetto alle altre. Riguardo a questo, consultare gli sviluppatori originali (cosa usano generalmente come scelta predefinita), o considerare quale opzione fornisce più funzionalità di uso comune, altrimenti tirare a sorte. Un esempio è l'ebuild di msmtp. Il pacchetto può usare sia SSL con GnuTLS, oppure SSL con OpenSSL, o nessun SSL. Siccome GnuTLS ha più funzionalità rispetto a OpenSSL, esso verrà favorito:

Codice 2.6: Gestire funzionalità in conflitto tra di loro

src_compile() {
    local myconf

    if use gnutls ; then
        myconf="${myconf} --enable-ssl --with-ssl=gnutls"
    elif use ssl ; then
        myconf="${myconf} --enable-ssl --with-ssl=openssl"
    else
        myconf="${myconf} --disable-ssl"
    fi

    econf \
        # Other stuff
        ${myconf} \
        || die "configure failed"

    emake || die "make failed"
}

Per vedere una tabella in continuo aggiornamento delle variabili USE, andare in questa pagina.

1.c. Locazioni nel filesystem

Introduzione a FHS

Gli standard del layout del filesystem usati in Gentoo Linux seguono scrupolosamente FHS, abbreviazione di Filesystem Hierarchy Standard (Standard della Gerarchia del Filesystem). Una descrizione semplificata dello standard viene data qui, per una descrizione specifica andare all'indirizzo: http://www.pathname.com/fhs/.

Nota: Il percorso /opt viene nominato nella sezione 3.12 di FHS. La sezione 4.4 tratta del percorso /usr/X11R6. KDE e GNOME non sono trattati in modo specifico e difatti non sono menzionati nella versione corrente di FHS.

Come adeguare i pacchetti al filesystem

Abitualmente, se il pacchetto usa autoconf e automake, le destinazioni d'installazione predefinite sono quasi sempre corrette, salvo alcune eccezioni:

  • Se si sta installando un programma in /bin, /sbin, /usr/bin o /usr/sbin, la sua pagina man deve essere installata in /usr/share/man. Ciò può essere fatto specificando ./configure --mandir=/usr/share/man all'intero dell'ebuild.
  • I file GNU info, devono essere sempre installati in /usr/share/info, anche se sono file riguardanti X11, GNOME o programmi o strumenti specifici di KDE. Prendete nota: /usr/share/info è la sola locazione ufficiale per i file GNU info. Siccome gli script ./configure installano in modo predefinito i file info GNU in /usr/info, spesso è necessario chiamare ./configure con l'argomento --infodir=/usr/share/info.
  • I file di documentazione sono installati in /usr/share/doc, in una sottodirectory che riflette il nome la versione e la revisione del particolare programma. Questo va applicato a tutti i programmi: GNOME, KDE, X11 o programmi per console. Comunque, alcuni programmi possono installare documentazione addizionale o file di supporto in una directory /usr/share per i scopi autonomi.
  • I programmi specifici per X11 e le librerie devono essere sempre installati in /usr, e non direttamente in /usr/X11R6. Questo percorso è riservato all'X window system, versione 11 release 6. Questo è per interpretare più alla lettera le istruzioni di FHS, rispetto a come viene fatto da altre distribuzioni.
  • I programmi GNOME e KDE, devono essere sempre installati dentro /usr.

Importante: Alcune distribuzioni scelgono di installare GNOME e KDE dentro /opt. Non esiste uno standard per questi ambienti desktop riguardo a dove installare effettivamente i loro file. Nell'interesse della semplicità e consistenza, è stato scelto di installare tutti i pacchetti GNOME e KDE nella directory /usr.

In generale, bisogna far sì che gli ebuild installino i loro file in /usr. Alcuni programmi possono essere compilati e linkati con o senza le librerie GNOME, KDE e X11, cosa che può creare confusione. La soluzione proposta è installare tutto in /usr per evitare ambiguità e complessità inutili agli autori degli ebuild. La locazione nel filesystem di un programma non deve dipendere dalla presenza o dalla assenza di una variabile USE. Comunque, tutti gli ebuild nel portage tree quasi sempre effettueranno esclusivamente l'installazione nella gerarchia /usr.

Nota: In Gentoo Linux il percorso /opt è riservato ai pacchetti binari. Ad esempio mozilla-bin, acroread, netscape e realplayer. I pacchetti che vengono installati in questa posizione richiedono uno file ausiliario /etc/env.d/foo, per poter includere le variabili d'ambiente e i percorsi necessari nell'ambiente di esecuzione. Per maggiori informazioni su /etc/env.d, consultare questo documento.

1.d. Gli script e le utilità di Portage

Script pubblici

Questi sono gli script usati dall'amministratore di sistema per installare e rimuovere pacchetti, e mantenere il database degli stessi.

ebuild è il motore principale del sistema Portage; esegue le operazioni più importanti come l'estrazione, la compilazione, l'installazione, il merging e l'unmerging. Viene richiamato usando il comando: ebuild percorso/al/pacchetto.ebuild comando. I comandi disponibili sono:

Comando Descrizione Relativa funzione ebuild
setup* Esegue vari comandi richiesti prima che l'ebuild possa procedere pkg_setup
depend Visualizza le dipendenze necessarie per la creazione del pacchetto N/A
merge* Estrae, compila, installa e esegue il merge del pacchetto nel proprio file system N/A
qmerge* Esegue il merge del pacchetto nel proprio filesystem, assumendo che l'estrazione, la compilazione e l'installazione siano già state eseguite N/A
unpack* Estrae i sorgenti nella directory di lavoro src_unpack
compile* Compila il pacchetto src_compile
rpm Crea un RPM dal pacchetto N/A
package Crea un pacchetto Gentoo tbz2 N/A
prerm* Esegue lo stadio di pre-rimozione del pacchetto pkg_prerm
postrm* Esegue lo stadio di post-rimozione del pacchetto pkg_postrm
preinst* Esegue lo stadio di pre-installazione del pacchetto pkg_preinst
postinst* Esegue lo stadio di post-installazione del pacchetto pkg_postinst
config Imposta una configurazione predefinita una volta che è stato fatto il merge del pacchetto pkg_config
touch* Aggiorna gli orari di modifica (mtime) per ogni archivio sorgente nel pacchetto N/A
clean* Pulisce la directory di lavoro per il pacchetto N/A
fetch* Scarica i sorgenti del pacchetto N/A
manifest* Crea un file Manifest per il pacchetto N/A
test* Esegue la routine di auto-test per il pacchetto src_test
install* Installa il pacchetto nella directory immagine src_install
unmerge Esegue l'unmerge del pacchetto dal proprio filesystem N/A

Nota: Nota: i comandi con l'asterisco (*) sono normalmente utilizzati solo dagli sviluppatori.

emerge installa ricorsivamente il pacchetto e le sue dipendenze nel filesystem. Questo comando ha molte opzioni, eseguire emerge --help per un elenco.

env-update aggiorna i file di configurazione (includendo ma non limitato a /etc/ld.so.conf e /etc/profile.env) per includere le modifiche introdotte dai pacchetti installati.

Script e comandi privati

Questi sono script che si possono usare nell'ebuild per eseguire operazioni comuni.

Gli esperti possono consultare direttamente gli script in /usr/lib/portage/bin.

Comando Valore predefinito Descrizione Esempio
diropts -m0755 Imposta le opzioni usate quando si esegue dodir diropts -m0750
dobin N/A Installa i binari specificati in DESTTREE/bin dobin wmacpi
docinto "" Imposta la relativa sottodirectory (DOCDESTTREE) usata da dodoc docinto examples
dodir N/A Crea una directory, gestisce trasparentemente ${D} dodir /usr/lib/newpackage
dodoc N/A Installa i file specificati nella directory di documentazione del pacchetto (/usr/share/doc/${PF}/DOCDESTTREE) (vedere docinto) dodoc README *.txt
doexe N/A Installa i file specificati con le modalità EXEOPTIONS (vedere exeopts) in PATH definito da EXEINTO (vedere exeinto) doexe ${FILESDIR}/quake3
dohard N/A Crea un hardlink, gestisce trasparentemente ${D} dohard ls /bin/dir
dohtml N/A Installa i file specificati e le directory in /usr/share/doc/${PF}/html dohtml -r doc/html/*
doinfo N/A Installa i file specificati in /usr/share/info, e li comprime con gzip doinfo doc/*.info
doins N/A Installa i file specificati con modalità INSOPTIONS (vedere insopts) in INSDESTTREE (vedere insinto) doins *.png icon.xpm
dolib N/A Installa le librerie specificate in DESTTREE/lib con modalità 0644 dolib *.a *.so
dolib.a N/A Installa le librerie specificate in DESTTREE/lib con modalità 0644 dolib.a *.a
dolib.so N/A Installa le librerie specificate in DESTTREE/lib con modalità 0755 dolib.so *.so
doman N/A Installa i file specificati in /usr/share/man/manX, in accordo con il suffisso del file (file.1 andrà in man1 doman *.1 *.5
dosbin N/A Installa i file in DESTTREE/sbin, assicurandosi che siano eseguibili dosbin ksymoops
dosym N/A Crea un symlink, gestisce trasparentemente ${D}. dosym gzip /bin/zcat
emake N/A Esegue make con MAKEOPTS. Alcuni pacchetti non possono essere fatti in parallelo; usare invece emake -j1. Se si devono passare argomenti extra a make, aggiungerli nel comando emake. Gli utenti possono impostare la variabile di ambiente EXTRA_EMAKE per passare flag extra a emake. emake
exeinto / Imposta la root (EXEDESTTREE) per il comando doexe exeinto /usr/lib/${PN}
exeopts -m0755 Imposta le opzioni usate quando si esegue doexe exeopts -m1770
fowners N/A Applica la proprietà specificata ai file specificati tramite il comando chown, gestisce trasparentemente ${D} fowners root:root /sbin/functions.sh
fperms N/A Applica i permessi specificati ai file specificati tramite il comando chmod, gestisce trasparentemente ${D} fperms 700 /var/consoles
insinto /usr Imposta la root (INSDESTTREE) per il comando doins insinto /usr/include
insopts -m0644 Imposta le opzioni usate quando si esegue doins insopts -m0444
into /usr Imposta il prefisso di destinazione (DESTTREE) per tutti i comandi 'do' (come dobin, dolib, dolib.a, dolib.so, domo, dosbin) into /
libopts -m0644 Imposta le opzioni usate quando si esegue dolib libopts -m0555
newbin N/A Wrapper di dobin che installa il binario specificato in modo trasparente rinominando il secondo argomento newbin ${FILESDIR}/vmware.sh vmware
newdoc N/A Wrapper di dodoc che installa il file specificato in modo trasparente rinominando il secondo argomento newdoc README README.opengl
newexe N/A Wrapper di doexe che installa il file specificato in modo trasparente rinominando il secondo argomento newexe ${FILESDIR}/xinetd.rc xinetd
newins N/A Wrapper di doins che installa il file specificato in modo trasparente rinominando il secondo argomento newins ntp.conf.example ntp.conf
newman N/A Wrapper di doman che installa il file specificato in modo trasparente rinominando il secondo argomento newman xboing.man xboing.6
newsbin N/A Wrapper di dosbin che installa il file specificato in modo trasparente rinominando il secondo argomento newsbin strings strings-static
prepall N/A Esegue prepallman, prepallinfo e prepallstrip. Si accerta anche che tutte le librerie in /opt/*/lib, /lib, /usr/lib e /usr/X11R6/lib siano eseguibili. Sposta anche le macro aclocal in /usr/share/aclocal prepall
prepalldocs N/A Il comportamento di questa funzione è cambiato tra le varie versioni di Portage, pertanto le ebuild non dovrebbero usarla. prepalldocs
prepallinfo N/A Comprime tramite GZip ricorsivamente tutti i file info in /usr/share/info prepallinfo
prepallman N/A Comprime tramite GZip ricorsivamente tutte le pagine man in /opt/*/man/*, /usr/share/man/*, /usr/local/man/*, /usr/X11R6/share/man/* e aggiusta trasparentemente ogni percorso symlink prepallman

1.e. Dipendenze dei pacchetti

Perché le dipendenze sono importanti

Portage non è solamente un comodo script che offre un modo unificato per compilare qualsiasi progetto (programma, libreria) dai sorgenti. In aggiunta permette di scaricare ed installare automaticamente tutte le dipendenze necessaria, ovviamente specificandole nell'ebuild.

Negli ebuild ufficiali, tutte le dipendenze sono già specificate, quindi quando si esegue emerge net-www/mozilla/mozilla-1.0, Portage si assicurerà che tutte le librerie necessarie per compilare ed eseguire Mozilla siano correttamente installate prima che Mozilla stesso venga compilato.

Portage distingue le dipendenze build-time (in fase di compilazione) e run-time (in fase di esecuzione). (Avvertenza: Attualmente Portage installa tutte le dipendenze di compilazione e di esecuzione, lasciando poi tutto così com'è. In futuro sarà possibile ripulire la propria installazione in modo che rimangano installate solamente le dipendenze di esecuzione.).

Come specificare le dipendenze nei vostri files ebuild (a.k.a. DEPEND Atoms)

La variabile DEPEND all'interno dell'ebuild foo-x.y.z.ebuild dice a Portage quali sono i pacchetti necessari per compilare foo. La variabile RDEPEND specifica quali pacchetti sono necessari per eseguire foo. RDEPEND deve essere impostata esplicitamente anche se corrisponde esattamente a DEPEND poiché in futuro è pianificata la rimozione da Portage della sua valorizzazione predefinita a DEPEND.

Codice 5.1: Esempio di dipendenza

DEPEND="virtual/opengl
    dev-libs/libxml2"
RDEPEND="${DEPEND}"

Ciò dice a Portage che per compilare foo-x.y.z sono necessari i pacchetti virtual/opengl (maggiori informazioni sui virtual a breve) e dev-libs/libxml2. Non dice niente su quale sia la versione richiesta di opengl o libxml2, ciò significa che "va bene qualsiasi cosa".

Il "va bene qualsiasi cosa" ovviamente è un po' inquietante, e generalmente non funzionerà. Però per le librerie che devono sempre essere al compatibili al 100% con i binari, attualmente funziona. Per le altre librerie, è possibile ovviamente specificare le dipendenze con la versione.

Codice 5.2: Esempio di versione

>=sys-apps/bar-1.2
=sys-apps/baz-1.0

>= e = fanno quello che ci si aspetta; va bene la versione 1.2 o superiore di sys-apps/bar (ciò significa che sys-apps/bar-2.0 può andare bene), mentre solamente la versione 1.0 di sys-apps/baz è accettata. Per maggiori informazioni sullo schema delle versioni dei pacchetti, vedere la precedente sezione Dare il nome ai file ebuild.

Questi sono altri modi di specificare le dipendenze delle versioni:

Codice 5.3: Specificare le dipendenze con la versione

~sys-apps/qux-1.0
=sys-apps/foo-1.2*
!sys-libs/gdbm

~sys-apps/qux-1.0 selezionerà la revisione più nuova di qux-1.0

=sys-apps/foo-1.2* selezionerà il membro più nuovo della serie 1.2 e ignorerà le serie 1.3 e quelle precedenti/successive. Ciò significa che foo-1.2.3 e foo-1.2.0 sono valide, mentre foo-1.3.3, foo-1.3.0, e foo-1.1.0 non lo sono. Tenere presente che rientra nella corrispondenza anche foo-1.22.3 , che a volte potrebbe diventare un problema.

!sys-libs/gdbm impedirà l'installazione di questo pacchetto finché gdbm è già installato.

Note importanti

Ci sono molte cose difficili da capire con le variabili DEPEND e RDEPEND. Ecco alcuni punti importanti da seguire quando si scrivono le dipendenze.

  • Includere sempre la CATEGORIA.
    Per esempio, usare >=x11-libs/gtk+-2 e non >=gtk+-2.
  • Non mettere un asterisco (*) per le dipendenze di tipo >= .
    Per esempio, dovrebbe essere >=x11-libs/gtk+-2 invece di >=x11-libs/gtk+-2*.
  • Mai mettere come dipendenza un meta-pacchetto.
    Non mettere gnome-base/gnome tra le dipendenze, ma inserire sempre le librerie specifiche come libgnome.
  • Una dipendenza per riga.
    Non mettere dipendenze multiple su una stessa riga. Risultano difficili da leggere e da seguire.
  • GTK: Usare sempre =x11-libs/gtk+-1.2* per applicazioni GTK+1.

Inoltre è importante assicurarsi di includere tutte le dipendenze necessarie per il proprio pacchetto:

  • Guardare in configure.in o configure.ac
    Controllare qui le eventuali verifiche dei pacchetti. Le cose da guardare sono i controlli di pkg-config o le funzioni AM_* che controllano una specifica versione.
  • Guardare i file .spec
    Una buona indicazione è guardare nei file .spec inclusi per le relative dipendenze. Tuttavia non farvi completamente affidamento, in quanto non è detto contengano l'elenco completo e definitivo delle dipendenze.
  • Guardare il sito web dell'applicazione/libreria
    Controllare il sito web dell'applicazione per possibili dipendenze elencate come necessarie.
  • Leggere gli eventuali file README e INSTALL del pacchetto
    Di solito contengono utili informazioni sulla compilazione e installazione dei pacchetti.
  • Ricordarsi le dipendenze non binarie come pkg-config, programmi per la generazione dei documenti, ecc.
    Solitamente il processo di compilazione richiede dipendenze come intltool, libtool, pkg-config, doxygen, scrollkeeper, gtk-doc, etc. Assicurarsi vengano chiaramente specificate.

Per tutti i dettagli più recenti sui DEPEND Atoms, vedere la sezione 5 della pagina man sugli ebuild: man 5 ebuild.

1.f. Testare e distribuire

ChangeLog

Ogni volta che si aggiorna (o si scrive un nuovo) ebuild bisogna sempre aggiornare il suo ChangeLog. Il file skel.ChangeLog contiene un semplice ChangeLog da usare come base.

Lo scopo del ChangeLog è documentare cosa è stato fatto, perché è stato fatto e da chi. Questo permette a sviluppatori e utenti di tracciare i cambiamenti in maniera semplice.

Il Changelog è fondamentalmente destinato agli utenti, per cui assicurarsi di mantenerne i contenuti concisi e puntuali, evitando di essere troppo prolissi nei dettagli tecnici.

Memorizzare localmente i propri ebuild

Per poter testare i propri ebuild e far sì che siano visibili da Portage, bisogna posizionarli in una directory conosciuta. Portage userà la variabile PORTDIR_OVERLAY, definibile in /etc/make.conf. Impostare questa variabile alla propria directory (per esempio /usr/local/portage).

In questa directory, si deve usare la stessa struttura (e le stesse categorie) di /usr/portage.

Usando PORTDIR_OVERLAY, i propri ebuild rimangono nel sistema, anche dopo un emerge --sync, e rimangono visibili da Portage.

Testare i pacchetti

Considerare le modalità di verifica con le quali accertarsi che il pacchetto funzioni. A volte gli sviluppatori includono una routine make test o make check che verificherà le funzionalità di base del pacchetto. Se ciò è vero, eseguire env FEATURES=test ebuild foo-x.y.z.ebuild test. Se il pacchetto risulta malfunzionante cercare di correggerlo in modo da farlo funzionare (e proporre la patch ai sviluppatori originali).

Se questo non è il caso considerare l'aggiunta di una routine src_test al proprio ebuild. Essa viene eseguita prima della routine src_install e può essere molto utile per testare il funzionamento del programma nelle varie architetture. Gli sviluppatori delle architetture apprezzeranno l'aggiunta di una routine di questo tipo, in quanto non sarà necessaria da parte loro la conoscenza della funzionalità del pacchetto.

Tenere a mente i requisiti generali di un ebuild in questo caso. La routine src_test non deve essere interattiva. Se il test routine dipende da altri pacchetti usare la flag USE test per specificare le dipendenze DEPEND per la compilazione. Inoltre le routine src_test non sono raccomandate per applicazioni grafiche X poiché l'utente che esegue portage spesso non può eseguirle con successo.

Strumenti utili per i test

Sono disponibili degli utili strumenti per aiutare nella scrittura e manutenzione degli ebuild.

Strumento Pacchetto Descrizione
repoman sys-apps/portage Strumento riservato agli sviluppatori che aiuta nella procedura di checkin al CVS. Esegue molti degli usuali controlli di qualità (QA) e cerca di assicurare che i file aggiunti al cvs non pregiudichino il funzionamento del portage tree.
ccache dev-util/ccache Strumento che mantiene i file pre-processati in modo che la ricompilazione venga eseguita molto più velocemente. Assicurarsi di aggiungere ccache alla variabile FEATURES in /etc/make.conf
sandboxshell app-shells/sandboxshell Lancia una shell che crea un ambiente sandbox. Utile per entrare all'interno dello stesso ambiente in cui portage compila i pacchetti ed effettuare il debug manualmente.
echangelog app-portage/gentoolkit-dev Può creare un nuovo Changelog o aggiungere una voce in uno già esistente.

[ << ] [ < ] [ Home ] [ > ] [ >> ]


Stampa

Visualizza tutto

Aggiornato il 1 ottobre 2008

Oggetto: Questa sezione descrive il sistema di Portage Gentoo Linux, come creare nuovi pacchetti, ed inoltre vuole essere qualcosa come uno standard per gli sviluppatori Gentoo. Questo è un lavoro in corso d'opera, ed è costantemente aggiornato e modificato, per cui non è da considerarsi completo. Utilizzare sempre questa sezione in congiunzione con le pagine man fornite da portage (specialmente ebuild(5)) e la Politica dello Sviluppo di Gentoo Linux.

Sven Vermeulen
Autore

Seemant Kulleen
Autore

Shyam Mani
Autore

Karl Trygve Kalleberg
Autore

Mike Frysinger
Autore

Alastair Tse
Autore

Paul De Vrieze
Autore

Nicholas D. Wolfwood
Autore

Marius Mauch
Autore

Daniel Black
Autore

Wernfried Haas
Autore

Chrissy Fullam
Autore

Łukasz Damentko
Autore

Daniel Robbins (Ritirato)
Autore

John P. Davis (Ritirato)
Autore

Tim Yamin (Ritirato)
Autore

Jorge Paulo (Ritirato)
Autore

Zack Gilburd (Ritirato)
Autore

Benny Chuang (Ritirato)
Autore

Erwin (Ritirato)
Autore

Jon Portnoy (Ritirato)
Autore

Carl Anderson (Ritirato)
Autore

Donny Davies (Ritirato)
Autore

Peter Gavin (Ritirato)
Autore

Dan Armak (Ritirato)
Autore

Owen Stampflee
Autore

Ciaran McCreesh (Ritirato)
Autore

Davide Cendron
Traduzione

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.