Chroot

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Chroot and the translation is 100% complete.
Resources

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:

FILE /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