Po uruchomieniu chroot
polecenia pojawia się błąd:
failed to run command ‘/bin/bash’: No such file or directory
executable
chroot
USER3254789
źródło
źródło
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
źródło
/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:źródło
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:
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
źródło
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
Zostało to naprawione poprzez wykonanie następujących czynności:
źródło
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)musisz uruchomić ldd przeciwko bashowi
ldd $(which bash)
, wtedy możesz znaleźć brakującą zależność, na przykład jeśli nie zainstalowałeś / nie skopiowałeś lib64, dla 64 systemów, przejdzie przez ten błąd.źródło
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
źródło