novembre 2009 Archives
04-11-2009 23:16:22
Posté par Philippe Latu | permalien | dans : Networking Academy, Debian, Cisco | | | Read it in english with Google
Pourquoi tant de tftp://255.255.255.255 ?
Les points d'accès Wifi 1232ag livrés avec le bundle CCNP sont configurés en mode Lightweight Access Point. Or, les étudiants du M2
STRI ont besoin d'un point d'accès autonome. En voulant «basculer»
le système d'exploitation du point d'accès en mode autonome j'ai
perdu une bonne demi-heure avant de m'apercevoir que la requête
TFTP émise par le point d'accès utilisait l'adresse de diffusion
255.255.255.255 et que mon serveur TFTP n'était pas en écoute sur
cette adresse.
La documentation officielle sur la conversion à rebours du mode allégé en mode autonome est détaillée en dix étapes qui consistent à réinitialiser le point d'accès alors qu'il est directement relié par un câble droit avec une machine disposant d'un service TFTP.
On repère le mode de configuration à la console via la version de l'IOS installé.
AP0023.5e13.4ea2#sh ver Cisco IOS Software, C1200 Software (C1200-RCVK9W8-M), Version 12.3(11)JX1, RELEASE SOFTWARE (fc1) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2006 by Cisco Systems, Inc. Compiled Mon 17-Jul-06 11:41 by alnguyen ROM: Bootstrap program is C1200 boot loader BOOTLDR: C1200 Boot Loader (C1200-BOOT-M) Version 12.3(2)JA4, RELEASE SOFTWARE (fc1) AP0023.5e13.4ea2 uptime is 23 minutes System returned to ROM by power-on System image file is "flash:/c1200-rcvk9w8-mx/c1200-rcvk9w8-mx" cisco AIR-LAP1232AG-E-K9 (PowerPC405GP) processor (revision A0) with 15038K/1336K bytes of memory. Processor board ID FCZ1251Z0DR PowerPC405GP CPU at 196Mhz, revision number 0x0145 Last reset from power-on LWAPP image version 3.0.51.0 1 FastEthernet interface 32K bytes of flash-simulated non-volatile configuration memory. Base ethernet MAC Address: 00:23:5E:13:4E:A2 Part Number : 73-8704-14 PCA Assembly Number : 800-23211-14 PCA Revision Number : A0 PCB Serial Number : FOC12482M20 Top Assembly Part Number : 800-29149-01 Top Assembly Serial Number : FCZ1251Z0DR Top Revision Number : A0 Product/Model Number : AIR-LAP1232AG-E-K9 Configuration register is 0xF
Suivre la procédure donnée dans la documentation ne pose pas de
difficulté particulière. Ce qui est déroutant, c'est le message
d'erreur obtenu : Premature end of tar
file. Cette erreur n'est pas très explicite au regard du
problème réel. Le transfert se termine d'autant plus prématurément
qu'il n'a jamais débuté !
Xmodem file system is available.
flashfs[0]: 3 files, 2 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 1861632
flashfs[0]: Bytes available: 5879808
flashfs[0]: flashfs fsck took 11 seconds.
Reading cookie from flash parameter block...done.
Base ethernet MAC Address: 00:23:5e:13:4e:a2
Initializing ethernet port 0...
Reset ethernet port 0...
Reset done!
ethernet link up, 100 mbps, full-duplex
Ethernet port 0 initialized: link is up
button is pressed, wait for button to be released...
button pressed for 27 seconds
process_config_recovery: set IP address and config to default 10.0.0.1
process_config_recovery: image recovery
image_recovery: Download default IOS tar image tftp://255.255.255.255/c1200-k9w7-tar.default
examining image...
extracting info (274 bytes)
Premature end of tar file
ERROR: Image is not a valid IOS image archive.Loading "flash:/c1200-rcvk9w8-mx/c1200-rcvk9w8-mx"...##
À quelques jours d'intervalle, je venais juste de publier une
révision de la section Échanges avec le protocole
TFTP de l'article Gestion des
équipements réseau avec GNU/Linux. Cette révision était
motivée par la prise en charge de la configuration du paquet
tftpd-hpa via un jeu de
(menus|écrans) debconf.
$ dpkg -l tftpd-hpa | grep ^ii ii tftpd-hpa 5.0-7 HPA's tftp server
Parmi ces menus, on trouve celui relatif à l'adresse sur
laquelle le service est en écoute. Cette adresse est définie à la
valeur 0.0.0.0:69 et ne correspond
pas à l'adresse de diffusion 255.255.255.255.
Le résumé de la configuration du paquet est donné par le fichier
/etc/default/tftpd-hpa.
$ cat /etc/default/tftpd-hpa # /etc/default/tftpd-hpa ## The configuration of this file is managed by debconf as long ## as a line beginning with the '#DEBCONF#' token is included. ## ## Do not edit this file manually, use: ## dpkg-reconfigure tftpd-hpa #DEBCONF# TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure --create"
Dans le contexte particulier de la mise à jour système du point
d'accès, il est nécessaire de redéfinir l'adresse d'écoute du
service en 255.255.255.255.
Après exécution de la commande ,
on obtient :# dpkg-reconfigure tftpd-hpa
$ cat /etc/default/tftpd-hpa | grep ADDRESS TFTP_ADDRESS="255.255.255.255"
Au prix de cette reconfiguration, le service TFTP pourra traiter la requête du point d'accès.
flashfs[0]: 3 files, 2 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 1861632
flashfs[0]: Bytes available: 5879808
flashfs[0]: flashfs fsck took 11 seconds.
Reading cookie from flash parameter block...done.
Base ethernet MAC Address: 00:23:5e:13:4e:a2
Initializing ethernet port 0...
Reset ethernet port 0...
Reset done!
ethernet link up, 100 mbps, full-duplex
Ethernet port 0 initialized: link is up
button is pressed, wait for button to be released...
button pressed for 23 seconds
process_config_recovery: set IP address and config to default 10.0.0.1
process_config_recovery: image recovery
image_recovery: Download default IOS tar image tftp://255.255.255.255/c1200-k9w7-tar.default
examining image...
extracting info (274 bytes)
Image info:
Version Suffix: k9w7-.123-8.JED
Image Name: c1200-k9w7-mx.123-8.JED
Version Directory: c1200-k9w7-mx.123-8.JED
Ios Image Size: 4342272
Total Image Size: 5079552
Image Feature: WIRELESS LAN
Image Family: C1200
Wireless Switch Management Version: 1.0
Extracting files...
extracting info (274 bytes)
c1200-k9w7-mx.123-8.JED/ (directory) 0 (bytes)
c1200-k9w7-mx.123-8.JED/html/ (directory) 0 (bytes)
c1200-k9w7-mx.123-8.JED/html/level/ (directory) 0 (bytes)
c1200-k9w7-mx.123-8.JED/html/level/1/ (direc
<snipped/>
Deleting current version...
Deleting flash:/c1200-rcvk9w8-mx...done.
New software image installed in flash:/c1200-k9w7-mx.123-8.JED
Configuring system to use new image...done.
Requested system reload in progress...download took about 289 seconds
Loading "flash:/c1200-k9w7-mx.123-8.JED/c1200-k9w7-mx.123-8.JED"...###
Voilà des années que l'on est habitué à voir ces requêtes TFTP à destination de l'adresse All-Ones et que l'on cherche à s'en débarrasser à toute force. Le jour où on est contraint de l'utiliser, on ne réagit même pas au fait que le service n'est pas configuré correctement. Bref, je devrais certainement compléter la documentation avec cet exemple.
Ce billet est disponible en version imprimable au format PDF : tftpd-hpa-allones.pdf.
$Id: tftpd-hpa-allones.xml 1432 2009-11-04 22:05:26Z latu $
02-11-2009 21:10:43
Nouveau shell GRUB sur clé USB
Dans la série sur les turpitudes de la gestion d'amorçage d'un
système d'exploitation, voici un billet sur la trousse à outils de
secours ultime : l'installation de grub(2) sur clé
USB et l'utilisation de son
shell spécifique. Après avoir vanté les
mérites du vieux gestionnaire d'amorce LILO, voici le temps de la découverte des
avantages du gestionnaire de nouvelle génération :
GRUB.
À l'heure de la rédaction de ce billet, GRUB est en cours de transition entre une
version «historique» fournie avec le paquet grub-legacy et une version plus actuelle
distribuée via plusieurs paquets : grub-common et grub-pc.
Attention ! Il n'est pas question ici de promouvoir cette
nouvelle version. La transition entre les deux versions n'est pas
achevée et j'ai trois ou quatre machines sur lesquelles la
migration n'a pas fonctionné comme prévu. Dans ce genre de cas, la
version de GRUB correspondant au
paquet grub-legacy ayant largement
fait ses preuves, le passage à un nouveau gestionnaire d'amorce
n'est pas justifié.
En revanche, j'ai découvert presque par hasard que le shell de la nouvelle version possède des fonctions dites auto completion particulièrement séduisantes lorsque la gestion d'amorçage est dans un état calamiteux. Ces mêmes fonctions utilisées via un dispositif de stockage externe tel qu'une clé USB deviennent indispensables pour amorcer un système d'exploitation sur une machine dont le partitionnement et les versions de noyaux disponibles sont inconnus.
Cette section relève du plagiat éhonté puisque ce type d'installation a déjà été maintes fois présenté sur la toile. Voici tout de même la liste des instructions d'installation.
Dans cet exemple, le disque dur du transportable M6300 est
référencé /dev/sda et la clé
USB /dev/sdb. Ses caractéristiques se retrouvent dans
les messages système après connexion.
usb 1-4: new high speed USB device using ehci_hcd and address 3 usb 1-4: New USB device found, idVendor=090c, idProduct=1000 usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-4: Product: USB Flash Disk usb 1-4: Manufacturer: General usb 1-4: SerialNumber: AA08061700013029 usb 1-4: configuration #1 chosen from 1 choice Initializing USB Mass Storage driver... scsi5 : SCSI emulation for USB Mass Storage devices usb-storage: device found at 3 usb-storage: waiting for device to settle before scanning usbcore: registered new interface driver usb-storage USB Mass Storage support registered. usb-storage: device scan complete scsi 5:0:0:0: Direct-Access General USB Flash Disk 1100 PQ: 0 ANSI: 0 CCS sd 5:0:0:0: Attached scsi generic sg2 type 0 sd 5:0:0:0: [sdb] 3917824 512-byte logical blocks: (2.00 GB/1.86 GiB) sd 5:0:0:0: [sdb] Write Protect is off sd 5:0:0:0: [sdb] Mode Sense: 43 00 00 00 sd 5:0:0:0: [sdb] Assuming drive cache: write through sd 5:0:0:0: [sdb] Assuming drive cache: write through sdb: sdb1 sd 5:0:0:0: [sdb] Assuming drive cache: write through sd 5:0:0:0: [sdb] Attached SCSI removable disk
-
La première opération consiste à créer une partition unique bootable sur la clé USB et à formater cette partition avec un système de fichier FAT32. De cette façon, le BIOS de la machine reconnaîtra un périphérique de stockage utilisable pour amorcer un système d'exploitation.
Pour cette opération, on utilise l'outil de partitionnement parted qui permet de faire tous les traitements requis.
# parted /dev/sdb GNU Parted 1.8.8.git-dirty Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) rm 1 (parted) print Model: General USB Flash Disk (scsi) Disk /dev/sdb: 2006MB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags (parted) mkpart primary 1MB 2006 (parted) mkfs 1 fat32 Warning: The existing file system will be destroyed and all data on the partition will be lost. Do you want to continue? parted: invalid token: 1 Yes/No? Yes Partition number? 1 File system type? [ext2]? fat32 (parted) toggle 1 boot (parted) quit Information: You may need to update /etc/fstab.
On note que la capacité exacte de la clé USB donnée par la commande print est utilisée pour créer la partition avec la commande mkpart.
-
La seconde opération consiste à installer GRUB sur le système de fichiers créé précédemment. On utilise la version courante des paquets installé sur le transportable.
# dpkg -l grub* | grep ^ii ii grub 0.97-59 GRand Unified Bootloader (dummy package) ii grub-common 1.97-1 GRand Unified Bootloader, version 2 (common files) ii grub-pc 1.97-1 GRand Unified Bootloader, version 2 (PC/BIOS version)
Après avoir créé le répertoire d'installation de GRUB, on copie l'ensemble des modules disponibles de façon à pouvoir traiter le maximum de configurations différentes possibles.
# mount /dev/sdb1 /mnt # mkdir -p /mnt/boot/grub # cp /usr/lib/grub/i386-pc/* /mnt/boot/grub/
On créé une carte minimale des périphériques de stockage disponibles avant de lancer l'installation du gestionnaire d'amorce.
# echo '(hd0) /dev/sdb' > /mnt/boot/grub/device.map # grub-install --root-directory=/mnt /dev/sdb Installation finished. No error reported. This is the contents of the device map /mnt/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (hd0) /dev/sdb
Ces deux étapes accomplies, la phase d'installation est achevée et on peut passer à l'exploitation du gestionnaire d'amorçage GRUB à partir d'une clé USB.
Dans cette section, on utilise la séquence d'initialisation du transportable M6300 pour illustrer les fonctions du shell GRUB à l'aide de clichés de qualité remarquable pris avec un téléphone mobile.
On commence par la sélection du périphérique de démarrage. Sur le transportable, la touche F12 permet de choisir la clé USB. Sur un poste fixe, il faut utiliser les menus du BIOS pour désigner le premier périphérique de stockage utilisé pour lancer un système d'exploitation.
Une fois que l'invite de commande du shell GRUB est disponible, la première opération à réaliser consiste à choisir la racine du gestionnaire d'amorçage à l'aide de la commande root.
-
La commande root, utilisée sans paramètre, renvoie la racine en cours d'utilisation. Dans la vue ci-dessous, on reconnaît l'identification du système de fichier de la clé USB que l'on formaté en FAT32.
(hd0,1): Filesystem is fat
-
La même commande utilisée avec un autre périphérique de stockage en paramètre sert à désigner une nouvelle racine à partir de laquelle on va pouvoir choisir le noyau à utiliser. Ici, on désigne le disque dur du transportable et sa première partition. Le message renvoyé indique que le système de fichiers a bien été reconnu et que l'on peut le parcourir à partir du shell. C'est justement la fonction qui nous intéresse !
Pour choisir le noyau Linux à utiliser pour le lancement du
système d'exploitation, on dispose de deux commandes du shell : linux et initrd. La commande linux sert à désigner le fichier
contenant la partie monolithique du noyau. Généralement, ce fichier
est baptisé vmlinuz-*. La commande
initrd sert elle
aussi à désigner un fichier. Il s'agit cette fois ci de
l'initial ramdisk qui contient une
pseudo arborescence racine du système d'exploitation dans laquelle
on trouve un shell minimal (BusyBox), un ensemble d'outils et les modules du
noyau.
Pour chaque utilisation des commandes linux et initrd, le shell GRUB renvoie un message de confirmation. Dans le cliché ci-dessous, on utilisé la touche de tabulation pour obtenir la liste des fichiers disponibles.
Une fois les deux fichiers du noyau choisis, il ne reste plus qu'à utiliser la commande boot pour lancer le système d'exploitation normalement ou presque ... Lors de l'utilisation de la commande linux j'ai malencontreusement oublié de préciser la véritable racine du système d'exploitation. En fait, cet oubli était volontaire. Il permet de montrer comment identifier les volumes logiques disponibles à partir du shell BusyBox fourni via initrd.
Comme précisé plus haut, l'arborescence contenue dans le fichier
initrd contient un certain nombre
d'outils, dont ceux nécessaires à la gestion de volumes logiques.
Dans le scénario de découverte d'une machine inconnue, on peut
activer tous les volumes disponibles à l'aide de la commande
vgchange -a y. On
identifie ainsi le volume correspondant à la fameuse racine du
système d'exploitation.
Une fois l'identification faite, il est possible de relancer le
système à l'aide de la commande reboot et de reprendre les étapes
précédentes en précisant le paramètre root=/dev/mapper/Amethyste-root à
la commande linux. Et
cette fois-ci, le système d'exploitation pourra se lancer
normalement.
Avec la version de GRUB utilisée, le shell est essentiellement modulaire. Qu'il s'agisse de ses propres fonctionnalités comme la commande ls ou du support des systèmes de fichiers nécessaires au lancement d'un système d'exploitation, tout est disponible sous forme de modules.
Il n'est pas question ici de reprendre la documentation officielle sur les commandes que l'on trouve à l'adresse http://grub.enbug.org/. Simplement, voici quelques exemples de commandes et de syntaxe utiles pour la rédaction de ce billet.
- lsmod, insmod
-
Ces deux commandes permettent de lister et charger des modules en mémoire. On peut citer l'exemple du module
raidqui permet de reconnaître les système de fichiers sur des partitions RAID logicielles. - root
-
Cette commande est utilisable soit pour consulter la racine du système d'amorçage reconnu soit pour désigner une nouvelle racine. Cette racine est fonction de carte établie lors de l'installation de GRUB sur le système. Cette carte est stockée dans le fichier
/boot/grub/device.map. Quantité d'erreurs rapportées sur les forums de la toile sont relatives à un changement de référence sur la liste des périphériques de stockage contenue dans ce fichier. Il est essentiel que cette carte et le paramétrage des menus soient cohérents.Dans le cas du transportable, on dispose des informations suivantes :
$ cat /boot/grub/device.map (hd0) /dev/sda $ grep -3 hd0 /boot/grub/grub.cfg ### BEGIN /etc/grub.d/05_debian_theme ### insmod ext2 set root=(hd0,1) search --no-floppy --fs-uuid --set 171f0aff-232a-4dc4-a4bc-b9f2ff2f6757 insmod png if background_image /grub/moreblue-orbit-grub.png ; then -- ### BEGIN /etc/grub.d/10_linux ### menuentry "Debian GNU/Linux, with Linux 2.6.31.5" { insmod ext2 set root=(hd0,1) search --no-floppy --fs-uuid --set 171f0aff-232a-4dc4-a4bc-b9f2ff2f6757 linux /vmlinuz-2.6.31.5 root=/dev/mapper/Amethyste-root ro initrd /initrd.img-2.6.31.5 }
- linux
-
Cette commande désigne le fichier image de la partie monolithique du noyau ainsi que ses paramètres d'initialisation tels que la racine du système d'exploitation. Les paramètres de lancement du noyau Linux sont documentés dans le fichier
kernel-parameters.txtfourni avec ses sources. Comme dans le cas de la commande root de GRUB, le fichier/boot/grub/grub.cfgdonne un bon exemple avec la syntaxe des deux paramètres importants :linux /vmlinuz-2.6.31.5 root=/dev/mapper/Amethyste-root ro
-
Le paramètre
rootindique la racine du système d'exploitation à partir de laquelle le processusinitest lancé. -
Le paramètre
roprécise que cette racine doit être montée en lecture seule (read only) durant le lancement du système.
Si aucun paramètre n'est fourni, l'initialisation du système s'arrête au niveau du shell BusyBox.
-
- initrd
-
Cette commande simple désigne le fichier image de l'arborescence de chargement des modules du noyau Linux. En plus de la mise à disposition des modules, cette arborescence fournit un ensemble minimum d'outils. Ces outils peuvent être utilisés pour identifier les points de montage des différents périphériques de stockage.
initrd /initrd.img-2.6.31.5
Si vous êtes parvenu jusqu'à la lecture de ces lignes, vous serez peut-être moins intimidé par ce terrible monstre qu'est le gestionnaire d'amorce ! Il faut dire que dans le contexte d'exploitation professionnelle, ces manipulations se font dans des conditions de stress très importantes. Si un système ne se lance plus normalement, c'est que l'on est face à un problème sérieux.
Disposer d'un gestionnaire d'amorce sur périphérique externe comme une clé USB peut être déterminant dans ces situations critiques.
Enfin, c'est l'occasion de recycler une superbe clé USB Canal+ qui aurait été totalement inutile autrement ! Vous l'aurez constaté, je n'ai aucun goût pour les goodies.
Ce document est disponible en version imprimable au format PDF : grub-usb.pdf.
$Id: grub-usb.xml 1430 2009-11-02 22:39:06Z latu $



