Вкратце: во время загрузки initramfs (выполнение модулей dracut) на PXE-клиенте мне нужно переименовать заданные ядром (предсказуемые) имена интерфейсов (сейчас это непредсказуемые имена ethX). Таким образом, клиент PXE всегда будет загружаться с интерфейса с предсказуемым именем. В настоящее время я читаю информацию об оборудовании с помощью dmesg
во время хука командной строки dracut. Могу ли я кот
правило udev для /usr/lib/udev/rules.d/
вот чтобы система могла переименовывать интерфейсы, когда dracut позже запускает udev?
В основном у меня есть это в крючке dracut cmdline:
# Предоставляется аппаратное обеспечение для первого чтения
если dmesg | grep -q "ИМЯ НЕКОТОРОЙ_ДОСКИ"; тогда
root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_ROOTFS.sqsh/')
# Кроме того, для этой платы необходимы некоторые правила udev.
# mkdir -p /etc/udev/rules.d
# echo "Установите правила этих досок!\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
Элиф dmesg | grep -q "НЕКОТОРАЯ_ДРУГАЯ_ПОРТА_ИМЯ"; тогда
root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_OTHER_ROOTFS.sqsh/')
echo "Установить другие правила для доски!\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
еще
warn "Не обнаружено ни одной платы - по умолчанию SOME_OTHER_ROOTFS.sqsh"
root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_OTHER_ROOTFS.sqsh/')
фи
Больше информации:
У меня и моей команды есть одноплатный компьютер, который загружается по PXE с внешнего сервера. Это следует из последовательности:
- SBC извлекает initramfs и загружает его.
- Initramfs выполняет модуль dracut, который считывает информацию об оборудовании SBC (во время хука dracut «cmdline»).
- SBC извлекает конкретную корневую файловую систему в зависимости от своего оборудования.
К сожалению, старые имена интерфейсов ethX (непредсказуемые) иногда приводят к тому, что SBC извлекает корневую файловую систему через неправильный сетевой интерфейс.
Мой план - удалить net.ifnames=0
и биосдевнаме=0
из командной строки ядра, используемой для загрузки PXE (шаг 1). Затем, после того как ядро присвоило предсказуемые имена, я хочу расширить модуль dracut, чтобы добавить правила udev, чтобы переименовать их в старые имена. Я надеюсь, что когда dracut запускает udev, SBC всегда будет извлекать корневую файловую систему через правильный интерфейс.