web-dev-qa-db-fra.com

Démarrage sans disque avec IPv6

Dans notre travail, nous utilisons environ 80 machines sans disque tournant sous Ubuntu. Nous souhaitons effectuer la transition vers IPv6. J'essaie donc maintenant de faire fonctionner notre système sans disque avec IPV6. La transmission du noyau et de initramfs peut toujours être effectuée via une connexion IPv4, mais une fois la machine entièrement démarrée, je souhaite que toutes les connexions réseau soient via IPv6.

Cela signifie que le nfsroot doit être monté via IPv6. Ma recherche de ceci a montré que initramfs-tools (1.18.5-1ubuntu4.1) ne supporte pas IPv6. Cela signifie que ni ipconfig, qui est utilisé pour la configuration de l'interface au tout début du processus, ni la procédure de montage pour la racine nfs ne sont compatibles IPv6.

Pour contourner ce problème, j'ai ajouté deux fichiers binaires à 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

Je les utilise pour (a) demander un DHCPv6 au début du démarrage avec

/sbin/dhclient -6 -1 -cf /tmp/dhclient.conf -pf /tmp/dhclient6.eth0.pid -lf /tmp/dhclient6.eth0.leases eth0

et (b) configurer l'interface avec l'adresse que j'ai atteinte en exécutant:

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

Généralement, la racine nfs est montée avec la commande suivante in/usr/share/initramfs-tools/scripts/nfs:

nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}

Mais cela ne semble pas accepter les adresses IPv6.

Alors je l'ai changé pour:

mount ${roflag} -t nfs4 ${NFSROOT} ${rootmnt}

$NFSROOT dans ce cas est [2001:4ca0:2218:1::1:2]:/lb/diskless/rootfs/ubuntu_1204_ipv6.

La configuration de l'interface semble fonctionner aussi bien que le montage racine, mais lorsque /sbin/init est exécuté (je pense), l'IPv6 est à nouveau abandonné et le système se fige (car il ne peut plus accéder à la racine d'ubuntu).

Le fichier /etc/network/interfaces ressemble à ceci:

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth0 inet6 manual

Est-il possible de garder la configuration de l'interface à partir d'initramfs? Ou est-ce que je fais quelque chose de mal quand je configure l'interface avec ip?

16
moritz

c'est peut-être hors sujet, mais je pense que votre problème spécifique peut être évité en repensant le service:

pourquoi s'embêter à démarrer avec NFS?

Vous pouvez essayer de démarrer avec iscsi (en mode lecture seule pour autoriser plusieurs connexions à l'image), puis utiliser iscsi ou nfs (ipv4) pour les partages d'utilisateur, le cas échéant. Vous pouvez y parvenir avec le projet ipxe.

Une autre solution consiste à utiliser squashfs + tmpfs et à ne pas trop se soucier des partages pendant le processus de démarrage du système, puis à remonter en fonction des authentifications de l'utilisateur (la consommation de mémoire est toutefois plus importante côté client).

Des espoirs qui vous aident.

1
Antoine Rodriguez