3

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

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

我正在使用一个control包含少量参数的文件,例如preinst, postinst等。我试图添加Depends到控制文件中,但我想,Depends如果提到的依赖项不存在,只会停止包安装。我如何将依赖项安装为 deb 包安装本身的一部分?我正在寻找一种可行的解决方案Ubuntu 12.04

PS当我尝试在我的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?`
4

3 回答 3

1

dpkg只能安装单个包。

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

如果您的用户随后使用 安装软件包dpkg -i package.deb,他们将收到一条消息,指出缺少依赖项。然后,用户可以调用apt-get -f install以修复包存储库中缺少的依赖项(这假设您的依赖项实际上位于官方存储库中)。

另一种方法是使用诸如gdebi安装软件包之类的工具;gdebi知道如何获取丢失的依赖项,从而使该apt-get -f install步骤变得不必要。

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

于 2014-04-28T04:47:32.013 回答
1

你不能通过dpkg; 这就是apt-get目的。如果您在.deb控制文件中正确指定依赖项,然后使用 安装apt-get,它将自动为您安装它们。您不应该尝试从较低级别的工具调用较高级别的工具。到那时,为时已晚。

于 2014-04-07T13:04:04.463 回答
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:控制文件的参数。

于 2014-04-08T05:59:24.193 回答