目前,我正在深入研究 .deb 打包系统。我对此很陌生,所以我想问你一个问题,因为我在其他网站上找不到准确的答案。
假设我想为 创建一个(可分发的).deb 包Software A
。pbuilder
依赖项是libqrencode
、libconfig
和libABC
。对于前两个依赖项,官方 Ubuntu 存储库中已经有包。因此,我只需将这两个库添加到文件中debian/control
(并pbuilder
完成其余操作)。但是libABC
官方存储库中没有 .deb 包,也没有 PPA 等。
例如,我唯一拥有的就是来自 GitHub 的源代码。
所以,我的问题是我应该如何处理这个问题?
- 我是否必须
libABC
从系统上的源代码进行编译?但是我如何将其“添加”到pbuilder
系统中? - 或者我是否还必须
libABC
先创建另一个 .deb 包?我如何将其“添加”到pbuilder
?如果libABC
没有现有的 .deb 包,又有依赖项怎么办? - 或者这是一种完全不同的方法?
在此先感谢您的帮助!
答案1
您尝试做的事情很可能不会成功,或者需要花费很多精力才能按您希望的方式进行。
pbuilder
等均sbuild
在原始chroot
核心,其中包含chroot
构建软件所需的某些关键包。问题是,当你将源包传递到其中任何一个时,你最终必须下载依赖项放入chroot
,并且解决这个问题的方法很少。
这仅有的解决这个问题的方法是进入chroot
原始环境,然后手动安装chroot
Ubuntu 发行版的软件包(是的,chroot
您的系统上可以有不同版本的 Ubuntu)。这会成为一个非常令人头痛的问题 - 因为您不仅需要构建软件包的依赖项,还需要依赖项的依赖项,以及为各种库、编码语言、系统确定的额外依赖项等安装的其他软件包。
最终,我做不是建议在离线情况下创建可再发行软件包,而无需依赖任何依赖项。使用pbuilder
或sbuild
或您选择的基于 chroot 的软件包构建环境,但要使用 Internet 连接。chroot
除非您首先chroot
在 Internet 连接上修改了,否则不要尝试运行基于 - 的构建,或者使用专门用于构建的系统,该系统可以选择性地通过 Internet 访问 Ubuntu 存储库。