Scriptable interface for "set package selection to this set"

Simon Richter <[email protected]>
Newsgroups gmane.linux.debian.apt.devel,gmane.linux.debian.devel.dpkg.general
Message-ID <[email protected]>
Hi,

I'm trying to build a small script to synchronize the package 
installation sets of a bunch of machines. My current approach is to 
simply run

     dpkg --clear-selections
     dpkg --set-selections <packages.txt
     apt-get --yes dselect-upgrade

I believe that this is the only interface that allows me to set the 
package selection without having to compare current and desired list. To 
get started, I first tried what would happen if I cleared the entire list:

     root@57ac7d42f84f:/# dpkg --clear-selections
     root@57ac7d42f84f:/# apt-get dselect-upgrade
     Reading package lists... Done
     Building dependency tree... Done
     Reading state information... Done
     The following packages will be REMOVED:
       adduser apt debian-archive-keyring e2fsprogs gpgv libapt-pkg6.0
       libcom-err2 libext2fs2 libffi8 libgnutls30 libhogweed6 libidn2-0
       libnettle8 libp11-kit0 libseccomp2 libsemanage-common libsemanage2
       libsepol2 libss2 libstdc++6 libtasn1-6 libunistring2 libxxhash0
       logsave mount passwd tzdata
     WARNING: The following essential packages will be removed.
     This should NOT be done unless you know exactly what you are doing!
       apt adduser (due to apt) gpgv (due to apt)
       libapt-pkg6.0 (due to apt) debian-archive-keyring (due to apt)
       libgnutls30 (due to apt) libseccomp2 (due to apt)
       libstdc++6 (due to apt) e2fsprogs libcom-err2 (due to e2fsprogs)
       libext2fs2 (due to e2fsprogs) libss2 (due to e2fsprogs)
       logsave (due to e2fsprogs)
     0 upgraded, 0 newly installed, 27 to remove and 0 not upgraded.
     After this operation, 30.4 MB disk space will be freed.
     E: Removing essential system-critical packages is not permitted.
     This might break the system.

As far as I can see, there are two things apt and dpkg disagree on:

  - whether apt itself is Essential

This is understandable, apt special-cases itself, and for a good reason. 
I have no problem hardcoding an "apt install" into my package selection, 
that solves this nicely.

  - whether e2fsprogs is Essential

This is only Important, not Essential, so dpkg marks it "deinstall", and 
apt doesn't want to remove it.

Outside of a container, obviously there will be more "Important" 
packages. I can hardcode a sensible package set to have something that 
works for me for now, but medium term I will probably have to explain 
this script to someone else.

The obvious problem with this interface is that half of it is provided 
by one tool, and half of it by another, and these implementations have 
incompatible worldviews that the user of the interface needs to be aware 
of, because it was never designed to be cohesive. Also, the name 
"dselect-upgrade" suggests that this is really an atavism. A useful one, 
but nonetheless probably not meant to be officially supported.

Since this functionality is useful, it would be nice to have a proper 
supported way to do this.

    Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.