per l'installazione e configurazione del tool consultate il sito del progetto GeCHI Overlay, che ospita il tool portage-bashrc-ng e ne mantiene lo sviluppo.
se riscontrate problemi con l'ebuild o il tool, non segnalateli sul bugzilla di Gentoo, bensì sul bugtracker del progetto --> portage-bashrc bugzilla
NOTA: le informazioni riportate in questo post possono non essere aggiornate ed esatte.
----
Ciao a tutti.
Per chi non conoscesse il tool di Fonderiadigitale, [topic=340329]portage-bashrc[/topic] è un bashrc che viene importato da portage e aggiunge ad esso la funzionalità di compilare in ram anziché sul disco; il bashrc di Fonderia al momento non funziona su versioni di portage superiori alla 2.1-pre6, e richiede un hack. Dopo aver cominciato a modificare portage-bashrc ho deciso di proseguire introducendo nuove funzionalità e semplificando un po' il codice; alla fine è diventato qualcosa di più, e il bashrc adesso serve solo a chiamare alcune funzioni in una lista di moduli, aumentando a piacere le funzionalità di portage.
Il progetto è su sourceforge, e potete leggerne gli sviluppi con un lettore RSS (es. thunderbird, firefox, straw o akregator) da questo feed RSS. Notare che il feed è in inglese, come il changelog e i commenti nel codice; allo stato attuale questo thread è l'unica fonte di informazione in italiano.
Avvertenze
Come potete immaginare, questa nuova versione è altamente sperimentale, per cui, vi prego, non testatela su sistemi mission-critical, e comunque sappiate che non mi assumo responsabilità per corruzioni di portage e/o altri danni: c'è da dire che l'entità dei danni dovrebbe essere minima (forse una compilazione fallita o su disco invece che su ram), ma non sono in grado di assicurarlo.
BIG FAT WARNING: prima di riportare un bug che abbia a che fare con portage, disattivate il bashrc con 'mv /etc/portage/bashrc /etc/portage/bashrc.bk' e riprovate. Ovviamente se incollate dell'output su bugs.gentoo.org quando il bashrc è attivo avete ottime probabilità che il bug sia marcato INVALID.
Come si usa
Innanzitutto per installarlo bisogna emergere e attivare layman:
Code: Select all
# emerge layman
# echo "source /usr/portage/local/layman/make.conf" >> /etc/make.confCode: Select all
# layman -f -o http://gechi-overlay.sf.net/layman.xml -a gechiCode: Select all
# layman -s gechiModulo tmpfs
Questo modulo permette di compilare su ram+swap anziché su disco; per attivarlo è sufficiente eseguire:
Code: Select all
#eselect bashrc-ng enable tmpfsQuesto modulo permette di modificare $CFLAGS, $CXXFLAGS e $FEATURES a seconda del pacchetto, originalmente scritto da Ned Ludd (solar) e modificato da Ryan McIntosh (thebigslide): la versione originale si trova qui, ma è stato modificato prima da me e poi da comio, perciò è ormai un po' diverso dall'originale. Per attivarlo:
- Per le CFLAGS: inserire in /etc/portage/package.cflags il pacchetto e le flags con la solita sintassi (es. "app-arch/unzip -pipe -funroll-loops"), ma è possibile specificare anche solo una categoria (es app-arch). È anche possibile utilizzare il file /etc/portage/package.nocflags per filtrare le flags indesiderate.
- Per le CXXFLAGS: la sintassi è la stessa del precedente, ma il file è /etc/portage/package.cxxflags; è anche possibile utilizzare il file /etc/portage/package.nocxxflags per filtrare le flags indesiderate.
- Per le LDFLAGS: al solito, il file è /etc/portage/package.ldflags; è anche possibile utilizzare il file /etc/portage/package.noldflags per filtrare le flags indesiderate.
- Per le FEATURES: idem come sopra, il file è /etc/portage/package.features; è anche possibile utilizzare il file /etc/portage/package.nofeatures per filtrare le flags indesiderate.
Questo modulo semplicemente invoca localepurge, se è presente, dopo ogni installazione: idea originale di Diego Pettenò (flameeyes). Per attivarlo, quindi, basta emergere app-admin/localepurge.
Modulo autopatch
Questo modulo applica automaticamente le patch scelte dall'utente dopo ogni installazione. Ho semplicemente adattato lo script originale di solar. Per attivarlo occorre impostare la variabile PATCH_OVERLAY in /etc/portage/bashrc-ng/bashrc-ng.conf (es. PATCH_OVERLAY=/usr/portage/local/patches/), e all'interno della directory a cui questa fa riferimento ricreare la struttura di un overlay (quindi una patch per unzip sarà nell'esempio precedente a /usr/portage/local/patches/app-arch/unzip/mypatch.patch).
Modulo ResumeMerge
L'obiettivo di questo modulo è di mantenere i sorgenti già decompressi dal tarball nel precedente emerge quando questo fallisce; se poi questi sono anche stati già compilati viene saltata anche quella fase. L'utilità maggiore si ha in congiunzione col modulo tmpfs, quando la partizione tmpfs viene sottodimensionata e l'emerge fallisce per motivi di spazio: in tal caso se si cambia la dimensione e riprende l'emerge le fasi già svolte vengono saltate.
Moduli personalizzati
Se si desidera scrivere un modulo personalizzato, basta creare uno script bash e chiamarlo /etc/portage/bashrc-ng/mymodule.module, rispettando le seguenti regole. Non esitate a inviarci i vostri moduli se pensate che possano essere utili ad altri.
- Ogni funzione il cui nome corrisponde a una fase di portage col prefisso "on_" verrà invocata all'inizio di quella fase; es. se si scrive on_compile() questa sarà chiamata all'inizio della fase "compile".
- Le funzioni aggiuntive on_BEGIN() e on_END permettono di specificare codice che andrebbe eseguito rispettivamente prima e dopo ogni funzione; non ci dovrebbe essere codice al di fuori delle funzioni perché sarebbe eseguito più volte in ogni fase.
- Affinché il modulo sia utilizzato, ocorre impostare a on il suo nome in /etc/portage/bashrc-ng/bashrc-ng.conf, es. "mymodule=on". Notare che affinché questo funzioni il nome del modulo deve seguire le convenzioni di naming delle variabili bash.
- Per favore non fate scrivere output al modulo al di fuori di una funzione, o diventerà fastidioso, visto che il modulo viene chiamato parecchie volte.
- Per favore implementate ciascuna nuova funzionalità in un modulo separato.
- E' possibile usare le funzioni del bashrc
- debuginfo(), che stampa i suoi parametri quando DEBUG ha contenuto non-nullo
- isfeature(), che pone la variabile $itsafeature a 1 se il suo primo parametro è in FEATURES
- parseconffile(), che controlla se il pacchetto in questione ha un valore specificato nel file che gli è passato come primo parametro, e pone quel valore in $configval; la sintassi è quella di tutti gli /etc/portage/package.*, ed è usata ad esempio per implementare package.mem, package.cflags ecc.
- Non dovreste affidarvi al fatto che una variabile mantenga lo stesso valore tra le chiamate.
- Non dovreste affidarvi al fatto che l'ordine dei moduli resti lo stesso; ad ogni modo, attualmente è alfabetico.
- Non dovreste scrivere su files, ma potete rimuoverli; la ragione è che un utente malizioso potrebbe creare un link ad un importante file di sistema, e usare il vostro codice per sovrascriverlo. Grazie a solar per averlo segnalato.
Il tool è ancora in fase di test, come potete vedere dal ChangeLog, perciò finché avrò tempo continuerò ad aggiornarlo e correggere i bug; spero che qualcuno voglia unirsi allo sviluppo e al test, e sono apertissimo ai suggerimenti. Ringrazio veonline e thewally per le ottime idee, fraido, fabius e comio per le patches, e Dr.Dran, !equilibrium e Philantrop per essersi uniti al progetto.
Se siete interessati, per sapere subito quando un bug viene scoperto e corretto vi consiglio di tenere sotto controllo il topic facendo click sul link in fondo alla pagina.
Grazie per l'attenzione
Ciao





