====== 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 [[http://fr.wikipedia.org/wiki/ISCSI|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. * [[http://www.open-iscsi.org|Open-ISCSI]] pour accéder à des ressources offertes en iSCSI * [[http://iscsitarget.sourceforge.net/|iSCSItarget]] pour offrir des //targets// iSCSI avec un module noyau * [[http://stgt.sourceforge.net/|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'environnementchroot /media/MyLViSCSI * Création d'une nouvelle liste de paquets tee /etc/apt/sources.list < * 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 superutilisateurecho "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 iSCSIEn cas d'interfaces multiples, il est INDISPENSABLE de préciser l'interface de démarrage, sinon... 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 < * 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éesmkdir /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 < * 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 < * 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@ens-lyon.fr|Emmanuel Quemener]] 2013/06/13 06:05//