Trong một lần thử chroot, tôi đã gặp lỗi này: lỗi chroot: không chạy được lệnh '/ bin / bash': Lỗi định dạng Exec


20

Tôi đã làm theo hướng dẫn của hướng dẫn này HOWTO: Purge và Reinstall Grub 2 từ Live CD , khi tôi gặp lỗi ở bước 1, khi tôi khởi chạy lệnh

sudo chroot /mnt/temp

Lỗi là như sau:

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

cái đó từ đâu tới? Làm thế nào để tôi vượt qua?

Câu trả lời:


22

Xác minh rằng bạn đang sử dụng đúng CD Live. Ví dụ: xác minh bạn không sử dụng CD 32 bit thay vì CD 64 bit. Bạn cần một hạt nhân 64 bit để chạy mã 64 bit, vì vậy hãy kiểm tra kiến ​​trúc của bạn.

Giả sử bạn đã gắn hệ thống của mình vào chroot trong / media / sda1 , để xác định kiến ​​trúc bạn có thể:

ls /media/sda1/*

nếu bạn thấy lib64 ở đầu ra, đó có thể là hệ thống 64 bit


Đó là nhưng vẫn không thể chroot
Starx

2

Tôi đã có cùng một vấn đề khi tạo một hình ảnh cho vòm armhf. Tôi đã phải cài đặt qemu-user-staticvà sau đó sao chép nó vào thư mục bin chroot.

sudo cp /usr/bin/qemu-arm-static /mnt/chroot/usr/bin

1

Lỗi có nghĩa là jail ( /mnt/temp) của bạn không chứa bash shell hoặc không chứa các thư viện cần thiết để chạy bash shell.

Nếu bạn đã tạo ra nhà tù của mình bằng cách sử dụng một cái gì đó như thế này:

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

Bạn có thể có nghĩa là để làm điều này thay vào đó:

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

Tuy nhiên, như một câu trả lời kỹ thuật cho vấn đề của bạn, hãy thử:

cp -r /bin /lib /mnt/temp

Điều này sẽ cho phép bạn chroot thành công, tại thời điểm đó bạn có thể làm những việc khác.

Có khoảng một triệu điều sai khi làm điều đó, và gần như chắc chắn bạn không muốn làm điều đó. Sử dụng minbase khi bạn tạo nhà tù của mình hoặc cài đặt Ubuntu trên một mục tiêu trống (ví dụ: máy ảo) và tạo một kho lưu trữ tar của toàn bộ hệ thống mà sau đó bạn giải nén /mnt/temp.


0

Quả thực đây là sự không tương thích 64 bit 32 bit.

Mặc dù với

cp /bin/bash /mount/temp/tmp

(sao chép exec 32-bit sang root mới trong tmpthư mục

chroot /mount/temp /tmp/bash

chrootvẫn ổn, tất cả các lệnh vẫn thất bại. Bạn sẽ phải sao chép chúng trên tất cả.


-1

Trong trường hợp của tôi, tôi đã cố gắng chuyển sang phiên bản Linux 64 bit nhưng Linux hiện tại của tôi là 32 bit.

Tôi đã gắn một hình ảnh đĩa (hình ảnh chính, để sao chép trên nhiều máy).


Câu trả lời tương tự như @ GrandOxymore ở trên.
Karl Richter

@KarlRichter Tương tự nhưng không giống nhau. Chạy chương trình 32 bit trong HĐH 64 bit không giống như chạy chương trình 32 bit trong môi trường ảo 64 bit (hoặc HĐH). Tôi có thể chạy một os khách 32 bit và nó sẽ chạy tốt.
azuer88

-2

Tôi nghĩ rằng là một BUG.

`/ bin / bash '

nhưng không

'bin / bash'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.