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
?