Handbook:Parts/Portage/Advanced/it

Introduzione
Per la maggior parte degli utenti, le informazioni comunicate finora sono sufficienti per tutte le loro operazioni su Linux. Ma Portage può fare molto di più; molte delle sue funzionalità sono per utenti esperti o applicabili solo in casi specifici e marginali. Tuttavia, ciò non vorrebbe essere una scusa per non documentarli.

Naturalmente, insieme a tanta flessibilità si accompagna un enorme elenco di casi potenziali. Non è possibile documentarli tutti qui. Piuttosto, intendiamo concentrarci su alcuni problemi generici che possono essere adattati alle esigenze personali. Maggiori trucchi e consigli si possono trovare sul Wiki di Gentoo.

La maggior parte, se non tutte le funzionalità aggiuntive, possono essere facilmente individuate cercando tra le pagine manuale fornite da Portage:

Infine, tener presente che si tratta di funzionalità avanzate che, se non gestite correttamente, possono rendere molto difficile il debug e la risoluzione dei problemi. Assicurarsi di menzionarle quando ci si imbatte in un bug e si apre un bug report (rapporto errori).

Usare /etc/portage/env
Per impostazione predefinita, le compilazioni (build) dei pacchetti useranno le variabili d'ambiente definite in, come CFLAGS , MAKEOPTS ed altre. In alcuni casi, tuttavia, potrebbe essere utile fornire variabili diverse per specifici pacchetti. Per fare ciò, Portage supporta l'uso di e.

Il file contiene l'elenco dei pacchetti per i quali sono necessarie variabili d'ambiente diversificate ed un identificatore specifico che indichi a Portage quali modifiche apportare. Il nome dell'identificatore è in formato libero e Portage cercherà le variabili nel file.

Esempio: Usare il debug per pacchetti specifici
Come esempio, abiliteremo il debug per il pacchetto.

Prima di tutto, impostare le variabili di debug in un file chiamato. Il nome è scelto arbitrariamente, ma certamente riflette la ragione della modifica per rendere più chiara, in seguito, quale modifica è stata inserita.

Poi, etichettiamo il pacchetto per usare questo contenuto:

Usare /etc/portage/bashrc ed i file affiliati
Quando Portage lavora con gli ebuild, utilizza un ambiente bash in cui chiama le varie funzioni di build (come,  ,  , ecc.). Ma Portage permette agli utenti di configurare anche un ambiente bash specifico.

Il vantaggio dell'utilizzo di un ambiente bash specifico consiste nel permettere agli utenti di collegarsi al processo di emerge (compilazione) durante ogni fase eseguita. Ciò può essere fatto per ogni compilazione (tramite ) o usando ambienti specifici per pacchetto (tramite come discusso in precedenza).

Per agganciarsi (inserirsi) nel processo, l'ambiente bash può ascoltare le variabili EBUILD_PHASE, CATEGORY così come le variabili che sono sempre disponibili durante lo sviluppo di ebuild (come P , PF , ... ). In base ai valori di queste variabili, è possibile eseguire aggiuntivi passaggi o funzioni.

Esempio: Aggiornare il database dei file
In questo esempio, useremo per chiamare alcune applicazioni database di file per garantire che i loro database siano aggiornati rispetto al sistema. Le applicazioni usate nell'esempio sono (uno strumento di rilevamento delle intrusioni) e  (da usare con ), ma sono da intendersi come esempi. Non si consideri ciò come una guida per AIDE!

Per usare in questo caso, dobbiamo "agganciare" alle funzioni   (dopo la rimozione dei file) e   (dopo l'installazione dei file), perché è in quel momento che i file sul file system risultano modificati.

Usare la posizione /etc/portage/postsync.d
Fino ad ora abbiamo parlato dell'aggancio ai processi di ebuild. Tuttavia, Portage ha anche un'altra importante funzione: aggiornare il repositorio di Gentoo. Per eseguire attività dopo l'aggiornamento del repositorio di Gentoo, inserire uno script all'interno di ed assicurarsi che sia contrassegnato come eseguibile.

Esempio: Eseguire eix-update
Se non è stato usato per aggiornare l'albero, allora è ancora possibile aggiornare il database eix dopo aver eseguito  (o ) inserendo un link simbolico verso  chiamato  dentro.

Usare /etc/portage/profile
In via predefinita, Gentoo utilizza le impostazioni contenute nel profilo a cui punta (un collegamento simbolico alla corretta cartella del profilo). Questi profili definiscono sia impostazioni specifiche come anche ereditano impostazioni da altri profili (tramite il loro file genitore).

Usando, gli utenti possono sovrascrivere le impostazioni del profilo come i pacchetti (cioè quali pacchetti si deve considerare siano parte del sistema), opzioni (flag) di uso forzato ed altro.

Esempio: aggiungere nfs-utils al sistema
Quando si utilizza un filesystem basato su NFS per filesystem piuttosto critici, potrebbe essere necessario marcare come pacchetto di sistema, facendo in modo che Portage avvisi severamente gli amministratori se tentano di disinstallarlo.

Per soddisfare ciò, aggiungiamo il pacchetto a, preceduto da un :

Usare epatch_user
Per gestire diversi ebuild in modo simile, gli sviluppatori di ebuild usano eclasses (che sono librerie di shell) che definiscono le funzioni di uso comune. Una di queste eclass è che offre un'utile funzione chiamata.

La funzione  applica le correzioni al codice sorgente che vengono trovate in, qualunque cartella sia trovata per prima. Purtroppo, non tutti gli ebuild chiamano automaticamente questa funzione, quindi collocare una correzione (patch) in questa posizione potrebbe non funzionare sempre.

Luckily, with the information provided earlier in this chapter, users can call this function by hooking into, for instance, the prepare phase. The function can be called as many times as necessary - it will only apply the patches once.

Example: Applying patches to Firefox
The package is one of the many that already call   from within the ebuild, so there is no need to override anything specific.

If for some reason (for instance because a developer provided a patch and asked to check if it fixes the bug reported) patching Firefox is wanted, all that is needed is to put the patch in (probably best to use the full name and version so that the patch does not interfere with later versions) and rebuild Firefox.