notes·de·pit

Parfois j'apprends à pêcher à des gens qui n'aiment pas le poisson

Réinstallation du labo 504

L’école dispose de labos «stables» administrés par un technicien et sur lesquels nous n’avons pas la main. Ces labos sont très bien pour les cours de langages, d’analyse… mais pas pour des cours qui nécessitent les privilèges de « root » tels que des cours d’administration des réseaux par exemple. Pour ces cours, puisqu’il y a un risque que la machine devienne instable suite à une mauvaise manip, il faut qu’un prof se charge de maintenir la stabilité minimale du réseau… c’est moi qui m’y colle pour le labo 504.

L’an dernier, on avait choisi de répliquer une machine sur les autres et un pote s’était chargé du boulot. Aujourd’hui, on va s’y prendre un peu différemment…

orvalalacolonne.png

Un p’tit Orval à « La Colonne » avant de commencer…

Contraintes

Jadis, la solution retenue consistait à passer sur les machines avec un Live CD et une image sur une clé USB… mais booter sur un CD, ça prend du temps et seul le détenteur du CD et de l’image peut réinstaller. À l’ère des réseaux, c’est moche.

L’an dernier la réplication, mise en place avec Antoine et bien que rapide, ne m’a pas permis de réinstaller en cours d’année. Cette année, l’idée est d’obtenir au boot de la machine un menu permettant de choisir :

let’s go !

Les machines sont capables de booter sur le réseau. Comme le BIOS PXE ne connait pas grand chose au départ, il faut l’informer.

C’est un serveur DHCP qui se charge de donner une IP et un nom au client

apt-get install ics-dhcp-serveur

Il suffit de configurer dhcp pour qu’il attribue la « bonne » IP à la « bonne » machine … ce qui nécessite de relever les MAC adresses des machines et d’ajouter, outre le range IP, des lignes du style dans le fichier de conf /etc/dhcp/dhcpd.conf2

host orval { 
   option send-host orval;
   hardware ethernet 2c:27:d7:2e:20:29; 
   fixed-address 192.168.210.4; 
}

Lorsque le client reçoit une IP, il a besoin de télécharger un OS sur lequel booter. Il utilise, pour ce faire, un serveur tftp

Ce serveur tftp met à disposition pxelinux, un petit soft dérivant de linux et ayant la capacité de booter sur le réseau. pxelinux peut proposer un menu permettant de choisir l’action suivante.

apt-get install atftp

dhcp doit dire au client qu’il est prié de télécharger /srv/tftp/pxelinux.o afin de l’exécuter. On ajoute au fichier /etc/dhcp/dhcpd.conf

next-server 192.168.210.1;
filename "pxelinux.0";

À ce fichier, est associé le menu qui sera présenté à l’utilisateur (/srv/tftp/pxelinux.cfg/default). Menu à adapter à ses besoins. Ce menu propose

Le menu a l’allure suivante…

DEFAULT vesamenu.c32 menuconf/design.conf  

TIMEOUT 50  
MENU TITLE Labo 504  
MENU AUTOBOOT Starting Windows System in # seconds  

LABEL -  
    MENU LABEL Local boot  
    MENU DISABLE  
    TOTALTIMEOUT 9000  
    TIMEOUT 9000  

LABEL bootlocal-win  
    MENU LABEL ^Windows 7  
    KERNEL chain.c32  
    APPEND hd0 0  
    MENU INDENT 1  

LABEL bootlocal-debian  
    MENU LABEL ^Debian  
    KERNEL chain.c32  
    APPEND hd0  
    MENU INDENT 1  
    MENU DEFAULT  

Pour réinstaller, nous utilisons partimage… qui a besoin d’une machine linux opérationelle

apt-get install debootstrap
apt-get install nfs-kernel-server

Nous créons une machine linux qui se trouvera sur le serveur et sera proposée aux clients via nfs. Le client la boote et le dernier script de boot sera un script perso permettant la réinstallation à grands coups de dd et de partimage.

debootstrap est un outil qui permet d’installer un système debian de base dans le sous-répertoire d’un autre système déjà existant. Il n’a pas besoin d’un CD d’installation, juste d’un accès à un dépôt debian

Extrait de Wiki debian

En quelques commandes , ça donne;

mkdir /srv/pxelinux
debootstrap wheezy /srv/pxelinux http://ftp.us.debian.org/debian
mount /dev /srv/pxelinux/dev -o bind
mount /proc /srv/pxelinux/proc -o bind
mount /sys /srv/pxelinux/sys -o bind
chroot /sys/pxelinux
apt-get install «kernel»

Modifier le fichier /etc/initramfs en y remplaçant MODULE=netboot et exécuter un update-initramfs -u -k all afin de mettre à jour le fichier initrd.

Le fichier /etc/fstab a, quant à lui, l’allure suivante,

proc            /proc           proc    defaults        0       0
192.168.210.1:/srv/pxelinux /   nfs defaults    0   0
192.168.210.1:/var/images   /var/images nfs defaults    0   0
tmpfs       /var/lib/dhcp   tmpfs   defaults,size=10M   0   0
tmpfs       /var/run    tmpfs   defaults,size=10M   0   0

Ligne par ligne;

Il reste a créer les images dans /var/images, copier le mbr, créer le script et tester le tout

partimage -z1 -o -d save /dev/sda3 /var/images/linux-sda3.img 
partimage -z1 -o -d save /dev/sda2 /var/images/windows-sda2.img
dd if=/dev/sda of=/var/images/mbr bs=512 count=1

Le script est lancé en fin de séquence de boot par le biais du fichier /etc/inittab. Le script a l’allure suivante :

#!/bin/bash
case "$1" in
    LINUX)
        echo "reinstall linux";
        /usr/sbin/partimage -b restore /dev/sda3 /var/images/ \
          linux-sda3.img.000
        /sbin/mkswap  /dev/sda4
        /bin/mount -t ext4 /dev/sda3 /mnt
        echo `hostname` > /mnt/etc/hostname
        /bin/umount /mnt
    ;;

    WINDOWS)
        echo "reinstall windows";
        /bin/dd if=/var/images/windows-sda1.img of=/dev/sda1
        /usr/sbin/partimage -b restore /dev/sda2 /var/images/ \
          windows-sda2.img.000

    ;;

    MBR)
        echo "reinstall all";
        /bin/dd if=/var/images/mbr of=/dev/sda
        /sbin/sfdisk -R /dev/sda
        /bin/dd if=/var/images/windows-sda1.img of=/dev/sda1
        /usr/sbin/partimage -b restore /dev/sda2 /var/images/ \
          windows-sda2.img.000
        /usr/sbin/partimage -b restore /dev/sda3 /var/images/ \
          linux-sda3.img.000
        /sbin/mkswap  /dev/sda4
        /bin/mount -t ext4 /dev/sda3 /mnt
        echo `hostname` > /mnt/etc/hostname
        /bin/umount /mnt

    ;;
esac

/sbin/halt

À ce stade, tout est mis en place et tout devrait fonctionner…

Liens


  1. Oui, mes machines portent des noms de bières 

  2. Oui, aujourd’hui, c’est sponsorisé par Orval