45

So I can run on one machine:

dpkg --get-selections '*' > selection.txt

On another machine:

dpkg --set-selections < selection.txt

... followed by either of the following:

aptitude install
apt-get -u dselect-upgrade

... to install the packages that.

However, it appears that some information gets lost in the process, such as whether a package (say xyz) got installed automatically as dependency of another package (abc). You can see that whenever you do something like apt-get --purge remove abc. On the original machine you would be notified that package xyz was installed as dependency of abc and that you may use apt-get autoremove to get rid of it.

Now I am aware of deborphan and debfoster, but they're cumbersome to use given the (simple) task at hand.

It seems saving and restoring the selections as shown above is not sufficient to restore the subtle dependencies of installed packages.

Is there a way to back up the complete set of metadata for package management and restore it then in its entirety?

belacqua
  • 23,540
0xC0000022L
  • 5,870

2 Answers2

38

Backup:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Restore:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
htorque
  • 66,086
5

The selected answer to this question is incomplete and does not (or no longer) works. The painful fix is to use a bash for-loop to parse the output *.lst files and feed them to apt install. Bad choice, though, so will not be illustrated here.

A better choice is to use apt-clone, as seen in this answer on the Unix & Linux Stackexchange. This creates a small file (around 100K or less for my system). Allegedly, it will clone the packages with little effort or pain.

So, in short, on the original machine:

apt-clone clone `uname -n`

Then, on the machine to clone to, copy the clone file and run:

apt-clone restore original-machine-name.apt-clone.tar.gz

I include this answer here since this page turned up in initial web searches, but the other answer did not. This method looks way easier.

tanius
  • 6,610
  • 2
  • 42
  • 52
casualcoder
  • 151
  • 1
  • 2