Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Bonjour @ tous J'ai constaté que bon nombre d'entre nous ont du passer un système en chroot pour pouvoir se dépanner depuis un autre système. Cette démarche pas très compliquée rebute souvent les débutants ou ceux qui préfèrent le "servez chaud". Rien ne remplace l'apprentissage par une démarche personnelle de recherche , pourtant parfois, un petit coup de main est le bienvenu. C'est donc dans une démarche très personnelle que je me suis lancé dans l'élaboration pour ne pas dire un bricolage d'un petit script Bash après avoir consulté des pages entières sur le sujet. Du coup, ce script m'a permis d'avancer un peu, et c'est plutôt aux testeurs et au curieux que je m'adresse, encore que ça peut toujours servir comme disait Lacoste. Mise en garde: Comme vous le savez , les systèmes Unix-Like dont fait partie Linux et donc Manjaro, reposent sur le FHS (File Hierarchy Standard) où tout est fichiers depuis la racine "/" . La commande chroot permet de changer de racine "/" depuis un système actif vers un autre inactif, généralement malade, ou pour mettre à jour un grub somnolant.... Ce n'est pas une commande a prendre à la légère! Easy2chroot vous permet donc de rechercher les partitions "chrootables" , de monter à votre place celle de votre choix et de la démonter automatiquement quand vous avez terminé. Notez qu'après un chroot, le chemin d'exécution des binaires du système n'est plus valide et que le reboot est parfois nécessaire, surtout si on doit compiler. Pour le commun des mortels, le chroot servira a modifier des fichiers systèmes (fstab ,grub.conf,etc...) dans une distro malmenée par une mise à jour ou une bourde réparable Voici pour la mise en bouche. On y va!
Créez un fichier texte dans votre home avec l'éditeur de votre choix et nommez le easy2chroot. Par exemple :
gedit easy2chroot
J' emploie sudo car ce script doit être lancé avec les droits root et je n'en ai mis aucun dans le fichier. Donnez lui les droits nécessaires :
sudo chmod a+x easy2chroot
et collez-y ces lignes:
#!/bin/bash
if [[ ! $(whoami) = "root" ]]; then echo "Ce script doit être lancé avec les droits root." exit 1 fi
#Déclaration de la fonction Intro intro() { echo echo "easy2chroot vous permet de chrooter aisement une partition système détectée par os-prober il ne fait qu'executer des commandes à votre place. Vous n'aurez qu'a renseigner la partition racine que vous voulez <<chrooter>>" echo echo "Voici les partitions racine que vous pouvez chrooter. Veuillez patienter pendant la détection par os-prober." }
#Déclaration de la fonction de selection selection() { echo "Quelle partition voulez-vous chrooter? important: Entrez la partition au format: /dev/sdXY" read -p "/dev/sd" choix echo "Vous avez choisi la racine /dev/sd$choix" echo "Confirmez! Tapez[o] ou [n]?"
read }
#Déclaration de la fonction de montage automatique montageAuto() { mount /dev/sd$choix /mnt mount --bind /dev /mnt/dev mount -t proc /proc /mnt/proc mount -t sysfs /sys /mnt/sys mount -t devpts pts /mnt/dev/pts/ echo "Vous êtes en chroot sur /dev/sd$choix Vous pouvez modifier directement des fichiers systèmes. Pour utiliser des commandes propres à votre système chrooté vous devez renseigner le PATH. Copier/collez cette ligne: export PATH=/usr/bin:/bin:/usr/sbin:/sbin
Tapez exit pour quitter." chroot /mnt }
#Déclaration de la fonction de demande de démontage demandedemontage() { echo echo "Voulez-vous démonter automatiquement /dev/sd$choix ? Tapez[o] ou [n] pour continuer " read -r fin }
#Déclaration de la fonction démontage demontageAuto() { umount /mnt/proc umount /mnt/sys umount /mnt/dev umount /dev/sd$choix /mnt exit }
#Déclaration de la fonction Avertissement avertissement() { echo "N'oubliez pas de démonter votre partition avant d'éteindre votre ordinateur!! #umount /mnt/proc #umount /mnt/sys #umount /mnt/dev #umount /dev/sd$choix /mnt " }
pas assez calé en script pour apporter quoi que ce soit.
Un point pour la discussion : pourquoi chez arch on ne monte rien avant chroot ? J'ai écris il y a quelque temps que arch-chroot remplaçait tous les montages proc, sys, etc.. avant chroot, et il s'avère que non. ci dessous le contenu de arch-root.in contenu dans le paquet arch-install-scripts :
If 'command' is unspecified, ${0##*/} will launch /bin/sh.
EOF }
if [[ -z $1 || $1 = @(-h|--help) ]]; then usage exit $(( $# ? 0 : 1 )) fi
(( EUID == 0 )) || die 'This script must be run with root privileges' chrootdir=$1 shift
[[ -d $chrootdir ]] || die "Can't create chroot on non-directory %s" "$chrootdir"
api_fs_mount "$chrootdir" || die "failed to setup API filesystems in chroot %s" "$chrootdir" track_mount /etc/resolv.conf "$chrootdir/etc/resolv.conf" --bind
SHELL=/bin/sh chroot "$chrootdir" "$@"
Donc : faut il vraiment faire tous les montages sous manjaro ? Les wikis le dise. Je m'interroge.
Macbook 5,1 - Manjaro-Xfce - CPU : Core2Duo 2Ghz | 4Go DDR3 | CG: NVIDIA GeForce 9400M | Son : NVIDIA MCP79
Thinkpad x250 - Arch-Gnome - CPU i5 5200U | 8Go DDR3 | CG: Intel HD 5500 | Son : Intel Wildcat Point-LP HDA
Je me suis aussi posé la question. C'est de manière empirique que j'ai repris cette façon de monter donnée par ewolnux et qui a toujours bien fonctionné. Je me suis lancé dans ce script avec l'intention reprendre la fonction de choix numérique comme dans yaourt. Et puis j'ai reculé devant le mur incompréhension ,et l'ai composé "from scratch" ,d'où la relative simplicité du code. Par contre ,il faut taper "/dev/sdXY" plutôt qu'un chiffre.... Ça reste un bon entraînement
Noyau récent MANJARO x86_64 bits: 64 Xfce 4.16
ASUSTeK model: PRIME B350M-A v: Rev X.0x
6-Core: AMD Ryzen 5 2600X
AMD Baffin [Radeon RX 460/560D / Pro
driver: amdgpu v: kernel
Display: x11 server: X.Org driver: amdgpu,ati unloaded: modesetting
OpenGL: renderer: Radeon RX 560 Series
Arch en Dual. Aucun lien publicitaire ne saurait être toléré dans la signature!
lemust83 a écrit :Créez un fichier texte dans votre home et nommez le easy2chroot. Par exemple :
sudo gedit easy2chroot
J' emploie sudo car ce script doit être lancé avec les droits root et je n'en ai mis aucun dans le fichier.
il n'est pas utile de créer ce script en Root, d'autant qu'il est placé dans le home d'un utilisateur simple; le fait que le script appartienne à un utilisateur lambda ou à Root ne conditionne en rien ses droits d'exécution futurs. ce qui attribue les droits d'exécution à ton script, c'est l'utilisateur qui le lance, pas l'utilisateur à qui il appartient (sauf si on ajoute un setuid).
et comme il est déconseillé de placer des fichiers appartenant à Root dans le home d'un utilisateur, source de problèmes ultérieurs...
Asus AIO - AMD E2 - Radeon HD 7340 - Manjaro 64 + Kf5 + Linux 3.14
Je n'avais pas pensé à ça... En fait ,si on le lance sans sudo , le programme s’exécute avec des erreurs évidement . A moins de rajouter un sudo devant os-prober dans le script, je ne vois pas trop comment on peux faire pour que la demande de MP soit automatique. Edit : Le script a été modifié pour ne s'exécuter qu'en droits root.
Noyau récent MANJARO x86_64 bits: 64 Xfce 4.16
ASUSTeK model: PRIME B350M-A v: Rev X.0x
6-Core: AMD Ryzen 5 2600X
AMD Baffin [Radeon RX 460/560D / Pro
driver: amdgpu v: kernel
Display: x11 server: X.Org driver: amdgpu,ati unloaded: modesetting
OpenGL: renderer: Radeon RX 560 Series
Arch en Dual. Aucun lien publicitaire ne saurait être toléré dans la signature!
Otacon a écrit :ouaip, manque plus que fassil colle ce script dans un de ses isos, et j'essaierai peut être un jour Exx !
J'ai un alias "rooty" dans le .bashrc du live qui une fois la partition cible (à chrooter) renseignée s'occupe de tout sans rien démonter (tout démonter proprement dans la ram, pfuuu.. ).
alias rooty='sudo mount /dev/sda4 /mnt && sudo mount --bind /dev /mnt/dev && sudo mount -t proc /proc /mnt/proc && sudo mount -t sysfs /sys /mnt/sys && sudo chroot /mnt'
@lemust, tant qu'on y est: alias easy2chroot='sudo easy2chroot' # Explicatif en mettant/laissant le script à sa place (/usr/bin) ?
Ps: Je pense que les raisons de "chrooter" sont moins nombreuses que ça, finalement, en fait c'est + d'accès terminal (tty) du tout sur le système malade pour lancer un truc... Ps²: @lemust, je pense d'un coup qu'il faudra modifier le nom du script (mais pas l'alias) pour que cela fonctionne
"Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y a plus rien à retrancher"
Antoine de Saint-Exupéry
Dernière modification par fassilil y a 9 ans, modifié au total 1 fois.
Salut Fassil. On peut bien sur résumer la commande à un simple alias.Ça sous entend qu'on connait parfaitement le nom de la partition à monter. J'avais commencé avec blkid , mais les retours de cette commande sont un peu trop bavards et abscons pour un novice.Os-prober pour le coup, identifie nominativement les racines ,et ça ,c'est pas évident dans un alias. Le coller dans /usrbin ou /usr/local/bin était ma première intention. L'idée en fait consistait à en faciliter l'usage depuis une live sans rien "installer" au sens propre du terme, c'est à dire en dehors du home. Si l'idée séduit ,je pourrais alors en faire un paquet installable depuis Aur, mais comme tu le dis si bien , les occasions ne sont pas aussi fréquentes que ça, et il est toujours plus important de savoir ce qu'on fait que de recourir à ce genre de script. Pourtant , je me dis que ça n'est pas totalement inutile. Au moins , on peut se faire une idée de ce qui se passe quand on tape dans un terminal .
Noyau récent MANJARO x86_64 bits: 64 Xfce 4.16
ASUSTeK model: PRIME B350M-A v: Rev X.0x
6-Core: AMD Ryzen 5 2600X
AMD Baffin [Radeon RX 460/560D / Pro
driver: amdgpu v: kernel
Display: x11 server: X.Org driver: amdgpu,ati unloaded: modesetting
OpenGL: renderer: Radeon RX 560 Series
Arch en Dual. Aucun lien publicitaire ne saurait être toléré dans la signature!
Yep, mais tu peux aussi lancer ton script avec un alias (en modifiant un brin son nom), n'est-il pas ? genre: alias easy2chroot='/usr/bin/sudo easy2chroot'
Ps: X'cuses pour les multiples éditions/raturages, je teste en même temps que j'écris...
"Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y a plus rien à retrancher"
Antoine de Saint-Exupéry
Bon ,ben je n'aurais pas fait ça pour rien. Ça a permis de donner des idées. Bien sur qu'il y avait plus simple . Ce que je visais était surtout la détection des partitions "chrootables" . Dans un alias ,il faut connaitre la à l'avance . Comme je le rappelle ,c'était aussi un exercice pour moi Je vais m’atteler à d'autres idées du genre.
Noyau récent MANJARO x86_64 bits: 64 Xfce 4.16
ASUSTeK model: PRIME B350M-A v: Rev X.0x
6-Core: AMD Ryzen 5 2600X
AMD Baffin [Radeon RX 460/560D / Pro
driver: amdgpu v: kernel
Display: x11 server: X.Org driver: amdgpu,ati unloaded: modesetting
OpenGL: renderer: Radeon RX 560 Series
Arch en Dual. Aucun lien publicitaire ne saurait être toléré dans la signature!
lemust83 a écrit :Bien sur qu'il y avait plus simple . Ce que je visais était surtout la détection des partitions "chrootables" . Dans un alias ,il faut connaitre la à l'avance .
Mon alias ne mentionne pas de partition.
Desktop - Manjaro-KDE x86_64 Stable / Arch-KDE x86_64 - CPU : Intel® i5-3570K @ 3.40GHz - RAM 8 GO - Carte-mère : MSI Z77A-G45
Carte graphique : Intel® HD Graphics 4000 - Audio device: Intel Corporation Panther Point High Definition Audio Controller Laptop – Manjaro-XFCE x86_64 - CPU : Intel Pentium Dual-Core B940 - Carte graphique : Intel HD Graphics 3000
"Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y a plus rien à retrancher"
Antoine de Saint-Exupéry
lemust83 a écrit :Dans l'alias rooty , il y a /dev/sdb2 . Ça correspond avec ce que tu veux? GID me fait penser à un problème de reconnaissance du MP Utilisateur/Root.
J'avais remarqué que le démontage pose parfois problème. J'ai d'ailleurs mis la fonction de démontage auto dans le script qui est analogue à la tienne. J'ai aussi noté que plusieurs opérations chroot peuvent obliger à rebooter à moins de savoir jouer du fuser -k et de repointer le chemin de /bin dans le noyau.....
Noyau récent MANJARO x86_64 bits: 64 Xfce 4.16
ASUSTeK model: PRIME B350M-A v: Rev X.0x
6-Core: AMD Ryzen 5 2600X
AMD Baffin [Radeon RX 460/560D / Pro
driver: amdgpu v: kernel
Display: x11 server: X.Org driver: amdgpu,ati unloaded: modesetting
OpenGL: renderer: Radeon RX 560 Series
Arch en Dual. Aucun lien publicitaire ne saurait être toléré dans la signature!