Repository 32bit  Forum
Repository 64bit  Wiki

SlackBuilds per Slamd64

Da Slacky.eu.
Versione delle 16:14, 3 gen 2009, autore: 414n (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)


Indice

Introduzione

In seguito alla richiesta di Super_Ale46 in questo thread del forum, eccomi qui a scrivere una breve guida per trasformare uno SlackBuild in uno "SlamdBuild". Per una breve introduzione alla stesura di uno SlackBuild, rimando all'ottima pagina wiki su SlackBuilds.org.

Requisiti

uno script SlackBuild da sacrificare alla scienza ;) 
Potete trovare un template di SlackBuild su SlackBuilds a questa pagina. Questo è uno script generico non riferito a nessuna applicazione in particolare, quindi perfetto per capire cosa serve modificare.
una Slamd64 
Per testare i propri SlackBuilds modificati e verificare che funzionino.

Da SlackBuild a SlamdBuild

Impostazione della variabile ARCH

La prima modifica da effettuare riguarda la scelta dell'architettura per la quale compilare il pacchetto. Solitamente, in uno SlackBuild si ha:

ARCH=${ARCH:-i486}

Per i meno esperti di shell scripting, la riga precedente non fa altro che assegnare alla variabile ARCH il suo stesso valore ($ARCH) se essa è già definita come variabile d'ambiente prima dell'esecuzione dello script, altrimenti il valore "i486" se non è già definita nell'ambiente. Per produrre un pacchetto a 64 bit su una Slamd64, le strade sono quindi due:

  • Impostare ARCH al valore desiderato (nel nostro caso a "x86_64") come variabile d'ambiente prima di eseguire lo script:
export ARCH=x86_64
./script.SlackBuild

oppure inline:

ARCH=x86_64 ./script.SlackBuild
  • Modificare lo SlackBuild e sostituire a i486 la stringa x86_64, in modo che sia:
ARCH=${ARCH:-x86_64}

Ora bisogna impostare i CFLAGS corretti.

Impostazione CFLAGS

Prendendo spunto dal template riportato poc'anzi, la sezione riguardante l'impostazione dei CFLAGS è la seguente:

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
fi

Sostanzialmente è una sezione all'interno della quale si verifica quale ARCH si sia scelta e, in base a questo, si impostano i CFLAGS per la compilazione (SLKCFLAGS). Nel caso in esame, è già presente un blocco riguardante il caso di ARCH = x86_64, con i CFLAGS corretti (-O2 -fPIC). Nel caso non fosse presente andrebbe aggiunto. Prima di procedere alla compilazione, spendiamo due parole sulla cartella delle librerie.

Impostazione libdir

Sulla Slamd64 le librerie a 64 bit sono tutte nelle cartelle /lib64, /usr/lib64, /usr/local/lib64, mentre quelle a 32 bit in /lib, /usr/lib, /usr/local/lib. Questa scelta è stata fatta per permettere l'uso di pacchetti Slackware (quindi a 32 bit) su Slamd64 senza pericolo di sovrascrivere con versioni a 32 bit (di Slackware) librerie a 64 bit (di Slamd64). Tuttavia, spesso gli script di configure non si preoccupano di impostare le destinazioni corrette delle librerie che si stanno per compilare. Questo può portare ad avere all'interno del pacchetto che si sta per creare librerie a 64 bit all'interno di usr/lib, le quali finiranno, una volta installato il pacchetto, in /usr/lib. Per questo motivo, per ora specifichiamo una variabile aggiuntiva, LIBDIRSUFFIX, che imposteremo a 64 se desideriamo che le librerie a 64 bit siano piazzate in un percorso di libreria con suffisso 64, altrimenti a "" per mantenere il percorso senza suffissi. Per fare quanto detto, modifichiamo il blocco precedentemente analizzato riguardante i CFLAGS in questo modo:

LIBDIRSUFFIX=""
if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX=64
fi

In questo modo, se ARCH è x86_64, oltre a impostare i CFLAGS ai valori voluti si imposterà anche LIBDIRSUFFIX, usata nel configure.

configure

Attingengo nuovamente dal template di SlackBuild, la sezione rigurdante il configure è la seguente:

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --sysconfdir=/etc \
  --localstatedir=/var \
  --mandir=/usr/man

Per posizionare le librerie a 64 bit nel giusto percorso, è necessario aggiungere un'opzione:

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --libdir=/usr/lib"$LIBDIRSUFFIX" \
  --sysconfdir=/etc \
  --localstatedir=/var \
  --mandir=/usr/man

In questo modo, se l'ARCH scelta è diversa da x86_64, le librerie continueranno ad essere messe in /usr/lib (dato che LIBDIRSUFFIX=""), mentre se ARCH=x86_64, le librerie saranno messe in /usr/lib64, come voluto.

Conclusioni

Le modifiche elencate in questa mini-guida dovrebbero permettere di creare SlackBuilds Slamd64-compliant senza particolari sforzi. Ovviamente alcuni software necessiteranno di altre accortezze oltre a quelle riportate, ma quanto scritto è valido per la maggior parte di programmi. Per eventuali commenti, fiondatevi qua.

414n

Strumenti personali
Namespace

Varianti