[ << ]
[ < ]
[ 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 ]
[ > ]
[ >> ]
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|
|