[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
6. Caratteristiche avanzate di Portage
Indice:
6.a. Introduzione
Per molti utenti le informazioni ricevute finora sono sufficienti per tutte le
loro operazioni nel sistema Linux. Ma Portage è capace di molto più; molte delle
sue caratteristiche sono concepite per utenti avanzati o sono applicabili solo
in certi casi specifici. Tuttavia, questa non è una valida scusa per non
documentarle.
Certamente, una maggiore flessibilità produce una lista sempre più vasta di casi
possibili. Non sarebbe praticabile documentarli tutti qui. Ci concentreremo,
invece, su alcuni casi generici che potranno essere adattati ai propri bisogni
particolari. Se si ha bisogno di configurazioni o consigli più specifici,
questi potrebbero essere trovati invece nel Wiki di Gentoo (in inglese, NdT).
La descrizione della maggior parte, se di non tutte, queste caratteristiche
addizionali possono essere facilmente trovate cercando nelle pagine di manuale
che portage fornisce:
Codice 1.1: Leggere le pagine man di portage |
$ man portage
$ man make.conf
|
Infine, si consideri che verranno trattate caratteristiche avanzate che, se non
funzionano correttamente, possono avere un complicato processo di individuazione
dei bug o di risoluzione dei problemi. Ci si assicuri di tenere a mente questo
fatto qualora si consideri di aprire un bug.
6.b. Variabili d'ambiente per pacchetto
Usare /etc/portage/env
Per default l'assemblaggio dei pacchetti usa le variabili d'ambiente definite in
/etc/portage/make.conf, come CFLAGS, MAKEOPTS e altre. In
alcuni casi, tuttavia, potrebbe essere necessario fornire varaibili diverse per
pacchetti specifici. Per farlo, Portage supporta l'uso di
/etc/portage/env e /etc/portage/package.env.
Il file /etc/portage/package.env contiene la lista di pacchetti per
i quali si desiderano variabili diverse, così come identificatori specifici che
indicano a Portage quali sono i cambiamenti desiderati. Il nome
dell'identificatore può essere scelto liberamente, Portage cercherà queste
variabili nel file /etc/portage/env/<identifier>.
Esempio: fare il debug di un singolo pacchetto
Come sempio, abilitiamo il debug per il pacchetto
media-video/mplayer.
Per iniziare, impostiamo le variabili per il debug in un file chiamato
/etc/portage/env/debug-cflags. il nome è stato scelto
arbitrariamente, ma ovviamente riflette la ragione dello scostamento da fare per
renderlo più chiaro successivamente quando lo scostamento sarà attivato.
Codice 2.1: contenuto di /etc/portage/env/debug-cflags |
CFLAGS="-O2 -ggdb -pipe"
FEATURES="${FEATURES} nostrip"
|
Poi indichiamo al pacchetto media-video/mplayer di usarne il
contenuto:
Codice 2.2: contenuto di /etc/portage/package.env |
media-video/mplayer debug-cflags
|
6.c. Inserirsi nel proceso di Emerge
Usare /etc/portage/bashrc i file associati
Quando Portage lavora con gli ebuild, usa delle variabili di ambiente bash nelle
quali sono predisposte le chiamate alle varie funzioni di compilazione (come
src_prepare, src_configure, pkg_postinst, ecc.). Ma Portage consente anche di
usare delle proprie variabili d'ambiente.
Il vantaggio di usare il proprio ambiente bash è che ci si può inserire nel
processo di emerge in ognuno dei suoi passaggi. Questo può essere fatto per ogni
emerge (attraverso /etc/portage/bashrc) o usando un ambiente
specifico per pacchetto (attraverso /etc/portage/env, come discusso
in precedenza).
Per inseririsi nel processo, l'ambiente bash può porsi in ascolto delle
variabili EBUILD_PHASE, CATEGORY e delle variabili che sono sempre
disponibili durante lo sviluppo dell'ebuild (come P, PF, ...).
Sulla base del valore di queste variabili, possono essere seguiti passaggi
ulteriori.
Esempio: aggiornare il database dei file
In questo esempio useremo /etc/portage/bashrc per invocare alcune
applicazioni basate su database per assicurarci che i loro database siano sempre
allineati col sistema. Le applicazioni usate nell'esempio sono aide (un
sistema di rilevamento delle intrusioni) e updatedb (da usare con
locate), ma sono da intendersi come semplici esempi. Non si consideri
questo esempio come una GUIDA per AIDE ;-)
Per usare /etc/portage/bashrc per il nostro scopo, abbiamo bisogno
di "agganciarci" alle funzioni postrm (dopo la rimozione di file) e
postinst (dopo l'installazione di file), visto che queste individuano i
momenti in cui i file nel sistema cambiano.
Codice 3.1: Esempio di /etc/portage/bashrc |
if [ "${EBUILD_PHASE}" == "postinst"] || [ "${EBUILD_PHASE}" == "postrm" ];
then
echo ":: Calling aide --update to update its database";
aide --update;
echo ":: Calling updatedb to update its database";
updatedb;
fi
|
6.d. Eseguire un compito dopo --sync
La directory /etc/portage/postsync.d
Fino ad ora abbiamo parlato di come agganciarsi al processo di ebuild. Tuttavia
Portage ha anche un'altra importante funzione: aggiornare l'albero di Portage.
Per eseguire compiti dopo aver aggiornato l'albero di Portage, collocare uno
script in /etc/portage/postsync.d e assicurarsi che sia eseguibile.
Esempio: eseguire eix-update
Se non si utilizza eix-sync per aggiornare l'albero, potrebbe essere
ancora necessario aggiornare il database di eix dopo l'esecuzione di emerge
--sync (o emerge-webrsync) ponendo un link simbolico a
/usr/bin/eix chiamato eix-update in
/etc/portage/postsync.d.
Codice 4.1: Eseguire eix-update dopo una sincronizzazione |
# ln -s /usr/bin/eix /etc/portage/postsync.d/eix-update
|
Nota:
Se si usa un nome diverso, sarà necessario preparare uno script che invoca
/usr/bin/eix-update. L'eseguibile eix controlla il modo in cui è
stato invocato per stabilire quale funzione deve eseguire. Se si prepara un link
simbolico a eix che non si chiama eix-update non funzionerà
correttamente.
|
6.e. Sovrascrivere le impostazioni del profilo
La directory /etc/portage/profile
Come impostazione predefinita, Gentoo usa le impostazioni contenute nel profilo
a cui punta /etc/portage/make.profile (un link simbolico alla directory di
profilo appropriata). Questi profili definiscono sia delle impostazioni
specifiche e sia il modo con cui le impostazioni sono ereditate da altri profili
(attraverso i loro file parent).
Usando /etc/portage/profile si possono sovrascrivere delle
impostazioni del profilo come packages (quali pacchetti sono
considerati parte del set di sistema), use flag forzate e altro.
Esempio: aggiungere nfs-utils al set di sistema
Se si usano file system NFS per file system abbastanza critici, si potrebbe
preferire di avere net-fs/nfs-utils "protetto" in quanto pacchetto
di sistema, chiedendo a Portage di avvisarvi insistentemente se dovesse essere
in procinto di essere rimosso.
Per ottenere questo, bisogna aggiunge il pacchetto a
/etc/portage/profile/packages, anteponendogli un *:
Codice 5.1: contenuto di /etc/portage/profile/packages |
*net-fs/nfs-utils
|
6.f. Applicare patch non standard
usare epatch_user
Per gestire diversi ebuild in un modo simile, gli sviluppatori di ebuild usano
eclasses (una specie di librerie shell) che definiscono funzioni usate
di frequente. Una di queste eclasses è eutils.eclass che
contiene una interessante funzione chiamata epatch_user.
La funzione epatch_user applica al codice sorgente le patch che si
trovano in
/etc/portage/patches/<category>/<package>[-<version>[-<revision>]],
nella directory trovata per prima. Sfortunatamente non tutti gli ebuild
chiamano questa funzione, quindi mettere semplicemente la patch in queste
posizioni potrebbe non funzionare.
Per fortuna, con le informazioni fornite in precedenza, si può sempre invocare
questa funzione agganciandosi, per esempio, alla fase prepare. La
funzione può essere invocata tutte le volte che si desidera - le patche verranno
applicate una sola volta.
Esempio: applicare delle patch a Firefox
Il pacchetto www-client/firefox è uno dei pochi che già chiama
epatch_user dall'interno dell'ebuild, quindi non occorre sovrascrivere
nulla di specifico.
Se si ha bisogno di applicare una patch a firefox (ad esempio perché uno sviluppatore ha
postato una patch e ci ha chiesto di controllare se ripara il bug che hai riportato),
porre la patch in /etc/portage/patches/www-client/firefox (probabilmente è meglio
usare il nome completo, inclusa la versione, affinché le patch non
interferiscano con le versioni successive) e ricompilare Firefox.
[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|