【问题标题】:How to install dependencies while creating a .deb installer?创建 .deb 安装程序时如何安装依赖项?
【发布时间】:2014-05-19 09:11:24
【问题描述】:

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

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

我正在使用一个control 文件,其中包含一些参数,例如preinst, postinst 等。我尝试将Depends 添加到控制文件中,但我猜,Depends 仅在不存在提到的依赖项时才会停止包安装.我如何将依赖项安装为 deb 包安装本身的一部分?我正在寻找适用于 Ubuntu 12.04 的解决方案。

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

【问题讨论】:

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


    【解决方案1】:

    dpkg 只能安装单个包。

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

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

    另一种方法是使用诸如gdebi 之类的工具来安装您的包; gdebi 知道如何获取缺失的依赖项,因此不需要 apt-get -f install 步骤。

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

    【讨论】:

      【解决方案2】:

      我实现这一点的方法是使用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:参数。

      【讨论】:

      • 这是个坏建议。 “preinst”钩子不应该安装其他包。包需要声明Depends:
      【解决方案3】:

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

      【讨论】:

      • 嗨@BRPocock,非常感谢您的回复。如果我不想安装依赖项,但想让用户知道错误是什么,然后恢复已安装的包(即对dpkg -r abc.deb 有效的东西,以便我的 apt-get 保持干净)怎么办?
      • 只需将它们列为依赖项即可。 dpkg 将给出信息错误; apt-get 将提供安装它们。用户决定是否这样做。
      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 2020-03-07
      • 2012-05-19
      • 2019-01-15
      • 2012-08-30
      • 2018-09-11
      • 2016-03-14
      • 2016-07-29
      相关资源
      最近更新 更多