【发布时间】:2017-11-03 15:16:51
【问题描述】:
我有一个以前只针对基于 RPM 的发行版的软件包,我现在正在为基于 Debian 的发行版构建 .deb 软件包。
目的是从与您正在构建的系统隔离的用户空间模拟测试安装。它可能是多用户的,您不想仅仅为了构建软件而需要 root 访问权限。我们的许多测试已经模拟了安装目录结构。这是为了下一步使用构建的包来模拟实际安装。
对于 RPM 包,我可以使用以下方法创建测试安装:
WSDIR=/where/I/want/my/tests/to/run
rpmdb --initdb --dbpath "$WSDIR"/rpmdb
rpm --relocate /opt="$WSDIR"/opt --dbpath $WSDIR/rpmdb -i <package>.rpm
Debian 世界中的等价物是这样的:
dpkg --force-not-root --admindir=$WSDIR/dpkg --root=$WSDIR/install --install "$DEB"
但是,我被 rpmdb --initdb 步骤所困。
请注意,我可以使用以下命令解压缩存档:
dpkg-deb -x "$DEB" $WSDIR/install
但我更愿意更接近实际软件包的安装方式。
另外我认为这不会运行 preinstall 和 postinstall 脚本。
类似的问题建议使用deboostrap 创建chroot 环境,但这会创建一个全新的安装。除了矫枉过正之外,它对于自动化测试来说太慢了。我打算在实际测试环境中进一步测试之前使用它来快速测试安装包。
到目前为止我的实验:
(cd $WSDIR/dpkg && mkdir alternatives info parts triggers updates)
cp /var/lib/dpkg/status $WSDIR/dpkg/status
最好的结果是:
dpkg: error: unable to access dpkg status area: No such file or directory
这并不表示清楚什么是错的。
那么如何创建一个 dpkg 管理目录?
交叉发布为https://superuser.com/questions/1271145/how-do-you-create-a-dpkg-admin-directory
2017 年 11 月 24 日更新
我尝试使用 [cowdancer][1] 创建的环境中的 dpkg 目录进行复制(在后台使用 deboostrap)或从 /var/lib/dpkg 复制真实的目录,但我仍然遇到相同的错误消息,所以也许错误(和/或 --admindir 选项)并不完全代表我认为的意思。
注意:
sudo dpkg --force-not-root --root=$WSDIR/install --admindir=/var/lib/dpkg --install "$DEB"
确实有效。所以这与管理目录有关。 我还将这个问题重新命名为“如何创建 dpkg 管理目录”是一个有趣的问题,但答案不一定是我的问题的解决方案。
【问题讨论】:
-
我认为这个问题可能属于超级用户而不是这里。我无法移动它,所以我将在赏金结束后交叉发布并删除/关闭。