** Description changed: - Does not affect: Noble, Oracular, Questing + [ Impact ] - In cloud-init 25.1.2, changed systemd-related packaging from /lib TO /usr/lib - which was suggested by lintian packaging warnings.[1] + Cloud-init 25.1.2 changed installation of systemd-related packaging from + /lib to /usr/lib, which was suggested by lintian packaging warnings.[1] This change though is incompatible with debhelper version 13.6ubuntu1 in Jammy which now no longer "sees" cloud-init's systemd units/services/target and doesn't inject the same debhelper enablement script segments for all of cloud-init services. This results in inability to launch any VMs on Jammy as cloud-init services are all - disabled/insactive despite ds-indentify correctly identifying the + disabled/inactive despite ds-inentify correctly identifying the platform. This behavior was seen in MAAS Jammy images being unable to get to - network with cloud-init 25.1.2 per this comment[2]. on a somewhat - related MAAS bug about early boot on Jammy. + network with cloud-init 25.1.2 per this comment[2] on a somewhat related + MAAS bug about early boot on Jammy. This regression was caused by the single commit: https://github.com/canonical/cloud-init/commit/0547349214fcfb827e58c1de5e4ad7d23d08cc7f - With the above change, the binary installed by cloud-init 25.1.2 will - not enable any cloud-init services because cloud-init.postinst lacks all - the following debhelper enablement scripts: + With the above change, when cloud-init is installed, cloud-init services + will not be enabled because cloud-init.postinst lacks all the following + debhelper enablement scripts: # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-config.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-config.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-config.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-config.service' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-final.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-final.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-final.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-final.service' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-init-hotplugd.socket' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-init-hotplugd.socket'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-init-hotplugd.socket' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-init-hotplugd.socket' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-init-local.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-init-local.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-init-local.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-init-local.service' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-init.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-init.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-init.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-init.service' >/dev/null || true fi fi # End automatically added section + This does not affect: Noble, Oracular, Plucky, or Questing + References: [1] Upstream cloud-init change doc https://cloudinit.readthedocs.io/en/latest/reference/breaking_changes.html#id2 [2] MAAS image launch failures https://bugs.launchpad.net/maas/+bug/2106671/comments/21 - =============== Original description ================ + [ Test Plan ] + + Run the following on a jammy instance: + apt remove --purge cloud-init + apt install cloud-init # using version from proposed + + Verify the following output appears on install: + Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-config.service → /usr/lib/systemd/system/cloud-config.service. + Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-final.service → /usr/lib/systemd/system/cloud-final.service. + Created symlink /etc/systemd/system/cloud-config.target.wants/cloud-init-hotplugd.socket → /usr/lib/systemd/system/cloud-init-hotplugd.socket. + Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-init-local.service → /usr/lib/systemd/system/cloud-init-local.service. + Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-init.service → /usr/lib/systemd/system/cloud-init.service. + + Verify that cloud-init runs successfully upon reboot. + + [ Where problems could occur ] + + Given that this is a revert to a new commit, I can't foresee any + problems with the old behavior other than possible lintian warnings. + + + [ Original description ] DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS" apt-cache policy cloud-init cloud-init: Installed: 25.1.2-0ubuntu0~22.04.1 Candidate: 25.1.2-0ubuntu0~22.04.1 Version table: *** 25.1.2-0ubuntu0~22.04.1 100 100 /var/lib/dpkg/status At some point after June 4th 2025 our Octavia OpenStack test jobs started to fail. On closer inspection we found that the VMs were not getting IP addresses configured. I was able to reproduce this on a local devstack system. On the failing VM I connected to the console locally. The cloud-init configuration appears correct and the config drive mounted with the correct information. What is odd however is there are no cloud-init logs in /var/log. It appears as if it didn't run on boot. I compared our images from the last known successful test run and the current image and the only package I see different is: < cloud-init all 24.4.1-0ubuntu0~22.04.2 [566 kB] --- > cloud-init all 25.1.2-0ubuntu0~22.04.1 [568 kB] I then made a copy of the image and replaced 25.1.2 with the 24.4.1 version and this image booted as expected. This issue is 100% repeatable with 25.1.2. If you would like to create an image we have tools available to create one that reproduces the problem: 1. git clone https://opendev.org/openstack/octavia 2. cd octavia/diskimage-create 3. run "./diskimage-create.sh -r <root password> -d jammy" 4. It will create a qcow2 image that boots under OpenStack with config drive
** Description changed: [ Impact ] Cloud-init 25.1.2 changed installation of systemd-related packaging from /lib to /usr/lib, which was suggested by lintian packaging warnings.[1] This change though is incompatible with debhelper version 13.6ubuntu1 in Jammy which now no longer "sees" cloud-init's systemd units/services/target and doesn't inject the same debhelper enablement script segments for all of cloud-init services. This results in inability to launch any VMs on Jammy as cloud-init services are all - disabled/inactive despite ds-inentify correctly identifying the + disabled/inactive despite ds-identify correctly identifying the platform. This behavior was seen in MAAS Jammy images being unable to get to network with cloud-init 25.1.2 per this comment[2] on a somewhat related MAAS bug about early boot on Jammy. This regression was caused by the single commit: https://github.com/canonical/cloud-init/commit/0547349214fcfb827e58c1de5e4ad7d23d08cc7f With the above change, when cloud-init is installed, cloud-init services will not be enabled because cloud-init.postinst lacks all the following debhelper enablement scripts: # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-config.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-config.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-config.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-config.service' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-final.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-final.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-final.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-final.service' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-init-hotplugd.socket' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-init-hotplugd.socket'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-init-hotplugd.socket' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-init-hotplugd.socket' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-init-local.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-init-local.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-init-local.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-init-local.service' >/dev/null || true fi fi # End automatically added section # Automatically added by dh_installsystemd/13.6ubuntu1 if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # This will only remove masks created by d-s-h on package removal. deb-systemd-helper unmask 'cloud-init.service' >/dev/null || true # was-enabled defaults to true, so new installations run enable. if deb-systemd-helper --quiet was-enabled 'cloud-init.service'; then # Enables the unit on first installation, creates new # symlinks on upgrades if the unit file has changed. deb-systemd-helper enable 'cloud-init.service' >/dev/null || true else # Update the statefile to add new symlinks (if any), which need to be # cleaned up on purge. Also remove old symlinks. deb-systemd-helper update-state 'cloud-init.service' >/dev/null || true fi fi # End automatically added section This does not affect: Noble, Oracular, Plucky, or Questing References: [1] Upstream cloud-init change doc https://cloudinit.readthedocs.io/en/latest/reference/breaking_changes.html#id2 [2] MAAS image launch failures https://bugs.launchpad.net/maas/+bug/2106671/comments/21 [ Test Plan ] Run the following on a jammy instance: apt remove --purge cloud-init apt install cloud-init # using version from proposed Verify the following output appears on install: Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-config.service → /usr/lib/systemd/system/cloud-config.service. Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-final.service → /usr/lib/systemd/system/cloud-final.service. Created symlink /etc/systemd/system/cloud-config.target.wants/cloud-init-hotplugd.socket → /usr/lib/systemd/system/cloud-init-hotplugd.socket. Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-init-local.service → /usr/lib/systemd/system/cloud-init-local.service. Created symlink /etc/systemd/system/cloud-init.target.wants/cloud-init.service → /usr/lib/systemd/system/cloud-init.service. Verify that cloud-init runs successfully upon reboot. [ Where problems could occur ] Given that this is a revert to a new commit, I can't foresee any problems with the old behavior other than possible lintian warnings. - [ Original description ] DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS" apt-cache policy cloud-init cloud-init: Installed: 25.1.2-0ubuntu0~22.04.1 Candidate: 25.1.2-0ubuntu0~22.04.1 Version table: *** 25.1.2-0ubuntu0~22.04.1 100 100 /var/lib/dpkg/status At some point after June 4th 2025 our Octavia OpenStack test jobs started to fail. On closer inspection we found that the VMs were not getting IP addresses configured. I was able to reproduce this on a local devstack system. On the failing VM I connected to the console locally. The cloud-init configuration appears correct and the config drive mounted with the correct information. What is odd however is there are no cloud-init logs in /var/log. It appears as if it didn't run on boot. I compared our images from the last known successful test run and the current image and the only package I see different is: < cloud-init all 24.4.1-0ubuntu0~22.04.2 [566 kB] --- > cloud-init all 25.1.2-0ubuntu0~22.04.1 [568 kB] I then made a copy of the image and replaced 25.1.2 with the 24.4.1 version and this image booted as expected. This issue is 100% repeatable with 25.1.2. If you would like to create an image we have tools available to create one that reproduces the problem: 1. git clone https://opendev.org/openstack/octavia 2. cd octavia/diskimage-create 3. run "./diskimage-create.sh -r <root password> -d jammy" 4. It will create a qcow2 image that boots under OpenStack with config drive -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2113797 Title: cloud-init 25.1.2 on Jammy not running on VM boot, systemd services disabled To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/2113797/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
