# Bug report
On Digital Ocean, after updating cloud-init from 24.3.1 to 24.4 on⊠two Ubuntu 20.04 droplets and rebooting, the boot process got stuck in init, and I couldn't login in even through the recovery console. I had to boot into recovery mode and re-install 24.3.1 over 24.4 to get it working again.
## Steps to reproduce the problem
I don't know if this affects all Ubuntu 20.04 droplets or not, but it killed two of mine.
1. Use apt-get to update cloud-init to 24.4
2. Reboot droplet
3. Observe that the droplet gets stuck in init
Temporary workaround: launch the recovery CD, chroot into the mounted filesystem, re-install 24.3.1 over 24.4, then boot the droplet as normal. With the old version, the droplet boots up normally again.
## Environment details
- Cloud-init version: 24.4
- Operating System Distribution: Ubuntu 20.04
- Cloud provider, platform or installer type: Digital Ocean
## cloud-init logs
```
2025-01-03 01:33:53,577 - log_util.py[DEBUG]: Cloud-init v. 24.4-0ubuntu1~20.04.1 running 'init-local' at Fri, 03 Jan 2025 01:33:53 +0000. Up 7.18 seconds.
2025-01-03 01:33:53,578 - main.py[INFO]: PID [1] started cloud-init 'init-local'.
2025-01-03 01:33:53,578 - main.py[DEBUG]: No kernel command line url found.
2025-01-03 01:33:53,578 - main.py[DEBUG]: Closing stdin
2025-01-03 01:33:53,580 - util.py[DEBUG]: Writing to /var/log/cloud-init.log - ab: [640] 0 bytes
2025-01-03 01:33:53,580 - util.py[DEBUG]: Changing the ownership of /var/log/cloud-init.log to 102:4
2025-01-03 01:33:53,580 - util.py[DEBUG]: Reading from /var/lib/cloud/data/python-version (quiet=False)
2025-01-03 01:33:53,581 - util.py[DEBUG]: Reading 3 bytes from /var/lib/cloud/data/python-version
2025-01-03 01:33:53,581 - util.py[DEBUG]: Attempting to remove /var/lib/cloud/instance/boot-finished
2025-01-03 01:33:53,582 - handlers.py[DEBUG]: start: init-local/check-cache: attempting to read from cache [check]
2025-01-03 01:33:53,582 - util.py[DEBUG]: Reading from /var/lib/cloud/instance/obj.pkl (quiet=False)
2025-01-03 01:33:53,582 - util.py[DEBUG]: Reading 33986 bytes from /var/lib/cloud/instance/obj.pkl
2025-01-03 01:33:53,588 - lifecycle.py[INFO]: DataSourceDigitalOcean is deprecated in 23.2 and scheduled to be removed in 28.2. Deprecated in favour of DataSourceConfigDrive.
2025-01-03 01:33:53,588 - dmi.py[DEBUG]: querying dmi data /sys/class/dmi/id/product_serial
2025-01-03 01:33:53,588 - stages.py[DEBUG]: restored from checked cache: DataSourceDigitalOcean
2025-01-03 01:33:53,589 - handlers.py[DEBUG]: finish: init-local/check-cache: SUCCESS: restored from checked cache: DataSourceDigitalOcean
2025-01-03 01:33:53,589 - util.py[DEBUG]: Reading from /etc/cloud/cloud.cfg (quiet=False)
2025-01-03 01:33:53,589 - util.py[DEBUG]: Reading 3766 bytes from /etc/cloud/cloud.cfg
2025-01-03 01:33:53,589 - util.py[DEBUG]: Attempting to load yaml from string of length 3766 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,600 - util.py[DEBUG]: Reading from /etc/cloud/cloud.cfg.d/99-digitalocean.cfg (quiet=False)
2025-01-03 01:33:53,600 - util.py[DEBUG]: Reading 168 bytes from /etc/cloud/cloud.cfg.d/99-digitalocean.cfg
2025-01-03 01:33:53,600 - util.py[DEBUG]: Attempting to load yaml from string of length 168 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,601 - util.py[DEBUG]: Reading from /etc/cloud/cloud.cfg.d/90_dpkg.cfg (quiet=False)
2025-01-03 01:33:53,601 - util.py[DEBUG]: Reading 257 bytes from /etc/cloud/cloud.cfg.d/90_dpkg.cfg
2025-01-03 01:33:53,601 - util.py[DEBUG]: Attempting to load yaml from string of length 257 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,602 - util.py[DEBUG]: Reading from /etc/cloud/cloud.cfg.d/90-digitalocean.cfg (quiet=False)
2025-01-03 01:33:53,602 - util.py[DEBUG]: Reading 4276 bytes from /etc/cloud/cloud.cfg.d/90-digitalocean.cfg
2025-01-03 01:33:53,602 - util.py[DEBUG]: Attempting to load yaml from string of length 4276 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,613 - util.py[DEBUG]: Reading from /etc/cloud/cloud.cfg.d/05_logging.cfg (quiet=False)
2025-01-03 01:33:53,613 - util.py[DEBUG]: Reading 2071 bytes from /etc/cloud/cloud.cfg.d/05_logging.cfg
2025-01-03 01:33:53,613 - util.py[DEBUG]: Attempting to load yaml from string of length 2071 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,617 - util.py[DEBUG]: Reading from /run/cloud-init/cloud.cfg (quiet=False)
2025-01-03 01:33:53,617 - util.py[DEBUG]: Reading 40 bytes from /run/cloud-init/cloud.cfg
2025-01-03 01:33:53,617 - util.py[DEBUG]: Attempting to load yaml from string of length 40 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,617 - util.py[DEBUG]: Attempting to load yaml from string of length 0 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,617 - util.py[DEBUG]: loaded blob returned None, returning default.
2025-01-03 01:33:53,618 - util.py[DEBUG]: Reading from /var/lib/cloud/instance/cloud-config.txt (quiet=False)
2025-01-03 01:33:53,618 - util.py[DEBUG]: Reading 0 bytes from /var/lib/cloud/instance/cloud-config.txt
2025-01-03 01:33:53,618 - util.py[DEBUG]: Attempting to load yaml from string of length 0 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,618 - util.py[DEBUG]: loaded blob returned None, returning default.
2025-01-03 01:33:53,618 - util.py[DEBUG]: Reading from /var/lib/cloud/instance/vendor-cloud-config.txt (quiet=False)
2025-01-03 01:33:53,618 - util.py[DEBUG]: Reading 548 bytes from /var/lib/cloud/instance/vendor-cloud-config.txt
2025-01-03 01:33:53,618 - util.py[DEBUG]: Attempting to load yaml from string of length 548 with allowed root types (<class 'dict'>,)
2025-01-03 01:33:53,622 - util.py[DEBUG]: Writing to /run/cloud-init/cloud-id-digitalocean - wb: [644] 13 bytes
2025-01-03 01:33:53,622 - util.py[DEBUG]: Creating symbolic link from '/run/cloud-init/cloud-id' => '/run/cloud-init/cloud-id-digitalocean'
2025-01-03 01:33:53,623 - atomic_helper.py[DEBUG]: Atomically writing to file /run/cloud-init/instance-data-sensitive.json (via temporary file /run/cloud-init/tmp_kv3vwwl) - w: [600] 10566 bytes/chars
2025-01-03 01:33:53,623 - atomic_helper.py[DEBUG]: Atomically writing to file /run/cloud-init/instance-data.json (via temporary file /run/cloud-init/tmp81ivct2j) - w: [644] 3801 bytes/chars
2025-01-03 01:33:53,624 - stages.py[INFO]: Instance link already exists, not recreating it.
2025-01-03 01:33:53,624 - util.py[DEBUG]: Reading from /var/lib/cloud/instances/113496214/datasource (quiet=False)
2025-01-03 01:33:53,624 - util.py[DEBUG]: Reading 47 bytes from /var/lib/cloud/instances/113496214/datasource
2025-01-03 01:33:53,625 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/113496214/datasource - wb: [644] 47 bytes
2025-01-03 01:33:53,628 - util.py[DEBUG]: Writing to /var/lib/cloud/data/previous-datasource - wb: [644] 47 bytes
2025-01-03 01:33:53,628 - util.py[DEBUG]: Reading from /var/lib/cloud/data/instance-id (quiet=False)
2025-01-03 01:33:53,628 - util.py[DEBUG]: Reading 10 bytes from /var/lib/cloud/data/instance-id
2025-01-03 01:33:53,628 - stages.py[DEBUG]: previous iid found to be 113496214
2025-01-03 01:33:53,629 - util.py[DEBUG]: Writing to /var/lib/cloud/data/instance-id - wb: [644] 10 bytes
2025-01-03 01:33:53,629 - util.py[DEBUG]: Writing to /run/cloud-init/.instance-id - wb: [644] 10 bytes
2025-01-03 01:33:53,629 - util.py[DEBUG]: Writing to /var/lib/cloud/data/previous-instance-id - wb: [644] 10 bytes
2025-01-03 01:33:53,630 - util.py[DEBUG]: Writing to /var/lib/cloud/instance/obj.pkl - wb: [400] 33986 bytes
2025-01-03 01:33:53,630 - stages.py[INFO]: Not re-loading configuration, instance id and datasource have not changed.
2025-01-03 01:33:53,630 - main.py[DEBUG]: [local] init will now be targeting instance id: 113496214. new=False
2025-01-03 01:33:53,631 - stages.py[DEBUG]: Using distro class <class 'cloudinit.distros.ubuntu.Distro'>
2025-01-03 01:33:53,632 - util.py[DEBUG]: Reading from /var/lib/cloud/data/set-hostname (quiet=False)
2025-01-03 01:33:53,632 - util.py[DEBUG]: Reading 65 bytes from /var/lib/cloud/data/set-hostname
2025-01-03 01:33:53,632 - cc_set_hostname.py[DEBUG]: No hostname changes. Skipping set_hostname
2025-01-03 01:33:53,633 - util.py[DEBUG]: Reading from /sys/class/net/lo/address (quiet=False)
2025-01-03 01:33:53,633 - util.py[DEBUG]: Reading 18 bytes from /sys/class/net/lo/address
2025-01-03 01:33:53,633 - util.py[DEBUG]: Reading from /sys/class/net/eth0/address (quiet=False)
2025-01-03 01:33:53,633 - util.py[DEBUG]: Reading 18 bytes from /sys/class/net/eth0/address
2025-01-03 01:33:53,634 - util.py[DEBUG]: Reading from /var/lib/cloud/hotplug.enabled (quiet=False)
2025-01-03 01:33:53,634 - util.py[DEBUG]: File not found: /var/lib/cloud/hotplug.enabled
2025-01-03 01:33:53,634 - stages.py[DEBUG]: Allowed events: {<EventScope.NETWORK: 'network'>: {<EventType.BOOT_NEW_INSTANCE: 'boot-new-instance'>}}
2025-01-03 01:33:53,634 - stages.py[DEBUG]: Event Denied: scopes=['network'] EventType=boot
2025-01-03 01:33:53,634 - util.py[DEBUG]: Reading from /var/lib/cloud/hotplug.enabled (quiet=False)
2025-01-03 01:33:53,634 - util.py[DEBUG]: File not found: /var/lib/cloud/hotplug.enabled
2025-01-03 01:33:53,634 - stages.py[DEBUG]: Allowed events: {<EventScope.NETWORK: 'network'>: {<EventType.BOOT_NEW_INSTANCE: 'boot-new-instance'>}}
2025-01-03 01:33:53,634 - stages.py[DEBUG]: Event Denied: scopes=['network'] EventType=boot-legacy
2025-01-03 01:33:53,634 - stages.py[DEBUG]: No network config applied. Neither a new instance nor datasource network update allowed
2025-01-03 01:33:53,634 - stages.py[DEBUG]: applying net config names for {'version': 1, 'config': [{'type': 'physical', 'mac_address': '1e:f4:12:49:d9:ed', 'name': 'eth0', 'subnets': [{'type': 'static', 'control': 'auto', 'address': '159.89.146.229', 'gateway': '159.89.144.1', 'netmask': '255.255.240.0'}, {'type': 'static', 'control': 'auto', 'address': '2604:A880:0002:00D0:0000:0000:21AF:8001/64', 'gateway': '2604:a880:0002:00d0:0000:0000:0000:0001'}, {'type': 'static', 'control': 'auto', 'address': '10.46.0.6', 'netmask': '255.255.0.0'}]}, {'type': 'nameserver', 'address': ['67.207.67.3', '67.207.67.2']}]}
2025-01-03 01:33:53,634 - util.py[DEBUG]: Reading from /sys/class/net/eth0/device/device (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading 7 bytes from /sys/class/net/eth0/device/device
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading from /sys/class/net/lo/addr_assign_type (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading 2 bytes from /sys/class/net/lo/addr_assign_type
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading from /sys/class/net/lo/uevent (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading 23 bytes from /sys/class/net/lo/uevent
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading from /sys/class/net/lo/address (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading 18 bytes from /sys/class/net/lo/address
2025-01-03 01:33:53,635 - net[DEBUG]: ovs-vsctl not in PATH; not detecting Open vSwitch interfaces
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading from /sys/class/net/lo/device/device (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading from /sys/class/net/eth0/addr_assign_type (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading 2 bytes from /sys/class/net/eth0/addr_assign_type
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading from /sys/class/net/eth0/uevent (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading 25 bytes from /sys/class/net/eth0/uevent
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading from /sys/class/net/eth0/address (quiet=False)
2025-01-03 01:33:53,635 - util.py[DEBUG]: Reading 18 bytes from /sys/class/net/eth0/address
2025-01-03 01:33:53,636 - util.py[DEBUG]: Reading from /sys/class/net/eth0/device/device (quiet=False)
2025-01-03 01:33:53,636 - util.py[DEBUG]: Reading 7 bytes from /sys/class/net/eth0/device/device
2025-01-03 01:33:53,636 - util.py[DEBUG]: Reading from /sys/class/net/lo/operstate (quiet=False)
2025-01-03 01:33:53,636 - util.py[DEBUG]: Reading 8 bytes from /sys/class/net/lo/operstate
2025-01-03 01:33:53,636 - util.py[DEBUG]: Reading from /sys/class/net/eth0/operstate (quiet=False)
2025-01-03 01:33:53,636 - util.py[DEBUG]: Reading 5 bytes from /sys/class/net/eth0/operstate
2025-01-03 01:33:53,636 - subp.py[DEBUG]: Running command ['ip', '-6', 'addr', 'show', 'permanent', 'scope', 'global'] with allowed return codes [0] (shell=False, capture=True)
2025-01-03 01:33:53,644 - subp.py[DEBUG]: Running command ['ip', '-4', 'addr', 'show'] with allowed return codes [0] (shell=False, capture=True)
2025-01-03 01:33:53,648 - net[DEBUG]: Detected interfaces {'lo': {'downable': False, 'device_id': None, 'driver': None, 'mac': '00:00:00:00:00:00', 'name': 'lo', 'up': True}, 'eth0': {'downable': True, 'device_id': '0x0001', 'driver': 'virtio_net', 'mac': '1e:f4:12:49:d9:ed', 'name': 'eth0', 'up': False}}
2025-01-03 01:33:53,648 - net[DEBUG]: no work necessary for renaming of [['1e:f4:12:49:d9:ed', 'eth0', 'virtio_net', '0x0001']]
2025-01-03 01:33:53,648 - main.py[DEBUG]: Network connectivity determined necessary for cloud-init's network stage. Reason: non-cloud-config user data found in vendor data
2025-01-03 01:33:53,648 - main.py[DEBUG]: [local] Exiting. datasource DataSourceDigitalOcean not in local mode.
2025-01-03 01:33:53,649 - util.py[DEBUG]: Reading from /proc/uptime (quiet=False)
2025-01-03 01:33:53,649 - util.py[DEBUG]: Reading 10 bytes from /proc/uptime
2025-01-03 01:33:53,649 - atomic_helper.py[DEBUG]: Atomically writing to file /var/lib/cloud/data/status.json (via temporary file /var/lib/cloud/data/tmpy6d7i2ws) - w: [644] 503 bytes/chars
2025-01-03 01:33:53,649 - performance.py[DEBUG]: cloud-init stage: 'init-local' took 0.194 seconds
2025-01-03 01:33:53,650 - handlers.py[DEBUG]: finish: init-local: SUCCESS: searching for local datasources
2025-01-03 01:33:54,233 - log_util.py[DEBUG]: Cloud-init v. 24.4-0ubuntu1~20.04.1 running 'init' at Fri, 03 Jan 2025 01:33:54 +0000. Up 7.84 seconds.
2025-01-03 01:33:54,233 - main.py[INFO]: PID [1] started cloud-init 'init'.
2025-01-03 01:33:54,233 - main.py[DEBUG]: No kernel command line url found.
2025-01-03 01:33:54,233 - main.py[DEBUG]: Closing stdin
2025-01-03 01:33:54,236 - util.py[DEBUG]: Writing to /var/log/cloud-init.log - ab: [640] 0 bytes
2025-01-03 01:33:54,236 - util.py[DEBUG]: Changing the ownership of /var/log/cloud-init.log to 102:4
2025-01-03 01:33:54,236 - util.py[DEBUG]: Reading from /var/lib/cloud/data/python-version (quiet=False)
2025-01-03 01:33:54,236 - util.py[DEBUG]: Reading 3 bytes from /var/lib/cloud/data/python-version
2025-01-03 01:33:54,237 - main.py[DEBUG]: Will wait for network connectivity before continuing
2025-01-03 01:33:54,238 - stages.py[DEBUG]: Using distro class <class 'cloudinit.distros.ubuntu.Distro'>
2025-01-03 01:33:54,239 - activators.py[DEBUG]: Using selected activator: <class 'cloudinit.net.activators.NetplanActivator'> from priority: ['netplan', 'eni', 'network-manager', 'networkd']
2025-01-03 01:33:54,239 - subp.py[DEBUG]: Running command ['systemctl', 'is-enabled', 'NetworkManager.service'] with allowed return codes [0] (shell=False, capture=True)
2025-01-03 01:33:54,251 - performance.py[DEBUG]: Running ['systemctl', 'is-enabled', 'NetworkManager.service'] took 0.012 seconds
2025-01-03 01:33:54,252 - subp.py[DEBUG]: Running command ['systemctl', 'start', 'systemd-networkd-wait-online.service'] with allowed return codes [0] (shell=False, capture=True)
```