RIGUARDO LA TRADUZIONE
Quest'articolo è una traduzione dell'originale scritto da Eric "AlienBob" Hameleers e presente a questo indirizzo:
http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:multilib#running_32-bit_programs tutti i riconoscimenti vanno ad AlienBob e alle fonti da lui citate più in basso nell'articolo. Il traduttore non è in alcun modo responsabile di ciò
che viene detto in quest'articolo se non per la parte relativa agli errori di traduzione.
Quest'articolo contiene le istruzioni su come creare una Slackware64 multilib vera e propria. Un sistema linux multilib a 64bit è capace di far girare software a 32 come a 64 bit. il Filesystem Hierarchy Standard definisce il modo migliore per ottenere una separazione pulita tra software a 32bit e a 64bit su un unico sistema. Con Slackware64 abbiamo scelto di adottare questo standard, il sistema quindi è stato preparato per cercare le librerie a 64bit in /lib64 e /usr/lib64, di conseguenza la chiamiamo Slackware64 "multilib-ready" (pronta per il multilib ndt.). Nonostante le librerie a 32bit saranno cercate in /lib e /usr/lib, Slackware64 non viene distribuita con software a 32bit. C'è un passaggio supplementare da seguire prima di poterla chiamare Slackware64 "multilib-enabled" (abilitata per il multilib ndt.).
Per ottenere ciò:
NOTA
Slackware per l'architettura x86_64 (abbreviato "Slackware64") è un Sistema Operativo puro a 64-bit, ma è facilmente aggiornabile al multilib.
Appena installata, Slackware64 offre la possibilità di compilare ed eseguire solo binari a 64bit.
Slackware64 ha un vantaggio rispetto ai fork a "64bit" che esistono la fuori. Questi fork aggiungono lo strato di compatibilità ai 32bit ricompilando molti dei loro pacchetti come binari a 32bit. Slackware invece, è una distribuzione che consiste di una versione a 32bit e una a 64bit che vengono sviluppate in parallelo. Questo significa che non si devono ricompilare dei pacchetti a 32bit da zero per aggiungere la capacità multilib ad un sistema a 64bit. Basta semplicemente prenderli dal ramo a 32bit di Slackware. Questa è una delle ragioni per cui non distribuiamo i pacchetti multilib con Slackware64, ci siamo limitati a creare i prerequisiti lasciando all'utente la possibilità nel caso in cui necessiti il multilib. Più in basso spiegherò come prendere un pacchetto Slackware a 32bit (ad esempio il pacchetto "mesa") e ripacchettizzare il suo contenuto in un pacchetto "mesa-compat32" che si possa installare direttamente in un sistema Slackware64.
Ecco alcuni esempi di programmi che richiedono il supporto multilib su un sistema Slackware a 64bit perchè altrimenti non sarà possibile avviarli o compilarli su una Slackware64 senza lo strato di compatibilità a 32bit:
Fortunatamente il supporto ai 64bit sta diventando sempre più comune. L'anno scorso Adobe ha rilasciato il suo famoso plugin Flash per i browser web in versione 64bit, e Sun ha rivelato la versione a 64bit del suo plugin Java per i browser. Questa è stata una delle motivazioni per iniziare a lavorare a Slackware64.
Si può scaricare un set di pacchetti e script abilitati al multilib dal sito web di AlienBob: http://slackware.com/~alien/multilib/ .
Questi pacchetti sono accompagnati dai sorgenti e dagli script SlackBuild, oltre a vari README (questa pagina wiki è basata su uno di questi README). Tutto ciò che è necessario scaricare si trova nelle directory <slackware_numero_di_release> all'interno della directory principale. Il resto è reso disponibile per scopi educazionali.
Questa sezione contiene le istruzioni essenziali per aggiungere le piene capacità multilib al vostro sistema Slackware. Se volete capire il procedimento con maggiori dettagli, o vi servono informazioni su come compilare software a 32bit su Slackware64, continuate a leggere la sezione seguente.
upgradepkg --reinstall --install-new *.t?z
nella directory dove sono stati scaricati.
Questo comando installerà inoltre un pacchetto addizionale chiamato "compat32-tools".
mkdir compat32 ; cd compat32
massconvert32.sh -i /home/ftp/pub/slackware/slackware-13.0/slackware/
installpkg *-compat32/*.t?z
ATTENZIONE
Se si usa un package manager come slackpkg si dovranno aggiungere i nomi di tutti i pacchetti glibc e gcc alla sua blacklist.
Se non si prenderà questa precauzione, si corre il rischio che il package manager accidentalmente rimpiazzi i pacchetti multilib con quelli
originali di Slackware64!
CONSIGLIO
Se si sta usando Slackware 13.1 e si è scaricato il pacchetto compat32-tools per questa versione, lo script massconvert32.sh accetta
anche il parametro "-u" che serve a specificare l'URL di un webserver remoto come sorgente dei pacchetti Slackware a 32bit invece di usare
un mirror locale o un DVD:massconvert32.sh -u http://someserver.org/path/to/slackware-13.0
I seguenti pacchetti di glibc/gcc sono sostituti, non aggiunte ai pacchetti standard di Slackware. Occorrerà usare il programma "upgradepkg" per aggiornare alle versioni multilib di gcc e glibc. Vi serviranno questi pacchetti per poter avviare (glibc) e compilare (gcc) software a 32bit sul vostro sistema Slackware a 64bit (Le versioni dei pacchetti riportati qui sotto sono per Slackware 13.0):
C'è inoltre un pacchetto addizionale che si installa usando il programma "installpkg":
NOTA
Slamd64 aveva pacchetti separati per gcc/glibc multilib.
In ogni caso, io ritengo che sia più corretto mantenere questi pacchetti multilib essenziali uniti. Ho seguito il concetto già in uso
nella versione di binutils per Slackware64, che ha la capacità multilib 64bit e 32bit in un singolo pacchetto.
L'aggiornamento di glibc e gcc che ho descritto nella sezione precedente cambia il vostro sistema da "multilib-ready" a "multilib-enabled".
Ora, tutto quello che serve è installare la versione a 32bit del software di sistema di Slackware così che i futuri programmi a 32bit che si andranno ad installare e/o compilare troveranno tutte le librerie che gli necessitano per funzionare.
La procedura non consiste semplicemente nel prendere i pacchetti a 32bit di Slackware e installarli in Slackware64:
Un po' di cura in più è necessaria affinchè files non necessari vengano tolti dai pacchetti a 32bit prima di installarli. Quello che ci serve, è un pacchetto a 32bit che non faccia conflitto con nient'altro presente nella Slackware a 64bit. Da qui il nome "pacchetto di compatibilità a 32bit".
Ho deciso che sarebbe stato uno spreco di banda se avessi creato io stesso le versioni di compatibilità dei pacchetti a 32bit. Dopo tutto, avrete probabilmente acquistato il DVD di Slackware 13.0, quindi sarete già in possesso sia della Slackware a 64bit che di quella a 32bit... oppure, l'albero delle directory di Slackware a 32bit è disponibile gratis per il download ovviamente ;-)
Invece, ho scritto alcuni script (parte del codice degli script è stato scritto da Fred Emmot di Slamd64) e li ho racchiusi nel pacchetto "compat32-tools". La loro utilità è di permettervi di estrarre il contenuto dai vari pacchetti Slackware a 32bit e di usarlo per creare un nuovo pacchetto che si possa tranquillamente installare nella vostra Slackware64.
Il pacchetto "compat32-tools" necessita di alcune spiegazioni.
Si legga il README dettagliato nella directory /usr/doc/compat32-tools-*/, vi aiuterà molto. Ci sono tre utili script che saranno installati dal pacchetto:
convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz
massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32
installpkg ~/compat32/*/*.t?z
upgradepkg --install-new ~/compat32/*/*.t?z
IMPORTANTE
Installando i pacchetti compat32 si noteranno degli errori riguardanti alcuni files mancanti in /etc. Questo comportamento è voluto,
e questi errori possono essere ignorati. Questi messaggi sono causati dal fatto che i files in /etc sono rimossi dai pacchetti "-compat32" durante
la conversione (ad eccezione dei pacchetti pango e gtk+2). Suppongo che i files in /etc siano già stati installati dai pacchetti originali a 64bit.
Un esempio di questi "errori" per il pacchetto cups-compat32:Executing install script for cups-compat32-1.3.11-x86_64-1.txz. install/doinst.sh: line 5: [: too many arguments cat: etc/cups/interfaces: Is a directory cat: etc/cups/ppd: Is a directory cat: etc/cups/ssl: Is a directory cat: etc/cups/*.new: No such file or directory cat: etc/dbus-1/system.d/cups.conf.new: No such file or directory chmod: cannot access `etc/rc.d/rc.cups.new': No such file or directory cat: etc/rc.d/rc.cups.new: No such file or directory Package cups-compat32-1.3.11-x86_64-1.txz installed.
IMPORTANTE
Se si sta considerando di usare lo script convertpkg-compat32 per convertire un pacchetto **non-Slackware** in un pacchetto -compat32,
devo sconsigliarlo fortemente. Lo script è stato redatto con un solo scopo, quello di rendere la versione a 32bit dei binari ufficiali di Slackware64
disponibili in un setup multilib. Di conseguenza lo script rimuoverà gran parte di ciò che è presente nei pacchetti a 32bit originali, tutta roba
che si suppone sia già stata installata come parte dei pacchetti a 64bit.
Nella quasi totalità dei casi in cui abbiate scaricato un pacchetto non-Slackware a 32bit, e vogliate farlo funzionare su Slackware64, il modo migliore
è trovare i sorgenti e costruire una versione a 64bit del pacchetto stesso.
In alternativa, potete installare direttamente il pacchetto originale a 32bit invece di provare a convertirlo, e una volta lanciato
dalla riga di comando sarà possibile trovare tutte le librerie mancanti da estrarre poi dai pacchetti ufficiali di Slackware.
Avviare un programma precompilato a 32bit è facile dopo che avrete preparato il sistema. Basterà scaricarlo, installarlo e lanciarlo!
Può succedere che si incorra in un programma che richiede una certa libreria Slackware a 32bit che ancora non è installata. In quel caso, basterà trovare a quale pacchetto Slackware a 32bit appartiene la libreria mancante. Basterà usare poi lo script convertpkg-compat32 per convertire il pacchetto originale Slackware a 32bit e installare il risultante pacchetto di compatibilità su Slackware64.
In caso sia necessario compilare dei programmi a 32bit (wine e grub sono 2 esempi di programmi open source presenti solo a 32bit) bisognerà prima configurare l'ambiente shell lanciando il comando
. /etc/profile.d/32dev.sh
Da notare il 'punto' prima del nome del file che fa parte integrante del comando! Lanciando questo comando cambieranno o saranno create diverse variabili d'ambiente. L'effetto di quest'azione sarà che saranno preferite le versioni a 32bit dei binari rispetto ai 64bit in fase di compilazione del codice sorgente, infatti si eseguirà una compilazione a 32bit. L'effetto durerà fino al successivo logout dalla shell.
In questo ambiente modificato, sarete in grado di usare gli SlackBuilds standard per creare pacchetti a 32bit per Slackware64. Ci sono 2 cose da tenere a mente:
LIBDIRSUFFIX="64"
LIBDIRSUFFIX=""
Dopo aver installato i pacchetti "-compat32", potrebbe essere necessario reinstallare i driver binari Nvidia o Ati' di X.Org. Questi pacchetti di driver contengono sia le librerie a 32bit che a 64bit per essere utili al massimo in un Sistema Operativo multilib a 64bit. Se si sono installati i files dei driver per entrambe le architetture, il pacchetto "mesa-compat32" sovrascriverà alcuni files di librerie a 32bit.
D'altro canto, se originariamente si è istallato solo i driver a 64bit per la vostra scheda video Nvidia/Ati, si raccomanda, dopo l'installazione dei pacchetti multilib, di procedere nuvoamente all'installazione dei driver binari e questa volta, scegliendo di installare anche i files per i driver a 32bit.
Le applicazioni grafiche a 32bit che si andranno a lanciare nel vostro sistema multilib richiedono queste librerie dei driver a 32bit. Crash sono possibili se si sbaglierà nell'installare i files corretti.
Questa è una lista di pacchetti convertiti nella versione "-compat32" dallo script massconvert32.sh. Da notare che alcuni di questi pacchetti non sono parte di Slackware 13.0. Sono stati aggiunti in Slackware 13.1 e quindi produrranno un messaggio "*** FAIL: package 'package_name' was not found!" una volta lanciato lo script. Non c'è da preoccuparsi di ciò.
# La serie A/: bzip2 cups cxxlibs dbus e2fsprogs openssl-solibs util-linux-ng
# La serie AP/: mpg123 mysql
# La serie D/: libtool
# La serie L/: alsa-lib alsa-oss atk audiofile cairo dbus-glib esound expat freetype gamin glib2 gtk+2 hal jasper lcms libart_lgpl libexif libgphoto2 libjpeg libidn libmng libpng libtermcap libtiff libv4l libxml2 libxslt ncurses pango popt qt readline sdl seamonkey-solibs svgalib zlib
# La serie N/: curl cyrus-sasl gnutls libgcrypt libgpg-error openldap-client openssl
# La serie X/: fontconfig glew libFS libICE libSM libX11 libXScrnSaver libXTrap libXau libXaw libXcomposite libXcursor libXdamage libXdmcp libXevie libXext libXfixes libXfont libXfontcache libXft libXi libXinerama libXmu libXp libXpm libXprintUtil libXrandr libXrender libXres libXt libXtst libXv libXvMC libXxf86dga libXxf86misc libXxf86vm libdmx libdrm libfontenc liblbxutil libxcb mesa pixman
Buon divertimento!
Eric
Autore: Danix