【问题标题】:Gentoo + debootstrap failing when used with fakeroot and fakechroot与 fakeroot 和 fakechroot 一起使用时 Gentoo + debootstrap 失败
【发布时间】:2015-07-21 10:06:57
【问题描述】:

我正在使用 Gentoo 机器,我想创建基于 Debian 的 chroot 环境不使用 root 帐户或 sudo

使用 fakerootfakechroot 等工具似乎可以做到这一点,但到目前为止,我还没有使用它们取得任何成功。这是我用于 Precise 的命令:

fakeroot fakechroot /usr/sbin/debootstrap --variant=fakechroot precise ./precise http://archive.ubuntu.com/ubuntu/

它总是失败并出现相同的错误:

I: Installing core packages...
W: Failure trying to run: chroot precise dpkg --force-depends --install /var/cache/apt/archives/base-passwd_3.5.24_amd64.deb
W: See precise/debootstrap/debootstrap.log for details

debootstrap.log的内容是:

dpkg: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory

我不知道为什么要引入 SELinux 以及为什么它没有正确处理这种依赖关系。此外,我也尝试构建 Wheezy 和 Jessie。同样的错误。

发生了什么事?版本:

debootstrap-1.0.67

fakeroot-1.19

fakechroot-2.17.2

kernel-3.19.6

【问题讨论】:

  • 我看不出 fakeroot 对你有什么帮助。需要明确的是,您要在哪里安装 chroot?为什么要在不使用 root 的情况下执行此操作?
  • chroot 不会在没有 fakeroot(非 root 帐户)的情况下启动。我正在学习一些教程,但它不适用于我的环境。而且我想设置自定义构建环境,而不必为用户提供额外的权限。可以使用 Docker,但是当您尝试以普通用户身份使用它时,它会遇到相同的问题(或更多问题)。

标签: ubuntu debian bootstrapper chroot gentoo


【解决方案1】:

fakeroot 和 fakechroot 不是这里的问题。最初构建 dpkg 时似乎使用了 libselinux.so.1。首先,尝试定位命令:

locate libselinux

没有版本。这应该 1) 确认它确实不存在,或 2) 它确实存在,但不在您的 $LD_LIBRARY_PATH 或默认库搜索路径中。

如果 locate 出现另一个版本,请使用 ln -s 命令创建符号链接 (libselinux.so.1) 指向您拥有的现有版本。

要查看依赖关系,请运行:

ldd `which dpkg`

【讨论】:

  • 它以 root 身份工作,但不能作为普通用户使用 fakeroot 和 fakechroot。这不是问题的重点。
  • 好的。失败时,找不到库。我敢打赌,成功的 root 的搜索路径与 fakeroot 使用的搜索路径不同。你有 strace 向你展示所有检查过的东西吗?它显示尝试的每条路径,即使不在 LD_LIBRARY_PATH 中。
  • 错误:ld.so:来自 LD_PRELOAD 的对象 'libfakeroot.so' 无法预加载(无法打开共享对象文件):忽略。如果将 LD_LIBRARY_PATH 指向 libselinux 路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多