Come compilare e pacchettizzare automaticamente un software per Linux partendo dai sorgenti e da un piccolo script: lo SlackBuild.
Argomenti novità

Chromium da zero

Tags/parole chiave: compilazionesoftwarepacchettilinux

Compilare il software - (in coda gli aggiornamenti)

compilare chromium

Abbiamo avuto spesso modo di parlare di come installare i programmi su Slackware e di come procurarceli, di cosa sono i pacchetti e di come installarli. In generale, se il pacchetto per la nostra distribuzione non è stato ancora creato è possibile ricorrere alla compilazione del software partendo dai sorgenti messi a disposizione dal programmatore.

Inutile dire che il discorso della disponibilità dei sorgenti di un software è possibile solo perché parliamo di software libero: nel caso dei sistemi proprietari o dei programmi commerciali il problema della compilazione non si pone, in quanto non sono disponibili i sorgenti, cioè il codice in linguaggio comprensibile all'uomo prima della sua compilazione in codice macchina, cioè comprensibile solo al nostro computer.

Senza aver la pretesa di essere esaustivi (l'argomento è talmente vasto da richiedere, comunque, una certa esperienza) lo scopo primario di questo documento è quello di fornire una traccia o una semplice idea di soluzione. Quindi, se è vero che compilare da zero un software è relativamente facile per programmi piccoli, è assolutamente falso per i programmi più complessi e diventa proibitivo per coloro che non hanno molta dimestichezza con queste cose. In questo documento parliamo di una possibile soluzione a questo problema: il ricorso alle SlackBuils!

Problema: voglio Chromium aggiornato!

Recentemente, dopo giorni di bisticcio con una scheda grafica ATI Radeon che conviveva pacificamente con una Intel I915 a bordo di un portatile HP (la Radeon non voleva funzionare con Linux, cedendo -amorevolmente- il passo alla I915), ho installato l'ultima Slackware stabile (la 13.37 a 64 bit). Tra i vari software che uso c'è Chromium (progetto open source a fronte del famoso browser di Google, Chrome) che ho installato prelevando il relativo pacchetto da solito mio repository preferito.

La caratteristica del progetto è di essere in continua evoluzione; sul sito ufficiale dei sorgenti'ultima release disponibile è -alla data in cui scrivo- la 17.0.920.1. Nulla a che vedere, quindi, con la ormai datata 13.0 cui si riferisce il pacchetto!

Quindi cercheremo, qui, la soluzione a questo problema: “come fare ad avere un pacchetto di installazione relativo alla release più recente quando questo non è disponibile in rete per il download?”

In onore al vecchio adagio “chi fa da sé fa per tre”, compileremo da soli il software, applicando le patches per escludere l'uso delle librerie PAM (che Slackware non usa) e creeremo, sempre da soli, il pacchetto di installazione, in modo da aggiornare, in seguito il sistema, rimuovendo, correttamente e totalmente, le vecchie versioni.

Detto così sembra una missione impossibile o, comunque, adatta ad un esperto programmatore: vi assicuro che non è così!

Con Slackware esiste un terzo metodo per installare del software (oltre al pacchetto già pronto ed alla compilazione da zero) che è il ricorso allo SlackBuild. Lo SlackBuild è un apposito script (cioè un copione che il sistema dovrà seguire) che, partendo dai sorgenti del software, ci condurrà alla creazione del tutto automatica del pacchetto di installazione attraverso la complessa procedura di compilazione. Inoltre colui che ha scritto lo SlackBuild avrà impostato sia l'applicazione delle Patches (cioè le modifiche ai sorgenti per adattarli al sistema in uso) sia la corretta impostazione di tutti i parametri di compilazione. Il nostro compito è quello di scaricare i file della directory src del repository e, come ROOT (amministratore del sistema), lanciare lo script “chromium.Slackbuild” (che deve essere eseguibile) ed attendere il termine delle operazioni. E` molto facile, anche se è necessario modificare leggermente lo SlackBuild!

Infatti, lo script di compilazione che abbiamo scaricato fa riferimento alla nostra ultima versione di Slackware ma ad un rilascio molto precedente di Chromium (13.0 contro 17.0): è necessario quindi apportare alcune modifiche molto semplici per completare con successo la creazione del pacchetto.

Primo: modificare la versione

Al rigo 34 viene dichiarata la versione di Chromium interessata, che sarà scaricata dal sito del progetto:

VERSION=${VERSION:-13.0.763.0}

deve essere modificata coerentemente con l'ultima disponibile o, anche, quella che vorremmo compilare; nel mio caso, la riga diviene:

VERSION=${VERSION:-17.0.920.0}

Secondo: modificare l'architettura

La compilazione con lo SlackBuild viene ottimizzata a seconda dell'architettura (sistemi a 32 o 64 bit, nuovi o vecchi processori, etc). Il rigo interessato è il 37:

ARCH=${ARCH:-x86_64}

che, se abbiamo in uso la versione a 32 bit di Slackware, diventa:

ARCH=${ARCH:-i686}

Terzo: escludere l'uso di Kerberos

Kerberos è un sistema di autenticazione sviluppato dal MIT le cui librerie sono entrate di recente nello sviluppo di Chromium. Slackware non le usa e, quindi, dovremmo escluderle dalla compilazione. I parametri di compilazione sono a partire dalla riga 104 e, mantenendo la stessa sintassi, aggiungiamo questo rigo:

-Duse_kerberos=0 \

E con questo completiamo le modifiche allo script di compilazione che possiamo, adesso, eseguire:

./chromium.SlackBuild

Un processo lungo...

La compilazione metterà insieme i quasi 150 megabytes di dati dei sorgenti per ottenere un pacchetto di installazione di appena 23 mega. E` un processo lungo, la cui durata dipende dalla potenza del processore. Un moderno i5 su un PC con 4 Gb di RAM ha impiegato circa 60 minuti mentre un umile Atom dual core di un netbook con due Gb di RAM poco più di 5 ore.

Bisogna, tuttavia, sottolineare che il processo di compilazione è estremamente ottimizzato e, una volta avviato, è possibile sospenderlo (pigiando il famoso control-C), per riprenderlo con calma in seguito. Nel caso dell'Atom il processo è stato sospeso ben quattro volte. Tuttavia è necessaria una piccola accortezza: commentare, nello SlackBuild le righe dedicate all'estrazione dei sorgenti ed all'applicazione della patch, già fatta nel primo avvio dello script. In caso contrario, il lavoro svolto sino alla sospensione andrebbe perso, così come mostrato nell'immagine seguente:

commenti allo slackbuild chromium

Un ringraziamento

Un ringraziamento doveroso va a Giacomo di www.develia.org appassionato utente Slackware e convinto divulgatore dell'open source. Senza il suo aiuto, probabilmente, questo documento non avrebbe mai visto la luce.

Aggiornamento del 18/11/2011

Da alcuni giorni il sito ufficiale delle build non è attivo ed è stato marcato come "obsolete"; al suo posto viene consigliato di recarsi sul nuovo sito che contiene i nuovi sorgenti del browser, aggiornati ogni 1 o due giorni. Per il resto le modifiche consigliate allo script di slackbuild funzionano a dovere.

Aggiornamento del 11/01/2012

Note per la compilazione di Chromium 18.0.999.0

Qualcosa è cambiato con i sorgenti della nuova versione; usando sempre lo stesso script di Slackbuild con le solite modifiche, la compilazione si blocca lamentando la mancanza di alcune librerie: nss3, mime3, softokn3, plds4, plc4 , nspr4. A colpo d'occhio sembrerebbero mancare le librerie "mozilla-nss" che, a quanto pare, nei precedenti sorgenti erano comprese ed ora non ci sono più.

La soluzione è stata scaricare lo slackbuild da slackbuilds.org  per la compilazione delle librerie mancanti; la versione proposta (3.12.4) va bene, una volta compilata ed installata, per continuare la compilazione di Chromium e la creazione del relativo pacchetto.

Ulteriori precisazioni

Le attualmente Chromium ha tre tipologie di versione che è bene chiarire; la versione che abbiamo sinora compilato è la versione di sviluppo, quella più "acerba" del prodotto, che, in quanto tale, potrebbe essere soggetta a bugs più o meno gravi. La stessa cosa può dirsi per la versione "17" del browser, marcata come "beta".

Al contrario la versione stabile è la 16: per essa c'è uno Slackbuild proprio sul repository di Slacky.eu, aggiornato il 7 di gennaio 2012. In caso di ricompilazione non c'è differenza tra 32 e 64 bit del sistema: lo script è in grado di identificare , in base al parametro "ARCH" che deve diventare "i686" in caso di sistema a 32 bit, il corretto ambiente di lavoro.

Aggiornamento del 27/02/2012

Ricompilare Chromium 19.0.1053

Come è facile notare dal numero della major release, le modifiche apportate al progetto potrebbero essere tante ed interessanti... Tuttavia la ricompilazione a partire dai sorgenti presenta alcuni errori. Primo errore: "/usr/bin/ld: unrecognized option '--threads'".

L'errore è generato dal programma /usr/bin/ld che, sostanzialmente, è un link simbolico a /usr/bin/ld.bfd; la soluzione consiste nel rimuovere il link simbolico e nel ricrearlo puntando alla versione "gold":

# rm /usr/bin/ld
# ln -s /usr/bin/ld.gold /usr/bin/ld

Secondo errore: ld "internal error in local_symbol" "object.h:1631". Anche in questo caso il problema è docuto alla versione di LD non aggiornata: prelevare i sorgenti e lo slackbuild delle binutils dalla versione current della slackware e ricompilarlo sulla versione 13.37

Terzo errore: "undefined reference to SEC_StringToOID". Per risolvere il problema ricompilare la libreria libnss_3.12.4 con la nuova versione di LD e reinstallarla.

Al termine della (lunga) compilazione, si avrà la nuova versione di Chromium perfettamente funzionante e, da una prima impressione, più veloce della precedente.

Aggiornamento del 30/03/2012

La compilazione della versione più recente del browser su Slackware si ferma ad un errore provocato dalla libreria SSL; il compilatore lamenta la mancanza della funzione SEC_OID_PKCS1_SHA224_WITH_RSA_ENCRYPTION.

Per risolvere il problema è sufficiente scaricare la patch che commenta nel sorgente l'uso di questa funzione ed applicarla prima della compilazione modificando lo slackbuild con il seguente rigo, aggiunto dopo la patch precedente (quella che disabilita PAM):

patch -p1 < $CWD/chromium_rsa_encryption_disable.patch

Lanciare la compilazione, che verrà portata a termine senza problemi... A proposito: la compilazione è stata eseguita conservando il link simbolico ad ld.gold, come spiegato nel precedente aggiornamento

Letture collegate sul nostro Circuito

Altro su Blog di Japigia.com:

Pacchetti con src2pkg: Creare pacchetti software con il tool src2pkg.

Pacchetti software: Installare software in Slackware: pacchetti di installazione.


Documento scritto e/o curato da Franco
Data pubblicazione: 29/10/2011 (15:33)
Ultimo aggiornamento: 05/12/2017 (15:27)


Condividi questo documento su Facebook...

 

I commenti a questo post

Lascia un commento o leggi quelli scritti dagli altri .

Linux
Il menu del Post:
usate firefox: il migliore
I più letti! novità
ContattaciPreferitiHome page RSS
Japigia di P.B. Arcano, Casarano (Lecce)
Realizzazione siti Internet, Portali, Grafica computerizzata.
E' vietato il plagio, anche parziale, dei contenuti del sito.
Per informazioni e suggerimenti: Contattateci!
Copyright by Japigia.com 2000/2012
Partita IVA 03471380752 - REA CCIAA Le/224124
*** Questo Sito Web NON utilizza Cookie ***