Dans ce tuto, je vais expliquer comment préparer un poste client diskless afin de le rendre accessible via un serveur netboot. Je me suis aidé du logiciel VirtualBox où j’ai, dans un premier temps, installé Linux Mint 17 Mate 32 bits, fait toutes les mises à jours, créé les comptes d’utilisateurs nécessaires. Il s’agit de la même méthode dans le cas d’une distribution Ubuntu 14.04.
Je me suis largement inspiré de ce tuto pour la suite des événements : http://shitwefoundout.com/wiki/Diskless_ubuntu
Pour la partie serveur, c’est ici.
Voici pour la configuration du client (à faire en root, sudo su -) :
Empêcher que la carte réseau soit gérée par networkmanager, en éditant /etc/network/interfaces :
iface eth0 inet manual
Mise en place de aufs et génération du ramdisk de démarrage :
Editer /etc/initramfs-tools/initramfs.conf et modifier ces paramètres :
MODULES=netboot BOOT=nfs
Ajouter ceci à la fin du fichier /etc/initramfs-tools/modules :
aufs
Créez le dossier suivant et copiez-y le module de aufs :
mkdir /etc/initramfs-tools/scripts/modules cp /lib/modules/$(uname -r)/kernel/ubuntu/aufs/aufs.ko /etc/initramfs-tools/scripts/modules/
Editez ce fichiers : /etc/initramfs-tools/scripts/init-bottom/00_aufs_init
#!/bin/sh -e case $1 in prereqs) exit 0 ;; esac for x in $(cat /proc/cmdline); do case $x in root=*) ROOTNAME=${x#root=} ;; aufs=*) UNION=${x#aufs=} case $UNION in LABEL=*) UNION="/dev/disk/by-label/${UNION#LABEL=}" ;; UUID=*) UNION="/dev/disk/by-uuid/${UNION#UUID=}" ;; esac ;; esac done echo "Union=$UNION" if [ -z "$UNION" ]; then exit 0 fi modprobe -b aufs && echo "OK: modprobe -b aufs" || echo "ERR: modprobe -b aufs" # make the mount points on the init root file system mkdir /aufs /ro /rw && echo "OK: mkdir /aufs /ro /rw" || echo "ERR: mkdir /aufs /ro /rw" # mount read-write file system if [ "$UNION" = "tmpfs" ]; then mount -t tmpfs rw /rw -o noatime,mode=0755 && echo "OK: mount -t tmpfs rw /rw -o noatime,mode=0755 " || echo "ERR: mount -t tmpfs rw /rw -o noatime,mode=0755" else mount $UNION /rw -o noatime fi # move real root out of the way mount --move ${rootmnt} /ro && echo "OK: mount --move ${rootmnt} /ro" || echo "ERR: mount --move ${rootmnt} /ro" mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro && echo "OK: mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro" || echo "ERR: mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro" # test for mount points on union file system [ -d /aufs/ro ] || mkdir /aufs/ro [ -d /aufs/rw ] || mkdir /aufs/rw mount --move /ro /aufs/ro && echo "OK: mount --move /ro /aufs/ro" || echo "ERR: mount --move /ro /aufs/ro" mount --move /rw /aufs/rw && echo "OK: mount --move /rw /aufs/rw" || echo "ERR: mount --move /rw /aufs/rw" # strip fstab off of root partition grep -v $ROOTNAME /aufs/ro/etc/fstab > /aufs/etc/fstab mount --move /aufs /root && echo "OK: mount --move /aufs /root" || echo "ERR: mount --move /aufs /root" exit 0
Et attribuez-lui les bonnes permissions :
chmod 0775 /etc/initramfs-tools/scripts/init-bottom/00_aufs_init
Créons maintenant le nouveau ramdisk en le plaçant dans /root :
update-initramfs -k $ (uname -r) -c -b /root/
Adaptons ensuite /etc/fstab : (Lisez cet article pour le swap diskless)
# Pour le boot : proc /proc proc defaults 0 0 /dev/nfs / nfs defaults 0 0 # Pour le swap : /dev/nbd0 none swap sw 0 0 # Pour les mises à jour futur de l'image : / /mnt/os none bind 0 0
Copions maintenant l’installation complète sur le serveur netboot :
mkdir /mnt/os mount /mnt/os rsync -avP /mnt/os/* 192.168.8.3:/srv/linuxmint/.
Voilà. La dernière commande peux-être utilisée à tout moment par la suite pour effectuer une mise à jour / adaptation de la distribution stockée dans le serveur.