私たちの仕事では、Ubuntuを実行している約80台のディスクレスマシンを使用しています。IPv6への移行を望んでいるので、今ではディスクレスシステムをIPV6で動作させようとしています。カーネルとinitramfsの送信は引き続きIPv4接続を介して行うことができますが、マシンが完全に起動したら、すべてのネットワーク接続がIPv6を介して行われるようにします。
これは、nfsrootをIPv6経由でマウントする必要があることを意味します。これに関する私の調査では、initramfs-tools(1.18.5-1ubuntu4.1)はIPv6をサポートしていないことが示されました。つまり、初期ブート時のインターフェース構成に使用されるipconfigも、nfsルートのマウントマウント手順もIPv6対応ではありません。
これを回避するために、initramfs(/etc/initramfs-tools/hooks/ipv6
)に2つのバイナリを追加しました。
#!/bin/bash
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/dhclient /sbin
copy_exec /sbin/mount.nfs4 /sbin
これらを使用して、(a)初期ブート時にDHCPv6を要求します。
/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0
(b)以下を実行して得たアドレスでインターフェースを設定します:
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
通常、nfsルートは次のコマンドでマウントされ/usr/share/initramfs-tools/scripts/nfs
ます:
nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
しかし、これはIPv6アドレスを受け入れないようです。
だから私はそれを次のように変更しました:
mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}
$NFSROOT
この場合は[2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6
です。
インターフェースの設定はルートのマウントと同様に機能するように見えますが、/sbin/init
実行すると(私が思うに)、IPv6が再びドロップされるため、システムがフリーズします(ubuntuルートにアクセスできなくなるため)。
/etc/network/interfaces
ファイルには、次のようになります。
auto lo
iface lo inet loopback
iface eth0 inet manual
iface eth0 inet6 manual
initramfsからインターフェイス設定を保持する方法はありますか?または、インターフェイスを設定するときに何か間違ったことをしていますip
か?