Eu configurei 2 máquinas virtuais com o virtualbox:
- o primeiro (servidor nomeado depois disso) um atua como servidor dhcp (isc-dhcp-server) e tftp (atftpd)
- o outro (chamado "cliente" depois disso) como um computador sem disco.
O processo de boot para o cliente começa com o syslinux, que carrega um kernel do Linux passando os argumentos initrd=ram_test.img nfsroot=10.0.0.1:/srv/nfsroot/stretch,rw ip=dhcp rw
.
Os computadores são definidos como os de 64 bits, o servidor é inicializado em um Debian estável e o cliente tem um Debian estável para inicializar também.
Não há problemas quando o cliente tem apenas 1 interface de rede (rede interna, tipo de cartão "intel pro / 100MT Desktop (8254OEM)"), mas assim que eu adiciono outro do mesmo tipo, com um endereço MAC diferente, as coisas vão ok até que o linux tente buscar o endereço DHCP.
Nesse ponto, o sistema congela a frase "random: fast init done". As outras coisas que posso ver antes disso e provavelmente mais interessantes são:
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
Após o congelamento, 323 segundos depois, há apenas "random: crng init done".
Aqui está o 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";
}
Para fazer as coisas funcionarem (pelo menos, com apenas 1 interface), eu tive que modificar o arquivo /srv/nfsroot/stretch/etc/initramfs-tools/initramfs.conf
para ficar assim (comentários e linhas vazias removidas):
MODULES=netboot
BUSYBOX=auto
KEYMAP=fr
COMPRESS=gzip
DEVICE=eth0
NFSROOT=auto
BOOT=nfs
Eu acho que o problema vem dos argumentos fornecidos ao kernel na configuração do syslinux, ou o initramfs.conf
mas não consigo encontrar o ponto exato em que estou falhando, e pesquisar na Web também não foi bem-sucedido.
Enquanto escrevia tudo isso, notei a linha DEVICE=eth0
no initramfs.conf
, e pensei que pode ser isso, mas eu apenas tentei alterar os parâmetros do kernel linux para adicioná-lo net.ifnames=0 biosdevname=0
para que o kernel use os nomes antigos eth0 / eth1, mas o comportamento é idêntico (exceto, é claro, que os nomes nos logs não são mais enpXsY mas ethZ).
O ponto de ter duas interfaces de rede nessa VM é porque esse sistema destina-se a implantar sistemas (por meio de scripts cdebootstrap e manuais, já funcionando) em hardware que possui duas interfaces de rede. Eu não tive a oportunidade de tentar isso em situação real, mas estou convencido de que o problema também estará lá (por que não?), Então eu realmente gostaria de ter algumas opiniões aqui.
Obrigado, e desculpe pelo WoT.