问题:

问题:

问题:

我正在尝试从我自己的来源创建一个 DEB 包。
除了处理依赖关系之外,一切都很好。

据我了解,标记依赖项的最真实方法是将它们列在文件Depends的 部分中control。我的应用程序需要两个存在的包(aapt和)zipalign仅有的在最近的 Debian 中(≥杰西)和Ubuntu(≥威利)存储库,因此在旧版本上安装我的 .deb 肯定会出现问题。

想法:

对于这个问题的几点思考:

  • 将所需的独立二进制文件(作为我的 .deb 的一部分)安装到/usr/bin.
    • 专业版:所需的依赖项作为独立的二进制文件存在于我的包中,因此Depends不会使用该部分,并且缺少的存储库包不会成为问题。
    • :如果目标二进制文件已作为另一个包的一部分存在于目标计算机上,dpkg则会遇到错误,并且强制用户传递--force-overwrite选项并不是一个好主意。
  • 将所需的独立二进制文件(作为我的 .deb 的一部分)安装到/usr/share/myapp.
    • 专业版:应用程序使用自己的独立目录来存储第三方二进制文件,因此它不会更改潜在的现有包(并且,Depends不再需要该部分)。
    • :该share目录用于存储独立于体系结构的数据,而二进制文件则不是。
  • 将整个应用程序安装到该/opt/myapp目录中。
    • 专业版:这种方法不违反FHS结构,并将文件保存在完全隔离的目录中。
    • :然而,这并不是一种正宗的UNIX方式,特别是对于开源软件而言。
  • 使用该Recommends部分而不是Depends较弱的关系,并向用户提供一些有关如何获取缺少的包的说明。
    • :.deb 包本身就失去了意义。

这些方法对我来说都不合适。是否有任何标准方法来处理这个问题,我是否错过了一些明显的解决方案?例如,某种条件安装将非常有用(仅当which命令不输出任何内容时才安装第三方二进制文件等)。

任何想法和建议将不胜感激。

答案1

提供(除了主包之外)单独的包aaptzipalign.确保他们有~自己的版本(像这样zipalign-21-4~kefir1.deb:)。然后将它们与主包一起放入您的存储库中Depends: aapt, zipalign(我使用 easyreprepro来托管我的存储库,这并不难)。

这是Debian方式(同样的方式backports.debian.org有效) - 如果系统是 Jessie 并提供aapt,则将使用该系统(因为您的软件包在版本中有波浪号,因此它仅用作最后的手段)。如果系统是较旧的 Debian,那么您的额外软件包才会被提取。用户可以轻松获得软件包的升级/安全修复。

额外的优点是,在 Jessie 上升级时,官方软件包将被提取并覆盖您旧的额外软件包(当然,除非您特别依赖于特定版本或额外软件包)。因此,您不会再有旧的/重复的版本,并且用户可以获得 debian 安全团队补丁等的额外好处。

相关内容