chroot 环境中的 /dev/null 权限被拒绝

chroot 环境中的 /dev/null 权限被拒绝

我在环境中安装了 Xubuntu 18.04 chroot。我刚刚从虚拟机中将它拖放到那里。

进入chroot环境,如果我尝试运行,apt update我会收到此错误:

/usr/bin/apt-key: 624: /usr/bin/apt-key: cannot create /dev/null: Permission denied

我已经尝试了这里的大部分解决方案:https://unix.stackexchange.com/questions/146633/bash-dev-null-permission-denied 以及这个解决方案:https://superuser.com/a/814594都不起作用。输出完全相同。

有什么方法可以让它工作吗?提前致谢。

答案1

我今天遇到了这个问题。

我可以通过将主机的 /dev/ 绑定到 chroot 环境的 /dev/ 来解决这个问题。

# Run in host machine as root(sudo)
mount --bind /dev /path/to/chroot/environment/dev

就我的情况而言,我还需要绑定另外 3 个文件系统。

# Run in host machine as root(sudo)
mount --bind /dev/pts /path/to/chroot/environment/dev/pts
mount --bind /proc /path/to/chroot/environment/proc
mount --bind /sys /path/to/chroot/environment/sys

然后 chroot 进入环境:

chroot /path/to/chroot/environment

答案2

man null

   These devices are typically created by:

          mknod -m 666 /dev/null c 1 3
          mknod -m 666 /dev/zero c 1 5
          chown root:root /dev/null /dev/zero

这些命令必须在chroot环境中执行。

答案3

我知道这已经过时了,而且您已经找到了答案,但另一种可能性(我刚刚遇到过)是驱动器安装时带有选项nodev,禁用任何字符设备(例如 /dev/null),即使它们显示有适当的权限。只需mount -o remount,rw /dev/hdaN /mnt从 chroot 外部发出即可解决此问题。

答案4

除了使用 添加 GPG 密钥到 chroot 中的 apt 存储库之外apt-key,您还可以将它们直接放入带有或/etc/apt/trusted.gpg.d文件扩展名的目录中,如下所示.asc.gpg这个 Debian 错误我偶然发现。

就我而言,我试图chroot在为容器构建基础映像时在环境中添加一个 apt 存储库。

例如:

wget -q "SOME_URL_HERE" -O- | run_in_chroot sh -c 'cat >/etc/apt/trusted.gpg.d/mykey.asc';

...run_in_chroot在 chroot 中运行命令:

run_in_chroot() {
    chroot "path/to/directory/to/chroot/into" "$@";
}

相关内容