web-dev-qa-db-fra.com

script chroot, comment faire?

Alors je regarde:

https://help.ubuntu.com/community/LiveCDCustomizationFromScratch

et essayez ce qui suit dans un script bash:

Sudo chroot chroot

mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts

L'exécution du script passe dans un shell à Sudo chroot chroot. Lorsque je exit, je reçois les avertissements prévus concernant le montage nécessitant un accès root. Est-il possible de garder tout cela dans un seul script shell?

Éditer: Je veux que ce processus soit répétable, c'est pourquoi je souhaite créer un script complet plutôt que de le saisir à maintes reprises.

7
Dr.Avalanche

Créez un deuxième script (par exemple chroot.sh) et placez-le dans votre dossier chroot/.

Maintenant, éditez la commande dans votre script original à ceci:

chroot chroot/ ./chroot.sh

Maintenant, le script chroot.sh sera exécuté dans votre chroot.

13
starbroken

Salut u devrait aller avec une solution simple comme pipe:

cat << EOF | chroot chroot
rm -rf /
EOF

PS plaisantant à propos de rm -rf;), tout ce que vous exécutez à l'intérieur de EOF - EOF est exécuté dans votre répertoire chrooté, vous pouvez également utiliser Sudo si vous le souhaitez.

cat << EOF | Sudo chroot chroot
ls /
EOF
10
flipvarga

Le problème avec chroots et /proc, /sys et /dev/pts est que ces trois systèmes de fichiers sont fournis par le noyau, ils restent donc les mêmes que vous montiez dans le chroot ou de l'extérieur. En effet, vous verrez plus tôt dans les instructions:

Sudo mount --bind /dev chroot/dev

/dev est rempli par le noyau, mais n'est pas un système de fichiers fourni par le noyau, il devait donc être monté en liaison. Par conséquent, dans la pratique, vous constaterez que le montage à l'aide de montages liés (ou autrement) avant d'entrer dans le chroot fonctionne aussi bien (supposons que Sudo):

for i in dev proc sys dev/pts
do
    mount -o bind /$i chroot/$i
done
chroot chroot
for i in dev/pts proc sys dev
do
    umount -chroot/$i
done
# or
mount -o bind /dev chroot/dev
mount -t sysfs none chroot/sys
mount -t proc none chroot/proc
mount -t devpts none chroot/dev/pts
chroot chroot
for i in dev/pts proc sys dev
do
    umount -chroot/$i
done

Lecture pertinente:

3
muru

Vous pouvez créer un script .bashrc ou quelque chose de similaire, qui est ajouté au répertoire /root/.bashrc du chroot env, qui effectue tous les montages, etc.

Scénario principal:

#!/usr/bin/env bash
cp bashrcscript chroot/root/
if [ -a chroot/root/.bashrc ]; then
    cp chroot/root/.bashrc chroot/root/.bashrc.bak
fi
echo "./bashrcscript" >> chroot/root/.bashrc
chroot chroot/
rm chroot/root/.bashrc
rm chroot/root/bashrcscript
if [ -a chroot/root/.bashrc.bak ]; then
    mv chroot/root/.bashrc.bak chroot/root/.bashrc
fi

bashrcscript:

mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts 
# Anything else you like to do

Le bashrcscript sera alors exécuté au démarrage de la console racine. Assurez-vous que c'est exécutable.

Vous pouvez même mettre la copie de resolv.conf dans le script principal, etc.

1
s3lph