How do I export a list of installed Debian packages on a system, and then install those same packages on a new system?
5 Answers
To backup:
sudo dpkg --get-selections > /tmp/dpkglist.txt
To Restore:
sudo dpkg --set-selections < /tmp/dpkglist.txt
sudo apt-get -y update
sudo apt-get dselect-upgrade
Also see this question for additional options and info: Ubuntu, how to setup a new machine like an existing one
I have the above running in a daily cronjob that checks the dpgklist into SVN as part of our server inventory. This will allow you to keep a reasonable accurate inventory of installed packages across your servers and its easy to do a quick side-by-side diff to see if a server is missing a particular package.
-
3I get this error message for each input line:
dpkg: warning: package not in status nor available database at line ...
– danortonMar 21, 2019 at 14:58 -
aptitude
also satisfies this usecase, and it preserves information about "automatically installed" packages that other methods do not. Run the following on the reference machine:
aptitude search -F '%p' '~i!~M' > package_list
Copy package_list
to the other machine and run
xargs aptitude --schedule-only install < package_list; aptitude install;
-
Just a minor note. According to the aptitude reference manual, the "package" field is "expandable" by default, so
aptitude search -F '%p' '~i!~M' > package_list
should also work fine.– chronosOct 17, 2013 at 23:34 -
Regarding package backup: see plug for
deborphan
@ bogdan.org.ua/2013/10/18/…– TomRocheNov 17, 2015 at 5:43 -
[insert your own linebreaks, since http://serverfault.com/editing-help#linebreaks lies]
Regarding package restore: this will need to be done as root, no? If so,<br/> Thexargs
in your restore commandline= xargs aptitude --schedule-only install < package_list; aptitude install; makes me want to know,<br/> 1. Why doesaptitude
need thexargs
?dpkg --set-selections
doesn't.<br/> 2. Presumingaptitude
does need thexargs
, where to put one or moresudo
s in your restore commandline? Or otherwise get root for running that line, presuming that's necessary.– TomRocheNov 17, 2015 at 6:00 -
Presumably,
aptitude
does not accept a list of packages on stdin but only on the command-line. Thexargs
command will do that, even calling the command multiple times if there are more than some limit (500 by default?) of values.sudo
would need to be specified beforexargs
which will then runaptitude
as the same user. And again beforeaptitude
after the semicolon (;
). Jun 9, 2022 at 18:20
That's a good idea, and you might also set up one server with apt-proxy if you make a habit of this.
-
After playing around with several proxies for apt, I ended up deciding on apt-cacher-ng. apt-cacher-ng is very simple to setup and from several accounts it seems to be more robust than the original apt-proxy. Each person has their own favourite though. unix-ag.uni-kl.de/~bloch/acng Aug 20, 2009 at 21:06
-
My vote is for approx, it's the only one that isn't some kind of insane.– womble ♦Aug 20, 2009 at 23:08
-
Interesting... I've not actually tried any of the alternatives.– user17642Aug 21, 2009 at 16:00
faultyservers answer worked for me only after running a different command as per http://rayslinux.blogspot.de/2012/10/ubuntu-1210-dpkg-warning-package-not-in.html
sudo apt-get install dselect
sudo dselect access
sudo dselect update
Before that running
sudo apt-get dselect-upgrade
only returned
[...]
dpkg: warning: package not in database at line 302: xfonts-utils
dpkg: warning: found unknown packages; this might mean the available database is outdated, and needs to be updated through a frontend method
pi@FHEM-new:/tmp $ sudo apt-get dselect-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
I was trying to install the same packages from my old Raspberry Pi (running Raspbian GNU/Linux 7 (wheezy)) on my new Raspberry (Raspbian GNU/Linux 8 (jessie)).
In recent versions of Debian/Ubuntu/Mint, dpkg
needs available packages to be in its "avail" database for dpkg --set-selections
to work.
Example sequence:
- (On other system)
dpkg --get-selections > installed.dselect
sudo apt update
apt-cache dumpavail | sudo dpkg --merge-avail
sudo dpkg --set-selections < installed.dselect
sudo apt-get dselect-upgrade
The third command populates dpkg's "avail" database. It's important to run this before setting the selections of which additional packages to install.
This reqires dpkg v1.17.7 and later. See Q: Why does ''dpkg --set-selections'' not record selections for unknown packages? on the Debian wiki for more details.