Indice
Introduzione: Una distribuzione -meta.
Organizzarsi per diventare utenti Gentoo.
Lezione libera:
Overlay dimostrativo e pacchetti minimali.
Laboratorio:
Installazione con pacchetti precompilati.
Il progetto Gentoo nasce nel 2002, rilevando il nome di un prodotto precedente, Enoch Linux (dicembre 1999), concepito da un’idea originale di un singolo, giovane sviluppatore di grandi ambizioni: Daniel Robbins. Gentoo costituisce quindi un prodotto evoluto e relativamente tardivo nella storia dell’informatica, che può essere collocato storicamente all’epoca del Web 2.0.
Il fascino, l’autonomia, la semplicità strutturale e le potenzialità del prodotto raccolgono in breve un interesse, un consenso, un impegno e una partecipazione diffuse al punto da affrancare il progetto originale dalla personalità del proprio creatore, e danno vita a una comunità che, senza intaccare la struttura primitiva e lo spirito di fondo, non ha cessato di svilupparsi e di confermare il proprio ruolo tra i più qualificati attori internazionali nel settore del software libero.
Per illustrare in modo semplice la peculiarità assoluta di gentoo, rispetto alle offerte simili del mercato, è opportuno dedicare una breve riflessione al ruolo strategico delle distribuzioni di software.
La ragion d’essere di una distribuzione risiede in una proprietà inconvertibile di tutti i cosiddetti dispositivi elettronici intelligenti che la tecnologia moderna diffonde sul mercato nelle più svariate configurazioni: quella di non essere per nulla intelligenti. Può trattarsi di personal computer, server aziendali, telefonini, schede di controllo o di acquisizione, sistemi wifi, router, modem e via dicendo: non funzionano se, intorno a ciascuno di essi, non viene raccolto e coordinato un certo quantitativo di software. La comunità del software libero, con un anticipo impressionante rispetto a tutti gli altri operatori di mercato (per noi è storia degli anni ‘90), ha strutturato a questo scopo lo strumento della distribuzione.
In parole figurate, quella della distribuzione è una funzione di sartoria. Un sarto, dovesse produrre anche un semplice grembiule, mette in atto un insieme di operazioni relativamente complesse. Scegliere una stoffa: non troppo pesante, ma robusta. Facile da lavare, economica... Cercare il pizzo per il polsino, o per il colletto. I bottoni. Una cerniera per il taschino, della giusta lunghezza. Prendere le misure, scegliere il taglio. Da uomo, da donna … Imbastire, assemblare, cucire, rifinire le asole, i particolari.
Ma chi saranno mai, questi abilissimi sarti che svolgono questo compito nel settore del software libero?
Io (autore di questa presentazione), come semplice utente Gentoo, sono uno di questi sarti.
Infatti, gli strumenti che la distribuzione gentoo mette a mia disposizione, mi consentono, senza possedere una preparazione tecnica eccessivamente elevata, di costruire delle vere e proprie distribuzioni su misura per ciascuno dei dispositivi intelligenti a cui dedico la mia attenzione. Il prodotto che un utente gentoo è in grado di realizzare possiede un grado di flessibilità e di autonomia che una distribuzione tradizionale non può assolutamente consentire. Si pensi che è possibile persino scegliere tra l’uso di un kernel Linux o di un kernel Bsd. In conclusione, Gentoo è un sistema che delocalizza atomicamente il concetto di distribuzione, decentrando il processo di compilazione e installazione del software originale direttamente su a ciascun singolo dispositivo finale.
Nella prima slide della “Introduzione a Gentoo” di Rajiv Manglani, ospitata tra la Documentazione Ufficiale, il progetto Gentoo Linux è presentato nel modo seguente:
Come si vede bene, Gentoo non è soltanto una distribuzione, ma soprattutto una Comunità strutturata, che si regola secondo i principi di un Contratto Sociale, dichiaratamente ispirato al modello Debian.
“What is gentoo? - Gentoo in itself is a collection of free knowledge.”
La metadistribuzione è solo una componente di un sistema che si occupa di raccogliere e mantenere un insieme complesso di documentazione e metadati concernenti concetti o contenuti di rilievo per i sistemi operativi e i loro componenti, nonchè i contributi al Free Software degli sviluppatori del progetto Gentoo.
La lista ufficiale dei progetti Gentoo costituisce la “Metastruttura Gentoo”.
Tra questi progetti, mettiamo in evidenza le voci più direttamente connesse alla dimensione sociale e culturale del progetto Gentoo:
Il marchio Gentoo e le proprietà intellettuali prodotte dall’associazione sono protette da una fondazione di diritto statunitense, gestita da un comitato elettivo di cinque amministratori, con rinnovo annuale.
La comunità Gentoo, attualmente, conta all’incirca 350 sviluppatori, che eleggono ogni anno un Consiglio di sette membri. Il Consiglio decide sulle questioni tecniche di indirizzo e sulle politiche globali che coinvolgono i diversi progetti della Comunità. I membri del Consiglio si incontrano mensilmente sui canali irc, e pubblicano il testo integrale della seduta, insieme a un sommario delle decisioni assunte.
Ma la documentazione è senz’altro il fiore all’occhiello della produzione Gentoo ed offre agli utenti un’assistenza dettagliata e completa. Attualmente, è in atto un processo di trasferimento di molti contenuti dalla forma di manuale a quella di wiki. I Forum, inoltre, sono un’ulteriore risorsa di grande vitalità.
Portage è il cuore di Gentoo.
In astratto, è una struttura di metadati.
Funzionalmente, è un gestore di pacchetti: infatti, contiene le istruzioni necessarie per installare i singoli pacchetti software supportati.
Gentoo infatti, non distribuisce programmi agli utenti, né si occupa di crearli, scrivendo il software per essi. Gentoo, semplicemente, distribuisce istruzioni (metadistribuzione), utili agli utenti per acquisire il codice sorgente dei programmi desiderati, compilarlo e installarlo localmente in forma personalizzata.
Ogni installazione locale standard fa riferimento a una versione di Portage nella cartella /usr/portage, aggiornabile in modo automatico via protocollo rsync (o altri strumenti equivalenti).
Portage è organizzato come ramo di un tradizionale albero di filesystem, ordinato su due livelli, secondo la sintassi categoria/pacchetto (per es. : kde-base/kde-meta/. Per ogni pacchetto è riservata una specifica cartella, che contiene uno o più dei cosidetti ebuild, file di testo descritti nel prossimo paragrafo.
Portage contiene anche una cartella di profili ( portage/profiles ), una di metadati ( portage/metadata ) e una di funzioni di sistema ( portage/eclasses ).
I file più importanti di ciascun pacchetto sono chiamati ebuild. Il basename di ciascun ebuild rispetta la sintassi pacchetto-versione.ebuild ( per es. portage-2.1.12.2.ebuild) . In questo modo, l’utente è in grado di scegliere, secondo le proprie necessità, versioni diverse dello stesso programma. In certi casi (versioni slotted) è anche possibile ospitare nella stessa installazione, più versioni di un singolo programma.
Il compito principale degli sviluppatori gentoo, dunque, è quello di mantenere l’albero di portage, scrivendo gli ebuild necessari alla compilazione dei programmi per le installazioni remote degli utenti gentoo. La struttura fondamentale di ciascun ebuild è molto semplice:
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI=5
DESCRIPTION=""
HOMEPAGE=""
SRC_URI=""
LICENSE=""
SLOT="0"
KEYWORDS="~amd64"
IUSE=""
DEPEND=""
RDEPEND="${DEPEND}"
Il linguaggio di programmazione degli ebuild è bash, integrata da un gran numero di variabili specifiche e funzioni dedicate.
Osserviamo l’esempio di ebuild minimale prodotto sopra. In questo caso, contiene esclusivamente una lista di variabili di sistema.
La variabile EAPI, per esempio, dichiara il dialetto di portage utilizzato per la costruzione del pacchetto. Ormai, gentoo ha più di dieci anni e portage ha avuto un’evoluzione complessa. Non tutte le versioni, quindi, sono del tutto retro-compatibili, anche se, strutturalmente, gentoo è un sistema indipendente da versione, con un grado di retro-compatibilità molto elevato.
Le variabili DESCRIPTION e HOMEPAGE contengono informazioni di servizio relative al software originale. La SRC_URI indica la collocazione fisica del codice sorgente del programma. A volte i sorgenti possono essere ospitati su server gentoo, ma spesso il codice viene prelevato direttamente dal server originale di produzione. È possibile anche utilizzare codice in sviluppo ospitato su git, cvs o altri sistemi di controllo di versione.
La licenza è quella con cui è distribuito il codice originale. Gli ebuild sono distributi da gentoo con licenza GPLv2, ma è in corso di valutazione l’eventuale aggiornamento ad altre forme di licenza OSI.
La SLOT gestisce le versioni slotted.
La KEYWORDS è la chiave con cui viene indicato il grado di affidabilità del programma, in funzione dell’architettura locale. Può accadere, ad esempio, che un programma sia considerato affidabile per una architettura x86, ma non del tutto testato in un sistema amd64. In questo caso il programma sarà marcato con la chiave KEYWORDS=”x86 ~amd64”.
La IUSE è la variabile che, più di ogni altra, caratterizza le installazioni locali di gentoo da tutte le altre. I programmatori gentoo, infatti, inseriscono nei propri ebuild opportune flag che gestiscono la personalizzazione dell’installazione con un grado di flessibilità non riscontrabile con nessun’altra distribuzione. L’utente, a sua volta, può selezionare tra le flag disponibili quelle desiderate utilizzando una apposita variabile USE. In questo modo, ad esempio, è possibile omettere a propria discrezione tutta o parte della documentazione del programma desiderato, o applicare una varietà enorme di opzioni sofisticate, assolutamente peculiari (per esempio, il supporto a un particolare linguaggio di programmazione o a una certa tipologia di database). Le distribuzioni standard, al contrario, distribuiscono una versione preconfezionata di ogni singolo pacchetto, che non può essere oggetto di personalizzazioni lato utente.
Infine, le dipendenze. Ogni singolo pacchetto deve indicare, attraverso un insieme di regole tanto semplici quanto efficaci, i pacchetti da cui dipende, che sono indispensabili per ottenere un’installazione integrata e coerente. L’opera svolta da Gentoo in questi anni nel controllo delle dipendenze e nella gestione delle librerie ha rappresentato un contributo prezioso all’intera comunità del software libero, suggerendo comportamenti virtuosi che hanno migliorato globalmente la produzione del software libero. Un esempio significativo può essere il contributo di gentoo all’eliminazione dei lafiles dalle cartelle di libreria.
La più importante potenzialità di portage è l’estendibilità. Mediamente, l’albero ufficiale di portage ospita qualche decina di migliaia di pacchetti diversi. Assumendo di attribuire a ciascuno dei circa trecento sviluppatori la cura di una trentina di pacchetti, infatti, non sarebbe possibile offrire molto di più. Inoltre, l’albero ufficiale di portage vuole garantire uno standard di stabilità che limita l’integrazione di prodotti nuovi o di software in sviluppo.
Gli overlay sono estensioni dell’albero di portage che possono essere aggiunti localmente dall’utente per le proprie necessità. Gentoo mantiene un overlay primario, gestito da un programma specifico chiamato Laymann, che consente di integrare una quantità aggiuntiva di ebuild sperimentali.
L’esempio di ebuild riportato sopra sembra piuttosto minimale. Eppure è sufficiente per installare molti programmi. Un utente gentoo deve disporre, però, di un interprete specifico per la lettura e l’esecuzione di portage. Questo interprete, però, non è il gestore dei pacchetti. In gentoo, rispetto alle normali distribuzioni, il concetto di gestore dei pacchetti assume una natura molto diversa, che costringe a separare concettualmente il database (cioè portage: il vero e proprio gestore dei pacchetti) e l’interprete, cioè il programma che esegue l’installazione locale. Da questa distinzione deriva quella versatilità che permette a Gentoo di impegnarsi su installazioni indipendenti persino dalla scelta del kernel.
Esistono molto interpreti di portage. Emerge è quello nativo gentoo. Paludis è un esempio alternativo di particolare rilievo.
Scritto in python (annoso il dibattito su questa caratteristica), emerge è un programma sofisticato, con una pluralità di funzioni. In particolare, può essere usato:
per aggiornare in modo automatico l’albero locale di portage:
emerge --sync
per installare un singolo programma:
emerge nome-pacchetto # (procede a installare anche le dipendenze necessarie)
per aggiornare il sistema con un unico comando:
emerge -uDN @world
Emerge può essere configurato localmente tramite i file della cartella /etc/portage. Un file particolarmente importante è make.conf. Vediamo alcuni contenuti di rilievo:
CHOST: definisce il build-host di sistema.
CFLAGS: modifica le impostazioni di compilazione durante l’installazione. Può essere personalizzata in funzione delle caratterstiche hardware della macchina locale (soprattutto il processore) o secondo altri criteri. È una variabile delicata che deve essere utilizzata con accortezza. Gli utenti più appassionati personalizzano la scelta delle CFLAGS per ogni singolo pacchetto, ricavandone talora grossi vantaggi nelle prestazioni, talaltra producendo enormi pasticci.
PORTDIR_OVERLAY: definisce la cartella in cui l’utente desidera collocare il proprio overlay di portage.
USE: è la variabile che gestisce le flag globali proprie dell’installazione locale. Queste impostazioni possono essere sovrascritte localmente per ogni singolo pacchetto con l’uso del file /etc/portage/package.use. Lo strumento delle useflag è probabilmente l’elemento caratterizzante di maggior rilievo della metadistribuzione gentoo.
I pregi:
I difetti:
Un buon utente Gentoo deve:
Essere appassionato. Avere buon gusto: saper apprezzare determinati valori tecnici e determinati contenuti concettuali. Essere paziente. Concedere alle cose il tempo che serve. Essere disposto ad acquisire un certo insieme di competenze, non particolarmente sofisticate, ma un po’ diverse da quelle comuni di un utente passivo di telefonino cellulare.
Però, se è capace di organizzarsi, un utente gentoo può togliersi più di qualche soddisfazione, senza consegnarsi di necessità a una vita da fachiro.
Per sveltire la compilazione delle proprie installazioni, è possibile:
Se, invece, l’utente desidera potenziare la propria distribuzione, può: