Nel nostro lavoro stiamo usando circa 80 macchine diskless che eseguono Ubuntu. Vogliamo effettuare il passaggio a IPv6, quindi ora sto cercando di far funzionare il nostro sistema diskless con IPV6. La trasmissione del kernel e di initramfs può essere ancora su una connessione IPv4, ma una volta che la macchina è completamente avviata voglio che tutte le connessioni di rete siano su IPv6.
Ciò significa che nfsroot deve essere montato tramite IPv6. La mia ricerca ha dimostrato che initramfs-tools (1.18.5-1ubuntu4.1) NON supporta IPv6. Ciò significa che né ipconfig, utilizzato per la configurazione dell'interfaccia all'inizio del boot, né la procedura di montaggio mount per la radice nfs sono in grado di supportare IPv6.
Per aggirare questo ho aggiunto due binari a 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
Li uso per (a) richiedere un DHCPv6 all'avvio anticipato con
/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0
e (b) configurare l'interfaccia con l'indirizzo che ho raggiunto eseguendo:
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
Di solito la radice nfs è montata con il seguente comando in /usr/share/initramfs-tools/scripts/nfs
:
nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
Ma questo non sembra accettare gli indirizzi IPv6.
Quindi l'ho cambiato in:
mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}
$NFSROOT
in questo caso è [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6
.
La configurazione dell'interfaccia sembra funzionare così come il montaggio root, ma quando /sbin/init
viene eseguito (penso), l'IPv6 viene nuovamente rilasciato, e quindi il sistema si blocca (perché non può più accedere al root Ubuntu).
Il /etc/network/interfaces
file è simile al seguente:
auto lo
iface lo inet loopback
iface eth0 inet manual
iface eth0 inet6 manual
C'è un modo per mantenere la configurazione dell'interfaccia da initramfs? O sto facendo qualcosa di sbagliato quando configuro l'interfaccia con ip
?