W naszej pracy korzystamy z około 80 bezdyskowych maszyn z systemem Ubuntu. Chcemy przejść na IPv6, więc teraz staram się, aby nasz bezdyskowy system działał z IPv6. Transmisja jądra i initramfs może nadal odbywać się za pośrednictwem połączenia IPv4, ale po pełnym uruchomieniu komputera chcę, aby wszystkie połączenia sieciowe były realizowane przez IPv6.
Oznacza to, że nfsroot musi być zamontowany przez IPv6. Moje badania tego wykazały, że initramfs-tools (1.18.5-1ubuntu4.1) NIE obsługuje IPv6. Oznacza to, że ani ipconfig, który jest używany do konfiguracji interfejsu podczas wczesnego rozruchu, ani procedura montowania montowania dla katalogu głównego nfs nie są w stanie obsługiwać IPv6.
Aby to obejść, dodałem dwa pliki binarne do 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
Używam ich do (a) żądania DHCPv6 przy wczesnym uruchomieniu z
/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0
oraz (b) w celu skonfigurowania interfejsu z adresem, który uzyskałem wykonując:
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
Zwykle katalog główny nfs jest montowany za pomocą następującego polecenia w /usr/share/initramfs-tools/scripts/nfs
:
nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
Ale to nie wydaje się akceptować adresów IPv6.
Więc zmieniłem to na:
mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}
$NFSROOT
w tym przypadku jest [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6
.
Wygląda na to, że konfiguracja interfejsu działa tak samo jak montowanie roota, ale kiedy /sbin/init
jest wykonywana (myślę), IPv6 jest ponownie upuszczany, a zatem system zawiesza się (ponieważ nie może już uzyskać dostępu do roota Ubuntu).
/etc/network/interfaces
Plik wygląda tak:
auto lo
iface lo inet loopback
iface eth0 inet manual
iface eth0 inet6 manual
Czy istnieje sposób na zachowanie konfiguracji interfejsu przed initramfs? Czy robię coś złego, konfigurując interfejs ip
?