Gentoo Logo

[ << ] [ < ] [ 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 ] [ > ] [ >> ]


Stampa

Visualizza tutto

Aggiornato il 6 ottobre 2012

La versione originale di questo documento è più recente ed è stata aggiornata il 11 aprile 2013

Oggetto: Con il passare del tempo, Portage si evolve e matura continuamente. Caratteristiche ulteriori vengono continuamente introdotte - molte di queste sono in uso solo dagli utenti più avanzati. Questo capitolo entrerà nel dettaglio di queste caratteristiche avanzate.

Sven Vermeulen
Autore

Grant Goodyear
Autore

Roy Marples
Autore

Daniel Robbins
Autore

Chris Houser
Autore

Jerry Alexandratos
Autore

Seemant Kulleen
Sviluppo x86

Tavis Ormandy
Sviluppo Alpha

Jason Huebel
Sviluppo AMD64

Guy Martin
Sviluppo HPPA

Pieter Van den Abeele
Sviluppo PPC

Joe Kallar
Sviluppo SPARC

John P. Davis
Redazione

Pierre-Henri Jondot
Redazione

Eric Stockbridge
Redazione

Rajiv Manglani
Redazione

Jungmin Seo
Redazione

Stoyan Zhekov
Redazione

Jared Hudson
Redazione

Colin Morey
Redazione

Jorge Paulo
Redazione

Carl Anderson
Redazione

Jon Portnoy
Redazione

Zack Gilburd
Redazione

Jack Morgan
Redazione

Benny Chuang
Redazione

Erwin
Redazione

Joshua Kinard
Redazione

Tobias Scherbaum
Redazione

Xavier Neys
Redazione

Joshua Saddler
Redazione

Gerald J. Normandin Jr.
Revisione

Donnie Berkholz
Revisione

Ken Nowack
Revisione

Lars Weiler
Contributi

Marco Mascherpa
Traduzione

Stefano Pacella
Traduzione

Enrico Morelli
Traduzione

Davide Cendron
Traduzione

Sergio Vaccaro
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.