Dans notre travail, nous utilisons environ 80 machines sans disque exécutant Ubuntu. Nous voulons faire la transition vers IPv6, alors maintenant j'essaie de faire fonctionner notre système sans disque avec IPV6. La transmission du noyau et des initramfs peut toujours se faire via une connexion IPv4, mais une fois que la machine est complètement démarrée, je veux que toutes les connexions réseau soient via IPv6.
Cela signifie que le nfsroot doit être monté via IPv6. Ma recherche a montré que initramfs-tools (1.18.5-1ubuntu4.1) ne prend pas en charge IPv6. Cela signifie que ni ipconfig, qui est utilisé pour la configuration d'interface au début du démarrage, ni la procédure de montage de montage pour la racine nfs ne sont compatibles IPv6.
Pour contourner cela, j'ai ajouté deux binaires aux 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
Je les utilise pour (a) demander un DHCPv6 au début du démarrage avec
/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0
et (b) pour configurer l'interface avec l'adresse que j'ai atteinte en exécutant:
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
Habituellement, la racine nfs est montée avec la commande suivante dans /usr/share/initramfs-tools/scripts/nfs
:
nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
Mais cela ne semble pas accepter les adresses IPv6.
Je l'ai donc changé en:
mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}
$NFSROOT
dans ce cas est [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6
.
La configuration de l'interface semble fonctionner aussi bien que le montage racine, mais quand il /sbin/init
est exécuté (je pense), l'IPv6 est à nouveau abandonné, et donc le système se bloque (car il ne peut plus accéder à la racine ubuntu).
Le /etc/network/interfaces
fichier ressemble à ceci:
auto lo
iface lo inet loopback
iface eth0 inet manual
iface eth0 inet6 manual
Existe-t-il un moyen de conserver la configuration de l'interface des initramfs? Ou est-ce que je fais quelque chose de mal lorsque je configure l'interface avec ip
?