Public bug reported: Back in 2016 the ntp module was moved after the apt module, because it was reasoned that if ntp configuration was requested and the ntp package was not installed it would be a deadlock situation (here: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1628337)
However, running the apt module requires having the correct time on the system, and this is only possible with a hardware clock. Devices such as the Raspberry Pi do not have one and rely solely on ntp (which is already preinstalled) to get the time, thus in this case the ntp module must run before apt (example of the problem: https://forums.raspberrypi.com/viewtopic.php?t=315089) Breakage from the cloud-init.log pasted in the Raspberry Forums: ===== 2021-07-02 20:12:33,579 - util.py[WARNING]: Running module package-update-upgrade-install (<module 'cloudinit.config.cc_package_update_upgrade_install' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py'>) failed 2021-07-02 20:12:33,579 - util.py[DEBUG]: Running module package-update-upgrade-install (<module 'cloudinit.config.cc_package_update_upgrade_install' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py'>) failed Traceback (most recent call last): File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 848, in _run_modules ran, _r = cc.run(run_name, mod.handle, func_args, File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 54, in run return self._runners.run(name, functor, args, freq, clear_on_fail) File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 185, in run results = functor(*args) File "/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py", line 124, in handle raise errors[-1] File "/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py", line 100, in handle cloud.distro.install_packages(pkglist) File "/usr/lib/python3/dist-packages/cloudinit/distros/debian.py", line 112, in install_packages self.package_command('install', pkgs=pkglist) File "/usr/lib/python3/dist-packages/cloudinit/distros/debian.py", line 199, in package_command util.log_time(logfunc=LOG.debug, File "/usr/lib/python3/dist-packages/cloudinit/util.py", line 2318, in log_time ret = func(*args, **kwargs) File "/usr/lib/python3/dist-packages/cloudinit/subp.py", line 293, in subp raise ProcessExecutionError(stdout=out, stderr=err, cloudinit.subp.ProcessExecutionError: Unexpected error while running command. Command: ['eatmydata', 'apt-get', '--option=Dpkg::Options::=--force-confold', '--option=Dpkg::options::=--force-unsafe-io', '--assume-yes', '--quiet', 'install', 'apt-transport-https', 'syncthing'] ===== I'm not entirely sure what the fix should be, both orderings make sense but it depends on the situation. What I'm currently doing is editing the cloud.cfg file manually to move up the ntp module (i.e. I undo the 2016 patch by hand) before booting my Raspberry for the first time. ** Affects: cloud-init Importance: Undecided Status: New -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to cloud-init. https://bugs.launchpad.net/bugs/1959400 Title: apt module crashes on devices without a hardware clock Status in cloud-init: New Bug description: Back in 2016 the ntp module was moved after the apt module, because it was reasoned that if ntp configuration was requested and the ntp package was not installed it would be a deadlock situation (here: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1628337) However, running the apt module requires having the correct time on the system, and this is only possible with a hardware clock. Devices such as the Raspberry Pi do not have one and rely solely on ntp (which is already preinstalled) to get the time, thus in this case the ntp module must run before apt (example of the problem: https://forums.raspberrypi.com/viewtopic.php?t=315089) Breakage from the cloud-init.log pasted in the Raspberry Forums: ===== 2021-07-02 20:12:33,579 - util.py[WARNING]: Running module package-update-upgrade-install (<module 'cloudinit.config.cc_package_update_upgrade_install' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py'>) failed 2021-07-02 20:12:33,579 - util.py[DEBUG]: Running module package-update-upgrade-install (<module 'cloudinit.config.cc_package_update_upgrade_install' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py'>) failed Traceback (most recent call last): File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 848, in _run_modules ran, _r = cc.run(run_name, mod.handle, func_args, File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 54, in run return self._runners.run(name, functor, args, freq, clear_on_fail) File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 185, in run results = functor(*args) File "/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py", line 124, in handle raise errors[-1] File "/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.py", line 100, in handle cloud.distro.install_packages(pkglist) File "/usr/lib/python3/dist-packages/cloudinit/distros/debian.py", line 112, in install_packages self.package_command('install', pkgs=pkglist) File "/usr/lib/python3/dist-packages/cloudinit/distros/debian.py", line 199, in package_command util.log_time(logfunc=LOG.debug, File "/usr/lib/python3/dist-packages/cloudinit/util.py", line 2318, in log_time ret = func(*args, **kwargs) File "/usr/lib/python3/dist-packages/cloudinit/subp.py", line 293, in subp raise ProcessExecutionError(stdout=out, stderr=err, cloudinit.subp.ProcessExecutionError: Unexpected error while running command. Command: ['eatmydata', 'apt-get', '--option=Dpkg::Options::=--force-confold', '--option=Dpkg::options::=--force-unsafe-io', '--assume-yes', '--quiet', 'install', 'apt-transport-https', 'syncthing'] ===== I'm not entirely sure what the fix should be, both orderings make sense but it depends on the situation. What I'm currently doing is editing the cloud.cfg file manually to move up the ntp module (i.e. I undo the 2016 patch by hand) before booting my Raspberry for the first time. To manage notifications about this bug go to: https://bugs.launchpad.net/cloud-init/+bug/1959400/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

