Script bash "CHROOTER"
#!/bin/bash #----------------------------------------------------------------------- # # Site 'ERMAIA - 15 août 2011 - Copie libre (sous licence GNU) # # CHROOTER sur une partition # #----------------------------------------------------------------------- # # # VERT="\\033[1;32m" NORMAL="\\033[0;39m" ROUGE="\\033[1;31m" ROSE="\\033[1;35m" BLEU="\\033[1;34m" BLANC="\\033[0;02m" BLANCLAIR="\\033[1;08m" JAUNE="\\033[1;33m" CYAN="\\033[1;36m" # # Nécessite 'DIALOG' if ! [ `which dialog 2> /dev/nul` ] then echo; echo " Le fichier 'DIALOG' n'existe pas." ; echo "J'ai cherché dans : "$PATH ; echo ; echo " --> Installer le paquet "; echo echo -e "$ROUGE" "Erreur fatale" "$NORMAL" exit 1 fi # # Usage if [[ $1 == "--help" ]] then clear echo -e "$VERT" cat <
/tmp/Partition.txt # Une seule partition (si ce fichier en contient plusieurs) Partition=`cat /tmp/Partition.txt` # dialog \ --backtitle "Bon, je fais un CHROOT sur quelle partition ?" --title "CHROOT " \ --ok-label "Valider" --cancel-label "Quitter" \ --inputbox "Entrer la reference de la partition cible (exemple :"$Partition")" 12 28 $Partition 2> $FICHTMP if [ $? != 0 ]; then echo $? clear exit $? fi # # Enlever les 'espaces' parasites sed 's/\s\{1,\}//' < $FICHTMP | sed 's/\s\{1,\}//' | sed 's/\s\{1,\}//' | sed 's/\s\{1,\}//' > /tmp/final2.txt Partition=`cat /tmp/final2.txt` # echo "===========" echo -e "$VERT" 'Partition = '"$NORMAL"$Partition echo "===========" # # Vérifier que '$Partition' est montée et est bien montée sur '/mnt/' if ! grep -wq "/dev/"$Partition /etc/mtab then clear echo ; echo "Erreur : "$Partition" n'est pas montée ; la partition doit d'abord être montée ; je sors (bien dépité)." exit 1 fi if ! grep -wq "/mnt/"$Partition /etc/mtab then clear echo ; echo "Erreur : "$Partition" doit être montée sur /mnt sous son propre nom : /mnt"$Partition" ; je sors (bien dépité)." exit 1 fi if [ -w /mnt/$Partition/dev ] && [ -w /mnt/$Partition/proc ] then echo " /mnt/$Partition/* est une partition Linux ouverte en lecture et en écriture " else clear echo ; echo "Erreur : "$Partition" n'est pas une partition sur laquelle il est possible de chrooter ; je sors (bien dépité)." exit 1 fi clear echo -e "$VERT" 'Préparation du chroot' "$NORMAL" sleep 1 # CHROOT dans une console echo -e "$VERT" 'Environnement matériel :' "$NORMAL" mount -v -t proc /proc /mnt/$Partition/proc mount -v -o bind /dev /mnt/$Partition/dev mount -v -o bind /dev/pts /mnt/$Partition/dev/pts mount -v -t sysfs /sys /mnt/$Partition/sys echo -e "$VERT" 'Montage optionnel :' "$NORMAL" mount -v -o bind /run /mnt/$Partition/run echo -e "$VERT" 'Accéder aux variables EFI, sur un système UEFI (GRUB etc ...) ' "$NORMAL" mount -v -o bind /sys/firmware/efi/efivars /mnt/$Partition/sys/firmware/efi/efivars echo -e "$VERT" 'Accéder à internet :' "$NORMAL" mount -v -o bind /etc/resolv.conf /mnt/$Partition/etc/resolv.conf echo -e "$VERT" 'Accéder aux applications graphiques :' "$NORMAL" xhost +local: # echo "===========" echo -e "$VERT" "Si l'on souhaite créer une 'Invite chroot', pour pouvoir différencier l'environnement chroot, copier/coller dans la console de chroot la commande suivante :" "$NORMAL" echo 'export PS1=`echo -e "\\033[1;31m"`chroot_$PS1`echo -e "\\033[0;39m"`' echo -e "$VERT" "Pour utiliser des applications graphiques en chroot : En cas de difficulté, exporter la valeur de la variable DISPLAY, en copiant/collant dans la console de chroot la commande suivante :" "$NORMAL" echo "export DISPLAY=$DISPLAY" echo echo -e "$VERT" "S'il est nécessaire de charger la configuration locale de bash, copier/coller dans la console de chroot les deux commandes suivantes : :" "$NORMAL" echo " source /etc/profile" echo " source ~/.bashrc" echo -e "$JAUNE" "Console de CHROOT (taper 'exit' pour sortir) :" "$NORMAL" echo chroot /mnt/$Partition ``bash -i'' # umount -v --recursive /mnt/$Partition if [ $? != 0 ] then echo -e "$JAUNE" "Démonter à la main, ou copier/coller la commande :" "$NORMAL" echo " umount -v --force --recursive /mnt/$Partition" echo -e "$JAUNE" "En cas de nouvel échec : copier/coller la commande :" "$NORMAL" echo " umount -v --lazy --recursive /mnt/$Partition" echo fi # # exit 0 # #-----------------------------FIN------------------------------------ #
Copier
Captures d'écran - Script "CHROOTER"