Lors d'une tentative de chroot, j'ai eu cette erreur: "chroot: échec de l'exécution de la commande '/ bin / bash': erreur de format Exec"

20

Je suivais les instructions de ce tutoriel : Purger et réinstaller Grub 2 à partir du Live CD , lorsque j'ai rencontré une erreur à l'étape 1, lorsque j'ai lancé la commande

sudo chroot /mnt/temp

L'erreur était la suivante:

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

D'où cela vient-il? Comment passer?

Grand Oxymore
la source

Réponses:

22

Vérifiez que vous utilisez le bon Live CD. Par exemple, vérifiez que vous n'utilisez pas un CD 32 bits au lieu d'un CD 64 bits. Vous avez besoin d'un noyau 64 bits pour exécuter du code 64 bits, alors vérifiez votre architecture.

En supposant que vous avez monté votre système pour qu'il soit chrooté dans / media / sda1 , pour déterminer l'architecture, vous pouvez:

ls /media/sda1/*

si vous voyez lib64 dans la sortie, c'est probablement un système 64 bits

Grand Oxymore
la source
Il est mais ne peut toujours pas
chrooter
2

J'ai eu le même problème lors de la création d'une image pour un arc armhf. J'ai dû l'installer qemu-user-staticpuis le copier dans le dossier chroot bin.

sudo cp /usr/bin/qemu-arm-static /mnt/chroot/usr/bin
Ismail Moukafih
la source
1

L'erreur signifie que votre jail ( /mnt/temp) ne contient pas de shell bash ou ne contient pas les bibliothèques requises pour exécuter le shell bash.

Si vous avez créé votre prison en utilisant quelque chose comme ceci:

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

Vous vouliez probablement le faire à la place:

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

Cependant, comme réponse technique à votre problème, essayez:

cp -r /bin /lib /mnt/temp

Cela devrait vous permettre de chrooter avec succès, à quel moment vous pouvez faire d'autres choses.

Cependant, il y a environ un million de choses qui ne fonctionnent pas ainsi et vous ne voulez certainement pas le faire. Utilisez minbase lorsque vous créez votre prison, ou installez ubuntu sur une cible vierge (par exemple une machine virtuelle) et créez une archive tar de tout le système dans lequel vous décompressez ensuite /mnt/temp.

Doug
la source
0

En effet, il s'agit d'une incompatibilité 64 bits 32 bits.

Bien qu'avec

cp /bin/bash /mount/temp/tmp

(copie l'exec 32 bits vers la nouvelle racine du tmprépertoire

chroot /mount/temp /tmp/bash

chrootest très bien, toutes les commandes échouent toujours. Il faudrait les copier partout.

cosinus
la source
-1

Dans mon cas, j'essayais de chrooter dans une version 64 bits de Linux mais mon Linux actuel était de 32 bits.

J'avais monté une image disque (image principale, pour la réplication sur plusieurs machines).

azuer88
la source
Même réponse que @ GrandOxymore ci-dessus.
Karl Richter
@KarlRichter Similaire mais pas le même. L'exécution d'un programme 32 bits dans un système d'exploitation 64 bits n'est pas la même chose que l'exécution d'un programme 32 bits dans un environnement virtuel (ou système d'exploitation) 64 bits. Je pourrais exécuter un système d'exploitation invité 32 bits et cela se serait bien passé.
azuer88
-2

Je pense que c'est un BUG.

`/ bin / bash '

mais non

'bin / bash'


la source