ที่งานของเราเราใช้เครื่องจักรไร้ดิสก์ประมาณ 80 เครื่องที่ใช้งาน Ubuntu เราต้องการเปลี่ยนไปใช้ IPv6 ดังนั้นตอนนี้ฉันพยายามทำให้ระบบ diskless ของเราทำงานกับ IPV6 การส่งเคอร์เนลและ initramfs สามารถยังคงผ่านการเชื่อมต่อ IPv4 แต่เมื่อเครื่องบูตเต็มฉันต้องการเชื่อมต่อเครือข่ายทั้งหมดจะผ่าน IPv6
นี่หมายความว่าต้องติดตั้ง nfsroot ผ่าน IPv6 งานวิจัยของฉันเกี่ยวกับเรื่องนี้แสดงให้เห็นว่าเครื่องมือเริ่มต้น (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
?