Chroot: come creare un ambiente a 32-bit su AMD 64
Mi è capitato pochi giorni fa di dover far fronte a questo problema: eseguire un software basato su perl 5.8.8 sparito ormai dalle più attuali distribuzioni ubuntu per essere precisi. La mia, che non è la ultimissima versione, la lucid, mette a disposizione il pacchetto perl 5.10.x.x, per ovviare avrei dovuto fare il downgrade del pacchetto perl, con tutti i problemi annessi e connessi. Per altro il SW è supportato solo su architetture a 32 bit, praticamente non avevo chance. Come fare a risolvere ? Semplice, creando un ambiente a 32 bit, attraverso il comando chroot. Vediamo come.
Dopo una breve ricerca, ho trovato che il pacchetto perl 5.8.8 è presente nella distro ubuntu hardy quindi ho battezzato quella versione come target del mio ambiente a 32 bit.
#1. Installare il pacchetto debootstrap il quale contiene una serie di script utili:
mulp@devme:~$ apt-get install debootstrap
Per saperne di più del comando vi rimando al seguente link
#2. Installare il pacchetto dchroot il quale contiene una serie di comandi utili alla creazione e all’accesso su diversi ambienti chroot:
mulp@devme:~$ apt-get install dchroot mulp@devme:~$ mkdir /devme/chroot
Posizionatevi quindi nel punto del file system in cui desiderate creare fisicamente l’ambiente.
#3. Editare il file /etc/dchroot.conf e aggiungere la seguente riga:
hardy_i386 /devme/chroot/hardy_i386
Assicuratevi che il percorso sia corretto.
#4. Ci siamo. Siamo pronti a creare il nuovo ambiente. Eseguire il seguente comando:
mulp@devme:~$ debootstrap --variant=buildd --arch i386 hardy /devme/chroot/hardy_i386 http://archive.ubuntu.com/ubuntu/
Al termine dell’esecuzione avrete il nuovo sistema installato. Per ulteriori dettagli sul comando debootstrap vi rimando al man di sistema, aggiungo solo che il parametro variant indica il tipo di sistema che si vuol creare, in questo buildd. Il nuovo sistema creato avrà installati i pacchetti base-system.
#5. Procediamo ora alla configurazione del nuovo sistema. Eseguire i seguenti comandi:
mulp@devme:~$ cp /etc/resolv.conf /devme/chroot/hardy_i386/etc/resolv.conf mulp@devme:~$ cp /etc/apt/sources.list /devme/chroot/hardy_i386/etc/apt/ mulp@devme:~$ chroot /devme/chroot/hardy_i386/ mulp@devme:~$ apt-get update mulp@devme:~$ apt-get install gnupg locales dialog mulp@devme:~$ apt-get update mulp@devme:~$ locale-gen it_IT.UTF-8 mulp@devme:~$ tzconfig mulp@devme:~$ exit
In sostanza si ereditano alcune configurazioni dell’ambiente principale all’interno di quello appena creato. Il primo comando consente di poter navigare dal nuovo ambiente e il secondo mette a disposizione le source list di apt affinché sia possibile aggiornarlo. Vengono installi alcuni comandi fondamentali e impostato il locale corretto. Ricordatevi di modificare il file sources.list se la distro del vostro sistema differisce dall’ambiente creato.
#6. A questo punto per accedere all’ambiente appena creato si utilizza il comando dchroot -d oppure dchroot -d- c hardy_i386 se avete a disposizione più ambienti. Vi accorgerete che il comando di cui sopra richiedono i diritti da superutente. Affinchè sia possibile accedere da utente normale, è necessario copiare alcuni file di configurazione dall’ambiente centrale in quello appena creato:
mulp@devme:~$ cp /etc/passwd /devme/chroot/hardy_i386/etc/ mulp@devme:~$ sed 's/\([^:]*\):[^:]*:/\1:*:/' /etc/shadow | tee /devme/chroot/hardy_i386/etc/shadow mulp@devme:~$ cp /etc/group /devme/chroot/hardy_i386/etc/ mulp@devme:~$ cp /etc/hosts /devme/chroot/hardy_i386/etc/
Il comando sed rimuove le password criptate dal file shadow. Dal momento che stiamo facendo login in un’ambiente chroot non sono necessarie. In questo modo evitiamo anche di duplicare il file delle password su due ambienti diversi.
#7. Se si vuole poter eseguire il comando sudo è necessario copiare i seguenti file:
mulp@devme:~$ cp /etc/sudoers /devme/chroot/hardy_i386/etc/ mulp@devme:~$ chroot /devme/chroot/hardy_i386 mulp@devme:~$ dpkg-reconfigure passwd mulp@devme:~$ passwd <username> mulp@devme:~$ apt-get install sudo
E infine aggiungere la seguente riga nel file /etc/sudoers nell’ambiente chroot.
# Members of the admin group may gain root privileges %mulp ALL=(ALL) ALL
#8. Procediamo con il mapping di alcune directory che sono utili all’interno dell’ambiente chroot. Editare il file /etc/fstab e aggiungere le seguenti righe:
/home /devme/chroot/hardy_i386/home none bind 0 0 /tmp /devme/chroot/hardy_i386/tmp none bind 0 0 /media/cdrom /devme/chroot/hardy_i386/media/cdrom none bind 0 0 /dev /devme/chroot/hardy_i386/dev none bind 0 0 proc-chroot /devme/chroot/hardy_i386/proc proc defaults 0 0 devpts-chroot /devme/chroot/hardy_i386/dev/pts devpts defaults 0 0
Assicuratevi di effettuare la modifica sul file /etc/fstab dell’ambiente principale e che esistano tutti i mount point. Quindi eseguire il comando:
mulp@devme:~$ mount -a
#9. Infine, se volete che di fianco nel prompt appaia l’indicazione dell’ambiente chroot editate il file /devme/chroot/hardy_i386/etc/debian_chroot e aggiungete la seguente riga:
hardy_i386
Se il file non esiste createlo.
Stay tuned!
