Archives par étiquette : Aufs

Configuration d’un poste client diskless

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.