bitsy-ai / printnanny-os

Image repository, change logs, and issue tracking for PrintNanny OS
GNU Affero General Public License v3.0
23 stars 2 forks source link

Initial cloud-init run fails to apply netplan #207

Closed leigh-johnson closed 1 year ago

leigh-johnson commented 1 year ago

Describe the bug

When cloud-init runs on a fresh install, the network stage fails with the following error. Looks like the Python yaml library needs to be pinned.

Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/cloudinit/net/activators.py", line 23, in _alter_interface
    (_out, err) = subp.subp(cmd)
  File "/usr/lib/python3.10/site-packages/cloudinit/subp.py", line 335, in subp
    raise ProcessExecutionError(
cloudinit.subp.ProcessExecutionError: Unexpected error while running command.
Command: ['netplan', 'apply']
Exit code: 1
Reason: -
Stdout: 
Stderr: Traceback (most recent call last):
          File "/usr/sbin/netplan", line 23, in <module>
            netplan.main()
          File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
            self.run_command()
          File "/usr/share/netplan/netplan/cli/utils.py", line 244, in run_command
            self.func()
          File "/usr/share/netplan/netplan/cli/commands/apply.py", line 61, in run
            self.run_command()
          File "/usr/share/netplan/netplan/cli/utils.py", line 244, in run_command
            self.func()
          File "/usr/share/netplan/netplan/cli/commands/apply.py", line 167, in command_apply
            NetplanApply.process_ovs_cleanup(config_manager, old_files_ovs, restart_ovs, exit_on_error)
          File "/usr/share/netplan/netplan/cli/commands/apply.py", line 379, in process_ovs_cleanup
            apply_ovs_cleanup(config_manager, ovs_old, ovs_current)
          File "/usr/share/netplan/netplan/cli/ovs.py", line 126, in apply_ovs_cleanup
            config_manager.parse()
          File "/usr/share/netplan/netplan/configmanager.py", line 175, in parse
            self._merge_yaml_config(yaml_file)
          File "/usr/share/netplan/netplan/configmanager.py", line 290, in _merge_yaml_config
            yaml_data = yaml.load(f, Loader=yaml.CSafeLoader)
        AttributeError: module 'yaml' has no attribute 'CSafeLoader'. Did you mean: 'SafeLoader'?

Build Info

-----------------------
Build Info:  |
-----------------------
IMAGE_NAME = printnanny-release-image-raspberrypi4-64-20230115015553
DISTRO_PRETTY = PrintNanny Linux 0.5.2 (Emerald)
VARIANT_NAME = PrintNanny OS Core
VARIANT_ID = core
DISTRO = printnanny
DISTRO_NAME = PrintNanny Linux
DISTRO_VERSION = 0.5.2
DISTRO_CODENAME = Emerald
ID_LIKE = BitsyLinux
HOME_URL = https://printnanny.ai
BUG_REPORT_URL = https://github.com/bitsy-ai/printnanny-os/issues
YOCTO_VERSION = 4.0.2
YOCTO_CODENAME = Langdale
MACHINE = raspberrypi4-64
TUNE_PKGARCH = cortexa72
-----------------------
Layer Revisions:      |
-----------------------
meta              = langdale:a3e3b740e140d036122f7b11e2ac452bda548444
meta-poky         = langdale:a3e3b740e140d036122f7b11e2ac452bda548444
meta-yocto-bsp    = langdale:a3e3b740e140d036122f7b11e2ac452bda548444
meta-raspberrypi  = libcamera-v0.0.3:104a8b9290ab4da92c8f693e2fdc42a6396975d2
meta-oe           = langdale:c5668905a6d8a78fb72c2cbf8b20e91e686ceb86
meta-python       = langdale:c5668905a6d8a78fb72c2cbf8b20e91e686ceb86
meta-multimedia   = langdale:c5668905a6d8a78fb72c2cbf8b20e91e686ceb86
meta-bitsy        = main:2271cca53f5a1b1f6b2f039ec7fbb824ffe87bb8
meta-neural-network = master:fed68f0a659c9b6431985c156141dc28dc4c2275
meta-printnanny   = main:2271cca53f5a1b1f6b2f039ec7fbb824ffe87bb8
meta-networking   = langdale:c5668905a6d8a78fb72c2cbf8b20e91e686ceb86
meta-filesystems  = langdale:c5668905a6d8a78fb72c2cbf8b20e91e686ceb86
meta-initramfs    = langdale:c5668905a6d8a78fb72c2cbf8b20e91e686ceb86
meta-webserver    = langdale:c5668905a6d8a78fb72c2cbf8b20e91e686ceb86
meta-swupdate     = master:5e611f44db1b9333342ed61d77a3c3ed7be69c2b
workspace         = langdale:a3e3b740e140d036122f7b11e2ac452bda548444
meta-microcontroller = master:9f396e595b2d639be7f2b494f4a61e48d9495058
pn-v0-5:~$ python3 -m pip show pyyaml
Name: PyYAML
Version: 6.0
Summary: YAML parser and emitter for Python
Home-page: https://pyyaml.org/
Author: Kirill Simonov
Author-email: xi@resolvent.net
License: MIT
Location: /usr/lib/python3.10/site-packages
Requires: 
Required-by: apprise, cloud-init, OctoPrint
leigh-johnson commented 1 year ago

Ahh looks like we might've built the pyyaml wheel without bindings to the C libyaml library:

# The following classes are available only if you build LibYAML bindings.
CLoader(stream)
CSafeLoader(stream)
CBaseLoader(stream)
leigh-johnson commented 1 year ago

:tada: Fixed! Fix will be available in v0.6.0, which I'll cut later this week.

pn-v0-5:~$ python3    
Python 3.10.6 (main, Aug  1 2022, 20:38:21) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>> yaml.CSafeLoader
<class 'yaml.cyaml.CSafeLoader'>