8

I have a packages deb file with all dependencies deb file.

Is it possible to create a final deb file (one file) using all. Say for example firefox.deb has 10 dependencies in another .deb file. So there is an order to install all the dependencies then afterwards firefox.deb. May I create a fullFirefox.deb file which automatically maintain everything ? I do not have the source, just the deb files.

Zanna
  • 70,465
shantanu
  • 8,599

1 Answers1

8

It is possible, but you'll likely run in several issues. First, each package has it's own pre- and post-installation scripts and dependencies in the control file. Even if you make a package provide the contained packages using the Provides field, future upgrades may ruin your God package:

  1. You install your God package which provides a lot packages
  2. One of the packages are being updated, like libpango1.0-0
  3. If you upgrade that package, your God package will be removed. If there are any dependencies on it, apt-get has an unresolvable conflict.

So, it's better not to create a God package, but install each package separately. If you need to install software offline, see How can I install software or packages without Internet (offline)?

How to create a God package (not recommended):

  1. Create a temporary directory, e.g. "~/godpackage" and cd into it
  2. Extract each .deb file using dpkg -x filename.deb .
  3. Extract the control, postrm, ..., files using dpkg --control filename.deb tmpdeb. A new directory will be created, named tmpdeb. Adjust the control files like changing the name to avoid conflicts later. When done, move / merge the tmpdeb directory with the DEBIAN directory (create if needed). Repeat it for each deb file
  4. Go away from the directory: cd ..
  5. Create the new debfile from ~/godpackage and store the newly created .deb file in the current directory: dpkg-deb --build ~/godpackage .
Lekensteyn
  • 174,277
  • thank you Lekensteyn. Your information is very helpful for me. Will you please explain what does "When done, move / merge the tmpdeb directory with the DEBIAN directory (create if needed)" mean? – shantanu Aug 29 '11 at 09:52
  • 1
    A package should have a DEBIAN directory containing the control file and optionally postinst, postrm, preinst, prerm and some others. All libraries run ldconfig in their postinst script, so that can easily be merged. It gets more difficult if a post-installation script depends on a configured package. Finally, it makes debugging much harder, if one action in the {pre,post}{rm,inst} scripts fail, it'll quit or lead to unexpected behavior. – Lekensteyn Aug 29 '11 at 09:57
  • I love the official terminology used: "God package" – CraigDavid Jun 23 '20 at 20:42