我正在手动构建一个rootfs (没有debootstrap或multistrap),原因很多,我不会进入。
我正在“解压缩”状态下将所需的借方提取到rootfs (使用带有自定义--instdir和--admindir的D3)。我计划稍后进入系统,并按拓扑顺序运行每个包的dpkg --configure 。
重新安装Debian需要两个必需的(Priority: required)包,libc6 (这里)和libgcc1 (这里)。他们对彼此都有严格的要求。
因此,我无法在一个包上运行dpkg --configure ,因为它抱怨另一个包仍然处于需要配置的“未打包”状态。
死锁。这是有道理的。
这怎麽可能?标准的Ubuntu/Debian安装程序ISO如何处理这个问题?
同时,我正在运行dpkg --configure -a,它似乎正确地配置了每个包,但我不确定它是如何实现的,并且它选择配置包的拓扑顺序是不正确的。
理想情况下,我希望使用第2阶段脚本来运行每个包的前置脚本,然后单独配置该包。就像这样。
# Optional, if the preinst exists for the package.
DPKG_MAINTSCRIPT_NAME=preinst DPKG_MAINTSCRIPT_ARCH=amd64 DPKG_MAINTSCRIPT_PACKAGE=apt /var/lib/dpkg/info/.preinst install
# Required, for every package.
dpkg --configure
# ...repeated for each package, in topological order.debootstrap和multistrap的工作方式是他们不使用dpkg来进行配置。它们手动运行preinst/postinst并更新/var/lib/dpkg/status db,但是每个脚本都有它们自己的问题,我不想讨论。
发布于 2020-05-18 00:39:22
引导Debian系统超出了Debian策略的范围。该机制目前在各种引导程序中进行编码,以包含所有否则在包中不存在的隐式信息,例如必需包之间的依赖关系:yes包。这是一个问题,因为我们需要在每一个新的引导程序中复制所有这些,而且它是脆弱的,因为对伪基本包集的更改可能会打破这些假设。
我们正在努力改善https://wiki.debian.org/Teams/Dpkg/Spec/InstallBootstrap的这一状况。您可能想要查看mmdebstrap,它试图尽可能多地使用股票工具并卸载它们和包元数据,因此在某种程度上,它是上述建议的PoC实现。
我建议使用mmdebstrap,但是如果这不是一个选项,而且您仍然试图重新实现一个引导程序,那么您可能希望检查各种现有引导程序的来源,以获得这些隐含的详细信息。
https://unix.stackexchange.com/questions/553662
复制相似问题