打包如何以及为什么创建 dbg,dev,doc包?

2019-04-15 16:02发布

问题: 我正在为一个包编写一个Ubuntu包,它实质上提供了一些库和头,然后用于构建它的他软件。 软件包也在较小的子包中分解,在这种情况下,包是相当相似的。 我注意到像boost提供的软件包 复制代码 [...] libboost-dbg libboost-dev libboost-doc [...] libboost-all-dev [...] 但是 NAME boost 或者 libboost 中没有任何内容。
  • 这背后的想法是什么?
  • -dbg 。-dev 和 -doc 软件包的用途是什么?
  • 关于如何编写这些软件包的生成文件的说明,是否有说明?
回答 1:

概念&目

分离这些不同包的主要原因与磁盘空间和下载速度有关。 特别是,镜像空间非常重要,因为它意味着分发数据的多个副本。 我们可以将 foo-common 。foo-data 或者 foo-doc 包的一个副本保存在归档中,而不是在每个体系结构( ) 中复制它复制的Having 文件的副本。 。 对于官方Ubuntu档案中的软件包,实际上没有理由手工创建 -dbg 包。 生成机器自动去除调试符号并将它们放入 ddebs.ubuntu.com. 上托管的-dbgsym 软件包中( 请参见: 通常存在的调试符号包( ) -dbg 包通常只从Debian进行。

指令框

对于实现,请看下面的问题: 简单来说,需要在 debian/control 中为每个包创建新的节。 那么 debian/foo-*.install 文件也需要创建。 这将允许 dh_install 将正确的内容放入正确的包中。 主二进制软件包的foo.install 可能看起来像: 复制代码 usr/bin/ usr/lib/ foo-common.installfoo-data.installfoo-doc.install 或者其他任何: 复制代码 /usr/share/doc/ /usr/share/icons/ /usr/share/foo/ /usr/share/locale/ 对于 foo-dev: 复制代码 /usr/include/ /usr/lib/pkgconfig /usr/lib/*.so 创建 foo-dbg 包需要编辑 debian/rules 通常 dh_strip 会去除调试符号。 所以我们需要重写这个行为: 复制代码 .PHONY: override_dh_strip override_dh_strip: dh_strip --dbg-package=foo-dbg
回答 2: Boost是一个复杂的例子,让我们先来看一个简单的例子。 精确地讲,源软件包提供了个二进制包:
  • libssl1.0.0 包含OpenSSL动态库,版本 1.0.0. 这就是与这个库链接的程序需要运行的。 如果你有其他版本的库与其他版本不兼容,则软件包 NAME 包含一个版本号,该版本可能同时安装了其他版本。
  • 包含了使用OpenSSL库的工具。 即使有多个库版本,也不需要这些工具的多个版本: 仅有一个 /usr/bin/openssl 和相关工具。数据和文档。
  • 如果你想编译与OpenSSL链接的程序,那么 libssl-dev 插件包含你需要的文件。 有( *.h ) 头文件。链接( *.a*.so )的库和一些组合文件。
  • libssl-doc 包含OpenSSL库的文档。 如果你要编写使用库的程序,你只需要这个包。
  • libssl1.0.0-dbg 包含调试符号。 它只对调试OpenSSL库或者使用它的程序有用。 andrewsomething的回答有关于这些 -dbg 包的更多信息。
除了precise的版本,精确包含了库的老版本,因为还有一些程序仍然链接到旧版本。 你可能看到的其他包是其他语言的绑定。 OpenSSL不附带任何( 对于其他语言,有到OpenSSL的绑定,但是它们并不是来自同一个) 。 一个示例是 ,它附带了 TCL绑定插件。 这样拆分包的主要原因是不同的包有不同的目标访问群体。 一个没有人编译任何东西只需要核心 lib包,也可以能是 命令行 工具;如果需要,它们会自动安装。 如果有人想编译使用这个库的程序,他们需要 -dev 包。 如果有人想写一个使用这个库的程序,他们需要 -doc 包。 那么升级它遵循同样的结构,但是因为commit是一个巨大的库,它被分解成了很多? libboost-*1.46.1 and precise precise precise Boost Boost Boost Boost Boost Boost Boost Boost,但oneiric同时拥有 1.42 和 1.46. 还有一个 metapackage boost默认插件,它将版本化包作为依赖项引入。 除了动态库包 libhangul1 和开发包 libhangul-dev,查看 libhangul插件还有一个包libhangul-data 。 这里软件包包含库所需的附加数据。 即使你有多个版本的库,它们也可以共享 -data 包。 此外,软件包的架构独立。 包含大量架构独立数据的软件被拆分成架构依赖性和架构独立的软件包,以节省发布空间。 另一个具有相似含义的后缀是 -common 。 Ubuntu和Debian的包装规则非常相似,所以制作Debian软件包的材料也适用于 Ubuntu 。 事实上,对于Debian和 Ubuntu,你可以拥有相同的源代码包;惟一使Debian和Ubuntu包不同的是针对不同库的编译,这不仅仅是不同版本的Ubuntu版本之间的区别。 现在,我们已经拥有了 Debian开发人员文档,特别是Debian策略手册和开发者的参考;参见maintainer维护者指南 for 。 忽略关于使用Debian项目等的部分,只读关于制作包的部分。 是一个很好的方法来启动deb包( 你要选择"库") 。