[chroot] /bin/bash non trouvé (résolue)

Applications, problèmes de configuration réseau
awesomeman
Hankyu
Messages : 15
Inscription : mar. 02 févr. 2016, 00:14

[chroot] /bin/bash non trouvé (résolue)

Message par awesomeman »

Bonjour,

Je rencontre des soucis pour créer un env chroot. j'ai parfaitement réussi sur ubuntu mais pas sur manjaro ... :roll:
Voici la page que j'ai suivi : https://wiki.archlinux.fr/Environnement_chroot

j'ai crée un dossier bashjail et j'ai lancé le script de la page:

Code : Tout sélectionner

#> mkdir bashjail 
#> ./autochroot bashjail bash /bin/bash bash ls cp mv rm cat more mkdir touch
++ mkdir -p bashjail/usr/lib
+ cp -a /usr/lib/libreadline.so.8.0 bashjail/usr/lib/libreadline.so.8
+ cp -a /usr/lib/libdl-2.30.so bashjail/usr/lib/libdl.so.2
+ cp -a /usr/lib/libc-2.30.so bashjail/usr/lib/libc.so.6
+ cp -a /usr/lib/libncursesw.so.6.1 bashjail/usr/lib/libncursesw.so.6
++ mkdir -p bashjail/usr/lib64
+ cp -a /usr/lib/ld-2.30.so bashjail/usr/lib64/ld-linux-x86-64.so.2
++ mkdir -p bashjail/usr/bin
+ cp -a /usr/bin/bash bashjail/usr/bin/bash
++ mkdir -p bashjail/bin
+ cp -a /usr/bin/bash bashjail/bin/bash
+ cp -a /usr/lib/libcap.so.2.29 bashjail/usr/lib/libcap.so.2
+ cp -a /usr/bin/ls bashjail/usr/bin/ls
+ cp -a /usr/lib/libacl.so.1.1.2253 bashjail/usr/lib/libacl.so.1
+ cp -a /usr/lib/libattr.so.1.1.2448 bashjail/usr/lib/libattr.so.1
+ cp -a /usr/bin/cp bashjail/usr/bin/cp
+ cp -a /usr/bin/mv bashjail/usr/bin/mv
+ cp -a /usr/bin/rm bashjail/usr/bin/rm
+ cp -a /usr/bin/cat bashjail/usr/bin/cat
+ cp -a /usr/bin/more bashjail/usr/bin/more
+ cp -a /usr/bin/mkdir bashjail/usr/bin/mkdir
+ cp -a /usr/bin/touch bashjail/usr/bin/touch
#> sudo chroot bashjail 
chroot: failed to run command ‘/bin/bash’: No such file or directory 
j'ai run les commandes sour /tmp/test

voici le tree du dossier:

Code : Tout sélectionner

/tmp/test
├── autochroot
└── bashjail
    ├── bin
    │   └── bash
    └── usr
        ├── bin
        │   ├── bash
        │   ├── cat
        │   ├── cp
        │   ├── ls
        │   ├── mkdir
        │   ├── more
        │   ├── mv
        │   ├── rm
        │   └── touch
        ├── lib
        │   ├── libacl.so.1
        │   ├── libattr.so.1
        │   ├── libcap.so.2
        │   ├── libc.so.6
        │   ├── libdl.so.2
        │   ├── libncursesw.so.6
        │   └── libreadline.so.8
        └── lib64
            └── ld-linux-x86-64.so.2

6 directories, 19 files
Peut-être que la page n'est plus à jour ? est ce que ça marche de votre coté ?

Merci beaucoup et bonne journée !
Dernière modification par awesomeman le mar. 21 janv. 2020, 12:02, modifié 1 fois.
sukolyn
archer
Messages : 107
Inscription : mar. 11 juil. 2017, 09:56

Re: [chroot] /bin/bash non trouvé (début)

Message par sukolyn »

salut,

deux choses (au moins) :
- il faut lib et lib64 à la racine du chroot
- il faut l'objet vers lequel pointe les liens (ld-linux... -> ld-2.30...)

or readlink, sur ld-linux... renvoie vers /usr/lib EDIT: parce que /lib64 est un lien vers /usr/lib
hmm, pas évident à démêler.
à suivre.
sukolyn
archer
Messages : 107
Inscription : mar. 11 juil. 2017, 09:56

Re: [chroot] /bin/bash non trouvé (début)

Message par sukolyn »

ceci semble fonctionner (youhou! trop content!), mais ce n'est pas totalement automatiser (argh.) :

Code : Tout sélectionner

#!/bin/bash

progs=( bash ls cp mv rm cat more mkdir touch )
progsPaths=( $(which "${progs[@]}") )

mkdir myJail
ln -s  /usr/lib{,64} myJail/
cp -a --parents -t myJail/ $(ldd "${progsPaths[@]}" | awk '/^\s+/{for(nf=1;nf<=NF;nf++){if($nf~"^/")print $nf}}' | sort -u)
cp -a --parents -t myJail/ $(readlink -f $(ldd "${progsPaths[@]}" | awk '/^\s+/{for(nf=1;nf<=NF;nf++){if($nf~"^/")print $nf}}' | sort -u)|sort -u)
cp -a --parents -t myJail/ "${progsPaths[@]}"
cp -a --parents -t myJail/ /usr/lib64/ld-2.30.so #ça, je n'arrive pas encore à le "déduire" des commandes précédentes

sudo chroot myJail/ /usr/bin/bash
awesomeman
Hankyu
Messages : 15
Inscription : mar. 02 févr. 2016, 00:14

Re: [chroot] /bin/bash non trouvé (début)

Message par awesomeman »

Good job !

c'est cette ligne qu'il me manquait :wink: :

Code : Tout sélectionner

ln -s  /usr/lib{,64} myJail/
Sinon j'ai une question:
pourquoi utilises tu "cp -t" ?

et pour tout le monde:
une idée de pourquoi cette commande

Code : Tout sélectionner

readlink -f /usr/lib64/ld-linux-x86-64.so.2
renvoie

Code : Tout sélectionner

/usr/lib/ld-2.30.so
au lieu de renvoyer

Code : Tout sélectionner

/usr/lib64/ld-2.30.so
Du coup, voici le script final que je me suis fais, si vous avez des conseils pour l'améliorer, n'hésitez pas:

Code : Tout sélectionner

#!/bin/bash

if [[ -f /tmp/bashjail ]]
then
    echo "already exists on your filesystem. will be removed..."
    rm -rf /tmp/bashjail
else
    mkdir -p /tmp/bashjail/etc
    ln -s /usr/lib{,64} /tmp/bashjail/
fi

progs=(bash ls cp)
paths=$(ldd $(which "${progs[@]}") | awk '{print $3}' | tr " " "\n")

for path in $paths; do
    cp -a --parents $path /tmp/bashjail/
    cp -a --parents $(readlink -f $path) /tmp/bashjail/
done

for prog in ${progs[@]}; do
    cp -a --parents $(which $prog) /tmp/bashjail/
done

cp -a --parents /usr/lib64/ld-2.30.so /tmp/bashjail/

echo "PS1='JAIL $> ' " | tee /tmp/bashjail/etc/bash.bashrc
sudo chroot /tmp/bashjail /usr/bin/bash
et encore merci à toi sukolyn pour ta solution magique :)
sukolyn
archer
Messages : 107
Inscription : mar. 11 juil. 2017, 09:56

Re: [chroot] /bin/bash non trouvé (début)

Message par sukolyn »

je trouve ça plus clair d'indiquer la destination (--target-directory) avant une liste de "sources", qui peut être longue, voire dépasser la largeur de l'écran
il y a tellement de temps que je fais comme ça, j'ai oublié quel piège à motivé cette décision.
lemust83
archer de cavalerie
Messages : 190
Inscription : ven. 11 déc. 2015, 21:20
Contact :

Re: [chroot] /bin/bash non trouvé (début)

Message par lemust83 »

Bonjour.
Personnellement, je me sers de # systemd-nspawn -D <chemin_vers_partition_/> après l'avoir montée.
Sinon, Manjaro a un paquet manjaro-chroot qui avec l'option -a détecte, monte et chroot automatiquement après validation du choix.
Tour: Arch (Xfce) 64 Testing: 6-Core: AMD Ryzen 5 2600X type: MT MCP speed: 2152 MHz min/max: 2200/3600 MH
UEFI: American Megatrends v: 3803 date: 01/22/2018
Graphics:
Device-1: AMD Baffin [Radeon RX 460/560D / Pro
450/455/460/555/555X/560/560X]
driver: amdgpu v: kernel
Display: server: X.Org 1.20.8 driver: amdgpu,ati unloaded: modesetting
resolution: 1920x1080~60Hz
OpenGL: renderer: Radeon RX 560 Series
Manjaro en Dual (grub).
awesomeman
Hankyu
Messages : 15
Inscription : mar. 02 févr. 2016, 00:14

Re: [chroot] /bin/bash non trouvé (résolue)

Message par awesomeman »

Personnellement, je me sers de # systemd-nspawn -D <chemin_vers_partition_/> après l'avoir montée.
intéressant, je ne connaissais pas, merci !
Manjaro a un paquet manjaro-chroot qui avec l'option -a détecte, monte et chroot automatiquement après validation du choix.
en effet, mais je voulais le faire manuellement à des fins "pédagogique" :)
Répondre