В нашей работе мы используем около 80 бездисковых компьютеров под управлением Ubuntu. Мы хотим перейти на IPv6, поэтому сейчас я пытаюсь заставить нашу бездисковую систему работать с IPv6. Передача ядра и initramfs может осуществляться через соединение IPv4, но после полной загрузки машины я хочу, чтобы все сетевые соединения были через IPv6.
Это означает, что nfsroot должен быть подключен через IPv6. Мои исследования показали, что 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
Я использую их, чтобы (а) запросить 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
.
Конфигурация интерфейса, кажется, работает так же хорошо, как и монтирование root, но когда /sbin/init
выполняется (я думаю), IPv6 снова сбрасывается, и поэтому система зависает (потому что больше не может получить доступ к корню ubuntu).
/etc/network/interfaces
Файл выглядит следующим образом :
auto lo
iface lo inet loopback
iface eth0 inet manual
iface eth0 inet6 manual
Есть ли способ сохранить конфигурацию интерфейса из initramfs? Или я что-то не так делаю, когда настраиваю интерфейс ip
?
Ответы:
может быть, это не по теме, но я думаю, что вашей конкретной проблемы можно избежать путем переосмысления сервиса:
зачем загружаться с NFS?
Вы можете попробовать загрузиться с помощью iscsi (в режиме только для чтения, чтобы разрешить более одного подключения к образу), а затем использовать iscsi или nfs (ipv4) для общих ресурсов пользователя, если вам нужно. Вы можете достичь этого с помощью проекта ipxe.
Другой способ - использовать squashfs + tmpfs и не слишком беспокоиться об общих ресурсах в процессе загрузки системы, а затем выполнять перемонтирование в зависимости от пользовательских аутентификаций (однако это приводит к более высокому потреблению памяти на стороне клиента).
Надежды, которые вам помогут.
источник