Chroot
Chroot (Change root) è un'utilità dei sistemi Unix utilizzata per cambiare la root directory apparente, in modo da creare un nuovo ambiente logicamente separato dalla root del sistema principale. Questo nuovo ambiente è detto "gabbia chroot" (o "chroot jail"). Un utente che opera all'interno di una gabbia non può vedere o accedere a file al di fuori dell'ambiente in cui è stato rinchiuso.
Uno dei principali usi di chroot è quello di creare un sistema Linux separato sopra quello corrente a scopo di test o compatibilità software. Chroot è spesso visto come un'alternativa leggera alla virtualizzazione, perché è in grado di funzionare senza il sovraccarico di un hypervisor.
Prerequisiti
Impostare l'ambiente
Quando si crea una nuova impostazione di chroot, la prima cosa necessaria è una directory nella quale far risiedere il chroot. Ad esempio, un chroot potrebbe essere creato in /mnt/mychroot:
user $
mkdir /mnt/mychroot
user $
cd /mnt/mychroot
Per montare una installazione esistente da una partizione può essere eseguito il seguente comando. Assicurarsi di sostituire la stringa <DEVICE>
nell'esempio sotto con
l'unità e la partizione dell'installazione esistente:
user $
mkdir /mnt/mychroot
user $
mount /dev/<DEVICE> /mnt/mychroot
Se un'installazione è stata in precedenza creata in una sotto directory del filesystem di root attuale, i passaggi di cui sopra possono essere saltati.
Decomprimere i file di sistema e dell'albero Portage (nuove installazioni)
Quando si costruisce una nuova installazione, il passo successivo è quello di scaricare lo stage3 e Portage tarballs e metterli nella posizione in cui risiede chroot. Per ulteriori informazioni su questo processo si vedano le sezioni Scaricamento dello stage tarball e Estrazione dello stage tarball nel manuale di Gentoo.
root #
links http://distfiles.gentoo.org/releases/amd64/autobuilds/
root #
tar xvjpf stage3-*.tar.bz2 -C /mnt/mychroot
Configurazione
Prima di accedere all'ambiente chroot devono essere montate delle directory:
root #
mount --rbind /dev /mnt/mychroot/dev
root #
mount --make-rslave /mnt/mychroot/dev
root #
mount -t proc /proc /mnt/mychroot/proc
root #
mount --rbind /sys /mnt/mychroot/sys
root #
mount --make-rslave /mnt/mychroot/sys
root #
mount --rbind /tmp /mnt/mychroot/tmp
Qualche file di configurazione di base dovrà essere copiato dall'host, ma non si deve copiare make.conf quando si utilizza un'installazione esistente:
user $
cp /etc/portage/make.conf /mnt/mychroot/etc/portage # Quando si utilizza un'installazione preesistente, saltare questo comando.
user $
cp /etc/resolv.conf /mnt/mychroot/etc
Utilizzo
Una volta fatto entrare nell'ambiente chroot eseguendo i seguenti comandi:
root #
chroot /mnt/mychroot /bin/bash
root #
env-update && . /etc/profile
root #
export PS1="(chroot) $PS1"
Durante la creazione di una nuova installazione, è opportuno sincronizzare Portage per assicurarsi che tutto sia aggiornato.
(chroot) root #
emerge-webrsync
(chroot) root #
emerge --sync
Il sistema è ora pronto; sentitevi liberi di installare il software, modificare le impostazioni, testare pacchetti sperimentali e configurare senza avere alcun effetto sul sistema principale. Per lasciare il chroot è sufficiente digitare exit o premere Ctrl+d. In questo modo si tornerà nella console dell'ambiente normale. Non dimenticate di smontare (umount) le directory che sono state montate.
Script di init
Se impostare chroot è un lavoro che è necessario eseguire spesso, è possibile accelerare il montaggio delle directory utilizzando uno script init. Lo script dovrebbe essere aggiunto al livello di esecuzione predefinito (default runlevel) e comunque impostato per l'esecuzione automatica all'avvio del sistema:
/etc/init.d/mychroot
#!/sbin/openrc-run
depend() {
need localmount
need bootmisc
}
start() {
ebegin "Mounting chroot directories"
mount -o rbind /dev /mnt/mychroot/dev > /dev/null &
mount -t proc none /mnt/mychroot/proc > /dev/null &
mount -o bind /sys /mnt/mychroot/sys > /dev/null &
mount -o bind /tmp /mnt/mychroot/tmp > /dev/null &
eend $? "Si è verificato un errore durante il montaggio delle directory dell'ambiente chroot"
}
stop() {
ebegin "Unmounting chroot directories"
umount -f /mnt/mychroot/dev > /dev/null &
umount -f /mnt/mychroot/proc > /dev/null &
umount -f /mnt/mychroot/sys > /dev/null &
umount -f /mnt/mychroot/tmp > /dev/null &
eend $? "Si è verificato un errore durante lo smontaggio delle directory dell'ambiente chroot"
}
Quando si utilizza una directory od una partizione diverse, aggiungere i comandi di montaggio necessari nella funzione start()
e modificare /mnt/chroot con il nome appropriato.
Vedere anche
- Project:X86/Chroot Guide — provides instructions on how to create chroots to assist in testing Gentoo packages for stabilization.
- Chrooting servizi proxy
- Chrooting e server virtuali