** 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

Reply via email to