builtin: running 'curtin block-meta simple' fails on recent versions of Ubuntu installer for ZFS root

Bug #2045961 reported by Richard Spindler
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
curtin
New
Undecided
Unassigned

Bug Description

Hi,

Not sure where to post/look for help with this. I've had a bit of a look and I'm unable to find something similar, so would appreciate some help.

Looks like this might be due to changed in block_meta.py in curtin.

I have a script that generates a custom ISO with ZFS root based on the live server ISO install:

https://github.com/lateralblast/guige/

It adds the ZFS packages to the installer and installs them at install time allowing for a ZFS root install to be done. This had been working for all releases from 20.04 and later, but recent changes to the installer have broken it. It still works fine with the LTS releases, but the daily builds and 23.10/24.04 betas are now failing.

It looks like the issue with the updated installer and parsing of the cloud init config file. It creates the ZFS pool and filesystem and mounts it, and then fails when it hands over to phase where it copies the base image to filesystem. It looks like is not returning the correct volume ID for the installer when I debug the crash logs from the installer.

This is the failure point on noble/24.04:
=========================================

finish: subiquity/Install/install/curtin_install/run_curtin_step/cmd-install/stage-partitioning/builtin: running 'curtin block-meta simple'
finish: subiquity/Install/install/curtin_install/run_curtin_step/cmd-install/stage-partitioning: configuring storage
finish: subiquity/Install/install/curtin_install/run_curtin_step/cmd-install: curtin command install
finish: subiquity/Install/install/curtin_install/run_curtin_step: Command '['systemd-run', '--wait', '--same-dir', '--property', 'SyslogIdentifier=subiquity_log.1745', '--setenv', 'PATH=/snap/subiquity/5382/bin:/snap/subiquity/5382/usr/bin:/snap/subiquity/5382/usr/sbin:/snap/subiquity/5382/usr/bin:/snap/subiquity/5382/sbin:/snap/subiquity/5382/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/subiquity/5382/bin:/snap/subiquity/5382/sbin', '--setenv', 'PYTHONPATH=:/snap/subiquity/5382/lib/python3.10/site-packages', '--setenv', 'PYTHON=/snap/subiquity/5382/usr/bin/python3.10', '--setenv', 'SNAP=/snap/subiquity/5382', '--', '/snap/subiquity/5382/usr/bin/python3.10', '-m', 'curtin', '--showtrace', '-vvv', '--set', 'json:reporting={"subiquity": {"type": "journald", "identifier": "curtin_event.1745.6"}}', '-c', '/var/log/installer/curtin-install/subiquity-partitioning.conf', 'install', '--set', 'json:stages=["partitioning"]', 'cp:///tmp/tmpaf5t35ik/mount']' returned non-zero exit status 3.
finish: subiquity/Install/install/curtin_install: Command '['systemd-run', '--wait', '--same-dir', '--property', 'SyslogIdentifier=subiquity_log.1745', '--setenv', 'PATH=/snap/subiquity/5382/bin:/snap/subiquity/5382/usr/bin:/snap/subiquity/5382/usr/sbin:/snap/subiquity/5382/usr/bin:/snap/subiquity/5382/sbin:/snap/subiquity/5382/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/subiquity/5382/bin:/snap/subiquity/5382/sbin', '--setenv', 'PYTHONPATH=:/snap/subiquity/5382/lib/python3.10/site-packages', '--setenv', 'PYTHON=/snap/subiquity/5382/usr/bin/python3.10', '--setenv', 'SNAP=/snap/subiquity/5382', '--', '/snap/subiquity/5382/usr/bin/python3.10', '-m', 'curtin', '--showtrace', '-vvv', '--set', 'json:reporting={"subiquity": {"type": "journald", "identifier": "curtin_event.1745.6"}}', '-c', '/var/log/installer/curtin-install/subiquity-partitioning.conf', 'install', '--set', 'json:stages=["partitioning"]', 'cp:///tmp/tmpaf5t35ik/mount']' returned non-zero exit status 3.
finish: subiquity/Install/install: Command '['systemd-run', '--wait', '--same-dir', '--property', 'SyslogIdentifier=subiquity_log.1745', '--setenv', 'PATH=/snap/subiquity/5382/bin:/snap/subiquity/5382/usr/bin:/snap/subiquity/5382/usr/sbin:/snap/subiquity/5382/usr/bin:/snap/subiquity/5382/sbin:/snap/subiquity/5382/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/subiquity/5382/bin:/snap/subiquity/5382/sbin', '--setenv', 'PYTHONPATH=:/snap/subiquity/5382/lib/python3.10/site-packages', '--setenv', 'PYTHON=/snap/subiquity/5382/usr/bin/python3.10', '--setenv', 'SNAP=/snap/subiquity/5382', '--', '/snap/subiquity/5382/usr/bin/python3.10', '-m', 'curtin', '--showtrace', '-vvv', '--set', 'json:reporting={"subiquity": {"type": "journald", "identifier": "curtin_event.1745.6"}}', '-c', '/var/log/installer/curtin-install/subiquity-partitioning.conf', 'install', '--set', 'json:stages=["partitioning"]', 'cp:///tmp/tmpaf5t35ik/mount']' returned non-zero exit status 3.
start: subiquity/ErrorReporter/1702018983.114151001.install_fail/add_info
finish: subiquity/ErrorReporter/1702018983.114151001.install_fail/add_info: written to /var/crash/1702018983.114151001.install_fail.crash
An error occurred. Press enter to start a shell

It looks like something in the get_path_to_storage_volume has changed (this previously worked):
==============================================================================================

 get_path_to_storage_volume for volume disk1p2fs1(None)
 An error occured handling 'disk1p2f1_rootpool': ValueError - volume with id 'di
sk1p2fs1' not found
 finish: cmd-install/stage-partitioning/builtin/cmd-block-meta: FAIL: configurin
g zpool: disk1p2f1_rootpool
 TIMED BLOCK_META: 9.727
 finish: cmd-install/stage-partitioning/builtin/cmd-block-meta: FAIL: curtin com
mand block-meta
 Traceback (most recent call last):
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/commands/main.
py", line 202, in main
     ret = args.func(args)
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/log.py", line
97, in wrapper
     return log_time("TIMED %s: " % msg, func, *args, **kwargs)
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/log.py", line
79, in log_time
     return func(*args, **kwargs)
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/commands/block
_meta.py", line 127, in block_meta
     return meta_custom(args)
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/commands/block
_meta.py", line 2248, in meta_custom
     handler(command, storage_config_dict, context)
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/commands/block
_meta.py", line 1989, in zpool_handler
     vdevs = [get_path_to_storage_volume(v, storage_config)
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/commands/block
_meta.py", line 1989, in <listcomp>
     vdevs = [get_path_to_storage_volume(v, storage_config)
   File "/snap/subiquity/5382/lib/python3.10/site-packages/curtin/commands/block
_meta.py", line 576, in get_path_to_storage_volume
     raise ValueError("volume with id '%s' not found" % volume)
 ValueError: volume with id 'disk1p2fs1' not found
 volume with id 'disk1p2fs1' not found

root@ubuntu-server:/# cat /autoinstall.yaml
===========================================

---
apt:
    disable_components: []
    geoip: true
    preferences:
    - package: '*'
        pin: release a=noble-security
        pin-priority: 200
    preserve_sources_list: false
    primary:
    - arches:
        - amd64
        uri: http://archive.ubuntu.com/ubuntu
    - arches:
        - default
        uri: http://ports.ubuntu.com/ubuntu-ports
drivers:
    install: false
early-commands:
- sed -i "s/vda/$(lsblk -x TYPE|grep disk |sort |head -1 |awk '{print $1}')/g"
    /autoinstall.yaml
- sed -i "s/enp1s0/$(lshw -class network -short |awk '{print $2}' |grep ^e |head
    -1)/g" /autoinstall.yaml
- export DEBIAN_FRONTEND="noninteractive" && dpkg --force-confnew --force-overwrite
    --auto-deconfigure --force-depends -i /cdrom/autoinstall/packages/*.deb
- rm /etc/resolv.conf
- echo "nameserver 8.8.8.8" >> /etc/resolv.conf
identity:
    hostname: ubuntu
    password: $6$0HMdVn5Wf1g98AZw$1vagfgj.JWUVX/SVJVmYlfgT785K6eJpgK6uTw29Hl.yskYr6529s.mkjAQoJkrJTGKDaFb/Lxvy0OiqLp24F0
    realname: Ubuntu
    username: ubuntu
kernel:
    package: linux-generic
keyboard:
    layout: us
late-commands:
- mkdir -p /target/var/postinstall/packages
- cp /cdrom/autoinstall/packages/*.deb /target/var/postinstall/packages/
- echo '#!/bin/bash' > /target/tmp/post.sh
- echo 'export DEBIAN_FRONTEND="noninteractive" && dpkg --force-confnew --force-overwrite
    --auto-deconfigure --force-depends -i /var/postinstall/packages/*.deb' >> /target/tmp/post.sh
- chmod +x /target/tmp/post.sh
- echo 'Australia/Melbourne' > /target/etc/timezone
- rm /target/etc/localtime
- curtin in-target --target=/target -- ln -s /usr/share/zoneinfo/Australia/Melbourne
    /etc/localtime
- curtin in-target --target=/target -- /tmp/post.sh
- echo 'GRUB_TERMINAL="serial console"' >> /target/etc/default/grub
- echo 'GRUB_SERIAL_COMMAND="serial --speed=115200 --port=0x03f8"' >> /target/etc/default/grub
- echo 'GRUB_CMDLINE_LINUX="console=tty0 console=tty0 console=vt0 console=ttyS0,115200
    console=ttyS1,115200"' >> /target/etc/default/grub
- echo 'GRUB_TIMEOUT="10"' >> /target/etc/default/grub
- 'echo ''ubuntu ALL=(ALL) NOPASSWD: ALL'' >> /target/etc/sudoers.d/ubuntu'
- echo 'APT::Periodic::Update-Package-Lists "0";' > /target/etc/apt/apt.conf.d/20auto-upgrades
- echo 'APT::Periodic::Download-Upgradeable-Packages "0";' >> /target/etc/apt/apt.conf.d/20auto-upgrades
- echo 'APT::Periodic::AutocleanInterval "0";' >> /target/etc/apt/apt.conf.d/20auto-upgrades
- echo 'APT::Periodic::Unattended-Upgrade "0";' >> /target/etc/apt/apt.conf.d/20auto-upgrades
- curtin in-target --target=/target -- systemctl enable <email address hidden>
- curtin in-target --target=/target -- systemctl start <email address hidden>
- curtin in-target --target=/target -- systemctl enable <email address hidden>
- curtin in-target --target=/target -- systemctl start <email address hidden>
- curtin in-target --target=/target -- systemctl enable <email address hidden>
- curtin in-target --target=/target -- systemctl start <email address hidden>
- curtin in-target --target=/target -- update-grub
locale: en_US.UTF-8
network:
    ethernets:
        enp1s0:
            critical: true
            dhcp-identifier: mac
            dhcp4: true
    version: 2
package_update: false
package_upgrade: false
ssh:
    allow-pw: false
    authorized-keys:
    - ''
    install-server: true
storage:
    config:
    - grub_device: true
        id: disk1
        name: ''
        path: /dev/vda
        preserve: false
        ptable: gpt
        type: disk
        wipe: superblock-recursive
    - device: disk1
        flag: boot
        grub_device: true
        id: disk1p1
        number: 1
        preserve: false
        ptable: gpt
        size: 1127219200
        type: partition
        wipe: superblock-recursive
    - fstype: fat32
        id: disk1p1fs1
        preserve: false
        type: format
        volume: disk1p1
    - device: disk1p1fs1
        id: mount-2
        path: /boot/efi
        type: mount
    - device: disk1
        flag: root
        grub_device: true
        id: disk1p2
        number: 2
        preserve: false
        size: -1
        type: partition
        wipe: superblock-recursive
    - fstype: zfsroot
        id: disk1p2fs1
        preserve: false
        type: format
        volume: disk1p2
    - device: disk1p2fs1
        id: disk1p2f1_rootpool
        mountpoint: /
        pool: rpool
        preserve: false
        type: zpool
        vdevs:
        - disk1p2fs1
    - id: disk1_rootpool_container
        pool: disk1p2f1_rootpool
        preserve: false
        properties:
            canmount: 'off'
            mountpoint: none
        type: zfs
        volume: /ROOT
    - id: disk1_rootpool_rootfs
        pool: disk1p2f1_rootpool
        preserve: false
        properties:
            canmount: noauto
            mountpoint: /
        type: zfs
        volume: /ROOT/zfsroot
    - device: disk1p2fs1
        id: mount-disk1p2fs1
        path: /
        type: mount
    swap:
        swap: 2G
user-data:
    timezone: Australia/Melbourne
version: 1
...

Revision history for this message
Richard Spindler (richardatlateralblast) wrote :
Revision history for this message
Richard Spindler (richardatlateralblast) wrote :

Some additional information:

This config works for 20.04, 22.04, and 23.04, and fails on daily builds of 22.04 and later.

block_meta.py appears to have changed a bit since last year.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.