Mam skonfigurowane 2 maszyny wirtualne z virtualbox:
- pierwszy (nazwany później serwerem) działa jako serwer dhcp (isc-dhcp-server) i tftp (atftpd)
- drugi (nazwany później „klientem”) jako komputer bezdyskowy.
Proces rozruchu klienta rozpoczyna się od syslinux, który ładuje jądro Linuksa przekazując mu argumenty initrd=ram_test.img nfsroot=10.0.0.1:/srv/nfsroot/stretch,rw ip=dhcp rw
.
Komputery są zdefiniowane jako 64-bitowe, serwer uruchamia się na stabilnej wersji Debiana, a klient ma zapewnioną stabilną wersję Debiana, na której można również uruchomić komputer.
Nie ma żadnych problemów, gdy klient ma tylko 1 interfejs sieciowy (sieć wewnętrzna, karta typu „intel pro / 100MT Desktop (8254OEM)”), ale gdy tylko dodam inny tego samego typu, z innym adresem MAC, wszystko działa ok, dopóki Linux nie spróbuje pobrać adresu DHCP.
W tym momencie system zawiesza się na frazie „losowy: szybka inicjacja wykonana”. Inne rzeczy, które widzę wcześniej i są prawdopodobnie bardziej interesujące, to:
e1000: enp0s8 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
IPv6: ADDRCONF(NETDEV_CHANGE): enp0s8: link becomes ready
IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
IP-Config: no response after 2 secs - giving up
IP-Config: enp0s3 hardware address 08:00:27:2a:1a:3b mtu 1500 DHCP
IP-Config: enp0s8 hardware address 08:00:27:5f:de:30 mtu 1500 DHCP
Po zamrożeniu, 323 sekundy później, pojawia się tylko „random: crng init done”.
Oto dhcpd.conf:
allow booting;
allow bootp;
subnet 10.0.0.0 netmask 255.255.255.0 {
#range: 10.0.0.0xC0/26
range 10.0.0.192 10.0.0.250;
option broadcast-address 10.0.0.255;
option routers 10.0.0.1;
filename "tftp://10.0.0.1/pxelinux.0";
}
Aby wszystko działało (przynajmniej z tylko 1 interfejsem), musiałem zmodyfikować plik, /srv/nfsroot/stretch/etc/initramfs-tools/initramfs.conf
aby wyglądał tak (usunięto komentarze i puste linie):
MODULES=netboot
BUSYBOX=auto
KEYMAP=fr
COMPRESS=gzip
DEVICE=eth0
NFSROOT=auto
BOOT=nfs
Myślę, że problem pochodzi z argumentów dostarczonych do jądra w konfiguracji syslinux lub, initramfs.conf
ale nie mogę znaleźć dokładnego punktu, w którym zawodzę, a przeszukiwanie sieci również nie powiodło się.
Pisząc to wszystko, zauważyłem wiersz DEVICE=eth0
w initramfs.conf
i pomyślałem, że może tak być, ale właśnie próbowałem zmienić parametry jądra linux-a, aby je dodać, net.ifnames=0 biosdevname=0
aby jądro używało starych nazw eth0 / eth1, ale zachowanie jest identyczne (z wyjątkiem, oczywiście, że nazwy w logach nie są już enpXsY, ale ethZ).
Istotą posiadania 2 interfejsów sieciowych na tej maszynie wirtualnej jest to, że system ten jest przeznaczony do wdrażania systemów (za pomocą cdebootstrap i skryptów ręcznych, już działających) na sprzęcie, który ma 2 interfejsy sieciowe. Nie miałem okazji wypróbować tego w prawdziwej sytuacji, ale jestem przekonany, że problem też tam będzie (dlaczego by tego nie zrobił?), Więc naprawdę chciałbym tu mieć jakieś opinie.
Dzięki i przepraszam za WoT.
źródło
The SYSAPPEND option, introduced in Syslinux 5.10, is an enhancement of a previous IPAPPEND option which was only available on PXELINUX.
Oto krótki i krótki opis tego ...
Podczas uruchamiania klienta bezdyskowego PXE, jeśli klient ten ma wiele interfejsów sieciowych, jądro może albo wpaść w panikę jądra, albo zawiesi się konfiguracja IP.
Dzieje się tak dlatego, że w IP-Config występuje błąd i nikt tak naprawdę nie chce go naprawić. Zasadniczo IP-Config zbyt szybko i powtarzalnie uderza w serwer DHCP. Z tego powodu DHCP nie odpowiada po raz drugi (lub trzeci), gdy IP-Config go uderzy. Dlatego IP-Config nie może rozwiązać DHCP i bez adresu IP nie można skonfigurować katalogu głównego, a następnie jądro ulega awarii.
Obejście jest następujące (jeśli używasz iPXE):
Jeśli używasz zwykłego środowiska PXE:
Nie oczekuję, że twoje wpisy będą wyglądać dokładnie tak. To tylko przykłady . Edytuj odpowiednio swoje.
1) Musisz ustawić statyczny adres IP bezpośrednio w parametrach jądra (lub w dodatku). Jeśli nie, IP-Config spróbuje uruchomić DHCP i tego nie chcesz .
2) Chcesz zmusić PXE do wysyłania zapytań tylko z jednego interfejsu karty sieciowej, a nie ze wszystkich. Aby zmusić go do używania tylko jednego interfejsu, używasz „sieci ksdevice = bootif BOOTIF = $ {netX / mac}” w iPXE i używasz „IPAPPEND 2” w zwykłym PXE. Napisz dokładnie tak, jak pokazano powyżej.
To jest to! Dwa proste kroki i będziesz na dobrej drodze.
BOOTIF zmusza PXE do korzystania tylko z głównego interfejsu, na którym załadowano PXE. Zignoruje wszystkie pozostałe interfejsy. IPAPPEND robi dokładnie to samo.
źródło