Bei unserer Arbeit verwenden wir rund 80 plattenlose Maschinen, auf denen Ubuntu ausgeführt wird. Wir möchten auf IPv6 umsteigen, und jetzt versuche ich, unser plattenloses System für die Arbeit mit IPV6 zu aktivieren. Die Übertragung des Kernels und von initramfs kann immer noch über eine IPv4-Verbindung erfolgen, aber sobald der Computer vollständig gebootet ist, möchten wir, dass alle Netzwerkverbindungen über IPv6 erfolgen.
Dies bedeutet, dass der nfsroot über IPv6 gemountet werden muss. Meine Untersuchungen haben gezeigt, dass initramfs-tools (1.18.5-1ubuntu4.1) IPv6 NICHT unterstützen. Das bedeutet, dass weder ipconfig, das für die Schnittstellenkonfiguration zum frühen Startzeitpunkt verwendet wird, noch das Bereitstellungsverfahren für den nfs-Stamm IPv6-fähig sind.
Um dies zu umgehen, habe ich dem initramfs ( /etc/initramfs-tools/hooks/ipv6
) zwei Binärdateien hinzugefügt :
#!/bin/bash
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/dhclient /sbin
copy_exec /sbin/mount.nfs4 /sbin
Ich benutze diese um (a) ein DHCPv6 beim frühen Booten mit anzufordern
/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0
und (b) die Schnittstelle mit der Adresse zu konfigurieren, die ich durch Ausführen von:
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
Normalerweise wird der nfs-Stamm mit dem folgenden Befehl eingehängt /usr/share/initramfs-tools/scripts/nfs
:
nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
Dies scheint jedoch keine IPv6-Adressen zu akzeptieren.
Also habe ich es geändert in:
mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}
$NFSROOT
in diesem Fall ist [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6
.
Die Schnittstellenkonfiguration scheint genauso gut zu funktionieren wie das Mounten des Roots, aber wenn /sbin/init
es ausgeführt wird (glaube ich), wird IPv6 wieder gelöscht und das System friert ein (weil es nicht mehr auf den Ubuntu-Root zugreifen kann).
Die /etc/network/interfaces
Datei sieht folgendermaßen aus:
auto lo
iface lo inet loopback
iface eth0 inet manual
iface eth0 inet6 manual
Gibt es eine Möglichkeit, die Schnittstellenkonfiguration von initramfs fernzuhalten? Oder mache ich etwas falsch, wenn ich die Schnittstelle mit konfiguriere ip
?