Во время какого перехвата dracut клиент PXE может переименовывать имена предсказуемых интерфейсов с помощью правила udev?

tl;dr: Во время загрузки initramfs (выполнение модулей dracut) на PXE-клиенте мне нужно переименовать имена интерфейсов, заданные ядром (предсказуемые) (сейчас это непредсказуемые имена ethX). Таким образом, клиент PXE всегда будет загружаться с интерфейса с предсказуемым именем. В настоящее время я читаю информацию об оборудовании с помощьюdmesgво время перехвата dracut cmdline. Могу ли яcatправило udev для/usr/lib/udev/rules.d/здесь, чтобы система могла переименовывать интерфейсы, когда dracut позже запускает udev?

По сути, у меня есть это в крючке dracut cmdline:

      # First read hardware provided
if dmesg | grep -q "SOME_BOARD_NAME"; then
    root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_ROOTFS.sqsh/')
    # Additionally, some udev rules are needed specific to this board.
#    mkdir -p /etc/udev/rules.d
#    echo "install these boards' rules!\n"
#    echo << EOF > /etc/udev/rules.d/70-persistent-net.rules
#SUBSYSTEM=="net", DEVPATH="/devices/pci*/*1c.0/0000:07:00.0/net/*", NAME="eth0"
#SUBSYSTEM=="net", DEVPATH="/devices/pci*/*01.1/0000:05:00.0/net/*", NAME="eth1"
#SUBSYSTEM=="net", DEVPATH="/devices/pci*/*01.1/0000:05:00.1/net/*", NAME="eth2"
#EOF
elif dmesg | grep -q "SOME_OTHER_BOARD_NAME"; then
    root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_OTHER_ROOTFS.sqsh/')
    echo "install other board-specific rules!\n"
#    mkdir -p /etc/udev/rules.d
#    echo << EOF > /etc/udev/rules.d/70-persistent-net.rules
#SUBSYSTEM=="net", DEVPATH="/devices/pci*/*1c.5/0000:09:00.0/net/*", NAME="eth0"
#SUBSYSTEM=="net", DEVPATH="/devices/pci*/*02.2/0000:02:00.0/net/*", NAME="eth1"
#SUBSYSTEM=="net", DEVPATH="/devices/pci*/*02.2/0000:02:00.1/net/*", NAME="eth2"
#EOF
else
    warn "Did not detect either board - defaulting to SOME_OTHER_ROOTFS.sqsh"
    root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_OTHER_ROOTFS.sqsh/')
fi

Дополнительная информация: у меня и моей команды есть одноплатный компьютер, который PXE загружается с внешнего сервера. Это следует за последовательностью:

  1. SBC извлекает initramfs и загружает его.
  2. Initramfs выполняет модуль dracut, который считывает информацию об оборудовании SBC (во время перехватчика dracut «cmdline»).
  3. SBC удаляет определенную корневую файловую систему в зависимости от ее оборудования.

К сожалению, старые имена интерфейсов ethX (непредсказуемые) иногда приводят к тому, что SBC отключает корневую файловую систему через неправильный сетевой интерфейс.

Мой план - удалитьnet.ifnames=0иbiosdevname=0из командной строки ядра, используемой для загрузки PXE (шаг 1). Затем, после того как ядро ​​присвоило предсказуемые имена, я хочу расширить модуль dracut, добавив правила udev для переименования их в старые имена. Я надеюсь, что когда dracut запускает udev, SBC всегда будет перетаскивать корневую файловую систему через правильный интерфейс.

1 ответ

В конечном итоге мы сохранили, но установилиbiosdevname=1. Во время установки dracut мы добавили модуль вsedсценарии, связанные с сетевым интерфейсом (которые были следующими в процессе установки), чтобы обойтиnet.ifnames=0логику и вместо этого использовать толькоbiosdevname.

Это, конечно, казалось хакерским, но свою работу для этой системы он выполнил.

Другие вопросы по тегам