Inicialização sem disco com IPv6

16

No nosso trabalho, estamos usando cerca de 80 máquinas sem disco executando o Ubuntu. Queremos fazer a transição para o IPv6, então agora estou tentando fazer nosso sistema sem disco funcionar com o IPV6. A transmissão do kernel e do initramfs ainda pode ser feita através de uma conexão IPv4, mas, uma vez que a máquina esteja totalmente inicializada, quero que todas as conexões de rede fiquem no IPv6.

Isso significa que o nfsroot deve ser montado via IPv6. Minha pesquisa sobre isso mostrou que o initramfs-tools (1.18.5-1ubuntu4.1) NÃO suporta o IPv6. Isso significa que nem o ipconfig, que é usado para configuração de interface no início da inicialização, nem o procedimento de montagem de montagem para a raiz nfs são compatíveis com IPv6.

Para contornar isso, adicionei dois binários ao initramfs ( /etc/initramfs-tools/hooks/ipv6 ):

#!/bin/bash 
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/dhclient /sbin
copy_exec /sbin/mount.nfs4 /sbin

Eu os uso para (a) solicitar um DHCPv6 no início da inicialização com

/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0

e (b) para configurar a interface com o endereço que obtive executando:

ipv6=$(cat /tmp/dhclient6.eth0.leases | grep iaaddr | egrep -o "([a-f0-9]{1,4}:){3}([a-f0-9]{0,4}:){0,4}[a-f0-9]{1,4}")
ip -6 addr add $ipv6/112 dev eth0

Normalmente, a raiz do nfs é montada com o seguinte comando em /usr/share/initramfs-tools/scripts/nfs :

nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}

Mas isso não parece aceitar endereços IPv6.

Então eu mudei para:

mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}

$NFSROOT , neste caso, é [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6 .

A configuração da interface parece funcionar tão bem quanto a montagem da raiz, mas quando /sbin/init é executado (acho), o IPv6 é descartado novamente e, portanto, o sistema congela (porque não pode mais acessar a raiz do ubuntu).

O arquivo /etc/network/interfaces tem esta aparência:

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth0 inet6 manual

Existe uma maneira de manter a configuração da interface do initramfs? Ou estou fazendo algo errado quando configuro a interface com ip ?

    
por moritz 17.03.2014 / 11:23

1 resposta

1

talvez esteja fora do tópico para você, mas acho que seu problema específico pode ser evitado repensando o serviço:

por que incomodar a inicialização com o NFS?

Você pode tentar inicializar com iscsi (em um modo somente leitura para permitir mais de uma conexão à imagem) e, em seguida, usar iscsi ou nfs (ipv4) para os compartilhamentos de usuários, se necessário. Você pode conseguir isso com o projeto ipxe.

Outra maneira é usar squashfs + tmpfs e não se incomodar tanto com compartilhamentos durante o processo de inicialização do sistema e depois fazer remontamentos dependendo das autenticações do usuário (no entanto, isso tem um maior consumo de memória no lado do cliente). / p>

Esperanças que ajudam você.

    
por Antoine Rodriguez 28.09.2014 / 18:50