I frequently see a pattern in image build/refresh scripts where a set of packages is installed, and then all packages are updated:
apt update apt install -y pkg1 pkg2 pkg2 apt dist-upgrade -y
While it’s not much, this results in redundant work. For example reading/writing package database, potentially running triggers (man-page refresh, ldconfig, etc). The internal package dependency resolution stuff isn’t actually different: “install” will also do upgrades of needed packages, etc. Combining them should be entirely possible, but I haven’t found a clean way to do this yet.
The best I’ve got so far is:
apt update apt-cache dumpavail | dpkg --merge-avail - (for i in pkg1 pkg2 pkg3; do echo "$i install") | dpkg --set-selections apt-get dselect-upgrade
This gets me the effect of running “install” and “upgrade” at the same time, but not “dist-upgrade” (which has slightly different resolution logic that’d I’d prefer to use). Also, it includes the overhead of what should be an unnecessary update of dpkg’s database. Anyone know a better way to do this?
Update: Julian Andres Klode pointed out that dist-upgrade
actually takes package arguments too just like install
. *face palm* I didn’t even try it — I believed the man-page and the -h
output. It works perfectly!
© 2020, Kees Cook. This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 License.