após a linha append
em seu arquivo pxelinux cfg, adicione a opção:
ipappend 2
Isso dirá ao kernel de inicialização para executar a transação DHCP usando o NIC de inicialização PXE
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 inicialização 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 64bit, o servidor inicializa 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 placa "intel pro / 100MT Desktop (8254OEM)"), mas assim que eu adiciono outro do mesmo tipo, com um endereço MAC diferente , as coisas vão bem até o Linux tentar 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 teve sucesso.
Enquanto escrevia tudo isso, notei a linha "DEVICE = eth0" no initramfs.conf, e pensei que poderia 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 o sistema destina-se a implantar sistemas (através do cdebootstrap e de scripts manuais, já funcionando) em hardware que possui duas interfaces de rede. Eu não tive a oportunidade de tentar isso em uma 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.
Então, aqui está o log e o mais curto ...
Ao inicializar um cliente sem disco PXE, se esse cliente tiver várias interfaces de rede, o kernel pode travar em um kernel panic ou o IP-Config irá travar.
A razão pela qual isso acontece é porque há um bug no IP-Config e ninguém realmente se importa em consertá-lo. Essencialmente, o IP-Config está atingindo o servidor DHCP muito rapidamente e repetidamente. Por causa disso, o DHCP não responde a segunda (ou terceira) vez que o IP-Config o atinge. Portanto, o IP-Config não consegue resolver um DHCP e sem um IP, o diretório raiz não pode ser configurado e, em seguida, o kernel trava.
O trabalho é o seguinte (se você estiver usando o iPXE):
kernel $ {base-url} vmlinuz-4.4.0-43-genérico boot = nfs netboot = nfs quiet splash pânico = 30 nfsroot = 10.0.0.1 / rede de raiz ksdevice = bootif BOOTIF = $ {netX / mac} ip = $ {ip}: 192.168.1.1: 192.168.1.1: 255.255.255.0 ::: nenhum
initrd $ {base-url} initrd.img-4.4.0-43-genérico
Se você estiver usando o PXE normal:
KERNEL vmlinuz-4.4.0-43-generic
IPAPPEND 2
APPEND vga = 794 boot = nfs root = / dev / nfs initrd = initrd.img-4.4.0-43-genérico pânico de splash silencioso = 30 - nfsroot = 192.168.1.1: / root ip = 192.168.1.2: 192.168.1.1:192.168.1.1:255.255.255.0 ::: nenhum
Não espero que suas entradas sejam exatamente assim. Estes são apenas exemplos . Então, edite o seu de acordo.
1) Você precisa definir um endereço IP estático diretamente nos parâmetros do kernel (ou no append). Se você não fizer isso, o IP-Config tentará executar o DHCP e você não deseja isso .
2) Você quer forçar o PXE a consultar somente a partir de uma interface NIC e não de todas elas. Para forçá-lo a usar apenas uma interface, use "ksdevice = bootif BOOTIF = $ {netX / mac}" no iPXE e use "IPAPPEND 2" no PXE normal. Escreva exatamente como mostrado acima.
É isso! Dois passos fáceis e você estará a caminho.
O BOOTIF força o PXE a usar somente a interface principal na qual o PXE foi carregado. Isso vai ignorar todas as outras interfaces. O IPAPPEND faz exatamente o mesmo.
Tags networking pxe linux