Installazione

Creare una "chroot" in Debian è molto semplice.

Ciò che serve è:

# apt install debootstrap

# mkdir -p /srv/chroot/debian

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 bullseye /srv/chroot/debian http://deb.debian.org/debian

# chroot /srv/chroot/debian

A questo punto la chroot è utile per compiti come compilare pacchetti Debian in un ambiente isolato. Per un ambiente Debian più avanzato all'interno della chroot, vedere in seguito.

(!) 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/debian
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.

 /etc/passwd
 /etc/group

 /etc/hosts
 /etc/resolv.conf

 /etc/fstab

Montare pseudo filesystem

/proc

proc on /proc type proc (rw)
sysfs on /sys sysfs kind (rw)

/dev/pts

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

apt-get install deborphan

deborphan -a

apt-get remove --purge telnet manpages pppconfig ipchains ...

Complementary list svgalibg1 whiptail

apt-get install emacs23 local mc

Uso

Esempi comuni di utilizzo di un chroot:

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


CategorySystemAdministration | CategoryVirtualization