Podczas próby wykonania chroot wystąpił błąd: „chroot: nie można uruchomić polecenia„ / bin / bash ”: błąd formatu wykonania”

20

Postępowałem zgodnie z instrukcjami tego samouczka : Czyszczenie i ponowne instalowanie Grub 2 z Live CD , gdy napotkałem błąd w kroku 1, gdy uruchomiłem polecenie

sudo chroot /mnt/temp

Błąd był następujący:

chroot: failed to run command `/bin/bash': Exec format error

Skąd to pochodzi? Jak mam się przebić?

Grand Oxymore
źródło

Odpowiedzi:

22

Sprawdź, czy używasz właściwej płyty Live CD. Na przykład sprawdź, czy nie używasz 32-bitowej płyty CD zamiast 64-bitowej płyty CD. Do uruchomienia 64-bitowego kodu potrzebujesz jądra 64-bitowego, więc sprawdź swoją architekturę.

Zakładając, że zamontowałeś system do chrootowania w / media / sda1 , aby określić architekturę, którą możesz:

ls /media/sda1/*

jeśli zobaczysz lib64 na wyjściu, prawdopodobnie jest to system 64-bitowy

Grand Oxymore
źródło
Jest, ale nadal nie może chroot
Starx
2

Miałem ten sam problem podczas tworzenia obrazu łuku armhf. Musiałem zainstalować, qemu-user-statica następnie skopiować go do folderu bin chroot.

sudo cp /usr/bin/qemu-arm-static /mnt/chroot/usr/bin
Ismail Moukafih
źródło
1

Błąd oznacza, że ​​twoja jail ( /mnt/temp) nie zawiera powłoki bash lub nie zawiera bibliotek wymaganych do uruchomienia powłoki bash.

Jeśli utworzyłeś więzienie za pomocą czegoś takiego:

debootstrap --variant=buildd --arch i386 lucid /mnt/temp \
    http://archive.ubuntu.com/ubuntu/

Prawdopodobnie chciałeś to zrobić zamiast tego:

debootstrap --variant=minbase --arch i386 lucid /mnt/temp \
    http://archive.ubuntu.com/ubuntu/

Jednak jako techniczną odpowiedź na problem spróbuj:

cp -r /bin /lib /mnt/temp

Powinno to pozwolić ci pomyślnie wykonać chroot, w którym to momencie możesz robić inne rzeczy.

Jest jednak około miliona rzeczy złych w tym działaniu i prawie na pewno nie chcesz tego robić. Użyj minbase podczas tworzenia więzienia lub zainstaluj ubuntu na pustym celu (np. Maszynie wirtualnej) i utwórz archiwum tar całego systemu, do którego następnie rozpakujesz /mnt/temp.

Doug
źródło
0

Rzeczywiście jest to 64-bitowa 32-bitowa niezgodność.

Chociaż z

cp /bin/bash /mount/temp/tmp

(kopiuje 32-bitowe exec do nowego katalogu głównego w tmpkatalogu

chroot /mount/temp /tmp/bash

chrootjest w porządku, wszystkie polecenia wciąż zawodzą. Będziesz musiał skopiować je wszystkie.

cosinus
źródło
-1

W moim przypadku próbowałem chrootować do 64-bitowej wersji Linuksa, ale mój obecny Linux był 32-bitowy.

Zamontowałem obraz dysku (obraz główny, do replikacji na wielu komputerach).

azuer88
źródło
Ta sama odpowiedź jak powyżej @ GrandOxymore.
Karl Richter
@KarlRichter Podobne, ale nie takie same. Uruchamianie programu 32-bitowego w 64-bitowym systemie operacyjnym nie jest tym samym, co uruchamianie programu 32-bitowego w 64-bitowym środowisku wirtualnym (lub systemie operacyjnym). Mógłbym uruchomić 32-bitowy system operacyjny gościa i działałoby dobrze.
azuer88
-2

Myślę, że w to BŁĄD.

`/ bin / bash '

ale nie

„bin / bash”


źródło