tl; dr: Trong khi tải một initramfs (thực thi các mô-đun dracut) trên máy khách PXE, tôi cần đổi tên các tên giao diện (có thể dự đoán) do nhân cung cấp (hiện tại chúng là các tên ethX không thể đoán trước). Bằng cách này, máy khách PXE sẽ luôn khởi động từ giao diện có tên dự đoán. Hiện tại tôi đang đọc thông tin phần cứng với dmesg
trong quá trình hook cmdline dracut. Tôi có thể con mèo
một quy tắc udev để /usr/lib/udev/rules.d/
ở đây để hệ thống có thể đổi tên các giao diện khi dracut sau đó kích hoạt udev?
Về cơ bản, tôi có cái này trong hook cmdline dracut:
# Phần cứng đọc đầu tiên được cung cấp
nếu dmesg | grep -q "SOME_BOARD_NAME"; sau đó
root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_ROOTFS.sqsh/')
# Ngoài ra, cần có một số quy tắc udev dành riêng cho bảng này.
# mkdir -p /etc/udev/rules.d
# echo "cài đặt quy tắc của các bảng này!\n"
# tiếng vang << 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
yêu tinh dmesg | grep -q "SOME_OTHER_BOARD_NAME"; sau đó
root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_OTHER_ROOTFS.sqsh/')
echo "cài đặt các quy tắc dành riêng cho bảng khác!\n"
# mkdir -p /etc/udev/rules.d
# tiếng vang << 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
khác
cảnh báo "Không phát hiện ra bảng nào - mặc định là SOME_OTHER_ROOTFS.sqsh"
root=$(echo "$root" | sed -e 's/PLACEHOLDER_FILE/SOME_OTHER_ROOTFS.sqsh/')
fi
Thêm thông tin:
Nhóm của tôi và tôi có một máy tính bảng duy nhất mà PXE khởi động từ một máy chủ bên ngoài. Điều này tuân theo một trình tự:
- SBC kéo một initramfs và tải nó.
- Các initramfs thực thi một mô-đun dracut đọc thông tin phần cứng của SBC (trong hook dracut "cmdline").
- SBC kéo xuống một hệ thống tệp gốc cụ thể tùy thuộc vào phần cứng của nó.
Thật không may, tên giao diện ethX cũ (không thể đoán trước) đôi khi khiến SBC kéo hệ thống tệp gốc xuống qua giao diện mạng sai.
Kế hoạch của tôi là loại bỏ net.ifnames=0
và biosdevname=0
từ dòng lệnh kernel được sử dụng để khởi động PXE (bước 1). Sau đó, sau khi kernel đã gán các tên có thể đoán trước, tôi muốn mở rộng mô-đun dracut để thêm các quy tắc udev để đổi tên chúng thành tên cũ. Tôi hy vọng khi dracut kích hoạt udev, SBC sẽ luôn kéo hệ thống tệp gốc qua đúng giao diện.