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.