Po uruchomieniu chroot
polecenia pojawia się błąd:
failed to run command ‘/bin/bash’: No such file or directory
Po uruchomieniu chroot
polecenia pojawia się błąd:
failed to run command ‘/bin/bash’: No such file or directory
Odpowiedzi:
Ten błąd oznacza, że w chroot nie ma /bin/bash
katalogu . Upewnij się, że wskazałeś, gdzie znajduje się plik wykonywalny (lub innej powłoki) w katalogu.bash
chroot
Jeśli masz /mnt/somedir/usr/bin/bash
to wykonaćchroot /mnt/somedir /usr/bin/bash
/root/.bashrc
lub . Czy możesz tymczasowo zmienić nazwę tych plików? Czy możesz także upewnić się, że jest wykonywalny ( )? /root/.bash_profile
chroot
bash
chmod +x /chroot/bin/bash
Miałem /bin/bash
wewnątrz katalogu chrootowanego, ale nie miałem w nim / lib i / lib64. Wiadomość z chroot może być bardziej opisowa. „brak takiego pliku lub katalogu” naprawdę oznacza „Nie mogę uruchomić tego ...”.
/bin/bash
zależy oczywiście od libc, ld-linux, libdl itp. Możesz użyć, ldd /bin/bash
aby zobaczyć, jakich bibliotek potrzebuje.
1) Możesz mount -o bind
te katalogi w chroot 2) Lub możesz skopiować te biblioteki do chroot, jeśli nie ufasz chrootowanej env, aby ich nie uszkodzić, tak jak:
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
chroot
próbuje uruchomić powłokę ustawioną $SHELL
domyślnie w zmiennej środowiskowej, ale szuka jej w nowym katalogu głównym, który wydaje się nie zawierać /bin/bash
, więc nie może się uruchomić.
Możesz powiedzieć chrootowi, aby uruchomił inny program w nowym katalogu głównym, po prostu dodając go jako parametr:
chroot /your/new/root /bin/foo --options...
Zauważ, że ścieżka polecenia jest interpretowana w twoim nowym katalogu głównym, więc w tym przykładzie wywoływany program jest w rzeczywistości/your/new/root/bin/foo
Otrzymałem ten sam błąd podczas próby ssh do konta chrootowanego na zdalnym serwerze. W moim przypadku brakowało następującego pliku w zdalnym katalogu lib64. Serwer to Centos6.9
ld-linux-x86-64.so.2
Zostało to naprawione poprzez wykonanie następujących czynności:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
cp -r /lib /lib64 /secure/jail
to, potrzebowałem czegoś zarówno z lib, jak i lib64, i nie zadałem sobie trudu, aby dowiedzieć się dokładnie, co. (prawdopodobnie dlatego, że mam włączoną funkcję multiarch)
Jeśli wykonujesz kompilację krzyżową, musisz użyć symulatora qemu, który może uruchomić / mnt / somedir / bin / bash po skopiowaniu qemu-arm-static (robię to dla armhf) do / mnt / somedir / usr / bin będziesz mógł zrobić chroot.
Sprawdź to, aby uzyskać więcej informacji: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html