Khi tôi chạy chroot
lệnh, một lỗi được đưa ra:
failed to run command ‘/bin/bash’: No such file or directory
Khi tôi chạy chroot
lệnh, một lỗi được đưa ra:
failed to run command ‘/bin/bash’: No such file or directory
Câu trả lời:
Lỗi này có nghĩa là không có /bin/bash
thư mục bên trong chroot . Hãy chắc chắn rằng bạn trỏ nó đến nơi bash
(hoặc các shell khác) có thể thực thi được trong chroot
thư mục.
Nếu bạn có /mnt/somedir/usr/bin/bash
thì thực hiệnchroot /mnt/somedir /usr/bin/bash
/root/.bashrc
hoặc /root/.bash_profile
trong của bạn chroot
. Bạn có thể tạm thời đổi tên các tập tin này? Ngoài ra, bạn có thể chắc chắn rằng đó bash
là thực thi ( chmod +x /chroot/bin/bash
)?
Tôi đã có /bin/bash
trong thư mục chroot, nhưng tôi không có / lib và / lib64 trong đó. Thông điệp từ chroot có thể được mô tả nhiều hơn. "Không có tệp hoặc thư mục như vậy" thực sự có nghĩa là "Tôi không thể chạy cái này ...".
/bin/bash
tất nhiên phụ thuộc vào libc, ld-linux, libdl, v.v., bạn có thể sử dụng ldd /bin/bash
để xem thư viện nào nó yêu cầu.
1) Bạn có thể mount -o bind
các thư mục này trong chroot 2) Hoặc bạn có thể sao chép các thư viện này để chroot, nếu bạn không tin env chroot để không làm hỏng chúng, như vậy:
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
chroot
cố gắng khởi động shell được đặt trong $SHELL
biến môi trường của bạn theo mặc định, nhưng nó tìm nó trong thư mục gốc mới của bạn, dường như không chứa /bin/bash
, vì vậy nó không thể bắt đầu.
Bạn có thể yêu cầu chroot bắt đầu một chương trình khác bên trong root mới bằng cách thêm nó làm tham số:
chroot /your/new/root /bin/foo --options...
Lưu ý rằng đường dẫn của lệnh được diễn giải bên trong root mới của bạn, vì vậy trong ví dụ này, chương trình được gọi thực tế là trong/your/new/root/bin/foo
Tôi đã nhận được cùng một lỗi khi cố gắng ssh đến một tài khoản chroot trên một máy chủ từ xa. Trong trường hợp của tôi, tôi đã thiếu tệp sau trong thư mục lib64 từ xa. Máy chủ là Centos6.9
ld-linux-x86-64.so.2
Nó đã được sửa bằng cách thực hiện như sau:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
cp -r /lib /lib64 /secure/jail
sửa nó, tôi cần thứ gì đó từ cả lib và lib64, và tôi không bận tâm để tìm ra chính xác cái gì. (có lẽ vì tôi đã kích hoạt multiarch)
Trong trường hợp bạn đang thực hiện biên dịch chéo, bạn cần sử dụng trình giả lập qemu có thể chạy / mnt / somedir / bin / bash khi bạn sao chép qemu-arm-static (Tôi đang làm điều này cho armhf) vào / mnt / somedir / usr / bin bạn sẽ có thể làm chroot.
Kiểm tra điều này để biết thêm chi tiết: https : //blog.lazy-ev Assessment.net/posts/linux/debian-armhf-bootstrap.html