Translation(s): Deutsch - English - Español - Français - Italiano
chroot, nei sistemi operativi simili a Unix, indica un'operazione che consiste nel cambiare la directory di riferimento dei processi che sono in esecuzione corrente e per i processi generati da questi ultimi.
Contents
Installazione
Creare una "chroot" in Debian è molto semplice.
Ciò che serve è:
- installare i pacchetti necessari
apt-get install binutils debootstrap
- scegliere una posizione
mkdir -p /srv/chroot/stretch
- creare la chroot
Selezionare manualmente un mirror di rete vicino, usare uno dei mirror basati su DNS come ftp.XX.debian.org dove XX è il codice geografico del proprio paese, oppure usare il CDN deb.debian.org che farà tutto automaticamente per l'utente. Il metodo con deb.debian.org è più facile da documentare e sta diventando il metodo generalmente preferito ed è perciò raccomandato se non si ha un proprio mirror locale veloce preferito. Vedere http://deb.debian.org/ per la documentazione e i dettagli.
debootstrap --arch i386 stretch /srv/chroot/stretch http://deb.debian.org/debian
- entrarvi (vedere più avanti per la configurazione che potrebbe essere necessaria all'interno della chroot):
chroot /srv/chroot/stretch
Un modo più comodo di entrare nella chroot è fornito dal pacchetto schroot. Questo wrapper permette agli utenti non privilegiati di avere accesso a uno o più ambienti chroot. schroot gestisce la chiamata chroot(2) oltre all'abbandono dei privilegi all'interno della chroot, l'impostazione di "/etc/resolv.conf" e il montaggio con bind delle risorse nella chroot (come le directory home, "/dev", "/sys", "/proc").
Configurazione
In genere è necessario creare o modificare punti chiave delle configurazioni.
Creare un file /usr/sbin/policy-rc.d NELLA CHROOT, in modo che dpkg non avvii demoni a meno che non sia voluto. Questo esempio previene impedisce l'avvio nella chroot di tutti i demoni.
chroot /srv/chroot/stretch cat > ./usr/sbin/policy-rc.d <<EOF #!/bin/sh exit 101 EOF chmod a+x ./usr/sbin/policy-rc.d
Il comando ischroot è difettoso e non rileva il fatto di essere in esecuzione in una chroot (685034). Svariati pacchetti dipendono da ischroot per determinare il comportamento corretto in una chroot e funzioneranno in modo non corretto durante gli aggiornamenti se il problema non viene risolto. Il modo più semplice per farlo è di sostituire ischroot con il comando /bin/true.
dpkg-divert --divert /usr/bin/ischroot.debianutils --rename /usr/bin/ischroot ln -s /bin/true /usr/bin/ischroot
Configurare un chroot è relativamente statico e molto specifico, è possibile fare a meno dei comandi di alto livello e modificare direttamente i file.
- utenti nel chroot:
/etc/passwd /etc/group
- impostazioni di rete nella chroot:
/etc/hosts /etc/resolv.conf
- montaggio dei file system dell'host sottostante (NON nella chroot):
/etc/fstab
- Per modificare il prompt di bash aggiungere un identificatore a /etc/debian_chroot. I suoi contenuti vengono aggiunti a $PS1
Montare pseudo filesystem
/proc
- Se il sistema non è interamente funzionante controllare la presenza di /proc nel sistema chroot. A priori, dalla versione di debootstrap in Debian/Wheezy è integrato il montaggio di /proc e /sys nativamente.
proc on /proc type proc (rw) sysfs on /sys sysfs kind (rw)
/dev/pts
È inoltre consigliato di fare un "bind" a /dev/pts. Questo previene messaggi di errore come Devo essere collegato ad un terminale o Impossibile accedere a '/dev/pts/0': File o directory non esistente durante l'uso di screen.
In tal caso, dal sistema principale, eseguire il comando:
mount --bind /dev/pts /srv/chroot/stretch/dev/pts
Configurazioni predefinite
Generalmente il file /etc/fstab apparirà come segue:
# grep chroot /etc/fstab /dev /srv/chroot/stretch/dev auto bind 0 0 /dev/pts /srv/chroot/stretch/dev/pts auto bind 0 0 /proc /srv/chroot/stretch/proc auto bind 0
Perciò "mount" dal sistema principale sarà:
# mount | grep chroot /dev on /srv/chroot/stretch/dev -type none (rw, bind) /dev/pts on /srv/chroot/stretch/dev/pts kind none (rw, bind) /proc on /srv/chroot/stretch/proc type none (rw, bind)
Aggiungere e rimuovere pacchetti
- Eliminare pacchetti non necessari (dipende dallo scopo del chroot):
apt-get install deborphan
deborphan -a
- e, ad esempio:
apt-get remove --purge telnet manpages pppconfig ipchains ...
Complementary list svgalibg1 whiptail
- aggiungere qualche comodità:
apt-get install emacs23 local mc
Uso
Esempi comuni di utilizzo di un chroot:
ricompilazione di applicazioni in un contesto differente dalla macchina che ospita il chroot (backport, cross-compilazione, ...)
- aggiornamento servizi di produzione orientando il vecchio (macchina ospitante) al nuovo (installato nel chroot)
- protezione di un servizio "chrootato" dalla macchina ospitante e viceversa
Copia e incolla
Quanto detto sopra pronto per fare copia e incolla.
Prima la parte dove si impostano le variabili di shell.
export MCHRMIRROR=http://deb.debian.org/debian export MCHRARCH=i386 export MCHRREL=buster export MCHRDIR=/srv/chroot/${MCHRREL}-${MCHRARCH} echo My chroot dir is ${MCHRDIR}
Poi il resto del materiale di cui fare copia-e-incolla, preferibilmente con attenzione.
mkdir -p ${MCHRDIR} # passo successivo, richiede molto tempo debootstrap --variant=buildd --arch=${MCHRARCH} ${MCHRREL} ${MCHRDIR} ${MCHRMIRROR} # previene l'avvio di demoni da parte di dpkg nell'ambiente chroot cat > ${MCHRDIR}/usr/sbin/policy-rc.d <<EOF #!/bin/sh exit 101 EOF chmod a+x ${MCHRDIR}/usr/sbin/policy-rc.d # nella chroot "codificare in modo fisso" ischroot a VERO cp ${MCHRDIR}/bin/true ${MCHRDIR}/usr/bin/ischroot # cp /etc/hosts ${MCHRDIR}/etc/hosts cp /etc/resolv.conf ${MCHRDIR}/etc/resolv.conf # quello sopra va fatto una sola volta # montare, da fare piu' spesso mount --bind /dev ${MCHRDIR}/dev mount --bind /dev/pts ${MCHRDIR}/dev/pts mount --bind /proc ${MCHRDIR}/proc # può anche essere necessario (es. nella modalità ripristino dell'Installatore Debian) mount --bind /sys ${MCHRDIR}/sys mount --bind /run ${MCHRDIR}/run # Okay
# Entrare nella chroot, uscirne con exit
chroot ${MCHRDIR} # godersi il proprio nuovo ambiente # installare con apt quello di cui si ha bisogno # fare quello che si vuole
Smontare
[ ! -z ${MCHRDIR} ] && echo my chroot dir is ${MCHRDIR} [ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/proc [ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/dev/pts [ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/dev # se sono state montate prima [ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/sys [ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/run