如何在创建.deb安装程序时安装依赖项?

时间:2014-04-07 08:23:10

标签: installer controls deb build-dependencies post-install

我创建了一个deb个包,说abc.deb。现在很少有像python-dev, python-mysql等依赖项,这些依赖项需要作为deb安装本身的一部分进行安装。

(即,当用户运行dpkg -i abc.deb时,依赖项也应自动安装。)

我正在使用control文件,其中包含一些参数,例如preinst, postinst等。我尝试将Depends添加到控制文件中,但我想,Depends只停止如果不存在依赖关系,则打包安装。我如何安装依赖项作为deb软件包安装本身的一部分?我正在寻找一种适用于Ubuntu 12.04的解决方案。

P.S。当我尝试在postinst脚本中安装依赖项

sudo apt-get install python-dev -y

我给了我一个错误:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) 
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?`

3 个答案:

答案 0 :(得分:1)

您无法通过dpkg执行此操作;这是apt-get的用途。如果您在.deb控制文件中正确指定了依赖项,然后使用apt-get进行安装,它将自动为您安装。您不应该尝试从较低级别的工具调用更高级别的工具。到那时,为时已晚。

答案 1 :(得分:1)

dpkg只能安装单个包。

您应该在控制文件的Depends字段中声明所有程序包的依赖项。

如果您的用户随后使用dpkg -i package.deb安装软件包,则会收到缺少依赖项的消息。然后,用户可以调用apt-get -f install来修复程序包存储库中缺少的依赖项(假设您的依赖项实际上在官方存储库中)。

另一种方法是使用gdebi等工具来安装您的包裹; gdebi知道如何获取缺少的依赖项,使apt-get -f install步骤变得不必要。

我的建议是将您的package.deb文件(带有适当的依赖声明)发送给您的用户,并建议他们使用gdebi进行安装。

答案 2 :(得分:0)

我实现这一目标的方法是使用preinst脚本。此脚本在从Debian存档(“.deb”)文件解压缩该包之前执行。

我在preinst脚本中检查了依赖项,如果找不到依赖项,则退出并显示错误。以下示例sh代码显示了如果不可用,如何检查和安装依赖项:

  dpkg -s "python-pip" >/dev/null 2>&1 && {
    echo "python-pip is installed."
    echo
  } || {
    echo "ERROR: python-pip is not installed."
    //you may install python-pip here if you wish
  }

然后将此脚本提供给控制文件的Preinst:参数。

相关问题