我知道设置pbuilder
需要 root 权限,但是每次调用真的都需要 root 权限吗?
有没有办法pbuilder
以标准用户身份运行?
答案1
是的,复制自:构建器。
可以通过调用 pbuilder-user-mode-linux 而不是 pbuilder 来使用 user-mode-linux。pbuilder-user-mode-linux 不需要 root 权限,并且它使用 User-mode-linux 的写时复制 (COW) 磁盘访问方法,这通常使其比传统的 pbuilder 快得多。
与 pbuilder 所依赖的标准 Unix 工具(chroot、tar 和 gzip)相比,User-mode-linux 平台的成熟度略低,但自 0.59 版以来就已足够成熟,可以支持 pbuilder-user-mode-linux。自那时起,pbuilder-user-mode-linux 经历了快速发展。
pbuilder-user-mode-linux 的配置分为三个步骤:
-
user-mode-linux 的设置并不简单。在尝试使用 rootstrap 或 pbuilder-user-mode-linux 之前,先熟悉一下它可能会很有用。有关详细信息,请阅读
/usr/share/doc/uml-utilities/README.Debian
文档user-mode-linux
。(它位于一个单独的包中,user-mode-linux-doc
。)除非您使用 slirp,否则 user-mode-linux 要求用户属于 uml-net 组才能配置网络。
如果您编译自己的内核,您可能需要验证是否启用了 TUN/TAP 支持,并且您可能需要考虑 SKAS 补丁。
-
rootstrap 是 debootstrap 的包装器。它创建 Debian 磁盘映像以供 UML 使用。要配置 rootstrap,有几个要求。
- 安装 rootstrap 包。
- 仅限 TUN/TAP:将用户添加到 uml-net 组以允许访问网络
adduser dancer uml-net
- 仅 TUN/TAP:检查内核是否支持 TUN/TAP 接口,或者如有必要重新编译内核。
设置
/etc/rootstrap/rootstrap.conf
。例如,如果当前主机是 192.168.1.2,则将以下条目更改为类似以下内容似乎有效。运输=tuntap 接口=eth0 网关=192.168.1.1 镜像=http://192.168.1.2:8081/debian 主机=192.168.1.198 uml=192.168.1.199 网络掩码=255.255.255.0
进行一些配置实验并运行 rootstrap ~/test.uml 来实际测试它会很方便。
使用 slirp 所需的配置较少。默认配置附带一个工作示例。
-
需要发生以下情况:
- 安装该
pbuilder-uml
包。 /etc/pbuilder/pbuilder-uml.conf
按以下方式设置配置文件。对于 slirp 来说,它会有所不同。MY_ETH0=tuntap,,,192.168.1.198 UML_IP=192.168.1.199 UML_NETMASK=255.255.255.0 UML_网络=192.168.1.0 UML_广播=255.255.255.255 UML_GATEWAY=192.168.1.1 PBUILDER_UML_IMAGE="/home/dancer/uml-图像"
它需要与 rootstrap 配置相匹配。
- 确保 BUILDPLACE 可由用户写入。将配置文件中的 BUILDPLACE 更改为用户有权访问的位置。
- 运行
pbuilder-user-mode-linux create --distribution sid
以创建图像。 - 尝试运行 pbuilder-user-mode-linux build。
- 安装该
链接中的额外评论:
pbuilder-user-mode-linux
模拟了大部分 pbuilder,但也存在一些差异。
- pbuilder-user-mode-linux 尚未正确支持 pbuilder 的所有选项。这是一个问题,将在发现特定区域后予以解决。
- /tmp 在 pbuilder-user-mode-linux 中的处理方式有所不同。在 pbuilder-user-mode-linux 中,/tmp 在 UML 中作为 tmpfs 挂载,因此无法从 user-mode-linux 外部访问 /tmp 下的文件。它会影响 --configfile 等选项,以及尝试构建位于 /tmp 下的软件包时。
要在系统上并行运行 pbuilder-user-mode-linux,需要记住一些事项。
- 在构建过程中不能运行创建和更新方法,否则 COW 文件将无效。
- 如果您不使用 slirp,并行运行的 user-mode-linux 进程需要具有不同的 IP 地址。只需尝试多次运行 pbuilder-user-mode-linux 就会导致无法访问网络。但类似下面的操作会起作用:
未经测试