Debian Sarge sur Soekris net4801
Matériel
- 1 Soekris net4801
- 1 carte CompactFlash 512 MB
- 1 lecteur de cartes CompactFlash USB2
- 1 ordinateur (en l'occurence, iBook G4)
- 1 terminal (j'ai utilisé un VT510, mais un émulateur genre minicom convient aussi)
- 1 câble série null-modem pour relier la Soekris au terminal ou au PC sur lequel est installé l'émulateur de terminal
Logiciels
- Un système UNIX sur l'ordinateur (j'ai utilisé Debian Sid PPC mise à jour le 27/2/2006)
- Qemu
- Un CD d'installation de Sarge (netinstall i386); il n'y a pas besoin de le graver: l'image ISO suffit
Notes sur le hardware
Le lecteur CompactFlash de la Soekris émule un disque dur IDE; il faud donc installer le système comme si c'était le cas. La seule interface locale (hors réseau) de la Soekris est le port série. Il est configuré en 19200bits/s, 8 bit de données, pas de parité, 1 bit d'arrêt et pas de contrôle de flux.
Procédure
La technique est simple: installer le système classiquement, puis placer la CompactFlash dans la Soekris.
Insérer le CD d'installation de Debian dans le lecteur de l'ordinateur et connecter le lecteur de carte, et y insérer la carte. La carte est alors reconnue comme un lecteur de disque SCSI (/dev/sda dans mon cas). Veiller à ce que l'utilisateur qui va lancer Qemu ait les droits d'écriture sur la carte. Dans le cas de Debian avec udev, elle est rattachée au groupe floppy, dont je suis membre et donc je n'ai rien à faire. Jouer du chmod ou du chown si nécessaire.
Démarrer ensuite Qemu comme suit:
qemu -hda /dev/sda -cdrom /dev/cdrom -boot d -m 64 -user-net
Qemu utilisera donc la carte CompactFlash comme disque IDE et le CD comme CD (on peut remplacer /dev/cdrom par une image ISO. La machine virtuelle démarre sur le CDROM (-boot d), a 64 MB de RAM (suffisant pour l'installation, laisse de la place pour le système hôte), et pourra accéder au réseau (et à Internet puisque mon réseau y est connecté).
Procéder à l'installation classique en ne faisant qu'une seule partition sur toute la carte. Pas besoin de swap (système embarqué et mémoire largement suffisante). Pour le filesystem, le bon vieux ext2 économise la taille d'un journal. Lors du redémarrage, arrêter qemu et le redémarrer sur la carte CompactFlash:
qemu -hda /dev/sda -boot c -m 64 -user-net
Ne sélectionner aucun package supplémentaire. Après coup, je me dis qu'il aurait mieux valu ne pas utiliser l'option -user-net car l'installeur installe quand-même plusieurs packages en plus de ceux installés depuis le CD.
Lorsque le système est installé, on obtient une occupation disque de 316 MB sur les 456 de la carte. On peut alors passer à la préparation du système pour la Soekris.
Ces modifications reposent sur une particularité de la Soekris: elle n'a ni clavier ni moniteur; la seule interface physique est le port série. Il va donc falloir, par commodité, y faire les affichages de GRUB, de la console et permettre d'y ouvrir une session. Configuration de GRUB
La configuration de GRUB se trouve dans /boot/grub/menu.lst. Attention, Debian manipule ce fichier par la commande update-grub, qui se charge de créer le fichier à partir de commentaires spéciaux qui y sont placés (après la ligne "### BEGIN AUTOMAGIC KERNELS LIST").
Comme indiqué dans le fichier, il faut mettre au début la configuration globale de GRUB. Il faut d'abord définir et configurer le port série, puis indiquer à GRUB d'utiliser ce port pour ses affichages:
serial --unit=0 --speed=19200 --word=8 --stop=1 --parity=0 terminal serial
Il faut ensuite passer au kernel les options nécessaires pour afficher sa console sur le port série, et ainsi pouvoir suivre son démarrage. Dans la portion AUTOMAGIC KERNELS LIST , repérer la ligne # kopt=... (c'est la première option de cette portion), et y ajouter console=ttyS0,19200n8 , ce qui donne:
# kopt=root=/dev/hda1 ro console=ttyS0,19200n8
Ensuite, lancer la commande update-grub. On voit alors, en rééditant le fichier, que dans les définitions des kernels (juste après ## ## End Default Options ##), que la ligne kernel a été mise à jour en conséquence:
kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro console=ttyS0,19200n8
Configuration du login
Maintenant, il faut pouvoir ouvrir un shell sur le port série. Cela se fait en éditant /etc/inittab. On y trouve tout en bas deux exemples (lignes commençant par T0 et T1, dont il suffit de s'inspirer:
T0:23:respawn:/sbin/getty -L ttyS0 19200 vt100
Ensuite, il suffirait d'envoyer un signal à init pour prendre en compte les changements, mais comme on doit arrêter la machine virtuelle pour placer la carte Flash dans la Soekris, on peut s'en passer. J'arrête donc la machine de la manière traditionnelle, place la carte Flash dans la Soekris, configure mon terminal conformément au manuel de la Soekris, le connecte sur le port série, raccorde la première carte réseau de la Soekris (celle juste à côté du port série) à mon réseau (avec serveur DHCP et accès à Internet (en effet, l'option -user-net de Qemu a fourni ce serveur lors de l'installation). Je la démarre et ... ça marche!
Il y a cependant quelques petits problèmes avec GRUB: il ne vide pas complètement l'écran du terminal, est très lent à s'afficher et ne réagit pas aux flèches pour changer de kernel.
A ce point, je peux ouvrir une session sur le port série, et faire connaissance avec la bête. Je récupère l'adresse IP avec ifconfig, puis je me connecte depuis mon ordinateur via SSH pour copier-coller la suite:
julien@grappa:~$ ssh root@192.168.128.2 The authenticity of host '192.168.128.2 (192.168.128.2)' can't be established. RSA key fingerprint is 07:f4:fe:28:9e:31:aa:33:47:92:ba:88:c5:d7:1e:e5. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.128.2' (RSA) to the list of known hosts. Password: Last login: Thu Mar 27 00:20:53 1980 soekris:~# cat /proc/cpuinfo processor : 0 vendor_id : Geode by NSC cpu family : 5 model : 9 model name : Unknown stepping : 1 cpu MHz : 266.656 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu tsc msr cx8 cmov mmx cxmmx bogomips : 522.24 soekris:~# free total used free shared buffers cached Mem: 127024 25908 101116 0 1544 14232 -/+ buffers/cache: 10132 116892 Swap: 0 0 0 soekris:~# lspci 0000:00:00.0 Host bridge: Cyrix Corporation PCI Master 0000:00:06.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller 0000:00:07.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller 0000:00:08.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller 0000:00:12.0 ISA bridge: National Semiconductor Corporation: Unknown device 0510 0000:00:12.1 Bridge: National Semiconductor Corporation: Unknown device 0511 0000:00:12.2 IDE interface: National Semiconductor Corporation SCx200 IDE (rev 01) 0000:00:12.5 Bridge: National Semiconductor Corporation: Unknown device 0515 0000:00:13.0 USB Controller: Compaq Computer Corporation ZFMicro Chipset USB (rev 08) soekris:~# lsmod Module Size Used by ipv6 229892 12 af_packet 20872 2 ohci_hcd 19460 0 usbcore 104164 3 ohci_hcd natsemi 25824 0 capability 4872 0 commoncap 7168 1 capability psmouse 17800 0 ide_cd 38176 0 cdrom 35740 1 ide_cd genrtc 9332 0 ide_generic 1664 0 sc1200 8456 1 ide_disk 16768 2 ide_core 125028 4 ide_cd,ide_generic,sc1200,ide_disk unix 26036 12 font 8576 0 vesafb 6688 0 cfbcopyarea 3840 1 vesafb cfbimgblt 3200 1 vesafb cfbfillrect 3712 1 vesafb soekris:~# df Sys. de fich. 1K-blocs Occupé Disponible Capacité Monté sur /dev/hda1 466662 322686 119077 74% / tmpfs 63512 0 63512 0% /dev/shm soekris:~#
Et voilà. Les cartes Ethernet utilisent le module natsemi, la carte CompactFlash est pilotée par les drivers ide et sc1200, et le port USB est un port 1.1 OHCI (module ohci_hcd). De cette configuration, il reste à ajouter ce qui manque et retirer ce qui est en trop. On peut aussi vérifier que l'heure est à jour.
Comme je prévois de tester d'autres choses, je réinsère la CompactFlash dans mon ordinateur et la sauvegarde d'un dd if=/dev/sda of=soekris-debian.img. C'est l'histoire d'une minute à 8.3 MB/s.