从多个deb文件中创建最终的deb文件

我有一个包含所有依赖关系的deb文件。
是否可能创建一个最终的deb文件(一个文件)来使用所有这些依赖关系?例如,firefox.deb在另一个.deb文件中有10个依赖项。所以有一个顺序来安装所有的依赖项,然后再安装firefox.deb。我能否创建一个fullFirefox.deb文件,它可以自动管理一切?我没有源代码,只有deb文件。
1个回答

这是可能的,但你可能会遇到一些问题。首先,每个软件包都有自己的预安装和后安装脚本以及控制文件中的依赖关系。即使你使用“提供”字段使一个软件包提供所包含的软件包,未来的升级可能会破坏你的上帝软件包:

  1. 你安装了你的上帝软件包,它提供了很多软件包
  2. 其中一个软件包正在更新,比如libpango1.0-0
  3. 如果你升级了那个软件包,你的上帝软件包将被移除。如果有任何对它的依赖关系,apt-get会出现无法解决的冲突。

因此,最好不要创建一个上帝软件包,而是分别安装每个软件包。如果你需要离线安装软件,请参阅如何在没有互联网的情况下安装软件或软件包?

如何创建一个上帝软件包(不推荐):

  1. 创建一个临时目录,例如"~/godpackage",然后进入该目录
  2. 使用命令dpkg -x filename.deb .来解压每个.deb文件
  3. 使用命令dpkg --control filename.deb tmpdeb来提取控制文件、postrm等文件。将会创建一个名为"tmpdeb"的新目录。调整控制文件,例如更改名称以避免后续冲突。完成后,将tmpdeb目录移动/合并到DEBIAN目录中(如有需要,请创建)。对每个deb文件重复此步骤
  4. 离开当前目录:cd ..
  5. ~/godpackage创建新的deb文件,并将新创建的.deb文件存储在当前目录中:dpkg-deb --build ~/godpackage .

谢谢Lekensteyn。你的信息对我非常有帮助。请问你能解释一下"When done, move / merge the tmpdeb directory with the DEBIAN directory (create if needed)"是什么意思吗? - shantanu
1一个软件包应该有一个包含控制文件的DEBIAN目录,还可以选择性地包含postinst、postrm、preinst、prerm和其他一些文件。所有的库在它们的postinst脚本中都会运行ldconfig,所以这个过程很容易合并。如果一个后安装脚本依赖于一个已配置的软件包,那么情况就会变得更加困难。最后,如果{pre,post}{rm,inst}脚本中的某个操作失败,调试将变得更加困难,它可能会退出或导致意外行为。 - Lekensteyn
我喜欢官方使用的术语:“神级套餐”。 - CraigDavid