Procedure is laid out here. Results are at the bottom. Procedure is using Lunar. Procedure for other series is the same except replace Lunar with [jammy,focal]. Get dependencies: ``` sudo apt install genisoimage sudo apt install qemu-utils ``` Generate initial seed iso for login: ``` cat << EOF > user-data #cloud-config password: password chpasswd: expire: False EOF cat << EOF > meta-data instance-id: myid local-hostname: originalhostname EOF touch vendor-data genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data vendor-data ``` In the same directory as the seed.iso (containing user-data and meta-data files), run "sudo python3 -m http.server 80" Obtain latest cloud image: https://cloud-images.ubuntu.com/lunar/current/lunar-server-cloudimg-amd64.img Retrieve kernel from image: ``` qemu-img create -f qcow2 -b lunar-server-cloudimg-amd64.img -F qcow2 lunar.qcow2 sudo modprobe nbd max_part=16 sudo qemu-nbd -c /dev/nbd0 lunar.qcow2 sudo mount /dev/nbd0p1 /mnt/ sudo cp /mnt/boot/vmlinuz- . # Version varies by image sudo chown james:james vmlinuz-* # replace 'james' with your user sudo umount /mnt sudo qemu-nbd -d /dev/nbd0 ``` Launch VM to enable login via username/password: ``` qemu-system-x86_64 \ -enable-kvm \ -cpu host \ -smp 2 \ -m 4000 \ -net nic \ -net user,hostfwd=tcp::8022-:22 \ -hda lunar.qcow2 \ -drive driver=raw,file=seed.iso,if=virtio ``` Login with user "ubuntu" and password "password" Execute "cloud-init clean --logs" Power off VM Start VM with kernel command line params: ``` qemu-system-x86_64 \ -enable-kvm \ -cpu host \ -smp 2 \ -m 4000 \ -net nic \ -net user,hostfwd=tcp::8022-:22 \ -hda lunar.qcow2 \ -kernel vmlinuz- \ -append "root=/dev/sda1 ds=nocloud-net;s=http://10.0.2.2/;h=newhost" ``` Login with user "ubuntu" password "password" Inspecting /var/log/cloud-init.log should reveal failure and a ModuleNotFoundError Inspect "/var/log/cloud-init.log" for "WARN". Notice: ``` 2023-08-04 03:54:07,665 - util.py[WARNING]: failed stage init-local 2023-08-04 03:54:07,665 - util.py[DEBUG]: failed stage init-local Traceback (most recent call last): File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 766, in status_wrapper ret = functor(name, args) File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 384, in main_init init.fetch(existing=existing) File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 436, in fetch return self._get_data_source(existing=existing) File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 327, in _get_data_source (ds, dsname) = sources.find_source( File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 996, in find_source ds_list = list_sources(cfg_list, ds_deps, pkg_list) File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 1043, in list_sources m_locs, _looked_locs = importer.find_module( File "/usr/lib/python3/dist-packages/cloudinit/importer.py", line 70, in find_module if not importlib.util.find_spec(full_path): File "/usr/lib/python3.10/importlib/util.py", line 94, in find_spec parent = __import__(parent_name, fromlist=['__path__']) ModuleNotFoundError: No module named 'DataSourcenocloud-net;s=http://10' ``` Install cloud-init from proposed: ``` echo deb "http://archive.ubuntu.com/ubuntu $(lsb_release -sc)-proposed main" >> /etc/apt/sources.list.d/proposed.list apt update -q &> /dev/null apt install -qy cloud-init -t=$(lsb_release -sc)-proposed &>/dev/null cloud-init --version ``` Execute "cloud-init clean --logs" Power off VM Start VM as before: ``` qemu-system-x86_64 \ -enable-kvm \ -cpu host \ -smp 2 \ -m 4000 \ -net nic \ -net user,hostfwd=tcp::8022-:22 \ -hda lunar.qcow2 \ -kernel vmlinuz- \ -append "root=/dev/sda1 ds=nocloud-net;s=http://10.0.2.2/;h=newhost" ``` Login with user "ubuntu" password "password" Verify NoCloud datasource correctly detected, user data correctly fetched, and hostname correctly set ############################### ### LUNAR RESULTS ############# ############################### Error seen in logs: 2023-08-04 16:41:32,116 - util.py[DEBUG]: failed stage init-local Traceback (most recent call last): File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 766, in status_wrapper ret = functor(name, args) ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 384, in main_init init.fetch(existing=existing) File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 436, in fetch return self._get_data_source(existing=existing) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 327, in _get_data_source (ds, dsname) = sources.find_source( ^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 996, in find_source ds_list = list_sources(cfg_list, ds_deps, pkg_list) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 1043, in list_sources m_locs, _looked_locs = importer.find_module( ^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/cloudinit/importer.py", line 70, in find_module if not importlib.util.find_spec(full_path): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 94, in find_spec ModuleNotFoundError: No module named 'DataSourcenocloud-net;s=http://10' Version after proposed upgrade: /usr/bin/cloud-init 23.2.2-0ubuntu0~23.04.1 hostname after upgrade: ubuntu@newhost:~$ hostname newhost ubuntu@newhost:~$ /var/log/cloud-init.log snippets of reboot after upgrade: 2023-08-04 18:42:47,532 - __init__.py[DEBUG]: Searching for network data source in: ['DataSourceNoCloudNet', 'DataSourceNone'] 2023-08-04 18:42:47,532 - handlers.py[DEBUG]: start: init-network/search-NoCloudNet: searching for network data from DataSourceNoCloudNet 2023-08-04 18:42:47,532 - __init__.py[DEBUG]: Seeing if we can get any data from 2023-08-04 18:42:47,532 - __init__.py[DEBUG]: Update datasource metadata and network config due to events: boot-new-instance 2023-08-04 18:42:47,533 - __init__.py[DEBUG]: Detected platform: DataSourceNoCloudNet [seed=None][dsmode=net]. Checking for active instance data 2023-08-04 18:42:48,149 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/meta-data' with {'url': 'http://10.0.2.2/meta-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/23.2.2-0ubuntu0~23.04.1'}} configuration 2023-08-04 18:42:48,165 - url_helper.py[DEBUG]: Read from http://10.0.2.2/meta-data (200, 52b) after 1 attempts 2023-08-04 18:42:48,165 - util.py[DEBUG]: Attempting to load yaml from string of length 52 with allowed root types (,) 2023-08-04 18:42:48,166 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/user-data' with {'url': 'http://10.0.2.2/user-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/23.2.2-0ubuntu0~23.04.1'}} configuration 2023-08-04 18:42:48,171 - url_helper.py[DEBUG]: Read from http://10.0.2.2/user-data (200, 60b) after 1 attempts 2023-08-04 18:42:48,171 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/vendor-data' with {'url': 'http://10.0.2.2/vendor-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/23.2.2-0ubuntu0~23.04.1'}} configuration 2023-08-04 18:42:48,173 - url_helper.py[DEBUG]: Read from http://10.0.2.2/vendor-data (200, 0b) after 1 attempts 2023-08-04 18:42:48,174 - DataSourceNoCloud.py[DEBUG]: Using seeded cache data from http://10.0.2.2/ ############################### ### JAMMY RESULTS ############# ############################### Error seen in logs: 2023-08-04 18:57:53,092 - util.py[WARNING]: failed stage init-local 2023-08-04 18:57:53,092 - util.py[DEBUG]: failed stage init-local Traceback (most recent call last): File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 766, in status_wrapper ret = functor(name, args) File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 384, in main_init init.fetch(existing=existing) File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 436, in fetch return self._get_data_source(existing=existing) File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 327, in _get_data_source (ds, dsname) = sources.find_source( File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 996, in find_source ds_list = list_sources(cfg_list, ds_deps, pkg_list) File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 1043, in list_sources m_locs, _looked_locs = importer.find_module( File "/usr/lib/python3/dist-packages/cloudinit/importer.py", line 70, in find_module if not importlib.util.find_spec(full_path): File "/usr/lib/python3.10/importlib/util.py", line 94, in find_spec parent = __import__(parent_name, fromlist=['__path__']) ModuleNotFoundError: No module named 'DataSourcenocloud-net;s=http://10' Version after proposed upgrade: /usr/bin/cloud-init 23.2.2-0ubuntu0~22.04.1 hostname after upgrade: ubuntu@newhost:~$ hostname newhost /var/log/cloud-init.log snippets of reboot after upgrade: 2023-08-04 19:02:35,323 - __init__.py[DEBUG]: Searching for network data source in: ['DataSourceNoCloudNet', 'Data SourceNone'] 2023-08-04 19:02:35,323 - handlers.py[DEBUG]: start: init-network/search-NoCloudNet: searching for network data fr om DataSourceNoCloudNet 2023-08-04 19:02:35,323 - __init__.py[DEBUG]: Seeing if we can get any data from 2023-08-04 19:02:35,323 - __init__.py[DEBUG]: Update datasource metadata and network config due to events: boot-ne w-instance 2023-08-04 19:02:35,324 - __init__.py[DEBUG]: Detected platform: DataSourceNoCloudNet [seed=None][dsmode=net]. Che cking for active instance data 2023-08-04 19:02:35,755 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/meta-data' with {'url': 'http://10.0. 2.2/meta-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/2 3.2.2-0ubuntu0~22.04.1'}} configuration 2023-08-04 19:02:35,768 - url_helper.py[DEBUG]: Read from http://10.0.2.2/meta-data (200, 52b) after 1 attempts 2023-08-04 19:02:35,768 - util.py[DEBUG]: Attempting to load yaml from string of length 52 with allowed root types (,) 2023-08-04 19:02:35,769 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/user-data' with {'url': 'http://10.0. 2.2/user-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/2 3.2.2-0ubuntu0~22.04.1'}} configuration 2023-08-04 19:02:35,773 - url_helper.py[DEBUG]: Read from http://10.0.2.2/user-data (200, 60b) after 1 attempts 2023-08-04 19:02:35,773 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/vendor-data' with {'url': 'http://10. 0.2.2/vendor-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-In it/23.2.2-0ubuntu0~22.04.1'}} configuration 2023-08-04 19:02:35,776 - url_helper.py[DEBUG]: Read from http://10.0.2.2/vendor-data (200, 0b) after 1 attempts 2023-08-04 19:02:35,776 - DataSourceNoCloud.py[DEBUG]: Using seeded cache data from http://10.0.2.2/ ############################### ### FOCAL RESULTS ############# ############################### Error seen in logs: 2023-08-04 19:09:07,256 - util.py[WARNING]: failed stage init-local 2023-08-04 19:09:07,256 - util.py[DEBUG]: failed stage init-local Traceback (most recent call last): File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 766, in status_wrapper ret = functor(name, args) File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 384, in main_init init.fetch(existing=existing) File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 436, in fetch return self._get_data_source(existing=existing) File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 327, in _get_data_source (ds, dsname) = sources.find_source( File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 996, in find_source ds_list = list_sources(cfg_list, ds_deps, pkg_list) File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 1043, in list_sources m_locs, _looked_locs = importer.find_module( File "/usr/lib/python3/dist-packages/cloudinit/importer.py", line 70, in find_module if not importlib.util.find_spec(full_path): File "/usr/lib/python3.8/importlib/util.py", line 94, in find_spec parent = __import__(parent_name, fromlist=['__path__']) ModuleNotFoundError: No module named 'DataSourcenocloud-net;s=http://10' Version after proposed upgrade: /usr/bin/cloud-init 23.2.2-0ubuntu0~20.04.1 hostname after upgrade: /var/log/cloud-init.log snippets of reboot after upgrade: 2023-08-04 19:11:47,922 - __init__.py[DEBUG]: Looking for data source in: ['nocloud-net', 'None'], via packages [' ', 'cloudinit.sources'] that matches dependencies ['FILESYSTEM', 'NETWORK'] 2023-08-04 19:11:47,923 - __init__.py[DEBUG]: Searching for network data source in: ['DataSourceNoCloudNet', 'DataSourceNone'] 2023-08-04 19:11:47,923 - handlers.py[DEBUG]: start: init-network/search-NoCloudNet: searching for network data from DataSourceNoCloudNet 2023-08-04 19:11:47,923 - __init__.py[DEBUG]: Seeing if we can get any data from 2023-08-04 19:11:47,923 - __init__.py[DEBUG]: Update datasource metadata and network config due to events: boot-new-instance 2023-08-04 19:11:47,923 - __init__.py[DEBUG]: Detected platform: DataSourceNoCloudNet [seed=None][dsmode=net]. Checking for active instance data 2023-08-04 19:11:48,579 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/meta-data' with {'url': 'http://10.0.2.2/meta-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/23.2.2-0ubuntu0~20.04.1'}} configuration 2023-08-04 19:11:48,587 - url_helper.py[DEBUG]: Read from http://10.0.2.2/meta-data (200, 52b) after 1 attempts 2023-08-04 19:11:48,587 - util.py[DEBUG]: Attempting to load yaml from string of length 52 with allowed root types (,) 2023-08-04 19:11:48,588 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/user-data' with {'url': 'http://10.0.2.2/user-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/23.2.2-0ubuntu0~20.04.1'}} configuration 2023-08-04 19:11:48,593 - url_helper.py[DEBUG]: Read from http://10.0.2.2/user-data (200, 60b) after 1 attempts 2023-08-04 19:11:48,593 - url_helper.py[DEBUG]: [0/11] open 'http://10.0.2.2/vendor-data' with {'url': 'http://10.0.2.2/vendor-data', 'stream': False, 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/23.2.2-0ubuntu0~20.04.1'}} configuration 2023-08-04 19:11:48,596 - url_helper.py[DEBUG]: Read from http://10.0.2.2/vendor-data (200, 0b) after 1 attempts 2023-08-04 19:11:48,596 - DataSourceNoCloud.py[DEBUG]: Using seeded cache data from http://10.0.2.2/