Booter iSCSI sous Debian Wheezy

Contexte

  • Pourquoi ?
    • Pour permettre le démarrage directement sur le réseau d'une machine
  • Quoi ?
    • Utiliser le protocole iSCSI pour offrir un OS complet sur un périphérique équivalent à un disque
  • Quand ?
    • N'importe quand. Seule une demi-heure est nécessaire dans environnement maîtrisé (sous Linux/Debian) pour réaliser cette opération.
  • Qui ?
    • N'importe quel administrateur de 2 machines (ayant un minimum de connaissances, notamment pour le copier/coller des commandes suivantes)
  • Où ?
    • Sur un réseau local ou distant (un réseau haut débit est préférable, un réseau local également mais iSCSI utilise TCP/IP)
  • Combien ?
    • Pour l'hôte de cibles iSCSI ou pour le client, n'importe quelle machine suffit, du moment que la machine cliente peut démarrer en PXE
  • Comment ?
    • C'est ce que nous allons voir

iSCSI ou le SCSI par le réseau dans l'environnement Debian

Le protocole iSCSI permet à un hôte d'offrir un espace disque (du mode bloc) à un hôte distant.

Linux/Debian intègre dans la Wheezy (version 7) tout ce qui permet d'accéder à des volumes iSCSI ou de les créer.

  • Open-ISCSI pour accéder à des ressources offertes en iSCSI
  • iSCSItarget pour offrir des targets iSCSI avec un module noyau
  • TGT pour offrir des targets iSCSI sans module noyau

De mon expérience (près de 5 ans sur iSCSItarget et un 1 et demi mois sur TGT), j'aurai tendance à préférer iSCSItarget. Le principal avantage de TGT réside dans son absence de module noyau et donc facile implantation sur un serveur, mais il a un problème de taille : impossible de retirer un volume déclaré !

Les prérequis

  • une machine portant les “cibles” iSCSI, appelée MyHost
    • elle dispose d'un espace disque disponible en mode bloc (fichiers, disques, volumes)
    • elle a installé une implémentation de cibles iSCSI
  • une machine portant un serveur TFTP avec les images PXE, appelée MyPXE
  • une machine pouvant démarrer en PXE, d'adresse MAC simplement 00:AA:BB:CC:DD:EE, disposant d'une IP fournie par DHCP

Machine portant les partages iSCSI

Il est supposé que la machine MyHost dispose d'une infrastructure LVM :

  • son VG est MyVG
  • le nom du LV à créer est MyLViSCSI
  • Création du volume LVM de 20G sur le VG Raid6
    lvcreate -L 20G -n MyLViSCSI MyVG
  • Formatage en Ext3
    mkfs.ext3 -m 0 /dev/MyVG/MyLViSCSI
  • Montage du volume sur le système hôte
    mkdir /media/MyLViSCSI
    mount -o noatime /dev/MyVG/MyLViSCSI /media/MyLViSCSI
  • Etablissement d'un label sur la partition
    e2label /dev/MyVG/MyLViSCSI MyLViSCSI
  • Installation au besoin de debootstrap
    apt-get install debootstrap
  • Installation du système de base Wheezy, architecture x86_64 ou i386
    # pour une architecture x86_64
    debootstrap --arch amd64 wheezy /media/MyLViSCSI http://ftp.fr.debian.org/debian
    # pour une architecture i386
    debootstrap --arch i386 wheezy /media/MyLViSCSI http://ftp.fr.debian.org/debian
  • Passage dans l'environnement
    chroot /media/MyLViSCSI
  • Création d'une nouvelle liste de paquets
    tee /etc/apt/sources.list <<EOF
    deb http://ftp.fr.debian.org/debian/ wheezy main contrib non-free
    deb-src http://ftp.fr.debian.org/debian/ sid main contrib non-free
    deb-src http://ftp.fr.debian.org/debian/ experimental main contrib non-free
    deb http://security.debian.org/ wheezy/updates main contrib non-free
    deb-src http://security.debian.org/ wheezy/updates main contrib non-free
    EOF
  • Mise à jour de la base des paquets :
    apt-get update
  • Montage du /proc pendant l'installation
    mount -t proc none /proc
  • Initialisation du mot de passe superutilisateur
    echo "root:MyStrongPassword" | chpasswd
  • Installation de paquets nécessaires
    apt-get -y install dhcp3-common openssh-server locales initramfs-tools dhcp3-client aufs-tools firmware-linux-nonfree firmware-linux firmware-bnx2 open-iscsi iftop htop iotop emacs mtr lsof tshark mbw memtest86 cpuburn bonnie dbench iozone3 console-setup less && apt-get clean
    # Pour les architectures i686
    apt-get -y install linux-image-3.2.0-4-686-pae
    # Pour les architectures x86_64
    apt-get -y install linux-image-3.2.0-4-amd64
  • Purge des archives de paquets :
    apt-get clean
  • Suppression du démarrage du démon iSCSI (en noyau 3.2, le script plante et empêche le démarrage)
    insserv -r open-iscsi
  • Paramétrage d'un boot iSCSI
    touch /etc/iscsi/iscsi.initramfs
    update-initramfs -k all -u
  • Vérification de la présence du support iSCSI lsinitramfs /boot/initrd.img-* | grep “local-top/iscsi” retourne :
    scripts/local-top/iscsi
    scripts/local-top/iscsi
  • Paramétrage de l'interface de démarrage iSCSI<note important>En cas d'interfaces multiples, il est INDISPENSABLE de préciser l'interface de démarrage, sinon…</note>
    sed -i "s/DEVICE\=/DEVICE\=eth0/g" /etc/initramfs-tools/initramfs.conf
  • Suppression du hostname pour le paramétrage automatique du HOST
    rm /etc/hostname
  • Définition de l'interface de loopback
    tee /etc/network/interfaces <<EOF
    auto lo
    iface lo inet loopback
    EOF
  • Démontage du /proc
    umount /proc
  • Sortie de l'environnement chrooté
    exit
  • Arrêt des services démarrés à l'installation
    lsof | grep /media/MyLViSCSI | awk '{ print $2 }' | sort -u | xargs -I '{}' kill '{}' 

Configuration du démarrage PXE

Sur le porteur de cibles iSCSI

  • Copie des composants pour le PXE
    cp /media/MyLViSCSI/boot/initrd.img-3.2.0-4-686-pae /root/initrd.img-3.2.0-4-686-pae-iSCSI
    cp /media/MyLViSCSI/boot/vmlinuz-3.2.0-4-686-pae /root/vmlinuz-3.2.0-4-686-pae-iSCSI
    cp /media/MyLViSCSI/boot/initrd.img-3.2.0-4-amd64 /root/initrd.img-3.2.0-4-amd64-iSCSI
    cp /media/MyLViSCSI/boot/vmlinuz-3.2.0-4-amd64 /root/vmlinuz-3.2.0-4-amd64-iSCSI
  • Copie des clés autorisées
    mkdir /media/MyLViSCSI/root/.ssh
    cp -a /root/.ssh/authorized_keys /media/MyLViSCSI/root/.ssh/
  • Démontage de la partition
    umount /media/MyLViSCSI
  • Copie des composants de démarrage sur le serveur PXE
    # Le serveur TFTP/PXE est MyPXE :
    scp /root/*iSCSI PyPXE:/srv/tftp
  • Création d'un partage iSCSI nécessitant les paramètres
    • IQN (pour iSCSI Qualified Name) : iqn.2012-04.MySite.MyHost:MyLViSCSI
    • identifiant : inputname
    • mot de passe : MyInputPwd
    • chemin : /dev/MyVG/MyLViSCSI
  • Paramétrage de la cible IET
    # Renommage de l'ancien fichier de configuration
    cp /etc/iet/ietd.conf /etc/iet/ietd.conf-$(date +%Y%m%d)
    # Ajout de l'entree précedente
    tee -a /etc/iet/ietd.conf <<EOF
    Target iqn.2013-06.MySite.MyHost:MyLViSCSI
    	IncomingUser inputname MyInputPwd
    	Lun 0 Path=/dev/MyVG/MyLViSCSI,BlockSize=4096,Type=fileio
    EOF
  • Activation des partages
    ietadm --op new --tid=100 --params Name=iqn.2013-06.MySite.MyHost:MyLViSCSI
    ietadm --op new --tid=100 --lun=0 --params Path=/dev/MyVG/MyLViSCSI,BlockSize=4096,Type=fileio
    ietadm --op new --tid=100 --lun=0 --user --params IncomingUser=inputname,Password=MyInputPwd
  • Vérification des partages par la commande cat /proc/net/iet/volume | grep MyLViSCSI
    cat /proc/net/iet/volume  | grep MyLViSCSI
    tid:86 name:iqn.2013-03.MySite.MyHost:MyLViSCSI
    	lun:0 state:0 iotype:fileio iomode:wt blocks:5242880 blocksize:4096 path:/dev/MyVG/MyLViSCSI

Sur le serveur TFTP de boot PXE

  • Déplacement dans le dossier de configuration TFTP, anciennement /srv/tftp, maintenant
    cd /srv/tftp/pxelinux.cfg
  • Déclaration de l'entrée TFTP pour notre entrée
    • ISCSI_TARGET_NAME : IQN
    • ISCSI_TARGET_IP : hôte de cibles iSCSI
    • ISCSI_INITIATOR : IQN
    • ISCSI_USERNAME : identifiant
    • ISCSI_PASSWORD : mot de passe
    • ISCSI_TARGET_GROUP : groupe, généralement 1
      tee iscsi <<EOF
      DEFAULT linux64
      
      LABEL linux64
      KERNEL vmlinuz-3.2.0-4-amd64-iSCSI
      APPEND console=tty1 initrd=initrd.img-3.2.0-4-amd64-iSCSI ip=dhcp rw ISCSI_TARGET_NAME=iqn.2013-06.MySite.MyHost:MyLViSCSI ISCSI_TARGET_IP=MyHost ISCSI_INITIATOR=iqn.2013-06.MySite.MyHost:default ISCSI_USERNAME=inputname ISCSI_TARGET_GROUP=1 ISCSI_PASSWORD=MyInputPwd root=LABEL=MyLViSCSI rootflags=data=journal
      
      LABEL linux32
      KERNEL vmlinuz-3.2.0-4-686-pae-iSCSI
      APPEND console=tty1 initrd=initrd.img-3.2.0-4-686-pae-iSCSI ip=dhcp rw ISCSI_TARGET_NAME=iqn.2013-06.MySite.MyHost:MyLViSCSI ISCSI_TARGET_IP=MyHost ISCSI_INITIATOR=iqn.2013-06.MySite.MyHost:default ISCSI_USERNAME=inputname ISCSI_TARGET_GROUP=1 ISCSI_PASSWORD=MyInputPwd root=LABEL=MyLViSCSI rootflags=data=journal
      EOF
  • Création des liens pour chaque machine spécifique. Ll'adresse MAC de la forme : 00:AA:BB:CC:DD:EE doit être écrite sous la forme 01-00-aa-bb-cc-dd-ee en MINUSCULE !
    ln -sf iscsi 01-00-aa-bb-cc-dd-ee

Emmanuel Quemener 2013/06/13 06:05

developpement/productions/iscsiboot4wheezy.txt · Dernière modification: 2015/01/07 10:04 (modification externe)