Système & Réseau Pierre Lombard BRGM - Juillet 2007 Mise à jour : :30
2 Contenu Considérations réseau Du départ arrêté au premier job Systèmes (protocoles) Communications réseaux Bootmodes, Bootimages, Schedules,... Mises à jours Pistes pour la résolution de problèmes
3 Considérations réseau
4 Quels réseaux... Utilisation de réseaux disjoints : BRGM : privé classe A = /8 CM : privé classe B = /16 Par défaut pas de routage vers le réseau BRGM CM utilise /16 Classe B privée non routée RFC1918 Utilisation temporaire (PXE): /24 Utilisation normale : /23 Utilisations "serveur" : /24
5 Serveur 2 adresses IP sur le serveur : Interface publique BRGM : Interface interne ComputeMode : Serveur DHCP CM écoute sur le réseau et ne répond qu'aux requêtes estampillées "PXE" Si l'adresse MAC n'est pas connue, la machine est ajoutée dans la base avec un profil par défaut Utilisation d'une option DHCP (bit "ComputeMode") pour ne pas interférer avec le trafic DHCP normal
6 DNS Utilisation d'un domaine DNS disjoint : BRGM : cltXXXX.brgm.fr CM : cltXXXX.computemode.local (voire : u_.computemode.local si la machine est détectée automatiquement) Géré par un serveur ISC Bind v9 avec la gestion des noms dynamiques (lié avec le DHCPD)
7 Du démarrage d'une machine au boot CM Diagramme : Communications réseau (boot ComputeMode)
8 Étape 0 : Conditions Initiales Machine éteinte et reliée au réseau Réglages BIOS : Support boot PXE Support Wake-on-LAN matériel 2 cas dépendants du BIOS : Si allumage normal et boot local => FIN Si allumage normal et boot PXE => étape 1 Si Wake-on-LAN reçu, boot PXE => étape 1
9 (Étape 0): Du Wake-on-LAN 1 / 2 Protocole WoL en général : 1 paquet UDP à destination d'une adresse MAC Pas d'authentification Dans CM : Cron 3min : /etc/cron.d/computemode => Appelle binaire défini dans config.php $GLOBALS['ETHERWAKEBINARY'] = '/usr/sbin/etherwake'; etherwake doit pouvoir être appelé sans authentification par Apache - sudo & /etc/sudoers: www-data ALL=(root) NOPASSWD: /usr/sbin/etherwake
10 (Étape 0): Du Wake-on-LAN 2 / 2 Envoi de paquets WoL ssi machine connue flag W-o-L activé dans CM schedule de la machine = calcul Envoi paquet WoL (même si machine allumée)
11 Étape 1 : Boot PXE 1 / 3 Juste après le POST Machine demande un serveur de boot DHCP DHCP client MAIS avec flag "PXE" Serveurs normaux ne répondent pas Serveurs PXE (dont CM) répondent en attribuant une adresse IP temporaire pour l'étape 1 Dans CM = sous-réseau /24 Configuration PXE dans /etc/dhcp3/dhcpd.conf (serveur DHCP de l'ISC)
12 Étape 1 : Boot PXE 2 / 3 DHCP attribue une IP et indique en plus : Adresse IP du serveur TFTPD Chemin du fichier de boot à récupérer Options (éventuelles) pour le fichier de boot à récupérer Dans CM : TFTPD = IP cmserver (dans le réseau /16) Boot = image pxelinux
13 Étape 1 : Boot PXE 3 / 3 BIOS de la machine récupère par TFTP le fichier indiqué (CM: pxelinux.0) Driver réseau "BIOS" = UNDI BIOS passe la main à l'image récupérée (~bootloader comme grub/lilo/) Note : Toutes les machines bootant en PXE démarrent sur une image pxelinux.0 => Étape 2 : PXELINUX
14 Étape 2 : pxelinux 1 / 3 Pas encore de Linux chargé Dispose encore d'une API de transfert réseau primitive (UNDI) PXELINUX cherche sa configuration par TFTP Essaie plusieurs noms dans PXEClient/pxelinux.cfg : 01-ab-cd-ef-ab-cd-ef (01 + MAC) => =>... => 1 (IP en hexa) default
15 Étape 2 : pxelinux 2 / 3 Côté serveur CM-TFTPD – en fonction de /var/lib/tftpboot/etc/remap Demande d'un fichier: 01- Dans etc/remap règle qui appelle un script : (/var/lib/tftpboot/bin/gen.sh) Script appelle : Résultat = f(MAC, time(), schedule, exceptions) Script reçoit les résultats et crée un fichier temporaire pour pxelinux (dans /var/lib/tftpboot/PXEclient/pxelinux.cfg/...)
16 Étape 2 : pxelinux 3 / 3 Côté serveur CM-TFTPD (suite) TFTPD renvoie le fichier à PXELINUX (qui attendait) Fichier temporaires nettoyés par /etc/cron.d/computemode En fonction du contenu du fichier : Boot local => FIN (décharge UNDI, passe la main au HD) Fichier de boot réseau CM avec informations en plus (nom de machine, à utiliser, nom des images kernel et initrd, etc)... => Étape 3
17 Étape 3 : Bientôt le vrai boot... Maintenant, la machine connaît : Adresse du serveur TFTP à utiliser pour la suite Chemin de l'image linux (vmlinuz) Chemin de l'initrd (= image 'initial ram disk') Paramètres de ligne de commande PXELINUX récupère l'image du kernel et de l'initrd (par TFTP) PXELINUX rend l'IP, décharge UNDI, et démarre le kernel reçu => étape 4
18 Étape 4 : Boot de l'OS Démarrage "standard" (kernel standard) Détection du matériel standard (RTC, RAM,...) Tout le matériel n'est pas encore connu (seul le matériel dont le driver est compilé statiquement peut être reconnu) Passage sur l'initrd : / est monté (à partir de l'image initrd) Passe la main à l'exécutable /linuxrc (script) Note : pas encore de réseau, pas encore d'IP
19 Étape 5 : /linuxrc 1 / 2 linuxrc : script sh (~500L) Met en place un ramdisk (tmpfs) Met en place le réseau : Détecte la carte réseau (ID PCI) [etherdiscover.sh ~150L sh] Charge le module adéquat Lance un client DHCP avec option "computemode" [dhclient-script sh] Monte le système en RO par NFS dans /root.new/diskless/ (option NFSROOT)
20 Étape 5 : /linuxrc 2 / 2 Met en place de la distribution dans /root.new/ Appel de /sbin/buildroot.sh Utilise : /cm/ /{orig/,patch/,rules} Règles: {copy,link}{orig,patch} / skip permet de conserver une version originale dans orig/ versions modifiées dans patch copy/link => copier dans le ramdisk / lier la copie NFS Appelle pivot_root (~chroot) : / = /root.new/ Appelle : /diskless/utils/distrosetup.sh Laisse la distribution diskless continuer
21 Bootmodes, Bootimages, Schedules, "Floppy over PXE"
22 Bootimage ? Bootimage = Image de boot Linux chemin des fichiers : /var/lib/....../tftpboot/PXEClient/ nom d'un fichier kernel ( vmlinuz ) nom d'un fichier initrd des options kernel en ligne de commande ro devfs=mount ramdisk=5000 acpi=ht
23 Bootmode ? 3 types de bootmodes : Local : unique RawPXE : image de boot PXE (peut chaîner sur une image de floppy avec memdisk, une image simple,...) ComputeMode : image de boot Linux + initrd + paramètres de configuration
24 Bootimage RawPXE Fichier image à placer dans : /var/lib/tftpboot/PXEClient/ Configuration à placer dans /var/lib/tftpboot/PXEClient/pxelinux.cfg/ Utiliser le nom du fichier de configuration Ex : fichier texte.../PXEClient/pxelinux.cfg/off label linux kernel memdisk append initrd=APMOFF.CBT
25 Bootimage ComputeMode Dépend d'une bootimage Paramètres obligatoires : MASTER, NFSROOT
26 Schedule Dépend de bootimages : Local, RawPXE ou ComputeMode
27 Mises à jours
28 MàJ : Debian Serveur Serveur : commandes Debian usuelles apt-get update apt-get dist-upgrade dpkg -l Certains packages en état "hold" car leur mise à jour doit être contrôlée Ex : voir script /usr/local/sbin/updateall.sh (*** Plus d'info. sur Debian ? ***)
29 MàJ : Images Debian clients Images clients : même commandes que pour le serveur après avoir fait un chroot Ex : voir script /usr/local/sbin/updateall.sh Attention : si des machines sont en train d'utiliser l'image NFS, il peut y avoir des plantages ! Ex : si mise à jour de la libc Solution : travailler sur une copie puis renommer
30 Mise à jour : initrd Extraire le contenu d'un initrd existant (Debian = cramfs – mount -t cramfs -o loop...) Compiler le(s) driver(s) pour le kernel Copier les drivers dans les fichiers extraits Mettre à jour les associations PCI driver (depmod) Regénérer initrd : mkcramfs imgdir dstinitrd (*** TP ? ***)
31 Mise à jour : clés SSH Clés pub/priv SSH pour login sans mot de passe : Serveur Images clients root, OAR Ex : cf script shell : reset_password_and_keys.sh (*** Manipulations avec OpenSSH, génération de clés pub./priv. ? ***)
32 Pistes pour la résolution de pannes
33 CM : Monitoring 1 / 2 Charge CPU : top, MRTG, outil dédié (page "cpuload" web + scripts) Charge réseau : MRTG (agrégée), bwm (immédiate), gkrellm (immédiate) Charge E/S : iostat (immédiate) Charge NFS : nfsstat, /proc/net/rpc/nfsd Possibilité d'envoi de mails (à configurer avec un cron par exemple)
34 CM : Monitoring 2 / 2 Outil de statistiques de CM (mieux quand agents activés, mais permet de visualiser requêtes PXE)
35 CM : Quelques points à vérifier... Trouver le niveau du problème pas toujours évident Fichiers de logs : /var/log/... Niveau "haut" : mrtg, cpuload (php), ps, top, sac, nc, ssh, ping, arping, nmap, tcpdump,... Debug TFTP avec client tftp, logs TFTP Vérifier les bases de données (accès) Vérifier les Sun RPC/portmap (rpcinfo -p) Vérifier la liste de services (netstat -ltnp)
36 Quelques problèmes CM... 1 / 5 L'interface web refuse le login. Vérifier que Postgres est bien démarré. Sous Debian : /etc/init.d/postgres restart Essayer d'utiliser : psql Mot de passe erroné. Se logger en tant qu'utilisateur Unix 'postgres', remettre à zéro enregistrement utilisateur La durée de session est trop courte. Configurer durée de la session dans config. PHP
37 Quelques problèmes CM... 2 / 5 Une machine ne semble pas booter en PXE. Éliminer problèmes de routage (autorisation classe de calcul), de BIOS, de DHCP, d'autres serveur PXE sur le réseau, d'adresse MAC erronée, de schedule 'local', d'exceptions,... Activer logs sur CMTFTPD – peut être un PATH non standard est demandé (=> ajouter des liens symboliques dans /var/lib/tftpboot/)
38 Quelques problèmes CM... 3 / 5 Des machines refusent de se connecter au serveur NFS Parfois ça arrive si la configuration est changée... Arrêter le NFSD : en root : /etc/init.d/nfs-kernel-server stop mettre 0 thread NFS : rpc.nfsd 0 rmmod nfsd nettoyer /var/lib/nfs/{etab,rmtab} redémarrer : /etc/init.d/nfs-kernel-server start
39 Quelques problèmes CM... 4 / 5 La machine m'affiche un compte à rebours à 30 secondes puis reboote. Il y a un souci dans l'initrd (driver manquant, NFS non joignable,...) Si rien ne le résout, on peut temporairement demander un mode de DEBUG en ajoutant cette option au bootmode Un shell minimal est alors généré après le niveau demandé (entre 1 et 10 – notation 'debug' dans linuxrc)
40 Quelques problèmes CM... 5 / 5 Adapter une nouvelle distribution ? Peutêtre délicat si grosse modifications (devfs, udev, 2.4, 2.6, changement de noms de drivers) Partir d'une installation minimale dans /cm/madistrib/orig/ Récupérer les fichiers d'une distribution existante Démarrer, corriger, itérer...
41 CM : Services pour CM DNS - Bind 9 SSH : OpenSSH DHCP : ISC DHCPD (PXE proxy) Web : Apache 1.3.x + PHP4/5 + PEAR + PG 7.x Portmap : NIS & NFS Syslog NFS
42 OAR / CIGRI Base MySQL : en cas d'arrêt de MySQL, il peut falloir relancer OAR, CIGRI Faire attention en cas de changements de configuration car elle peut être reprise à plusieurs endroits OAR : essayer un : oarsub -I
43 Conclusion À part le serveur CM-TFTPD (à priori pas besoin de nouvelle règle de remap) Uniquement des logiciels standards Une très grosse partie de la logique est dans l'interface web (/var/www/) Plusieurs comportements sont configurables dans : /var/www/cm/config.php (quarantaine, ajout automatique)
44 Questions ?
45 Crédits / Contacts Les informations sur OAR et CIGRI viennent de présentations réalisées par : Bruno Bzeznik (LIG) – mainteneur actuel de OAR & CIGRI Nicolas Capit (LIG) – mainteneur précédent Plus d'informations :