Actually Upgrading Ubuntu Server

Yesterday I wrote about my attempt to upgrade one of my HP Microservers, running Ubuntu 18.04 LTS to Ubuntu 20.04 LTS. Well, today I had another go. Here’s what happened.

I followed the recommendation from yesterday, to compress the initrd.img using xz compression rather than the previous default gzip. Previously the upgrade failed because it needed 140M disk space in /boot. With the change to the compression scheme, I now have 154M, which should be enough to start the upgrade.

alan@robby:~$ df -h /boot
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       226M   57M  154M  27% /boot

Well, I started the upgrade with sudo do-release-upgrade and once again had to reboot, then started the upgrade again.

Just like last time I needed to okay the change to the sources.list and accept that third party repositories were disabled.

Updating repository information

No valid mirror found 

While scanning your repository information, no mirror entry for the 
upgrade was found. This can happen if you run an internal mirror or 
if the mirror information is out-of-date. 

Do you want to rewrite your 'sources.list' file anyway? If you choose 
'Yes' here, it will update all 'bionic' to 'focal' entries. 
If you select 'No', the upgrade will cancel. 

Continue [yN] y

Third party sources disabled 

Some third party entries in your sources.list were disabled. You can 
re-enable them after the upgrade with the 'software-properties' tool 
or your package manager. 

To continue please press [ENTER]


Okay, so we got past the size check of /boot. That’s good. As usual we get a summary of what’s going to happen. Some things removed, some upgraded and some new things to come. It’s estimating the speed of download based on the fact I have a local mirror.


Do you want to start the upgrade? 


15 installed packages are no longer supported by Canonical. You can 
still get support from the community. 

18 packages are going to be removed. 252 new packages are going to be 
installed. 960 packages are going to be upgraded. 

You have to download a total of 729 M. This download should take 
about 1 minute with your connection. 

Installing the upgrade can take several hours. Once the download has 
finished, the process cannot be cancelled. 

 Continue [yN]  Details [d]

Let’s hit “d” for fun. Normally I just hit “y” and let it rip. We have some packages which are no longer supported:

No longer supported: bzr dh-python dnsutils geoip-database ifenslave 
  ifupdown libdumbnet1 libegl1-mesa libncurses5 libncursesw5 
  libtinfo5 nmap python-dateutil uidmap vlan 

Some which will be removed…

Remove: dstat libapt-inst2.0 libapt-pkg5.0 libcupscgi1 libcupsmime1 
  libcupsppdc1 libpolkit-backend-1-0 libsnmp30 
Remove (was auto installed) libldb1 libmailutils5 libpython-stdlib 
  libsensors4 python python-keyrings.alt python-ldb python-minimal 
  python-samba python-tdb 

… and a bunch which will be installed …

Install: alsa-topology-conf alsa-ucm-conf amd64-microcode 
  bind9-dnsutils bind9-libs bolt brz chafa cpp-9 cryptsetup-initramfs 
  cryptsetup-run finalrd fonts-urw-base35 fwupd fwupd-signed g++-9 
  gcc-10-base gcc-9 gcc-9-base gir1.2-packagekitglib-1.0 
  golang-1.13-go golang-1.13-race-detector-runtime golang-1.13-src 
  guile-2.2-libs intel-microcode iucode-tool kpartx libaio1 
  libappstream4 libapt-pkg6.0 libarchive13 libargon2-1 
  libarray-intspan-perl libasan5 libasync-mergepoint-perl 
  libboost-filesystem1.71.0 libboost-iostreams1.71.0 
  libboost-thread1.71.0 libbrotli1 libcanberra0 libcapnp-0.7.0 
  libcapture-tiny-perl libcbor0.6 libchafa0 libcommon-sense-perl 
  libconst-fast-perl libcontextual-return-perl libcpanel-json-xs-perl 
  libcrypt-dev libcrypt1 libctf-nobfd0 libctf0 libdbus-glib-1-2 
  libdevel-size-perl libdigest-bubblebabble-perl libdns-export1109 
  libefiboot1 libefivar1 libevent-2.1-7 libffi7 libfido2-1 
  libfile-find-rule-perl libfl2 libfont-ttf-perl libfuture-perl 
  libfwupd2 libfwupdplugin1 libgcab-1.0-0 libgcc-9-dev libgcc-s1 
  libgdbm6 libgfortran5 libgitlab-api-v4-perl libglib2.0-bin 
  libgpg-error-l10n libgstreamer1.0-0 libgutenprint-common 
  libgutenprint9 libhash-fieldhash-perl libhogweed5 
  libhttp-tiny-multipart-perl libicu66 libilmbase24 libimagequant0 
  libio-async-loop-epoll-perl libio-async-perl libio-prompter-perl 
  libip4tc2 libip6tc2 libisc-export1105 libisl22 libjs-sphinxdoc 
  libjs-underscore libjson-c4 libjson-maybexs-perl libjson-perl 
  libjson-xs-perl libldb2 liblinear4 liblinux-epoll-perl 
  liblist-someutils-perl liblist-someutils-xs-perl libllvm11 liblmdb0 
  liblog-any-adapter-screen-perl liblog-any-perl liblouis20 
  liblouisutdml9 liblvm2cmd2.03 libmagickcore-6.q16-6 
  libmagickcore-6.q16-6-extra libmagickwand-6.q16-6 libmailutils6 
  libmoox-aliases-perl libmoox-struct-perl libmysqlclient21 
  libncurses6 libncursesw6 libnet-dns-sec-perl libnettle7 libnftnl11 
  libntfs-3g883 libobject-id-perl libonig5 libopenexr24 libopenjp2-7 
  libpackagekit-glib2-18 libpcre2-8-0 libperl4-corelibs-perl 
  libperl5.30 libplymouth5 libpoppler-cpp0v5 libpoppler97 libprocps8 
  libprotobuf-lite17 libprotobuf17 libpython2-stdlib libpython3.8 
  libpython3.8-minimal libpython3.8-stdlib libqpdf26 librdmacm1 
  libre-engine-re2-perl libre2-5 libreadline8 libreadonly-perl 
  libref-util-perl libref-util-xs-perl libregexp-pattern-perl libsane 
  libsensors-config libsensors5 libsereal-decoder-perl 
  libsereal-encoder-perl libsereal-perl libsgutils2-2 libsmbios-c2 
  libsnmp35 libstdc++-9-dev libstemmer0d libstring-shellquote-perl 
  libstruct-dumb-perl libterm-readkey-perl libtest-fatal-perl 
  libtest-refcount-perl libtinfo6 libtorrent21 libtss2-esys0 
  libtype-tiny-perl libtype-tiny-xs-perl libtypes-serialiser-perl 
  libubsan1 libuchardet0 libunbound8 liburcu6 libuv1 libvorbisfile3 
  libvulkan1 libwant-perl libxcb-randr0 libxkbfile1 
  libxml-writer-perl libxmlb1 linux-generic linux-headers-5.4.0-67 
  linux-headers-5.4.0-67-generic linux-image-5.4.0-67-generic 
  linux-image-generic linux-modules-5.4.0-67-generic 
  linux-modules-extra-5.4.0-67-generic logsave lua-lpeg 
  lxd-agent-loader lz4 mesa-vulkan-drivers multipath-tools 
  nmap-common node-normalize.css packagekit packagekit-tools pci.ids 
  perl-modules-5.30 python-configparser python-entrypoints 
  python-is-python2 python2 python2-minimal python3-blinker 
  python3-breezy python3-crypto python3-deprecated python3-distro 
  python3-dnspython python3-dulwich python3-entrypoints 
  python3-fastimport python3-future python3-github python3-gitlab 
  python3-hamcrest python3-jwt python3-keyring python3-kiwisolver 
  python3-launchpadlib python3-lazr.restfulclient python3-lazr.uri 
  python3-ldb python3-markdown python3-oauthlib python3-packaging 
  python3-pexpect python3-ptyprocess python3-pygments python3-samba 
  python3-secretstorage python3-simplejson python3-talloc python3-tdb 
  python3-wadllib python3-wrapt python3.8 python3.8-minimal 
  sbsigntool secureboot-db sg3-utils sg3-utils-udev 
  sound-theme-freedesktop systemd-timesyncd thermald 
  thin-provisioning-tools tpm-udev usb.ids 

With a load being upgraded too…

Upgrade: accountsservice acl acpid adduser adwaita-icon-theme apache2 
  apache2-bin apache2-data apache2-utils apparmor apport 
  apport-symptoms apt apt-transport-https apt-utils at at-spi2-core 
  attr avahi-daemon base-files base-passwd bash bash-completion bc 
  bcache-tools bind9-host binutils binutils-common 
  binutils-x86-64-linux-gnu bsdmainutils bsdutils btrfs-progs 
  build-essential busybox-initramfs busybox-static byobu bzip2 bzr 
  ca-certificates ca-certificates-java cloud-guest-utils 
  cloud-initramfs-copymods cloud-initramfs-dyn-netconf cockpit-bridge 
  cockpit-pcp colord colord-data command-not-found console-setup 
  console-setup-linux coreutils cpio cpp cpp-7 cron cryptsetup 
  cryptsetup-bin cups cups-browsed cups-client cups-common 
  cups-core-drivers cups-daemon cups-filters 
  cups-filters-core-drivers cups-ipp-utils cups-ppdc 
  cups-server-common curl dash dbus dbus-user-session dbus-x11 
  dconf-gsettings-backend dconf-service dctrl-tools debconf 
  debconf-i18n debianutils debmirror devscripts dh-python diffstat 
  diffutils dirmngr distro-info-data dmeventd dmidecode dmsetup 
  dns-root-data dnsmasq-base dnsutils dos2unix dosfstools dpkg 
  dpkg-dev dput e2fslibs e2fsprogs e2fsprogs-l10n ed eject ethtool 
  fakeroot fdisk file findutils fontconfig fontconfig-config 
  fonts-lyx fonts-noto-mono fonts-ubuntu-console 
  fonts-ubuntu-font-family-console friendly-recovery ftp fuse g++ 
  g++-7 gawk gcc gcc-7 gcc-7-base gcc-8-base gcr gddrescue gdisk 
  geoip-database gettext gettext-base ghostscript gir1.2-glib-2.0 git 
  git-man glances glib-networking glib-networking-common 
  glib-networking-services gnupg gnupg-l10n gnupg-utils 
  golang-docker-credential-helpers golang-go 
  golang-race-detector-runtime golang-src 
  google-cloud-print-connector gpg gpg-agent gpg-wks-client 
  gpg-wks-server gpgconf gpgsm gpgv grep groff-base grub-common 
  grub-legacy-ec2 grub-pc grub-pc-bin grub2-common 
  gsettings-desktop-schemas gtk-update-icon-cache guile-2.0-libs gzip 
  hdparm hostname htop ibverbs-providers iftop ifupdown imagemagick 
  imagemagick-6-common imagemagick-6.q16 info init 
  init-system-helpers initramfs-tools initramfs-tools-bin 
  initramfs-tools-core install-info intltool-debian iotop iperf 
  iproute2 iptables iputils-arping iputils-ping iputils-tracepath 
  irqbalance isc-dhcp-client isc-dhcp-common iso-codes iw java-common 
  jq kbd keyboard-configuration klibc-utils kmod krb5-locales 
  landscape-common language-pack-en language-pack-en-base 
  language-selector-common less libaccountsservice0 libacl1 
  libalgorithm-diff-perl libalgorithm-diff-xs-perl libapparmor-perl 
  libapparmor1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 
  libaprutil1-ldap libapt-pkg-perl libarchive-zip-perl libargon2-0 
  libasan4 libasn1-8-heimdal libasound2 libasound2-data libassuan0 
  libatk-bridge2.0-0 libatk-wrapper-java libatk-wrapper-java-jni 
  libatk1.0-0 libatk1.0-data libatm1 libatomic1 libatspi2.0-0 
  libattr1 libaudit-common libaudit1 libavahi-client3 
  libavahi-common-data libavahi-common3 libavahi-core7 libavahi-glib1 
  libb-hooks-endofscope-perl libb-hooks-op-check-perl libbinutils 
  libblas3 libblkid1 libbluetooth3 libbsd0 libbz2-1.0 libc-bin 
  libc-dev-bin libc6 libc6-dev libcairo-gobject2 libcairo2 libcap-ng0 
  libcap2 libcap2-bin libcc1-0 libcephfs2 libcgi-fast-perl 
  libcgi-pm-perl libcilkrts5 libclass-method-modifiers-perl 
  libclass-xsaccessor-perl libclone-perl libcolord2 libcolorhug2 
  libcom-err2 libcomerr2 libcroco3 libcrypto++-dev libcrypto++6 
  libcryptsetup12 libcups2 libcupsfilters1 libcupsimage2 
  libcurl3-gnutls libcurl4 libdaemon0 libdatrie1 libdb5.3 libdbus-1-3 
  libdconf1 libdebconfclient0 libdevel-callchecker-perl 
  libdevmapper-event1.02.1 libdevmapper1.02.1 libdigest-hmac-perl 
  libdistro-info-perl libdjvulibre-text libdjvulibre21 libdpkg-perl 
  libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 
  libdrm-radeon1 libdrm2 libdumbnet1 libedit2 libegl-mesa0 libegl1 
  libegl1-mesa libelf1 libepoxy0 liberror-perl libexif12 libexpat1 
  libexporter-tiny-perl libext2fs2 libfakeroot libfcgi-perl libfdisk1 
  libfftw3-double3 libfile-basedir-perl libfile-copy-recursive-perl 
  libfile-fcntllock-perl libfile-homedir-perl libfile-which-perl 
  libflac8 libfontconfig1 libfontembed1 libfontenc1 libfreetype6 
  libfribidi0 libfuse2 libgbm1 libgc1c2 libgcc-7-dev libgcc1 
  libgck-1-0 libgcr-base-3-1 libgcr-ui-3-1 libgcrypt20 libgd3 
  libgdbm-compat4 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-bin 
  libgdk-pixbuf2.0-common libgeoip1 libgetopt-long-descriptive-perl 
  libgfortran4 libgif7 libgirepository-1.0-1 libgit-wrapper-perl 
  libgl1 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglib2.0-0 
  libglib2.0-data libglvnd0 libglx-mesa0 libglx0 libgmp10 
  libgnutls-openssl27 libgnutls30 libgomp1 libgpg-error0 libgpgme11 
  libgphoto2-6 libgphoto2-l10n libgphoto2-port12 libgraphite2-3 
  libgs9 libgs9-common libgsasl7 libgssapi-krb5-2 libgssapi3-heimdal 
  libgtk-3-0 libgtk-3-bin libgtk-3-common libgtk2.0-0 
  libgtk2.0-common libgudev-1.0-0 libgusb2 libharfbuzz0b 
  libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal 
  libhtml-form-perl libhtml-parser-perl libhtml-tagset-perl 
  libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl 
  libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl 
  libhx509-5-heimdal libibverbs1 libice-dev libice6 libidn11 
  libidn2-0 libieee1284-3 libijs-0.35 libio-pty-perl 
  libio-socket-ssl-perl libio-stringy-perl libipc-run-perl 
  libipc-system-simple-perl libiptc0 libisns0 libitm1 libiw30 
  libjansson4 libjbig2dec0 libjpeg-turbo8 libjq1 libjs-jquery 
  libjson-glib-1.0-0 libjson-glib-1.0-common libk5crypto3 
  libkeyutils1 libklibc libkmod2 libkrb5-26-heimdal libkrb5-3 
  libkrb5support0 libkyotocabinet16v5 liblapack3 liblcms2-2 
  libldap-2.4-2 libldap-common liblist-moreutils-perl libllvm10 
  liblocale-gettext-perl liblog-agent-perl liblouis-data 
  liblouisutdml-bin liblouisutdml-data liblsan0 libltdl7 liblua5.2-0 
  liblua5.3-0 liblwp-mediatypes-perl liblwp-protocol-https-perl 
  liblz4-1 liblzma5 liblzo2-2 libmagic-mgc libmagic1 
  libmailtools-perl libmaxminddb0 libmbim-glib4 libmbim-proxy 
  libmirclient9 libmircommon7 libmircore1 libmirprotobuf3 libmm-glib0 
  libmoo-perl libmount1 libmpdec2 libmpfr6 libmpx2 libmspack0 
  libncurses5 libncursesw5 libndp0 libnet-dns-perl libnet-http-perl 
  libnet-ip-perl libnet-libidn-perl libnet-ssleay-perl 
  libnetfilter-conntrack3 libnetplan0 libnewt0.52 libnfnetlink0 
  libnghttp2-14 libnl-3-200 libnl-genl-3-200 libnl-route-3-200 libnm0 
  libnpth0 libnspr4 libnss-mdns libnss-systemd libnss3 libntlm0 
  libnuma1 libogg0 libp11-kit0 libpackage-stash-perl 
  libpackage-stash-xs-perl libpam-modules libpam-modules-bin 
  libpam-runtime libpam-systemd libpam0g libpango-1.0-0 
  libpangocairo-1.0-0 libpangoft2-1.0-0 libpaper-utils libpaper1 
  libparams-classify-perl libparams-util-perl libparams-validate-perl 
  libparse-debianchangelog-perl libparted2 libpath-iterator-rule-perl 
  libpath-tiny-perl libpcap0.8 libpci3 libpciaccess0 libpcp-gui2 
  libpcp-import1 libpcp-mmv1 libpcp-pmda-perl libpcp-pmda3 
  libpcp-trace2 libpcp-web1 libpcp3 libpcre3 libpcsclite1 
  libperlio-gzip-perl libpfm4 libpipeline1 libpixman-1-0 libpng16-16 
  libpolkit-agent-1-0 libpolkit-gobject-1-0 libpopt0 libproxy1v5 
  libpsl5 libpthread-stubs0-dev libpulse0 libpython2.7 
  libpython2.7-minimal libpython2.7-stdlib libpython3-stdlib 
  libqmi-glib5 libqmi-proxy libquadmath0 librados2 libreadline5 
  libregexp-pattern-license-perl librest-0.7-0 libroken18-heimdal 
  librole-tiny-perl librsvg2-2 librsvg2-common librtmp1 
  libsane-common libsane1 libsasl2-2 libsasl2-modules 
  libsasl2-modules-db libseccomp2 libsecret-1-0 libsecret-common 
  libselinux1 libsemanage-common libsemanage1 libsepol1 libsigsegv2 
  libslang2 libsm-dev libsm6 libsmartcols1 libsndfile1 libsnmp-base 
  libsocket6-perl libsort-key-perl libsoup-gnome2.4-1 libsoup2.4-1 
  libsqlite3-0 libss2 libssh-4 libssl-dev libssl-doc libssl1.1 
  libstdc++-7-dev libstdc++6 libstrictures-perl 
  libstring-copyright-perl libsub-identify-perl libsub-name-perl 
  libsub-quote-perl libsystemd0 libtalloc2 libtasn1-6 libtcl8.6 
  libtdb1 libteamdctl0 libtevent0 libtext-charwidth-perl 
  libtext-iconv-perl libtext-wrapi18n-perl libthai-data libthai0 
  libtiff5 libtimedate-perl libtinfo5 libtk8.6 libtokyocabinet9 
  libtsan0 libubsan0 libudev1 libunbound-dev libunicode-utf8-perl 
  libunistring2 libunwind8 liburi-perl libusb-0.1-4 libusb-1.0-0 
  libutempter0 libuuid1 libvariable-magic-perl libvorbis0a 
  libvorbisenc2 libwayland-client0 libwayland-cursor0 libwayland-egl1 
  libwayland-egl1-mesa libwayland-server0 libwbclient0 
  libwind0-heimdal libwmf0.2-7 libwrap0 libwww-perl 
  libwww-robotrules-perl libx11-6 libx11-data libx11-dev libx11-doc 
  libx11-xcb1 libx86-1 libxau-dev libxau6 libxcb-dri2-0 libxcb-dri3-0 
  libxcb-glx0 libxcb-present0 libxcb-render0 libxcb-shape0 
  libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcb1 libxcb1-dev 
  libxcomposite1 libxcursor1 libxdamage1 libxdmcp-dev libxdmcp6 
  libxext6 libxfixes3 libxft2 libxi6 libxinerama1 libxkbcommon0
  libxml-libxml-perl libxml-parser-perl libxml-sax-expat-perl 
  libxml-sax-perl libxml-simple-perl libxml2 libxmlrpc-core-c3 
  libxmlsec1 libxmlsec1-openssl libxmu6 libxmuu1 libxrandr2 
  libxslt1.1 libxss1 libxtables12 libxxf86dga1 libxxf86vm1 
  libyaml-0-2 libyaml-libyaml-perl libzstd1 licensecheck lintian 
  linux-base linux-firmware linux-headers-generic linux-libc-dev 
  lm-sensors locales login logrotate lsb-base lsb-release lshw lsof 
  ltrace lvm2 lynx lynx-common mailutils mailutils-common make 
  makedev man-db manpages manpages-dev mawk mdadm mime-support 
  mlocate modemmanager mosh motd-news-config mount mtr-tiny mutt 
  mysql-common nano ncdu ncurses-base ncurses-bin ncurses-term 
  neofetch net-tools netbase netcat-openbsd netdiscover nethogs 
  netplan.io network-manager network-manager-pptp networkd-dispatcher 
  nmap nmon ntfs-3g open-iscsi open-vm-tools openjdk-8-jdk 
  openjdk-8-jdk-headless openjdk-8-jre openjdk-8-jre-headless 
  openssh-client openssh-server openssh-sftp-server openssl os-prober 
  overlayroot p0f parted passwd pastebinit patch pciutils pcp 
  pcp-conf perl perl-base perl-openssl-defaults pinentry-gnome3 
  pkg-config plymouth plymouth-theme-ubuntu-text pm-utils pngquant 
  policykit-1 pollinate poppler-data poppler-utils popularity-contest 
  postfix powermgmt-base ppp pptp-linux printer-driver-gutenprint 
  procps psmisc publicsuffix python-apt-common python-asn1crypto 
  python-cffi-backend python-crypto python-cryptography 
  python-dateutil python-dbus python-dnspython python-enum34 
  python-gi python-httplib2 python-idna python-ipaddress 
  python-keyring python-matplotlib-data python-oauth 
  python-pkg-resources python-simplejson python-six 
  python-zope.interface python2.7 python2.7-minimal python3 
  python3-apport python3-apt python3-asn1crypto python3-attr 
  python3-automat python3-bottle python3-certifi python3-cffi-backend 
  python3-chardet python3-click python3-colorama 
  python3-commandnotfound python3-configobj python3-constantly 
  python3-cryptography python3-cycler python3-dateutil python3-dbus 
  python3-debconf python3-debian python3-distro-info 
  python3-distupgrade python3-distutils python3-docker 
  python3-dockerpycreds python3-gdbm python3-gi python3-gpg 
  python3-httplib2 python3-hyperlink python3-idna python3-incremental 
  python3-influxdb python3-lib2to3 python3-magic python3-matplotlib 
  python3-minimal python3-netifaces python3-newt python3-numpy 
  python3-olefile python3-openssl python3-pam python3-pcp python3-pil 
  python3-pkg-resources python3-ply python3-problem-report 
  python3-psutil python3-pyasn1 python3-pyasn1-modules 
  python3-pycryptodome python3-pycurl python3-pyparsing python3-pysmi 
  python3-pysnmp4 python3-pystache python3-requests 
  python3-requests-unixsocket python3-serial python3-service-identity 
  python3-six python3-software-properties python3-systemd python3-tk 
  python3-twisted python3-twisted-bin python3-tz python3-unidiff 
  python3-update-manager python3-urllib3 python3-websocket 
  python3-xdg python3-yaml python3-zope.interface qpdf 
  readline-common rename resolvconf rsync rsyslog rtorrent samba 
  samba-common samba-common-bin samba-dsdb-modules samba-libs 
  samba-vfs-modules sane-utils screen sed sensible-utils sgml-base 
  shared-mime-info smartmontools snap-confine snapd 
  software-properties-common sosreport squashfs-tools ssh-import-id 
  strace sudo systemd systemd-sysv sysvinit-utils t1utils tar tasksel 
  tasksel-data tcpd tcpdump tdb-tools telnet tmux tree tzdata 
  ubuntu-advantage-tools ubuntu-cloudimage-keyring 
  ubuntu-core-launcher ubuntu-keyring ubuntu-minimal ubuntu-mono 
  ubuntu-release-upgrader-core ubuntu-server ubuntu-standard ucf udev 
  ufw uidmap unattended-upgrades unrar unzip update-inetd 
  update-manager-core update-notifier-common uptimed usb-modeswitch 
  usb-modeswitch-data usbutils util-linux uuid-runtime vim vim-common 
  vim-runtime vim-tiny vlan vnstat w3m wamerican wdiff wget whiptail 
  wireless-regdb wireless-tools wpasupplicant x11-common x11-utils 
  x11proto-core-dev x11proto-dev xauth xdg-user-dirs xfsprogs 
  xkb-data xml-core xtrans-dev xxd xz-utils zerofree zlib1g 

After this I hit “y” to start the upgrade.

We’re off! Hundreds of packages downloading at ~10-14MB/s. Wheeee!

Get:540 http://192.168.1.8/ubuntu focal/main amd64 python3-requests all 2.22.0-2ubuntu1 [47.1 kB]
Get:541 http://192.168.1.8/ubuntu focal-updates/main amd64 python3-urllib3 all 1.25.8-2ubuntu0.1 [88.3 kB]                             
Get:542 http://192.168.1.8/ubuntu focal/main amd64 python3-requests-unixsocket all 0.2.0-2 [7,272 B]                                   
Get:543 http://192.168.1.8/ubuntu focal-updates/main amd64 python3-apport all 2.20.11-0ubuntu27.16 [84.9 kB]                           
Get:544 http://192.168.1.8/ubuntu focal-updates/main amd64 apport all 2.20.11-0ubuntu27.16 [129 kB]                                    
Get:545 http://192.168.1.8/ubuntu focal/main amd64 libfl2 amd64 2.6.4-6.2 [11.5 kB]                                                    
Get:546 http://192.168.1.8/ubuntu focal/main amd64 at amd64 3.1.23-1ubuntu1 [38.7 kB]                                                  
Get:547 http://192.168.1.8/ubuntu focal/main amd64 gawk amd64 1:5.0.1+dfsg-1 [418 kB]                                                  
Get:548 http://192.168.1.8/ubuntu focal-updates/main amd64 bcache-tools amd64 1.0.8-3ubuntu0.1 [19.5 kB]                               
28% [Waiting for headers]                                                      14 MB/s 20s

The upgrade chugged along for a while, and once complete I had to reboot again, into the new release.

System upgrade is complete.

Restart required 

To complete the upgrade, a system restart is required. 
If you select 'y' the system will be restarted. 

Continue [yN] 

Boom! It worked

alan@robby:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

Even better, the python script I had trouble with, which made me need to upgrade in the first place, works!