Certamente saprete che esiste un gran varietà di soluzioni (VirtualBox, VMware, Boxes, etc) per installare ed eseguire una o più macchine virtuali all'interno del nostro sistema GNU/Linux.
Tutte però hanno gli svantaggi di essere avide di risorse e di offrire delle prestazioni per i i sistemi guest spesso tutt'altro che esaltanti.
In questo articolo vi illustrerò un metodo alternativo alla virtualizzazione "classica" che non fa ricorso a nessuno dei software citati sopra: installeremo il sistema guest non su un disco virtuale ma in una "chroot", ossia in una normalissima directory del nostro filesystem che all'occorrenza diventerà la root del nostro sistema virtuale.
I vantaggi più evidenti:
- sistema guest immediatamente disponibile, senza alcun tempo di caricamento aggiuntivo.
- prestazioni del guest pari a quelle dell'host.
- possibilità di eseguire all'interno del desktop del sistema host un applicativo del sistema guest, senza dover avviare un'ulteriore sessione grafica.
Vediamo ora come realizzare praticamente tutto questo installando, a titolo di esempio, Archlinux (guest) su una macchina Fedora (host).
L'uso dei termini "host" e "guest" vi risulterà forse un po' inappropriato, non trattandosi questa di una vera e propria virtualizzazione, ma spero comunque che me lo concederete, un po' per comodità e un po' per la mancanza di vocaboli più consoni. :-)
Iniziamo con il prelevare l'ultima iso di Archlinux disponibile sul sito ufficiale (alla data in cui scrivo archlinux-2013.09.01-dual.iso)
Terminato il download, montiamo l'immagine in una directory di nostra scelta, ad esempio:
all'interno della iso montata.
32 bit:
Iniziamo con il prelevare l'ultima iso di Archlinux disponibile sul sito ufficiale (alla data in cui scrivo archlinux-2013.09.01-dual.iso)
Terminato il download, montiamo l'immagine in una directory di nostra scelta, ad esempio:
# mount archlinux-2013.09.01-dual.iso -o loop /mnt/img/In base alla versione di Archlinux che desideriamo installare ci sposteremo nella directory i686 o x86_64
all'interno della iso montata.
32 bit:
$ cd /mnt/img/arch/i686/64 bit:
$ cd /mnt/img/arch/x86_64/
Nelle directory troviamo un file root-image.fs.sfs, compresso con squashfs, che contiene l'immagine di una installazione Archlinux.
Scompattiamo il file in una directory a nostro piacere, ad esempio:
Scompattiamo il file in una directory a nostro piacere, ad esempio:
# unsquashfs -d /squashfs root-image.fs.sfs
(Nota: la destinazione, indicata con l'opzione -d, non deve essere già presente nel filesystem, altrimenti il comando fallirà)
Montiamo ora l'immagine presente nella directory appena creata:
Il nostro lavoro tuttavia non è ancora finito, per rendere pienamente utilizzabile il sistema guest dovremo dedicarci ancora un po' alla sua configurazione.
Innanzitutto dovremo creare un utente con lo stesso id del nostro utente Fedora; questo ci servirà per eseguire correttamente applicazione grafiche e pulseaudio nella chroot.
Con tutta probabilità l'id dell'utente Fedora è 1000 (come da impostazione predefinita); verifichiamolo eseguendo in un nuovo terminale:
Rimuoviamo quindi l'utente arch:
Iniziamo con il mettere a punto pacman, il package manager di Archlinux.
Possiamo a questo punto installare nuovi pacchetti e personalizzare l'installazione a nostro piacimento.
Proviamo infine ad eseguire un applicazione grafica; switchate all'utente creato in precedenza ("simone" nel nostro esempio)
Concludo l'articolo ricordando che per uscire in ogni momento dalla chroot basta digitare "exit" nel terminale.
Lo script che abbiamo visto in precedenza (start_chroot.sh) va lanciato unicamente al primo accesso alla chroot dopo il boot della macchina; i montaggi eseguiti dallo script restano infatti sempre attivi fino allo spegnimento. Per tutti i successivi utilizzi della chroot basterá dare:
Se desiderate uno script più completo che sia anche in grado di smontare le directory condivise una volta terminato di lavorare nella chroot, potete utilizzare questo (realizzato modificando quello presente in questa pagina del wiki di Archlinux)
Montiamo ora l'immagine presente nella directory appena creata:
# mount /squashfs/root-image.fs -o loop /mnt/arch/Se diamo un:
$ ls /mnt/arch/possiamo verificare la presenza della struttura classica delle directory di un sistema GNU/Linux.
bin dev home lost+found opt root sbin sys usrSiamo pronti per completare l'installazione di Archlinux all'interno della nostra Fedora:
boot etc lib mnt proc run srv tmp var
# mkdir /arch
# cp -a /mnt/arch/* /arch/
Prima di "avviare" Archlinux smontiamo le immagini e rimuoviamo tutto ciò che non ci serve più:
# rm -rf /squashfs/Verifichiamo ora di avere svolto tutto correttamente; avviamo la chroot:
# umount /mnt/img
# umonut /mnt/arch
# chroot /arch/Proviamo a dare qualche comando esclusivo di Archlinux come:
# pacman -Qo semplicemente un:
# cat /etc/issueche ci restituirà:
Arch Linux \r (\l)Non c'è dubbio, stiamo ora utilizzando Archlinux!! :-)
Il nostro lavoro tuttavia non è ancora finito, per rendere pienamente utilizzabile il sistema guest dovremo dedicarci ancora un po' alla sua configurazione.
Innanzitutto dovremo creare un utente con lo stesso id del nostro utente Fedora; questo ci servirà per eseguire correttamente applicazione grafiche e pulseaudio nella chroot.
Con tutta probabilità l'id dell'utente Fedora è 1000 (come da impostazione predefinita); verifichiamolo eseguendo in un nuovo terminale:
$ id -uNella chroot esiste già un utente con id 1000 (utente arch), ragion per cui dovremo innanzitutto eliminarlo prima di poter procedere alla creazione di un nuovo utente con questo id.
Rimuoviamo quindi l'utente arch:
# userdel archCreiamo ora un nuovo utente con lo stesso nome e lo stesso id dell'utente Fedora; ipotizzando di avere l'utente simone con id 1000 diamo:
# rm -r /home/arch/
# useradd -M -u 1000 -U simonee assegniamo la password all'utente simone con:
# passwd simoneAnche l'utente root non ha ancora alcuna password, rimediamo con:
# passwdUsciamo temporaneamente dalla chroot semplicemente dando:
# exitPer rientrare in Archlinux non useremo più semplicemente il comando chroot come abbiamo fatto in precedenza, ma lanceremo questo script:
#/bin/sh
mount -t proc none /arch/proc
mount -t sysfs none /arch/sys
mount -o bind /dev /arch/dev
mount -o bind /dev/pts /arch/dev/pts
mount -o bind /var/run /arch/var/run
mount -o bind /var/lib/dbus /arch/var/lib/dbus
mount -o bind /tmp /arch/tmp
mount -o bind /home /arch/home
mount -o bind /dev/shm /arch/dev/shm
cp -Lf /etc/resolv.conf /arch/etc
chroot /arch
Questo è necessario per passare al sistema guest fondamentali informazioni circa l'hardware della nostra macchina, le partizioni, ecc., senza le quali nessun os Linux potrebbe funzionare correttamente.
In particolare l'opzione bind di mount serve in pratica proprio a condividere determinati mountpoint tra host e guest.
Salviamo lo script dandogli come nome start_chroot.sh dopodiché lanciamolo, sempre da root:
# start_chroot.shRientrati nella chroot, dovremmo essere ora in grado di sfruttare finalmente appieno la nostra Archlinux!
Iniziamo con il mettere a punto pacman, il package manager di Archlinux.
# pacman-key --initProviamo quindi a lanciare un aggiornamento di sistema con:
# pacman-key --populate archlinux
# pacman -SyuL'operazione dovrebbe andare a buon fine, segno che il package manager di Archlinux funziona a dovere.
Possiamo a questo punto installare nuovi pacchetti e personalizzare l'installazione a nostro piacimento.
Proviamo infine ad eseguire un applicazione grafica; switchate all'utente creato in precedenza ("simone" nel nostro esempio)
# su simoneCome test eseguiamo magari un gioco o riproduciamo semplicemente un stream video da YouTube così da verificare che anche l'audio nella chroot funzioni a dovere.
Concludo l'articolo ricordando che per uscire in ogni momento dalla chroot basta digitare "exit" nel terminale.
Lo script che abbiamo visto in precedenza (start_chroot.sh) va lanciato unicamente al primo accesso alla chroot dopo il boot della macchina; i montaggi eseguiti dallo script restano infatti sempre attivi fino allo spegnimento. Per tutti i successivi utilizzi della chroot basterá dare:
# chroot /arch/EDIT:
Se desiderate uno script più completo che sia anche in grado di smontare le directory condivise una volta terminato di lavorare nella chroot, potete utilizzare questo (realizzato modificando quello presente in questa pagina del wiki di Archlinux)
#!/bin/bash
MOUNTPOINT=/arch
PIDFILE=/run/arch_chroot
case $1 in
start)
mount -t proc none $MOUNTPOINT/proc
mount -t sysfs none $MOUNTPOINT/sys
dirs=(/dev /dev/pts /dev/shm /var/run /var/lib/dbus /tmp /home )
for d in "${dirs[@]}"; do
mount -o bind $d $MOUNTPOINT$d
done
cp -Lf /etc/resolv.conf /arch/etc
touch $PIDFILE
;;
stop)
dirs=(/dev/pts /dev/shm /dev /var/run /var/lib/dbus /tmp /home)
umount $MOUNTPOINT/{sys,proc}
for d in "${dirs[@]}"; do
umount -l "$MOUNTPOINT$d"
done
rm -f $PIDFILE
;;
*)
echo "usage: $0 (start|stop)"
exit 1
esac
Salviamo lo script con il nome arch_chroot, quindi per inizializzare la chroot daremo:
# arch_chroot start
Poi per entrare in Archlinux eseguiremo il solito
# chroot /arch
Una volta usciti dalla chroot con
# exit
Potremo smontare i mounpoint condivisi tra host e guest con:
# arch_chroot stop
Ciao, grazie per la guida, come mai quando tento di scompattare il file x86_64 mi dice: "bash: unsquash: comando non trovato..."?
RispondiEliminaSono su Fedora 20.
Ciao e grazie di nuovo.
Il comando esatto è "unsquashfs", se non è presente sulla tua macchina installa il pacchetto "squashfs-tools". Ciao e grazie
EliminaInfatti, mancava proprio quel pacchetto, poi hai invertito l'ordine di smontaggio che dovrebbe essere:
Elimina# rm -rf /squashfs/
# umonut /mnt/arch
# umount /mnt/img
Ma si può installare ed avviare un DE?
Sí, l'esecuzione di un DE all'interno della chroot dovrebbe funzionare ... io al momento ho provato solo con fluxbox e ti posso dire che parte regolarmente. Imposta il de o wm che vuoi utilizzare nel file .xinitrc e poi avvialo con: "startx -- :1"
Elimina