2014-10-17 49 views
1

我正在使用Debian包装源在用户机器上安装几个文件。 debconf/config脚本和postinst脚本正在使用通用逻辑。因此,我将公共逻辑放在一个单独的文件中,并将其作为/ usr/share/pkg-name /下的软件包的一部分添加。如何在debconf提示符前显示解压后的debain包?

现在,当我使用dpkg安装包时,一切正常。首先将包解包并将包含公共代码库的文件放置在所述路径处。接下来,debconf/config脚本读取文件,然后相应地提示用户。

当我将文件放入APT repo中时,在使用apt-get安装时,相同的过程被逆转。该软件包并未首先解压缩,而是显示debconf提示符,并且config脚本无法找到包含公共代码库的脚本。

我想知道为什么安装过程有所不同?通过apt-get进行安装时,有没有办法获得相同的序列?所有这三个文件都是shell脚本。

有没有更好的方法来处理这些常见的代码库,供各种维护者脚本使用?

回答

1

任务已结束!

现在我明白了debconf manpage中描述的完整过程。无论你怎么称呼它,都有不同的阶段或步骤。它们是:

  • 的dpkg-预配置
  • dpkg -i来
  • 的dpkg-重新配置

所有这些步骤发起与用户的debconf通信。当某人使用dpkg -i安装软件包时,只需在运行带有相同命令行选项的postinst脚本之前运行配置脚本。到debconf通信开始时,软件包已经解压。

当某人使用apt-get安装软件包时,首先运行dpkg-preconfigure执行配置脚本,然后执行dpkg -i以实际安装再次运行相同配置脚本的软件包。

在apt-get的第二种情况下,当config脚本作为dpkg-preconfigure的一部分运行时,那么软件包还没有被解压缩,所以我正面临着这个问题。

我只是增加了一个,如果条件继续,如果文件解包否则退出

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-preconfigure步骤中提示用户。在尝试此解决方案之前,请确保您没有问题。