{"id":385,"date":"2020-10-20T18:50:10","date_gmt":"2020-10-20T17:50:10","guid":{"rendered":"http:\/\/wp.philroche.net\/?p=385"},"modified":"2020-10-21T09:44:21","modified_gmt":"2020-10-21T08:44:21","slug":"package-changes-between-two-ubuntu-images","status":"publish","type":"post","link":"http:\/\/wp.philroche.net\/2020\/10\/20\/package-changes-between-two-ubuntu-images\/","title":{"rendered":"Package changes between two Ubuntu images"},"content":{"rendered":"\n

I work on the Canonical Public Cloud team and we publish all of the Ubuntu server images used in the cloud.<\/p>\n\n\n\n

We often get asked what the differences are between two released images. For example what is the difference between the Ubuntu 20.04 LTS image kvm optimised image from 20200921<\/a> and the Ubuntu 20.04 LTS image kvm optimised image from 20201014<\/a>, specifically what packages changed and what was included in those changes?<\/p>\n\n\n\n

For each of our download images published to http:\/\/cloud-images.ubuntu.com\/<\/a> we publish a package version manifest which lists all the packages installed and the versions installed at that time. It also lists any installed snaps the the revision of that snap currently installed. This is very useful for checking to see if an image you are about to use has the expected package version for your requirements or has the expected package version that addresses a vulnerability.<\/p>\n\n\n\n

Example snippet from a package version manifest:<\/p>\n\n\n

\n<snip>\npython3-apport\t2.20.11-0ubuntu27.9\npython3-distutils\t3.8.5-1~20.04.1\n<\/snip>\n<\/pre>\n\n\n

This manifest is also useful to determine the differences between two images. You can do a simple diff of the manifests which will show you the version changes but you can also, with the help of a new ubuntu-cloud-image-changelog<\/a> command line utility I have published to the Snap store<\/a>, determine what changed in those packages.<\/p>\n\n\n\n

\"ubuntu-cloud-image-changelog<\/a>
ubuntu-cloud-image-changelog available from the snap store<\/a><\/a><\/a><\/figcaption><\/figure>\n\n\n\n

I’ll work through an example of how to use this tool now:<\/p>\n\n\n\n

Using the the Ubuntu 20.04 LTS image kvm optimised image from 20200921 manifest<\/a> and the Ubuntu 20.04 LTS image kvm optimised image from 20201014 manifest<\/a> we can find the package version diff.<\/p>\n\n\n

\n$ diff 20200921.1-ubuntu-20.04-server-cloudimg-amd64-disk-kvm.manifest 20201014-ubuntu-20.04-server-cloudimg-amd64-disk-kvm.manifest\n<snip>\n426c426\n< python3-apport\t2.20.11-0ubuntu27.8\n---\n> python3-apport\t2.20.11-0ubuntu27.9\n446c446\n< python3-distutils\t3.8.2-1ubuntu1\n---\n> python3-distutils\t3.8.5-1~20.04.1\n<\/snip>\n\n<\/pre>\n\n\n

This snippet above is a subset of the packages that changed but you can easily see the version changes. Full diff available @ https:\/\/pastebin.ubuntu.com\/p\/mzVBzfC5tw\/<\/a> .<\/p>\n\n\n\n

To see the actual changelog for those package version changes…<\/p>\n\n\n

\n$ #install ubuntu-cloud-image-changelog\n$ sudo snap install ubuntu-cloud-image-changelog\n$ ubuntu-cloud-image-changelog --from-manifest=20200921.1-ubuntu-20.04-server-cloudimg-amd64-disk-kvm.manifest --to-manifest=20201014-ubuntu-20.04-server-cloudimg-amd64-disk-kvm.manifest\n<snip>\nSnap packages added: []\nSnap packages removed: []\nSnap packages changed: ['snapd']\nDeb packages added: ['linux-headers-5.4.0-1026-kvm', 'linux-image-5.4.0-1026-kvm', 'linux-kvm-headers-5.4.0-1026', 'linux-modules-5.4.0-1026-kvm', 'python3-pexpect', 'python3-ptyprocess']\nDeb packages removed: ['linux-headers-5.4.0-1023-kvm', 'linux-image-5.4.0-1023-kvm', 'linux-kvm-headers-5.4.0-1023', 'linux-modules-5.4.0-1023-kvm']\nDeb packages changed: ['alsa-ucm-conf', 'apport', 'bolt', 'busybox-initramfs', 'busybox-static', 'finalrd', 'gcc-10-base:amd64', 'gir1.2-packagekitglib-1.0', 'language-selector-common', 'libbrotli1:amd64', 'libc-bin', 'libc6:amd64', 'libgcc-s1:amd64', 'libpackagekit-glib2-18:amd64', 'libpython3.8:amd64', 'libpython3.8-minimal:amd64', 'libpython3.8-stdlib:amd64', 'libstdc++6:amd64', 'libuv1:amd64', 'linux-headers-kvm', 'linux-image-kvm', 'linux-kvm', 'locales', 'mdadm', 'packagekit', 'packagekit-tools', 'python3-apport', 'python3-distutils', 'python3-gdbm:amd64', 'python3-lib2to3', 'python3-problem-report', 'python3-urllib3', 'python3.8', 'python3.8-minimal', 'secureboot-db', 'shim', 'shim-signed', 'snapd', 'sosreport', 'zlib1g:amd64']\n\n<\/snip>\n\n<snip>\n======================================================================\npython3-apport changed from version '2.20.11-0ubuntu27.8' to version '2.20.11-0ubuntu27.9'\n\nSource: apport\nVersion: 2.20.11-0ubuntu27.9\nDistribution: focal\nUrgency: medium\nMaintainer: Brian Murray < - >\nTimestamp: 1599065319\nDate: Wed, 02 Sep 2020 09:48:39 -0700\nChanges:\n apport (2.20.11-0ubuntu27.9) focal; urgency=medium\n .\n   [ YC Cheng ]\n   * apport\/apport\/hookutils.py: add acpidump using built-in\n     dump_acpi_tables.py. (LP: #1888352)\n   * bin\/oem-getlogs: add "-E" in the usage, since we'd like to talk to\n     pulseaudio session and that need environment infomation. Also remove\n     acpidump since we will use the one from hook.\n .\n apport (2.20.11-0ubuntu27.8) focal; urgency=medium\n .\n   [Brian Murray]\n   * Fix pep8 errors regarding ambiguous variables.\n\n======================================================================\npython3-distutils changed from version '3.8.2-1ubuntu1' to version '3.8.5-1~20.04.1'\n\nSource: python3-stdlib-extensions\nVersion: 3.8.5-1~20.04.1\nDistribution: focal-proposed\nUrgency: medium\nMaintainer: Matthias Klose <->\nTimestamp: 1597062287\nDate: Mon, 10 Aug 2020 14:24:47 +0200\nCloses: 960653\nChanges:\n python3-stdlib-extensions (3.8.5-1~20.04.1) focal-proposed; urgency=medium\n .\n   * SRU: LP: #1889218. Backport Python 3.8.5 to 20.04 LTS.\n   * Build as well for 3.9, except on i386.\n .\n python3-stdlib-extensions (3.8.5-1) unstable; urgency=medium\n .\n   * Update 3.8 extensions and modules to the 3.8.5 release.\n .\n python3-stdlib-extensions (3.8.4-1) unstable; urgency=medium\n .\n   * Update 3.8 extensions and modules to the 3.8.4 release.\n .\n python3-stdlib-extensions (3.8.4~rc1-1) unstable; urgency=medium\n .\n   * Update 3.8 extensions and modules to 3.8.4 release candidate 1.\n .\n python3-stdlib-extensions (3.8.3-2) unstable; urgency=medium\n .\n   * Remove bytecode files for 3.7 on upgrade. Closes: #960653.\n   * Bump debhelper version.\n .\n python3-stdlib-extensions (3.8.3-1) unstable; urgency=medium\n .\n   * Stop building extensions for 3.7.\n   * Update 3.8 extensions and modules to 3.8.3 release.\n\n======================================================================\n<\/snip>\n<\/pre>\n\n\n

Above is a snippet of the output where you can see the exact changes made between the two versions. Full changelog available @ https:\/\/pastebin.ubuntu.com\/p\/cJVwVqzfgh\/<\/a>.<\/p>\n\n\n\n

I have found this very useful when tracking why a package version changes and also if a package version change includes patches addressing a specific vulnerability.<\/p>\n\n\n\n

We don’t yet publish package version manifests for all of our cloud images so to help in generating manifests I published the ubuntu-package-manifest<\/a> command line utility to easily generate a package version manifest for any Ubuntu or Debian based image or running instance for later use with ubuntu-cloud-image-changelog<\/a>.<\/p>\n\n\n\n

\"ubuntu-package-manifest<\/a>
ubuntu-package-manifest available from the snap store<\/a><\/figcaption><\/figure>\n\n\n
\n$ sudo snap install ubuntu-package-manifest\n$ # This is a strict snap and requires you to connect the system-backup interface\n$ # https:\/\/snapcraft.io\/docs\/the-system-backup-interface \n$ # to access the host system package list. This is access read-only.\n$ snap connect ubuntu-package-manifest:system-data\n$ sudo ubuntu-package-manifest\n<\/pre>\n\n\n

You can even use this on a running desktop install to track package version changes.<\/p>\n\n\n\n

ps. We’re hiring in the Americas<\/a> and in EMEA<\/a> \ud83d\ude42 <\/p>\n","protected":false},"excerpt":{"rendered":"

I work on the Canonical Public Cloud team and we publish all of the Ubuntu server images used in the cloud. We often get asked what the differences are between two released images. For example what is the difference between the Ubuntu 20.04 LTS image kvm optimised image from 20200921 and the Ubuntu 20.04 LTS […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,22,13,19],"tags":[23,21,20,24],"_links":{"self":[{"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/posts\/385"}],"collection":[{"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/comments?post=385"}],"version-history":[{"count":4,"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/posts\/385\/revisions"}],"predecessor-version":[{"id":392,"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/posts\/385\/revisions\/392"}],"wp:attachment":[{"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/media?parent=385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/categories?post=385"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wp.philroche.net\/wp-json\/wp\/v2\/tags?post=385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}