我正在开发Debian打包源代码,以便在用户机器上安装一些文件。debconf/config脚本和postinst脚本使用的是通用逻辑。因此,我将通用逻辑放在一个单独的文件中,并将其作为软件包的一部分添加到/usr/share/pkg-name/下。
现在,当我使用dpkg安装软件包时,一切都很好。首先对包进行解包,并将包含公共代码库的文件放置在所述路径上。接下来,debconf/config脚本读取该文件,然后相应地提示用户。
当我把文件放在APT repo中时,当我使用APT-get安装时,相同的过程被颠倒了。包没有首先被解包,而是显示debconf提示符,并且配置脚本无法找到包含公共代码库的脚本。
我想知道为什么安装程序有差异?在通过apt-get进行安装时,有没有办法获得相同的顺序?这三个文件都是shell脚本。
有没有更好的方法来处理这样的公共代码库,供各种维护人员脚本使用?
任务已经结束!
现在我了解了debconf手册页中描述的完整过程。无论你怎么称呼它,都有不同的阶段或步骤。它们是:
- dpkg预配置
- dpkg-i
- dpkg重新配置
所有这些步骤都启动了与用户的debconf通信。当有人使用dpkg-i安装软件包时,配置脚本会在使用相同的命令行选项运行postinst脚本之前运行。当debconf通信开始时,包已经被解包。
当有人使用apt-get安装包时,首先运行执行配置脚本的dpkg预配置,然后运行dpkg-i来实际安装再次运行相同配置脚本的包。
在apt-get的第二种情况下,当配置脚本作为dpkg预配置的一部分运行时,包还没有被解压缩,所以我面临着这个问题。
我刚刚添加了一个if条件,如果文件被解压缩或退出,则继续
if [ ! -f /usr/share/pkg-name/common-codebase ];
then
exit 0
fi
/usr/share/pkg/common-codebase
这样,当使用apt-get安装包时,将跳过dpkg预配置运行配置脚本的尝试,而执行第二次dpkg-i尝试。这对我来说很有效,因为我向用户提出的debconf问题不会影响任何其他包。
如果您有共享模板,并且您的选择可能会影响包外的任何内容,请记住,即使您延迟了提示,apt-get安装的其他相关/依赖包仍将在dpkg预配置步骤中提示用户。在尝试此解决方案之前,请确保这对您来说很好。