Не удается применить Netplan при установке udevadm во время автоустановки 20.04

Во время выполнения сетевого раздела нового автоустановщика сервера Subiquity происходит сбой с ненулевым кодом возврата наnetplan apply, который, в свою очередь, запускается udevadm settle -t 0 снова и снова, который возвращает код выхода 1, пока, наконец, не сдается.

Из /var/crash отчет:

# date/time removed for readability
DEBUG subiquitycore.netplan:111 config for ens2f0 = {}
DEBUG subiquitycore.netplan:111 config for ens2f0 = {}
DEBUG subiquitycore.netplan:135 config for bond0 = 
    {'dhcp4': True, 'interfaces': ['ens2f0', 'ens2f1'], 'parameters': {'lacp-rate': 'slow', 'mode': '802.3ad', 'transmit-hash-policy', 'layer2'}}
DEBUG subiquitycore.utils:74 arun_command called: ['netplan', 'apply']
DEBUG subiquitycore.utils:48 run_command called: ['udevadm', 'settle', '-t', '0']
DEBUG subiquitycore.utils:61 ['udevadm', 'settle', '-t', '0'] exited with code 1
DEBUG subiquitycore.controller.network:196 waiting 0.1 to let udev event queue settle
<repeating udevadm settle commands issued>

(Соответствующий) конфигурация автоустановки:

#cloud-config
autoinstall:
  version: 1

  # double network due to a bug
  # see https://ubuntu.com/server/docs/install/autoinstall-reference#network
  network:
    network:
      version: 2
      ethernets:
        ens2f0: {}
        ens2f1: {}
      bonds:
        bond0:
          dhcp4: true
          interfaces:
            - ens2f0
            - ens2f1
          parameters:
            mode: 802.3ad
            lacp-rate: slow
            transmit-hash-policy: layer2

Что генерирует следующую конфигурацию Netplan (/etc/netplan/00-installer-config.yaml):

# This is network config written by 'subiquity'
network:
  bonds:
    bond0:
      dhcp4: true
      parameters:
        mode: 802.3ad
        lacp-rate: slow
        transmit-hash-policy: layer2
  ethernets:
    ens2f0: {}
    ens2f1: {}
  version: 2

Я также пробовал использовать более простую конфигурацию netplan со статическим адресом на одном порту (ens2f0) или даже по умолчанию, который запускает DHCPv4 на любом интерфейсе, соответствующем eth* или же en* (в этом случае ens2f0 и ens2f1).

Моя теория заключается в том, что есть модуль или что-то, что создает необработанное и, возможно, даже не связанное с ним событие в udev, но как мне это отладить?

Более того, не является ли со стороны Netplan большой агрессивностью никогда не продолжать, если в udev есть такие необработанные события, даже если соответствующие устройства и интерфейсы настроены правильно?


Настройка:
Ubuntu 20.04, ежедневная сборка 20200923 (пробовал 20.04.1 и исходный выпуск LTS)
Netplan 0.99-ubuntuu3~20.04.2
Systemd 245.4-4ubuntu3.2

Supermicro X11DDW-L
Mellanox ConnectX-5 (PCI-E)
BIOS / Legacy boot (из-за несовместимости между этой сетевой картой / материнской платой в UEFI)

1 ответ

Решение

На самом деле это оказалось из-за ошибки в моем разделе хранилища конфигурации автоустановщика, а не из-за самого Netplan.

На моем сервере есть 2 диска, которые я хотел настроить в программном RAID, используя mdadm. Поскольку я использую загрузку BIOS и таблицу разделов gpt, я создал неформатированный раздел размером 1 МБ для grub на каждом из моих дисков, как указано в документации curtin.

Если хост-система для curtin была загружена с использованием UEFI, curtin установит grub в раздел esp. Если установочный носитель системы был загружен с использованием MBR, grub будет установлен в MBR диска. Однако на диске с таблицей разделов gpt после MBR недостаточно места для grub для хранения core.img второго уровня, поэтому необходим небольшой неформатированный раздел с флагом bios_grub. Этот раздел должен быть размещен в начале диска и должен иметь размер 1 МБ. Он не должен содержать файловую систему или монтироваться где-нибудь в системе.

В дополнение к этому, однако, я ошибочно предположил, что мне нужно было создать RAID для этих разделов размером 1 МБ, что не является необходимым. Сообщение об ошибке, которое ускользнуло от меня, было найдено в системном журнале (curtin_log.<pid> идентификатор), и не упоминается в обычных журналах подобласти (/var/log/installer а также /var/crash). Это также можно было увидеть в собственных журналах Куртина (/var/log/curtin), о котором я раньше не знал.

       # /var/log/curtin/install.log
# wrapped for readability
An error occured handling 'md0-bios-boot': ProcessExecutionError - 
    Unexpected error while running command.
Command: ['mdadm', '--create', '/dev/md0', '--run',
    '--metadata=default', '--homehost=ubuntu-server', '--level=raid1',
    '--raid-devices=2', '/dev/sda1', '/dev/sdb1']
Exit code: 1
Reason: -
Stdout: ''
Stderr: mdadm: no free space left on /dev/sda1
        mdadm: no free space left on /dev/sdb1
        mdadm: create aborted

finish: cmd-install/stage-partitioning/builtin/cmd-block-meta: FAIL: configuring raid: md0-bios-boot
<some more noise from curtin>

Похоже, это вызвало необработанное событие udev, и причина, по которой udevadm settleвозвращается с кодом выхода 1, останавливая Netplan и программу установки. Странно как код выхода 1 из mdadm in curtin не хватило, чтобы также вывести его из строя до того, как он попал в Netplan.


Удаление этой части конфигурации хранилища устранило проблему,

       - id: md0-bios-boot
  type: raid
  preserve: false
  raidlevel: 1
  devices:
    - sda-bios-boot
    - sdb-bios-boot
  name: md0
  ptable: gpt

Полная конфигурация хранилища:

       storage:
  config:
    - id: disk-sda
      type: disk
      preserve: false
      ptable: gpt
      wipe: superblock
      grub_device: true
      path: /dev/sda

    - id: disk-sdb
      type: disk
      preserve: false
      ptable: gpt
      wipe: superblock
      grub_device: true
      path: /dev/sdb

    - id: sda-bios-boot
      type: partition
      preserve: false
      device: disk-sda
      number: 1
      size: 1MB
      flag: bios_grub

    - id: sdb-bios-boot
      type: partition
      preserve: false
      device: disk-sdb
      number: 1
      size: 1MB
      flag: bios_grub

    # NOTE: part that had to be removed
    - id: md0-bios-boot
      type: raid
      preserve: false
      raidlevel: 1
      devices:
        - sda-bios-boot
        - sdb-bios-boot
      name: md0
      ptable: gpt

    - id: sda-root
      type: partition
      preserve: false
      device: disk-sda
      number: 2
      size: -1

    - id: sdb-root
      type: partition
      preserve: false
      device: disk-sdb
      number: 2
      size: -1

    - id: md1-os
      type: raid
      preserve: false
      raidlevel: 1
      devices:
        - sda-root
        - sdb-root
      name: md1
      ptable: gpt

    - id: md1-os-rootfs
      type: format
      preserve: false
      volume: md1-os
      fstype: ext4

    - id: mount-rootfs
      type: mount
      device: md1-os-rootfs
      path: /
Другие вопросы по тегам