Chroot

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

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎português do Brasil • ‎русский • ‎Türkçe • ‎中文(中国大陆)‎


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 una leggera alternativa 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 in cui 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 è locato chroot. Per ulteriori informazioni su questo processo si veda Downloading the stage tarball e Unpacking the stage tarball nell'Handbook di Gentoo.

root #tar xvjpf stage3-*.tar.bz2 -C /mnt/mychroot
root #tar xvjf portage-*.tar.bz2 -C /mnt/mychroot/usr

Configurazione

Prima di accedere nella chroot deve essere montato un numero di directories:

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 files di configurazione di base dovrà essere copiato dall'host, non copiare make.conf quando si utilizza un'installazione esistente:

user $cp /etc/portage/make.conf /mnt/mychroot/etc/portage # When using an existing installation, skip this command.
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
root #source /etc/profile
root #export PS1="(chroot) $PS1"

Durante la creazione di una nuova installazione, Portage andrebbe sincronizzato per assicurarsi che tutto sia aggiornato.

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 directories 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 runlevel di default 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 $? "An error occurred while mounting chroot directories"
}
 
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 $? "An error occurred while unmounting chroot directories"
}

Quando si utilizza una directory o una partizione diversa, aggiungere i comandi di montaggio necessari nella funzione start() e variare /mnt/chroot nel nome appropriato.

Vedi anche