我一直在关注这些关于如何创建我当前安装的 ubuntu 14.04 的实时 CD 的说明。当我尝试运行sudo chroot ${WORK}/rootfs /bin/bash
whereWORK=/some/dir/that/REALLY/exist
我收到错误,bin/bash 不是文件或目录。我可以 ls /bin 并看到一个名为 bash 的文件,但无法打开它,告诉我它不是文本文件(有道理)。
none@none-ubuntu:/$ sudo chroot ${WORK}/rootfs /bin/bash
chroot: failed to run command ‘/bin/bash’: No such file or directory
bash 文件在那里,因为我可以在 ls 上看到它
none@none-ubuntu:/$ ls /bin
bash fgconsole nc sed
bunzip2 fgrep nc.openbsd setfacl
...(lot more files here)......
因为我被问及权限问题
none@none-ubuntu:/$ ls -l /bin
total 9880
-rwxr-xr-x 1 root root 1017016 Απρ 24 2014 bash
-rwxr-xr-x 1 root root 31152 Οκτ 21 2013 bunzip2
-rwxr-xr-x 1 root root 1918032 Νοέ 14 2013 busybox
我一直在网上搜索,但不幸的是,使用“没有这样的文件或目录”会出现很多不相关的帖子
编辑:
none@none-ubuntu:/$ ls -l ${WORK}/rootfs/bin
total 9866
-rwxrwx--- 1 root vboxsf 1017016 Απρ 24 2014 bash
-rwxrwx--- 1 root vboxsf 31152 Οκτ 21 2013 bunzip2
none@none-ubuntu:/$ ldd ${WORK}/rootfs/bin/bash
linux-vdso.so.1 => (0x00007fff183fe000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f4569d8e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4569b8a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f45697c4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4569fce000)
none@none-ubuntu:/$ ls -l ${WORK}/rootfs/lib
total 304
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 apparmor
drwxrwx--- 1 root vboxsf 8192 Ιούλ 23 2014 brltty
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 crda
drwxrwx--- 1 root vboxsf 36864 Ιούλ 23 2014 firmware
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 hdparm
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 ifupdown
drwxrwx--- 1 root vboxsf 4096 Ιούλ 23 2014 init
-rwxrwx--- 1 root vboxsf 71512 Δεκ 24 2013 klibc-P2s_k-gf23VtrGgO2_4pGkQgwMY.so
-rwxrwx--- 1 root vboxsf 27392 Ιαν 9 2014 libip4tc.so.0.1.0
-rwxrwx--- 1 root vboxsf 31520 Ιαν 9 2014 libip6tc.so.0.1.0
-rwxrwx--- 1 root vboxsf 5816 Ιαν 9 2014 libiptc.so.0.0.0
-rwxrwx--- 1 root vboxsf 47712 Ιαν 9 2014 libxtables.so.10.0.0
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 linux-sound-base
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 lsb
drwxrwx--- 1 root vboxsf 0 Απρ 10 2014 modprobe.d
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 modules
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 modules-load.d
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 plymouth
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 recovery-mode
drwxrwx--- 1 root vboxsf 0 Ιούλ 23 2014 resolvconf
drwxrwx--- 1 root vboxsf 4096 Ιούλ 23 2014 systemd
drwxrwx--- 1 root vboxsf 4096 Μάρ 22 2014 terminfo
drwxrwx--- 1 root vboxsf 4096 Ιούν 2 13:10 udev
drwxrwx--- 1 root vboxsf 4096 Ιούλ 23 2014 ufw
drwxrwx--- 1 root vboxsf 28672 Ιούν 7 22:08 x86_64-linux-gnu
drwxrwx--- 1 root vboxsf 24576 Ιούλ 23 2014 xtables
更新
感谢大家提供的帮助和信息。不幸的是,我无法完成这项任务。看来解决方案必须是创建一个虚拟驱动器(如 Germar 所建议的)。这样做并从头开始完成整个过程。但是当我在 chroot 时必须使用 apt-get 时,我收到错误消息,说它无法连接到 ppa 站点。当我尝试使用在互联网上找到的一些东西来修复该问题时,VM 停止工作,现在根本无法启动!我猜从硬盘驱动器上的 ubuntu 安装创建 live cd 的最佳方法是将 ubuntu 实际安装在硬盘驱动器上,而不是在某些 VM 上。
再次感谢(不确定是否应该删除它,但我会保留它以供将来参考)
答案1
errno
代码有时并不十分具体。除了可能表示手头的特定文件 ( /bin/bash
) 不存在之外,在执行程序时,“没有这样的文件或目录”( ENOENT
) 也可能表示其 ELF 解释器不存在,或者其所需的共享库之一不存在。我怀疑您正在构建的 chroot 环境内部/lib
或/lib64
内部以某种方式损坏,可能是因为符号链接指向了错误的位置。
尝试ls -l $WORK/lib64/ld-linux-x86-64.so.2
,如果它报告符号链接,则同样尝试该符号链接的目标,除了相对于$WORK
(因此,如果ls
说链接指向/lib/x86_64-linux-gnu/ld-2.19.so
,那么你将运行)。对输出中列出的ls -l $WORK/lib/x86_64-linux-gnu/ld-2.19.so
各种库路径重复上述操作,直到找到 chroot 上下文中实际缺少的东西。/lib
ldd