在我们的工作中,我们正在使用大约80台运行Ubuntu的无盘计算机。我们想过渡到IPv6,所以现在我试图使我们的无盘系统与IPV6一起使用。内核和initramfs的传输仍然可以通过IPv4连接进行,但是一旦机器完全启动,我希望所有网络连接都通过IPv6。
这意味着必须通过IPv6挂载nfsroot。我对此的研究表明,initramfs-tools(1.18.5-1ubuntu4.1)不支持IPv6。这意味着在早期引导时用于接口配置的ipconfig或nfs根的安装过程都不支持IPv6。
为了避免这种情况,我在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
我使用这些来(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
什么?