Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#2101 Le 05/04/2026, à 15:29

Robert_75012

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

BonjourJujuland,

Comme tu le devines, les options de DIALOG '--color-mode' et '--cursor-off-label' ne sont pas essentielles au fonctionnement du script (cf 'man dialog') :
--color-mode est une extension de --colors
--cursor-off-label sert à positionner le curseur.
Tu peux supprimer ces deux fioritures.

Je serais assez mal placé pour dire que Xubuntu 16.04, "c'est vieux".
En effet, à force d'accumuler - et surtout de vieillir - j'ai une palanquée d'ordinateurs ; le plus vieux est un portable Toshiba 'T2150cds' de 1995, en double amorçage (Windows 3.3 + Slackware 8.1) :
https://ermaia.copro212-75012.fr/T2150cds.html

Robert

Hors ligne

#2102 Le 05/04/2026, à 17:13

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

  • trop de rm : utilise le Développement de chemin, et donc fonction inutile.

  • UUOC! tellement ! roll

  • emploi de fichiers temporaires, alors qu'une commande awk bien construite ferait le boulot en une ligne.

  • echo en série au lieu d'un printf

redéfinir la variable 'page' comme étant une variable 'chaîne' (elle était devenue une variable contenant un entier)

les variables, en bash, par défaut, ne sont pas typées : c'est du texte.
pour que ce soit un entier, il faut le déclarer explicitement.

tout ça, tout ça...

Le listage des liens à traiter devrait être automatisé. Je ne sais pas combien de pages il y a sur le site, mais tu devrais avoir autre chose à faire que de te le ("le" : le listage. big_smile) palucher.
C'est tortueux et bavard, alors que ça pourrait être beaucoup plus direct et lisible.

pourquoi faire simple quand on peut faire compliquer.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#2103 Le 05/04/2026, à 21:34

Robert_75012

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonsoir Watael,

Merci pour ces remarques pertinentes.

Je passe sur les premières remarques qui concernent mes nombreuses maladresses : Elles n'appellent pas d'observation de ma part.

En revanche, je suis intéressé par la manière dont tu te jouerais de la difficulté suivante (pour moi, c'est une difficulté) :
Soit un certain nombre de page html :

#page_1=/Commune/Site_Ermaia/Ermaion/index.html
#page_2=/Commune/Site_Ermaia/Ermaion/TecHT.html
#page_3=/Commune/Site_Ermaia/Ermaion/T2150cds.html
#page_4=/Commune/Site_Ermaia/Ermaion/SecuritePompe.html
#page_5=/Commune/Site_Ermaia/Ermaion/PubOscillo_LERES_T7.html
(...)

* Il est nécessaire de repérer ces pages par le n° de page.
* La variable $page doit être une chaîne : c'est, ici, 'page_1=(...)
* Le script doit incrémenter le n° pour passer à la suivante :  -->   page="page_"$num ; ((num++))
Mais, si l'on incrémente, la variable $page ne contient plus une chaîne mais un entier.
Pour redéfinir $page comme étant une chaîne, j'avoue ne pas avoir cherché longtemps : J'enregistre dans un fichier temporaire, qui est immédiatement relu ; le shell bash relit, alors, $page comme étant une chaîne.
* Les pages doivent être numérotées ; d'une part, parce que toutes les pages ne contiennent pas forcément des hyperliens et, d'autre part, parce que le cahier des charges prévoit de numéroter les pages.

Quomodo recte facere ?

Merci de ton retour.

Robert

Hors ligne

#2104 Le 07/04/2026, à 18:00

Robert_75012

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour tout le monde,


Deux petits scripts (enfin, disons deux et demi) :


I.     MONTER et CHROOTER

Les deux scripts de dépannage 'MONTER' et 'CHROOTER' -connexes- interfacent les commandes MOUNT et CHROOT, soit en mode graphique (terminal virtuel), soit en mode console texte.
Ils sont écrits avec AWK et DIALOG ; FSARCHIVER est utilisé pour lister les disques durs et les partitions.
[ Un troisième script, support, est nécessaire ('montreFST.sh')]

Les captures d'écran sont sur mon site :
https://ermaia.copro212-75012.fr/Inform … tique.html


1. Script MONTER :           

1.1. Les partitions sont montées sur '/mnt/' le nom de la partition est /dev/['partition'] (exemple : '/mnt/sda3'.
Si le point de montage n'existe pas, il est créé.

Les versions du script > 3.00 sont aptes à monter des partitions qui sont au format UFS (seulement en lecture).

1.2. Options :

    --help : Aide succincte ;
    -r  –read-only : Monter en "lecture seule" ; à noter que les partitions 'UFS' ne peuvent pas être montées avec des droits d'écriture.
    -d  –detail : Détailler les caractéristiques des disques durs et des partitions qui peuvent être montées.
    -c  –chroot : Chrooter, ensuite, sur la partition (le script MONTER appelle CHROOTER) ; à noter que le script CHROOTER peut être exécuté seul, dès lors que la partition à travailler est déjà montée sur  /mnt/.


2. Script CHROOTER :   

2.1. Le script CHROOTER est appelé habituellement par le script MONTER [option : '--chroot'].

Il peut être exécuté seul, dès lors que la partition à travailler est déjà montée sur /mnt/ et que l'on a utilisé comme nom de montage l'identifiant /dev/['partition'] : ('/mnt/sda1', par exemple)

Le script lie (c-à-d : mount –bind) les répertoires :

    /proc
    /dev
    /dev/pts
    /sys
    /run
    /sys/firmware/efi/efivars  (pour accéder aux variables EFI, sur un système UEFI)

Le script permet d’accéder en chroot à Internet et de faire tourner des applications graphiques.
Le script sort du chroot, proprement, en démontant tous les répertoires :   
    umount -v --recursive /mnt/$Partition


2.2. Option unique :

    --help : Aide succincte.


3. Script 'montreFST.sh' : 
   
Script appelé par les scripts MONTER ou CHROOTER (n'a pas vocation à être exécuté seul).


4. Implantation :

4.1. Ces scripts sont implantables sur une distribution Linux (tournant avec ou sans interface graphique) ; l'intéret est évidemment faible.

4.2. En revanche, ces scripts pourraient trouver une certaine utilité pour qui utilise la boîte à outils « SYSTEMRESCUE » qui tourne soit sur une clef USB, soit sur l’une des partitions du disque dur d’un ordinateur.
https://www.system-rescue.org/

En ce dernier cas, GRUB amorce directement l’ISO de SYSTEMRESCUE avec la séquence suivante :

{
load_video
insmod gzio
insmod part_gpt
insmod part_msdos
insmod ext2
rmmod tpm
set iso_path="/ISOS/systemrescue.iso"
search --no-floppy --set=root --file $iso_path
loopback loop $iso_path
echo "Je sonde ..."
probe -u $root --set=iso_disk
echo "Chargement du noyau ..."
linux (loop)/sysresccd/boot/x86_64/vmlinuz img_dev=/dev/disk/by-uuid/$iso_disk img_loop=$iso_path archisobasedir=sysresccd copytoram setkmap=fr-latin9 index=off metacopy=off cow_label=Stockage cow_directory=Modifs_SystemRescue
echo "Chargement de initramfs ..."
initrd (loop)/sysresccd/boot/x86_64/sysresccd.img
}

En considérant, ici, que SystemRescue se trouve dans le répertoire /ISOS/ d’une partition nommée « Stockage » ; le répertoire dans lequel SystemRescue écrit et conserve ses données est appelé, ici : « Modifs_SystemRescue »  (à créer vide).

MONTER :

#!/bin/bash
#-----------------------------------------------------------------------
#
#	Site 'ERMAIA - 10 août 2011 - Copie libre (sous licence GNU)
#
#	MONTER des partitions
#
#-----------------------------------------------------------------------
# 
#
	rm /tmp/brouillon.txt 2> /dev/nul
	rm /tmp/intermediaire.txt 2> /dev/nul
	rm /tmp/final.txt 2> /dev/nul
	rm /tmp/finalTypeA.txt 2> /dev/nul
	rm /tmp/finalTypeB.txt 2> /dev/nul
	rm /tmp/finalTypeC.txt 2> /dev/nul
	rm /tmp/finalTypeD.txt 2> /dev/nul
	rm /tmp/finalTypeE.txt 2> /dev/nul
	rm /tmp/finalType.txt 2> /dev/nul
	rm /tmp/Partition.txt 2> /dev/nul
	rm /tmp/PartitionType-2.txt 2> /dev/nul
#
 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"
#
# Dépendances :
# Nécessite le script complémentaire suivant :
	if ! [ `which montreFST.sh 2> /dev/nul` ]
		then echo; echo "	Le script 'montreFST.sh' n'existe pas." ; echo "J'ai cherché dans : "$PATH ; echo ; echo  " --> Installer le script	"; echo
		echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
		exit 1
	fi
# Nécessite 'FSARCHIVER'
	if ! [ `which fsarchiver 2> /dev/nul` ]
		then echo; echo " Le fichier 'FSARCHIVER' n'existe pas." ; echo "J'ai cherché dans : "$PATH ; echo ; echo " --> Installer le paquet	 "; echo
		echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
		exit 1
	fi
# 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
echo -e "$VERT"
cat <<EOF
		Version : 3.1.5  -   Site 'ERMAIA

 Les deux scripts MONTER et CHROOTER interfacent les commandes MOUNT et CHROOT, en mode graphique (terminal virtuel) ou sur une console texte.
 Ils sont écrits avec AWK et DIALOG ; FSARCHIVER est utilisé pour lister les disques durs et les partitions.

 [ Un troisième script est nécessaire ('montreFST.sh')]
 
 Les partitions sont montées sur '/mnt/' le nom de la partition est /dev/['partition'] (exemple : '/mnt/sda3'.
 Si le point de montage n'existe pas, il est créé.
 
 Cette version (> 3.00) est capable de monter les partitions qui sont au format UFS (lecture seule).
 
 Options :
		--help 			= Cette aide succincte ;
		-r --read-only		= Monter en "lecture seule" ; 
					 à noter que les partitions 'UFS' ne peuvent pas être montées avec des droits d'écriture.
		-d --detail		= Détailler les caractéristiques des disques durs et des partitions qui peuvent être montées.
		-c --chroot 		= Chrooter sur la partition (le script MONTER appelle CHROOTER) ; 
					 à noter que le script CHROOTER peut être appelé seul, dès lors que la partition à travailler
					est déjà montée sur '/mnt'.
		
EOF
echo -e "$NORMAL"
exit 0
fi
# Pour travailler dans une session graphique nécessite soit : 'XFCE4-TERMINAL', soit 'GNOME-TERMINAL'
tty | grep -q "/dev/pts/"
			if [ $? -eq 0 ]
			then
Xterminal=""
	if ! [ `which gnome-terminal 2> /dev/nul` ]
		then  echo "Le terminal 'GNOME-TERMINAL' n'est pas installé"
		else
		Xterminal="GNOME-TERMINAL"
		#echo "X-TERMINAL = "$Xterminal
	fi
	if ! [ `which xfce4-terminal 2> /dev/nul` ]
		then echo "Le terminal 'XFCE4-TERMINAL' n'est pas installé"
		else
		Xterminal="XFCE4-TERMINAL"
		#echo " ---> X-TERMINAL = "$Xterminal
	fi
	if [[ $Xterminal == "" ]]
		then
		echo ; echo -e "$VERT""___""$NORMAL""Dans une session graphique, les scripts MONTER et CHROOTER necessitent un X-TERMINAL (mais ils sont fonctionnels dans une session sans X.) "
		echo ; echo -e "$VERT""___""$NORMAL""Aucun X-TERMINAL trouvé : Prière de télécharger et d'installer l'un des paquets suivants :"
		echo ; echo "	'GNOME-TERMINAL'	'XFCE4-TERMINAL'	"; echo
		echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
		exit 1
	fi
			fi
#
# Récupérer un paramètre de ligne de commande
Ecriture=""
AppelChroot=""
Detailler=""
	while [ "$#" -gt 0 ]; do
	case $1 in
	    --read-only) Ecriture="-r"
	    ;;
	    -r) Ecriture="-r"
	    ;;
	    --chroot) AppelChroot="--chroot"
	    ;;
	    -c) AppelChroot="--chroot"
	    ;;
	    --detail) Detailler="--detail"
	    ;;
	    -d) Detailler="--detail"
	    ;;
	    -rd) Ecriture="-r" ; Detailler="--detail"
	    ;;
	    -dr) Ecriture="-r" ; Detailler="--detail"
	    ;;
	    -dc) AppelChroot="--chroot" ; Detailler="--detail"
	    ;;
	    -cd) AppelChroot="--chroot" ; Detailler="--detail"
	    ;;
	    *) Inconnu=$1
	    echo -e "$VERT" " Paramètre ""$ROUGE"$Inconnu"$VERT"" inconnu ==>  -r  --read-only  -c  --chroot  -d  --detail  -dr  -rd  -cd  -dc  --help  : Je sors" "$NORMAL"
		exit 1
	    ;;
	  esac
		shift
	done
	echo
	echo "Ecriture= "$Ecriture
	echo "AppelChroot= "$AppelChroot
	echo "Detailler= "$Detailler
	echo
	if [[ $Ecriture == -r ]] && [[ $AppelChroot == --chroot ]]
	then
	echo
	echo -e "$VERT" "Les arguments ""$ROUGE""'--chroot' et '--read-only'""$VERT"" sont incompatibles : Je sors. " "$NORMAL"
	echo
	exit 1
	fi
#
#
#" substr($5,2,3) 
# Récupérer la liste des partitions existantes avec 'fsarchiver' (sauf la partition 'SWAP')
	fsarchiver probe 2> /tmp/intermediaire.txt
#
	awk 'substr($1,5,1) <= 9 && substr($1,5,1) >= 1 && substr($3,2,4) != "swap" \
	{print substr($1,2,5) "     " substr($3,2,8) "________" substr($5,2,10) " off "}' /tmp/intermediaire.txt > /tmp/final.txt
	Resultat=`cat /tmp/final.txt`
#
# Voir les partitions existantes et celles qui sont montées (deux cas de figure : soit console graphique [tty --> pts], 
# soit console texte [tty --> tty], on filtre en conséquence.
if [[ "$Detailler" == "--detail" ]]
		then 
			tty | grep -q "/dev/pts/"
			if [ $? -eq 0 ]
			then
case $Xterminal in
GNOME-TERMINAL )	gnome-terminal	--hide-menubar --geometry=90x30 -- /usr/bin/montreFST.sh --graph & ;;
XFCE4-TERMINAL )	xfce4-terminal  --hide-toolbar --hide-menubar --geometry=90x30 --execute /usr/bin/montreFST.sh --graph & ;;		
esac				
			fi
#
			tty | grep -q "/dev/tty"
			if [ $? -eq 0 ]
			then
			/usr/bin/montreFST.sh
			fi
fi
#
# Boîte de menu 'Dialog' pour choisir les partitions à monter
#
	touch /tmp/dialoghdatmp && FICHTMP=/tmp/dialoghdatmp
	trap "rm -f $FICHTMP" 0 1 2 3 15 
#
	dialog \
	--backtitle "Bon, je monte quoi ?" --title "Menu " \
	--ok-label "Valider" --cancel-label "Quitter" \
	--checklist "Cochez une ou plusieurs partitions (montage sur /mnt)" 16 62 7 \
	$Resultat 2> $FICHTMP
if [ $? != 0 ]; then
	echo $?
	clear
   exit $?
fi
#
clear
# Formatage de la réponse : Enlever les guillemets encadrant les résultats de la boîte 'DIALOG'
Rien=""
Guillemet='"'
	sed "s/$Guillemet/$Rien/g" < $FICHTMP > /tmp/brouillon.txt
#
# Tester si un choix a été fait dans 'DIALOG'
if test ! -s /tmp/brouillon.txt
		then echo; echo -e "$JAUNE" "___ Aucune partition à monter n'a été choisie : Je sors. ___" "$NORMAL"; echo
exit 0
fi
#
# Combiner le fichier 'Liste des partitions choisies' et le fichier 'Type'
ListePart=`cat /tmp/brouillon.txt`
	for index in $ListePart
		do
		grep -w $index /tmp/final.txt >> /tmp/finalTypeA.txt
	done
# 
# Formatage du fichier : Enlever les "________"
Espace=" "
Tiret="________"
	sed "s/$Tiret/$Espace/g" < /tmp/finalTypeA.txt > /tmp/finalTypeB.txt
# 
# Formatage du fichier : Remplacer "ntfs" par "ntfs-3g" pour monter un fichier ntfs en lecture/écriture
	sed "s/ntfs/ntfs-3g/g" < /tmp/finalTypeB.txt > /tmp/finalTypeC.txt
#
# Formatage du fichier : Remplacer le séparateur des champs " " (Espace) par le séparateur "," (une seule virgule).
Espace=" "
Virgule=","
	sed "s/$Espace/$Virgule/g" < /tmp/finalTypeC.txt > /tmp/finalTypeD.txt
Virgules_5=",,,,,"
	sed "s/$Virgules_5/$Virgule/g" < /tmp/finalTypeD.txt > /tmp/finalTypeE.txt
# 
# Formatage du fichier : Remplacer "ufs" par "ufs -o ufstype=ufs2" pour monter un fichier ufs en lecture ; il s'ensuit la création de deux champs supplémentaires : $3 et $4.
	sed "s/ufs/ufs -o ufstype=ufs2/g" < /tmp/finalTypeE.txt > /tmp/finalType.txt	
#
# S'assurer que le répertoire de montage /mnt/XXX existe ; sinon, le créer ; $1 : 1er champ : 'partition' ; $2 : 2ème champ : 'type'
	awk 'BEGIN { FS="," } {print("Partition="$1"; \
	if test ! -d /mnt/$Partition; \
	then mkdir -v /mnt/$Partition; fi; ") | "sh"}' /tmp/finalType.txt
#
echo -e "$JAUNE"
echo
echo "xxxx"
echo
#
# Monter les répertoires ; $1 : 1er champ : 'partition' ; $2 : 2ème champ : 'type'
#
cat /tmp/finalType.txt | awk 'BEGIN { FS="," } {print $1, $2 }' > /tmp/PartitionType.txt
NbrLignes=`cat /tmp/PartitionType.txt | wc -l`
echo "Nombre de partitions à monter = "$NbrLignes
echo
#
# 	On pipe la ligne de commande générée par AWK à MOUNT :
#
		if [[ "$Ecriture" == "-r" ]]
		then	
awk '{print(" --read-only --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"} 
{close("xargs mount")}
{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)} 
{print $1 > "/tmp/Partition.txt"}' /tmp/PartitionType.txt
Partition=`cat /tmp/Partition.txt`
echo -e "$VERT"" montée(s) en lecture seule" "$JAUNE"
		else
awk '{print(" --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"} 
{close("xargs mount")} 
{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)} 
{print $1 > "/tmp/Partition.txt"}' /tmp/PartitionType.txt
Partition=`cat /tmp/Partition.txt`
		fi
#
echo
echo "xxxx"
echo
#
# Selon l'option choisie :
	if [[ "$AppelChroot" == "--chroot" ]]
		then 
		sleep 1
		read -r Partition < /tmp/Partition.txt ; echo $Partition > /tmp/Partition.txt 
		# ---> conserver dans ce fichier une seule entrée où CHROOTER
		/usr/bin/chrooter
	fi
#
echo -e "$NORMAL"
exit 0
#
#-----------------------------FIN------------------------------------
#

# Autre façon (plus claire mais besognieuse) de piper la ligne de commande générée par AWK à MOUNT :

#while IFS= read -r ligne
#do
		#if [[ "$Ecriture" == "-r" ]]
		#then	# 	On pipe la ligne de commande générée par AWK à MOUNT
  	#echo "$ligne" | awk '{print(" --read-only --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"}'
	#echo "$ligne" | awk '{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)} {print $1 > "/tmp/Partition.txt"}'
	#Partition=`cat /tmp/Partition.txt`
	#echo -e "$VERT"" montée en lecture seule" "$JAUNE"
		#else
	#echo "$ligne" | awk '{print(" --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"}'
	#echo "$ligne" | awk '{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)} {print $1 > "/tmp/Partition.txt"}'
	#Partition=`cat /tmp/Partition.txt`
		#fi
#done < /tmp/PartitionType.txt

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 <<EOF
				Version : 3.1.5  -   Site 'ERMAIA

Les deux scripts MONTER et CHROOTER interfacent les commandes MOUNT et CHROOT, en mode graphique (terminal virtuel) ou sur une console texte..
Ils sont écrits avec AWK et CDIALOG ; FSARCHIVER est utilisé pour lister les disques durs et les partitions.

[ Un troisième script est nécessaire ('montreFST.sh')]

Le script CHROOTER est appelé habituellement par le script MONTER [option : '--chroot']. 
Il peut être exécuté seul, dès lors que la partition à travailler est déjà montée sur /mnt/ et que l'on a utilisé comme nom de montage l'identifiant  /dev/['partition'] : ('/mnt/sda1', par exemple)

	Option unique :
	
		--help	= Cette aide succincte.
					
EOF
echo -e "$NORMAL"
exit 0
fi
#
touch /tmp/final2.txt
#
# Boîte d'entrée clavier 'dialog' : partition sur laquelle on va chrooter
#
	touch /tmp/dialoghdatmp && FICHTMP=/tmp/dialoghdatmp
	trap "rm -f $FICHTMP" 0 1 2 3 15 
#
# Donner un exemple de partition sur laquelle chrooter :
read -r Partition < /tmp/Partition.txt ; echo $Partition > /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------------------------------------
#	

MontreFST.sh :

#!/bin/bash
# Script appelé par le script "MONTER" (n'a pas vocation à être exécuté seul)
#
 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"
#
# Usage
	if echo $* | grep --ignore-case --no-messages --quiet --regexp=--help --regexp=-h --regexp=--version --regexp=--V
	then
	echo -e "$VERT"
cat <<EOF
		Version : 3.1.2   Site 'ERMAIA - Copie libre (sous license GNU)
		
		Script appelé par le script "MONTER" (n'a pas vocation à être exécuté seul).
		
EOF
#	
echo -e "$NORMAL"
	exit 0
	fi
#
# Récupérer un paramètre de ligne de commande
Graphique=$1
#
#									----Version "Environnement graphique"----
if [[ "$Graphique" == "--graph" ]]
then 
	echo -e "$VERT" '=====================>>> fsarchiver probe simple <<<=====================' "$NORMAL"
	fsarchiver probe
	echo ' '
	echo -e "$VERT" '_________________________________________________________________________' "$NORMAL"
	echo ' '
	echo -e "$BLEU" 'appuyez sur une touche pour sortir' "$NORMAL"
	read key
exit 0
fi
#
#
echo
echo
echo -e "$JAUNE" "-------- Comme demandé (option -d --detailler) j'affiche d'abord les disques et les partitions -----------" "$NORMAL"
echo
echo
	#									----Version "Console texte"----
	echo -e "$VERT" "	----------------------------------------------------------------------" "$NORMAL"
	echo -e "$BLEU" "	 Partitions existantes " "$NORMAL"
	echo -e "$BLEU" "	 Ensuite, menu des partitions ( --> appuyez sur une touche + 'Entrée' pour sortir) " "$NORMAL"
	echo -e "$VERT" '	=====================>>> fsarchiver probe simple <<<======================' "$NORMAL"
	fsarchiver probe 2> /tmp/fsarch.txt
	cat -n /tmp/fsarch.txt
	echo -e "$VERT" '	__________________________________________________________________________' "$NORMAL"
	echo
	echo
	echo -e "$JAUNE" "------------------------------------------------------------------------------------------------------" "$NORMAL"
	echo
	echo -e "$BLANCLAIR" "	 ( --> appuyer sur une touche + 'Entrée' pour sortir) " "$NORMAL"
	sleep 1

#--> appuyez sur une touche pour sortir :
#Source - https://stackoverflow.com/a/11596145
#Posted by Seth Robertson
#Retrieved 2026-02-18, License - CC BY-SA 3.0
#read -n 1 x; while read -n 1 -t .1 y; do x="$x$y"; done
#
Clavier=""
ConditionFinale=""
until [[ "$Clavier" != "$ConditionFinale" ]]
do
read Clavier
done
exit 0
#
# ------------------------------------------- FIN ----------------------------------------

Mise à jour à la version 3.1.5 des scripts :
- MONTER  (corrections de forme et correction d'un bogue empêchant une partition au format 'UFS' d'être montée. - cf. lignes 265 et ss. du script)
- CHROOTER  (corrections de forme et correction d'un bogue empêchant la résolution des DNS sur une partition FEDORA (et apparentées) utilisant des liens symboliques - cf. mon message ci-dessous du 12-04-2026)


Robert

Dernière modification par Robert_75012 (Aujourd'hui à 15:03)

Hors ligne

#2105 Le 07/04/2026, à 18:14

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

---
un script utile par message, s'il te plaît.
sinon on ne saura plus de quoi on parle.
---

pourquoi ta liste devrait-elle avoir ce format

#page_1=/Commune/Site_Ermaia/Ermaion/index.html

?
quand tu fais la liste des courses, tu écris :
article#1 - lessive
article#2 - rillettes
...
?
ton fichier de "configuration" n'est qu'une liste qui contient un seul type de données : des URLs.
tu aurais une liste de liens à tester :

/Commune/Site_Ermaia/Ermaion/index.html
/Commune/Site_Ermaia/Ermaion/TecHT.html
/Commune/Site_Ermaia/Ermaion/T2150cds.html

c'est très simple :

# pseudoCode:
while read -r url; do wget --spider... "$url" && urlValide || lienMort; done <tonFichierListeURLs

pour obtenir la liste des urls, il faut parcourir les fichiers du site, et rediriger (et traiter/nettoyer) les  balises <a ... href="...">

Dernière modification par Watael (Le 08/04/2026, à 01:09)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#2106 Le 07/04/2026, à 21:16

Robert_75012

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonsoir Watael,

Merci.

1. Sur la numérotation des pages html à tester.

Le script 'LiensMorts' a été écrit pour le site "Archives de la copropriété" (on me tanne le cuir pour chasser les liens morts) ; je gère le site depuis 2007 ; c'est lourd.. j'essaye de passer la main ; l'idée est de scinder et de partager l'administration du site entre plusieurs autres victimes ; à cet égard, chacun serait responsable d'un certain nombre de pages : d'où la nécessité de numéroter les pages html du site ; à terme, j'espère me désengager complètement.
Diabolique ! est mon plan.

Évidemment, en dehors de ce contexte, la numérotation des pages html n'est pas utile.

La simplification de ce script que tu proposes est donc, à la fois, bien venue et à retenir.

Est-ce rédhibitoire, si le fichier 'liensmorts.conf' contient, outre des adresses, des variables à initialiser ?
En l'espèce, il y en a quatre.

2. Sur la multiplication, à outrance, des fichiers temporaires.

C'est vrai que j'ai fait fort.
Mais c'est bien pratique pour le débogage et l'adjonction éventuelle de nouvelles fonctionnalités ; en regardant le contenu de chaque fichier, on a une fenêtre ouverte sur le fonctionnement du script.

3. Je reviens sur la façon de tester l'existence d'un fichier exécutable  dont dépend les srcipts.

Faire :
    if test ! -e /usr/bin/dialog   
c'est ballot, parce qu'on ne teste pas tous les chemins du $PATH.

Il vaut mieux faire :
    if ! [ `which dialog` ]
tous les chemins de $PATH sont testés à la fois.

Robert

Hors ligne

#2107 Le 07/04/2026, à 21:53

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Est-ce rédhibitoire, si le fichier 'liensmorts.conf' contient, outre des adresses, des variables à initialiser ?

oui. on ne mélange pas des données (les URLs) et des variables utiles au script (ça, c'est de la conf)
mais 4 variables dans un fichier de conf, c'est surdimensionné. Pourquoi n'iraient-elles pas dans le script ?

je suis très pessimiste quant à l'implication de "tes victimes", et je prédis que ton projet ne survivra pas longtemps après ton départ, notamment à cause de la maintenance qui va être compliquée par ses défauts.
d'autant que, comme je te l'ai dit, une boucle qui parcourt l'arborescence du site permettrait "facilement" de recenser toutes les URLs.
de là, il n'est pas impossible de les tester dans la foulée, ce qui te dispenserait du fichier ±temporaire qui les liste, et de n'avoir qu'une liste qui contient des liens vraiment morts.
tu as lu le message de Krodelabestiole concernant les codes de retour des tests d'URLs ?

type -p dialog fonctionne bien : type -p dialog || >&2 echo "missing command: dialog"*, ou command -v dialog*
on peut mettre ça dans une boucle :

#!/bin/bash
declare -a neededProgs=( dialog beep 'trash-put' )
for prog in "${neededProgs[@]}"; do if ! type -p "$prog"; then missingProgs+=( "$prog" ); fi; done
if ((${#missingPorgs[*]})); then >&2 echo "missing Progs: ${missingProgs[@]}"; exit1; fi

--
* la sortie peut être redirigée vers /dev/null pour ne pas "polluer" l'affichage.

Dernière modification par Watael (Le 07/04/2026, à 22:11)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#2108 Le 08/04/2026, à 13:17

Robert_75012

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour Watael


Vu, merci.


1. Sur une simplification radicale.

Effectivement, on peut simplifier - comme tu le suggères - en codant, à la fois, la recherche des pages html dans un dossier du disque dur et la recherche des liens morts, à l'intérieur de chaque page html trouvée.


2. Sur ce que génère le script et sur ce qu'il teste.

Oui, j'ai lu l'intervention de Krodelabestiole, portant sur un autre sujet ; c'est dans les clous.

En effet, le script teste le code de retour de 'Wget' (non pas celui du serveur distant) ; il y a ainsi huit codes d'erreur possibles de 'Wget' (qui correspondent à des codes de retour d'erreur du serveur distant > à 400 (si j'ai bonne mémoire - sachant qu'une connexion réussie renvoie le code 200).

(..)
wget --spider --tries=2 --timeout=5 --force-html --base=URL $Ligne ; CodeRetour=$?
if [[ $CodeRetour -eq 0 ]]
then
(..)
	case "$CodeRetour" in				# indiquer la signification du n° de code Erreur de la commande 'wget --spider' (cf 'man wget')
		"1" )
		echo "	Code d'erreur générique." ;;
		"2" )
		echo "	Erreur  d'analyse  - par exemple, lors de l'analyse des options de la ligne de commande, des
           fichiers .wgetrc ou .netrc..." ;;
		"3" )
		echo "	Erreur d'entrées/sorties du fichier." ;;
		"4" )
		echo "	Échec du réseau." ;;
		"5" )
		echo "	Échec de la vérification SSL." ;;
		"6" )
		echo "	Échec de l'authentification du nom d'utilisateur ou du mot de passe." ;;
		"7" )
		echo "	Erreurs de protocole." ;;
		"8" )
		echo "	Le serveur a émis une réponse d'erreur." ;;
	esac
(..)

Les codes de retour dont il s'agit sont ceux listés dans le man de wget.

Sur le terminal, le script affiche, à la fois, la sortie de Wget (c-à-d. les codes de retour d'erreur du serveur distant, en clair) et les siens propres (n° et signification du code).
Le fichier 'Log' n'enregistre que la sortie de Wget (erreur du serveur distant, en clair).

Voir les captures d'écran sur mon site :
https://ermaia.copro212-75012.fr/Inform … MORTS.html


3. Il me semblerait nécessaire de maintenir la possibilité de configurer le script avec un fichier de configuration.

En effet, il y a au moins deux variables importantes à initialiser :
* L'activation ou la désactivation du bip sonore
* Le choix d'un éditeur de texte (certes, 'nvim' fonctionne à la fois en console texte et en mode graphique, mais il est tout moche).

Ce n'est pas 'vendeur' si l'on supprimait ces choix.


Robert

Hors ligne

#2109 Le 08/04/2026, à 16:57

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

3- ça ne constitue pas d'obligations à avoir un fichier de conf.
le script lit les paramètres qui lui sont passés et selon leur valeur positionne telle ou telle variable.
ces variables "environnementales" (par opposition aux variables "fonctionnelles" qui facilite le traitement) n'ont pas à être dans un fichier indépendant; c'est surdimensionné par rapport à la taille de ton projet.
À la rigueur, si elles étaient partagées avec d'autres scripts... et encore une poignée de variables c'est rien à (re)mettre dans un script.
en plus nvim, vu que maintenant tu vas traiter les URLs à la volée, n'est plus utile. lol

Dernière modification par Watael (Le 08/04/2026, à 16:58)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#2110 Le 09/04/2026, à 16:37

lynn

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour,

En parlant de chroot, voici une petite fonction qui me sert bien pour chrooter facilement un système. L'idée avec cette fonction, est de l'intégrer dans le fichier ~/.bash_functions. Rien de bien novateur mais j'aime bien le côté pratique de la chose pour dépanner un système ou mettre à jour ce dernier sans avoir à forcement démarrer dessus.

Je n'ai pas essayé avec un système efi mais je pense que ça devrait fonctionner.

chrootme ()
{
    local verbose=1
    local path=""
    local CYAN="\e[36m"
    local YELLOW="\e[33m"
    local RESET="\e[0m"
    local funcname="${FUNCNAME[0]}"
    
    help ()
    {    
    printf "%bUsage :%b
        %-30s : %s
        %-30s : %s
        %-30s : %s
        %-30s : %s


%bNotes :%b
        - Recherche par défaut dans :
            %s
            %s
            %s
        - Un système est chrootable s'il contient %s et un shell valide
        - Le shell utilisé est celui de l'utilisateur root dans le chroot


%bExemples :%b
        %-30s : %s
        %-30s : %s
        %-30s : %s
" \
        "$CYAN" "$RESET" \
        "$funcname" "Sélection interactive pour chrooter un système" \
        "$funcname -l ou --list" "Liste les systèmes chrootables" \
        "$funcname -p ou --path <chemin>" "Chroote directement le système à ce point de montage" \
        "$funcname -h ou --help" "Affiche cette aide" \
        "$CYAN" "$RESET" \
        "/mnt/*" \
        "/media/*" \
        "/run/media/$USER/*" \
        "/etc/os-release" \
        "$CYAN" "$RESET" \
        "$funcname" "Sélection interactive du système à chrooter" \
        "$funcname -l" "Liste uniquement les systèmes chrootables" \
        "$funcname --path /mnt/arch" "Chroote directement /mnt/arch"
    }

	local action=""
    while [ $# -gt 0 ]; do
        case $1 in
            -h|--help)
                help
                return 0
            ;;
            -l|--list)
                action="list"
            ;;
            -p|--path)
                shift
                if [ -z "$1" ]; then
                    printf "%bErreur : -p ou --path nécessite un chemin%b\n" "$YELLOW" "$RESET"
                    return 1
                fi
                path="$1"
            ;;
            *)
                printf "%bOption inconnue : %s%b\n" "$YELLOW" "$1" "$RESET"
                return 1
            ;;
        esac
        shift
    done

    # Détection des systèmes chrootables
    if [ -z "$path" ]; then
        local os_names=()
        local os_dirs=()
        local dir os_name
        [ "$action" = "list" ] && printf "%bDétection des systèmes chrootables...%b\n" "$CYAN" "$RESET"
        for dir in /mnt/* /media/* /run/media/"$USER"/*; do
            [ -f "$dir/etc/os-release" ] || continue
            local shell_found=""
            local shells=("bash" "zsh" "ksh" "fish" "dash" "sh")
            for s in "${shells[@]}"; do
                if [[ -x "$dir/bin/$s" || -x "$dir/usr/bin/$s" ]]; then
                    shell_found="$s"
                    break
                fi
            done
            if [ -z "$shell_found" ]; then
                continue
            fi
            local root_shell=""
            if [ -f "$dir/etc/passwd" ]; then
                root_shell=$(awk -F: '$1 == "root" {gsub(/.*\//, "", $7); print $7}' "$dir/etc/passwd" 2>/dev/null)
            fi
            if [[ -z "$root_shell" || ! -x "$dir/bin/$root_shell" && ! -x "$dir/usr/bin/$root_shell" ]]; then
                root_shell="$shell_found"
            fi
            # shellcheck disable=SC1091
            source "$dir/etc/os-release" 2>/dev/null || continue
            os_name="$PRETTY_NAME"
            os_names+=("$os_name")
            os_dirs+=("$dir")
            [ "$action" = "list" ] && printf "  - trouvé : %s (%s) [shell: %s]\n" "$os_name" "$dir" "$root_shell"
        done
        if [ ${#os_names[@]} -eq 0 ]; then
            printf "Aucun système chrootable trouvé.\n"
            return 1
        fi
    fi

    if [ "$action" = "list" ]; then
        return 0
    fi

    local mountpoint
    if [ -n "$path" ]; then
        mountpoint="$path"
        [ "$verbose" -eq 1 ] && printf "%bChroot target: %s%b\n" "$CYAN" "$mountpoint" "$RESET"
    else
        printf "%bSélectionnez le système à chrooter (ou tapez 'q' pour quitter) :%b\n" "$CYAN" "$RESET"
        for i in "${!os_names[@]}"; do
            printf "  %02d) %s\n" "$((i+1))" "${os_names[$i]}"
        done
        local selected idx
        while true; do
            printf '#? '
            read -r idx
            [[ $idx =~ ^[qQ]$ ]] && {
                printf "Sortie sans chroot.\n"
                return 0
            }
            [[ $idx =~ ^[0-9]+$ ]] && [ "$idx" -ge 1 ] && [ "$idx" -le ${#os_names[@]} ] && {
                selected=$((idx-1))
                mountpoint=${os_dirs[$selected]}
                break
            }
            printf "%bChoix invalide.%b\n" "$YELLOW" "$RESET"
        done
        [ "$verbose" -eq 1 ] && printf "%bChroot target: %s%b\n" "$CYAN" "$mountpoint" "$RESET"
    fi

    local boot_uuid efi_uuid boot_mnt efi_mnt
    boot_mnt="$mountpoint/boot"
    efi_mnt="$mountpoint/boot/efi"
    if [ -f "$mountpoint/etc/fstab" ]; then
        read -r boot_uuid efi_uuid <<< "$(awk '
            $2 == "/boot"       {print $1}
            $2 == "/boot/efi"   {print $1}
        ' "$mountpoint/etc/fstab")"
    fi

    if [ -n "$boot_uuid" ]; then
        old_boot=$(awk -v uuid="$boot_uuid" '$1 == uuid {print $3}' < /proc/mounts)
        if [ -n "$old_boot" ] && [ "$old_boot" != "$boot_mnt" ]; then
            [ "$verbose" -eq 1 ] && printf "Démontage ancien /boot: %s\n" "$old_boot"
            sudo umount "$old_boot"
        fi
        [ ! -d "$boot_mnt" ] && sudo mkdir -p "$mountpoint/boot" && [ "$verbose" -eq 1 ] && printf "Création du point de montage /boot\n"
        if ! mountpoint -q "$boot_mnt"; then
            [ "$verbose" -eq 1 ] && printf "Montage /boot: %s → %s\n" "$boot_uuid" "$boot_mnt"
            sudo mount "$boot_uuid" "$boot_mnt"
        fi
    fi

    if [ -n "$efi_uuid" ]; then
        old_efi=$(awk -v uuid="$efi_uuid" '$1 == uuid {print $3}' < /proc/mounts)
        if [ -n "$old_efi" ] && [ "$old_efi" != "$efi_mnt" ]; then
            [ "$verbose" -eq 1 ] && printf "Démontage ancien /boot/efi: %s\n" "$old_efi"
            sudo umount "$old_efi"
        fi
        [ ! -d "$efi_mnt" ] && sudo mkdir -p "$efi_mnt" && [ "$verbose" -eq 1 ] && printf "Création du point de montage /boot/efi\n"
        if ! mountpoint -q "$efi_mnt"; then
            [ "$verbose" -eq 1 ] && printf "Montage /boot/efi: %s → %s\n" "$efi_uuid" "$efi_mnt"
            sudo mount "$efi_uuid" "$efi_mnt"
        fi
    fi

    for dir in dev dev/pts proc sys run; do
        [ ! -d "$mountpoint/$dir" ] && sudo mkdir -p "$mountpoint/$dir"
        if ! mountpoint -q "$mountpoint/$dir"; then
            [ "$verbose" -eq 1 ] && printf "Bind mount: /%s → %s/%s\n" "$dir" "$mountpoint" "$dir"
            sudo mount --bind "/$dir" "$mountpoint/$dir"
        fi
    done

    local resolv_host="/etc/resolv.conf"
    local resolv_chroot="$mountpoint/etc/resolv.conf"
    if [ ! -e "$resolv_chroot" ] || [ "$(readlink -f "$resolv_chroot")" != "$(readlink -f "$resolv_host")" ]; then
        [ "$verbose" -eq 1 ] && printf "Copie de %s → %s\n" "$resolv_host" "$resolv_chroot"
        sudo cp -f "$resolv_host" "$resolv_chroot" 2>/dev/null
    fi

    local user_shell
    user_shell=$(awk -F: '$1 == "root" {gsub(/.*\//, "", $7); print $7}' "$mountpoint/etc/passwd" 2>/dev/null)
    if [[ -z "$user_shell" || ! -x "$mountpoint/$user_shell" ]]; then
        local shells=("zsh" "bash" "ksh" "fish" "dash" "sh")
        for s in "${shells[@]}"; do
            if [ -x "$mountpoint/bin/$s" ]; then
                user_shell="/bin/$s"
                break
            fi
            if [ -x "$mountpoint/usr/bin/$s" ]; then
                user_shell="/usr/bin/$s"
                break
            fi
        done
    fi
    [ -z "$user_shell" ] && user_shell="/bin/sh"

    printf "%bEntrée dans le chroot : %s%b\n" "$CYAN" "$mountpoint" "$RESET"
    printf "Tapez 'exit' pour sortir et nettoyer automatiquement\n"
    sudo chroot "$mountpoint" "$user_shell"

	[ "$verbose" -eq 1 ] && printf "%bNettoyage des bind mounts...%b\n" "$CYAN" "$RESET"
	if ! sudo umount -R "$mountpoint" 2>/dev/null; then
	    [ "$verbose" -eq 1 ] && {
	        printf "%bCertains répertoires sont occupés. Utilisation de --lazy...%b\n" "$YELLOW" "$RESET"
	        sudo lsof +D "$mountpoint" 2>/dev/null | head -n 5
	    }
	    sudo umount -Rl "$mountpoint" 2>/dev/null
	fi	
	[ "$verbose" -eq 1 ] && printf "%bNettoyage terminé%b\n" "$CYAN" "$RESET"
}

Dernière modification par lynn (Le 12/04/2026, à 12:02)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2111 Le 09/04/2026, à 17:11

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

pourquoi une fonction (qui contient des fonctions sad ), qui sera chargée à chaque démarrage de bash, plutôt qu'un script (sous ~/.local/bin par exemple), qui ne sera pas moins accessible ?

Dernière modification par Watael (Le 09/04/2026, à 17:11)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#2112 Le 10/04/2026, à 07:21

lynn

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Pourquoi une fonction ? Parce que ça me plait bien et que je peux le faire ^^ ; Après, que les fonctions (j'en ai plusieurs dans ce fichier) se chargent à chaque démarrage de bash ne me dérange pas mais libre à chacun d'utiliser un script placé ailleurs.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2113 Le 10/04/2026, à 11:48

iznobe

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour , pour chrooter , je fais " juste " :

sudo mount -v /dev/nvme0n1p10 /mnt
sudo arch-chroot /mnt 

et pis c' est tout tongue

Dernière modification par iznobe (Le 10/04/2026, à 11:49)

En ligne

#2114 Le 12/04/2026, à 10:15

Robert_75012

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour,

1. A l'adresse de lynn :
Merci pour cette fonction 'chrootme()'
A la fin de cette fonction (lignes 219 et ss.), quand il s'agit du "Nettoyage des bind mounts", y a-t-il une raison à utiliser une boucle for pour tout démonter, au lieu d'utiliser l'option '--recursive' de umount ?

En revanche, n'y a-t-il pas un risque à utiliser immédiatement 'umount --lazy', au lieu d'y aller doucement ?
Pour ma part, j'aurais bien vu :
umount --verbose --recursive (...),
puis en cas d'échec :
umount --verbose --recursive --force (...),
et enfin, si ça bouge encore :
umount --verbose --recursive --lazy (...),

2. A l'adresse de iznobe :
Merci ; je découvre le cht'it script d'ArchLinux 'arch-chroot'.
Je suis allé voir dans ses entrailles ; c'est, en effet, une boîte noire, qui fait le boulot, mais qui ne dit pas ce qu'il fait, "c'est un taiseux".

On y trouve une astuce, façon 'œuf de Christophe Colomb' :

On sait que d'ordinaire, dans un chroot pour accéder à internet et traduire les noms de domaine ('DNS resolution'), on fait :

cp -v /etc/resolv.conf /mnt/$Partition/etc/resolv.conf

Copier le fichier 'resolv.conf' marche bien dans la majorité des cas, mais pas dans une distribution Fedora et autres, où 'resolv.conf' n'est pas un vrai fichier "en dur" mais est un lien symbolique.

'arch-chroot', ne copie pas, mais fait un 'mount --bind' de /etc/resolv.conf sur ce lien symbolique (cf. ligne 159 du script) ; cela devient en substance :

mount -v -o bind /etc/resolv.conf /mnt/$Partition/etc/resolv.conf

Je modifierai en ce sens mon propre script "chrooter".

Robert

Hors ligne

#2115 Le 12/04/2026, à 10:55

iznobe

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour Robert , oui , à ce niveau là , le arch-chroot script est bien plus robuste . c ' est pour ça que je me suis intéressé de prêt à celui-ci , surtout dans le cadre de dépannage sur le forum , où l ' accès internet est primordial .
je ne vois pas trop l' interet de re écrire un script qui marche vraiment trés bien , et pour ma part , je n' ai pas besoin qu ' il soit verbeux big_smile

En ligne

#2116 Le 12/04/2026, à 12:33

lynn

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour,

@Robert_75012 @Watael
Une petite modification qui supprime une fonction dont on peut se passer et l'utilisation de l'option --recursive plutôt qu'une bloucle et l'option --lazy si échec de démontage normal. Après, c'est du virtuel qui est monté, donc il n'y a pas trop de risque à utiliser --lazy.

Robert_75012 a écrit :

Copier le fichier 'resolv.conf' marche bien dans la majorité des cas, mais pas dans une distribution Fedora et autres, où 'resolv.conf' n'est pas un vrai fichier "en dur" mais est un lien symbolique.

Je peux t'assurer que ça fonctionne très bien pour Fedora ainsi que pour l'ensemble des distributions ci dessous.

chrootme 
Sélectionnez le système à chrooter (ou tapez 'q' pour quitter) :
  01) Arch Linux
  02) CachyOS
  03) EndeavourOS
  04) Fedora Linux 43 (Workstation Edition)
  05) Kali GNU/Linux Rolling
  06) Linux Mint 22.3
  07) Manjaro Linux
  08) openSUSE Tumbleweed
  09) Ubuntu 24.04.4 LTS
  10) Ubuntu Resolute Raccoon (development branch)
#? 4
Chroot target: /mnt/fedora
Bind mount: /dev → /mnt/fedora/dev
Bind mount: /dev/pts → /mnt/fedora/dev/pts
Bind mount: /proc → /mnt/fedora/proc
Bind mount: /sys → /mnt/fedora/sys
Bind mount: /run → /mnt/fedora/run
Copie de /etc/resolv.conf → /mnt/fedora/etc/resolv.conf
Entrée dans le chroot : /mnt/fedora
Tapez 'exit' pour sortir et nettoyer automatiquement
root@Ubuntu-24-04:/# dnf update
Mise à jour et chargement des dépôts:
 RPM Fusion for Fedora 43 - Nonfree - Steam                                     100% |   2.5 KiB/s |   8.3 KiB |  00m03s
 RPM Fusion for Fedora 43 - Nonfree - NVIDIA Driver                             100% |   2.8 KiB/s |   8.6 KiB |  00m03s
 google-chrome                                                                  100% | 799.0   B/s |   1.3 KiB |  00m02s
 Fedora 43 - x86_64 - Test Updates                                              100% |   4.8 KiB/s |  14.7 KiB |  00m03s
 Copr repo for PyCharm owned by phracek                                         100% |   1.3 KiB/s |   2.1 KiB |  00m02s
 Fedora 43 - x86_64 - Updates                                                   100% |   7.5 KiB/s |  17.5 KiB |  00m02s
Dépôts chargés.
Paquet                                        Architecture Version                             Dépôt              Taille
Mise à jour de:
 NetworkManager-ssh                           x86_64       1.4.4-1.fc43                        updates-testing 230.6 KiB
   remplacement de NetworkManager-ssh         x86_64       1.4.3-1.fc43                        updates-testing 226.6 KiB
 NetworkManager-ssh-gnome                     x86_64       1.4.4-1.fc43                        updates-testing 173.2 KiB
   remplacement de NetworkManager-ssh-gnome   x86_64       1.4.3-1.fc43                        updates-testing 173.2 KiB
 NetworkManager-ssh-selinux                   x86_64       1.4.4-1.fc43                        updates-testing  18.6 KiB
   remplacement de NetworkManager-ssh-selinux x86_64       1.4.3-1.fc43                        updates-testing  18.6 KiB
 aardvark-dns                                 x86_64       2:1.17.1-1.fc43                     updates-testing   2.3 MiB
   remplacement de aardvark-dns               x86_64       2:1.17.0-1.fc43                     updates           2.4 MiB
 bind-libs                                    x86_64       32:9.18.48-1.fc43                   updates-testing   3.6 MiB
   remplacement de bind-libs                  x86_64       32:9.18.47-1.fc43                   updates           3.6 MiB
 bind-utils                                   x86_64       32:9.18.48-1.fc43                   updates-testing 665.2 KiB
   remplacement de bind-utils                 x86_64       32:9.18.47-1.fc43                   updates         665.2 KiB
 binutils                                     x86_64       2.45.1-5.fc43                       updates-testing  27.3 MiB
   remplacement de binutils                   x86_64       2.45.1-4.fc43                       updates          27.3 MiB
 cockpit-bridge                               noarch       360-1.fc43                          updates           2.1 MiB
   remplacement de cockpit-bridge             noarch       359-1.fc43                          updates           2.1 MiB
 cockpit-storaged                             noarch       360-1.fc43                          updates         851.4 KiB
   remplacement de cockpit-storaged           noarch       359-1.fc43                          updates         851.4 KiB
 cockpit-system                               noarch       360-1.fc43                          updates           3.1 MiB
   remplacement de cockpit-system             noarch       359-1.fc43                          updates           3.1 MiB
 cockpit-ws                                   x86_64       360-1.fc43                          updates           1.9 MiB
   remplacement de cockpit-ws                 x86_64       359-1.fc43                          updates           1.9 MiB
 cockpit-ws-selinux                           x86_64       360-1.fc43                          updates          44.9 KiB
   remplacement de cockpit-ws-selinux         x86_64       359-1.fc43                          updates          44.9 KiB
 edk2-ovmf                                    noarch       20260213-3.fc43                     updates-testing  45.2 MiB
   remplacement de edk2-ovmf                  noarch       20260213-2.fc43                     updates          45.2 MiB
 edk2-shell-x64                               noarch       20260213-3.fc43                     updates-testing   1.1 MiB
   remplacement de edk2-shell-x64             noarch       20260213-2.fc43                     updates           1.1 MiB
 firefox                                      x86_64       149.0.2-1.fc43                      updates         267.4 MiB
   remplacement de firefox                    x86_64       149.0-4.fc43                        updates         267.1 MiB
 firefox-langpacks                            x86_64       149.0.2-1.fc43                      updates          42.4 MiB
   remplacement de firefox-langpacks          x86_64       149.0-4.fc43                        updates          42.3 MiB
 flatpak                                      x86_64       1.16.5-1.fc43                       updates-testing   7.4 MiB
   remplacement de flatpak                    x86_64       1.16.3-1.fc43                       updates           7.3 MiB
 flatpak-libs                                 x86_64       1.16.5-1.fc43                       updates-testing   1.1 MiB
   remplacement de flatpak-libs               x86_64       1.16.3-1.fc43                       updates           1.0 MiB
 flatpak-selinux                              noarch       1.16.5-1.fc43                       updates-testing  12.7 KiB
   remplacement de flatpak-selinux            noarch       1.16.3-1.fc43                       updates          12.7 KiB
 flatpak-session-helper                       x86_64       1.16.5-1.fc43                       updates-testing  99.2 KiB
   remplacement de flatpak-session-helper     x86_64       1.16.3-1.fc43                       updates          99.2 KiB
 glibc                                        x86_64       2.42-11.fc43                        updates-testing   6.7 MiB
   remplacement de glibc                      x86_64       2.42-10.fc43                        updates           6.7 MiB
 glibc-all-langpacks                          x86_64       2.42-11.fc43                        updates-testing 226.9 MiB
   remplacement de glibc-all-langpacks        x86_64       2.42-10.fc43                        updates         226.9 MiB
 glibc-common                                 x86_64       2.42-11.fc43                        updates-testing   1.0 MiB
   remplacement de glibc-common               x86_64       2.42-10.fc43                        updates           1.0 MiB
 glibc-gconv-extra                            x86_64       2.42-11.fc43                        updates-testing   7.2 MiB
   remplacement de glibc-gconv-extra          x86_64       2.42-10.fc43                        updates           7.2 MiB
 grub2-common                                 noarch       1:2.12-43.fc43                      updates           6.1 MiB
   remplacement de grub2-common               noarch       1:2.12-42.fc43                      updates-testing   6.1 MiB
 grub2-efi-ia32                               x86_64       1:2.12-43.fc43                      updates           5.2 MiB
   remplacement de grub2-efi-ia32             x86_64       1:2.12-42.fc43                      updates-testing   5.2 MiB
 grub2-efi-ia32-cdboot                        x86_64       1:2.12-43.fc43                      updates           5.2 MiB
   remplacement de grub2-efi-ia32-cdboot      x86_64       1:2.12-42.fc43                      updates-testing   5.2 MiB
 grub2-efi-ia32-modules                       noarch       1:2.12-43.fc43                      updates           3.7 MiB
   remplacement de grub2-efi-ia32-modules     noarch       1:2.12-42.fc43                      updates-testing   3.7 MiB
 grub2-efi-x64                                x86_64       1:2.12-43.fc43                      updates           6.1 MiB
   remplacement de grub2-efi-x64              x86_64       1:2.12-42.fc43                      updates-testing   6.1 MiB
 grub2-efi-x64-cdboot                         x86_64       1:2.12-43.fc43                      updates           6.1 MiB
   remplacement de grub2-efi-x64-cdboot       x86_64       1:2.12-42.fc43                      updates-testing   6.1 MiB
 grub2-efi-x64-modules                        noarch       1:2.12-43.fc43                      updates           5.5 MiB
   remplacement de grub2-efi-x64-modules      noarch       1:2.12-42.fc43                      updates-testing   5.5 MiB
 grub2-pc                                     x86_64       1:2.12-43.fc43                      updates          31.0   B
   remplacement de grub2-pc                   x86_64       1:2.12-42.fc43                      updates-testing  31.0   B
 grub2-pc-modules                             noarch       1:2.12-43.fc43                      updates           3.2 MiB
   remplacement de grub2-pc-modules           noarch       1:2.12-42.fc43                      updates-testing   3.2 MiB
 grub2-tools                                  x86_64       1:2.12-43.fc43                      updates           7.7 MiB
   remplacement de grub2-tools                x86_64       1:2.12-42.fc43                      updates-testing   7.7 MiB
 grub2-tools-efi                              x86_64       1:2.12-43.fc43                      updates           2.5 MiB
   remplacement de grub2-tools-efi            x86_64       1:2.12-42.fc43                      updates-testing   2.5 MiB
 grub2-tools-extra                            x86_64       1:2.12-43.fc43                      updates           5.0 MiB
   remplacement de grub2-tools-extra          x86_64       1:2.12-42.fc43                      updates-testing   5.0 MiB
 grub2-tools-minimal                          x86_64       1:2.12-43.fc43                      updates           3.0 MiB
   remplacement de grub2-tools-minimal        x86_64       1:2.12-42.fc43                      updates-testing   3.0 MiB
 ibus-typing-booster                          noarch       2.30.6-1.fc43                       updates-testing   9.0 MiB
   remplacement de ibus-typing-booster        noarch       2.30.4-1.fc43                       updates           9.0 MiB
 kdump-utils                                  x86_64       1.0.61-1.fc43                       updates-testing 294.6 KiB
   remplacement de kdump-utils                x86_64       1.0.60-1.fc43                       updates-testing 294.7 KiB
 libcap                                       x86_64       2.76-4.fc43                         updates-testing 209.1 KiB
   remplacement de libcap                     x86_64       2.76-3.fc43                         0e44b8838a06423 209.1 KiB
 libcap-ng                                    x86_64       0.9.3-1.fc43                        updates-testing  69.0 KiB
   remplacement de libcap-ng                  x86_64       0.9.2-1.fc43                        updates          65.0 KiB
 libcap-ng-python3                            x86_64       0.9.3-1.fc43                        updates-testing  87.7 KiB
   remplacement de libcap-ng-python3          x86_64       0.9.2-1.fc43                        updates          86.7 KiB
 libpng                                       x86_64       2:1.6.56-1.fc43                     updates-testing 241.8 KiB
   remplacement de libpng                     x86_64       2:1.6.55-1.fc43                     updates         241.7 KiB
 selinux-policy                               noarch       43.6-1.fc43                         updates          32.0 KiB
   remplacement de selinux-policy             noarch       43.4-2.fc43                         updates          32.0 KiB
 selinux-policy-targeted                      noarch       43.6-1.fc43                         updates          18.6 MiB
   remplacement de selinux-policy-targeted    noarch       43.4-2.fc43                         updates          18.5 MiB
 xdg-desktop-portal                           x86_64       1.20.4-1.fc43                       updates-testing   1.9 MiB
   remplacement de xdg-desktop-portal         x86_64       1.20.3-2.fc43                       0e44b8838a06423   1.8 MiB

Résumé de la transaction:
 Mise à jour:      46 paquets
 Remplacement :     46 paquets

La taille totale des paquets entrants est de 197 MiB. Un téléchargement de 197 MiB est nécessaire.
Après cette opération, 637 KiB supplémentaires seront utilisés (+739 MiB, -738 MiB).
Is this ok [y/N]: 

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne