Debian et EM-7220

L'arrivée du noyau 2.6.25 dans les dépôts Debian est une bonne occasion pour revenir sur l'installation de cette distribution sur une machine assez étrange : une carte mère em7220. Cette carte mère est utilisée dans quelques produits de stockages vendus pour les petites entreprises, notamment le Acer Easy Store, le même chez son fabricant d'origine, Lanner NS-4410. On peut installer (c'est pas vraiment fait pour, mais bon) une debian dessus. Petit guide de comment j'ai fini par y arriver.

D'abord quelques informations sur cette chose. L'intérieur est constitué d'une carte réseau Gigabit Ethernet, quatre disques durs (de tailles variables selon les modèles, moi ce sont des 250Go), un processeur 600Mhz (dont les performances sont bien plus faibles qu'un processeur 600Mhz classique. Enfin ça dépend des tâches, mais l'architecture est éloigné de celle d'un x86) et enfin un petit port série. On peut le trouver sur le bord de la carte mère, en démontant le boîtier pour l'atteindre. De là une prise port série puis un câble série => USB (oui je n'ai pas de port série sur mes ordinateurs portables) et c'est gagné.

Pour discuter en port série avec la machine, il faut configurer comme ceci : vitesse = 115200, pas de bit de parité, pas de contrôle de flux, 8 bits et 1 bit de stop. De là on peut un peu tout faire au démarrage avec RedBoot pour changer de noyaux, changer les paramètres de démarrage, pleins de choses très pratiques. C'est relativement indispensable pour contrôler ce qu'il se passe au démarrage et corriger les problèmes (sans compter le changement de scripts de lancement, indispensable à la première installation). Sans vous pouvez installer une Debian, mais uniquement en environnement Chrooté (ce qui est déjà pas mal, mais bon...).

Pour reprendre le sujet, pour installer la chose, on peut avoir accès au système installé par défaut par Lanner. Il suffit d'éteindre la machine, retirer les disques durs, relancer la machine. Là, comme par hasard, le port 22 est ouvert et hop une connexion ssh est possible. ssh root@ipdunas (mot de passe : storage par défaut s'il n'a pas été changé auparavant dans la configuration par page web. L'adresse IP est la dernière adresse configuré par vous sur votre nas). On arrive alors sur un système linux de base, avec un noyau 2.6.10 et quelques services installés. On se rend rapidement compte que tout est un peu fait à coup de bricolage, des scripts que je qualifierai de "boulot de stagiaire" permettent l'administration par l'interface web. Vu le suivi du système je n'ose même pas imaginer l'état de la sécurité de tout ça. Bien entendu, n'espérez pas de suivi de version de la part d'Acer ou de Lanner, elles sont quasiment inexistantes.

Cependant qui dit système linux, dit désormais possibilité de faire facilement des opérations. Le système de base est chargé en mémoire, il n'utilise pas du tout les disques durs (normal vu qu'il démarre même s'ils sont enlevés :) ). C'est donc le bon moment pour :

  1. partitionner les disques
  2. Installer une debian
  3. changer de noyaux.

Au niveau du partitionnement des disques j'ai commencé par faire une partition de 3Go sur le premier disque. De là, j'ai installé avec debootstrap un système debian de base. Quelques nuances cependant, l'extraction de l'archive ar -x ne fonctionne pas, car le système installé ne contient pas cet exécutable. Il faut donc soit extraire l'archive depuis une autre machine, soit uploader le binaire. Les deux se font très bien, il faut juste le savoir (pour le binaire il faut bien entendu télécharger le paquet source du dépôt ARM de debian, et non pas votre binaire installé sur votre machine actuelle). Comme architecture il vaut mieux utiliser "armel", qui est désormais dans les dépôts debian. Bien que pas encore officiellement supportée, elle améliore les performances de façon relativement appréciables. Son intégration est en cours, on peut espérer qu'elle soit pleinement intégrée dans la prochaine version stable de Debian.

Une fois cela fait, un petit chroot et on se sent plus à l'aise. Je n'ai pas osé commencer par du raid et/ou du lvm. J'ai donc installé tout sur le premier disque, en gardant au chaud une partition d'exactement la même taille sur tout les autres disques. Ça permettra de faire du raid1 tranquillement. Pas besoin de partition spéciale pour le /boot, de toute façon le redboot installé est totalement incapable de lire sur le disque dur. Comme du raid1 sur quatre disques c'est un poil bourrin, j'en ai conservé une pour faire du swap (et peut-être à terme deux , car vraiment les performances vers le disque sont très mauvaises).

Le reste des disques durs j'en ai fait (plus tard) une grosse partition de raid5, avec du lvm. Si le lvm ne vous ai pas vraiment nécessaire, ne l'utilisez pas, il ralenti chez moi fortement les performances, en écriture comme en lecture (il est peut-être possible de mieux configurer tout cela pour améliorer les performances, mais je n'ai pas vraiment eu le courage de parcourir l'ensemble des options de lvm2).

Maintenant une fois que l'on a le système debian de base avec tout ce que l'on souhaite, on peut soit tenter de flasher le kernel directement depuis le chroot. C'est là que commence les opérations périlleuses, le retour en arrière sera relativement compliqué. On peut limiter les risques si on le souhaite en sauvegardant auparavant le noyau et l'intrd du système existant. Pour cela commençons par observer les partitions :

$ cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00040000 00020000 "RedBoot"
mtd1: 00200000 00020000 "zImage"
mtd2: 00400000 00020000 "ramdisk.gz"
mtd3: 000c0000 00020000 "wmdata"
mtd4: 00040000 00020000 "rammode"
mtd5: 00020000 00020000 "naskey"
mtd6: 00040000 00020000 "log"
mtd7: 00020000 00020000 "vendor"
mtd8: 00001000 00020000 "RedBoot config"
mtd9: 00020000 00020000 "FIS directory"

On peut également avoir ce type d'informations depuis RedBoot (enfin pas vraiment, uniquement leurs adresses et leur taille. La création du point d'entrée dans le /dev/ dépend du système installé) :

RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0xF0000000  0xF0000000  0x00040000  0x00000000
RedBoot config    0xF07C0000  0xF07C0000  0x00001000  0x00000000
FIS directory     0xF07E0000  0xF07E0000  0x00020000  0x00000000
rammode           0xF0700000  0x00200000  0x00040000  0x00200000
zImage            0xF0040000  0x01008000  0x00200000  0x01008000
ramdisk.gz        0xF0240000  0x01800000  0x00400000  0x01008000
wmdata            0xF0640000  0xF0640000  0x000C0000  0x01008000
naskey            0xF0740000  0xF0740000  0x00020000  0x01008000
log               0xF0760000  0xF0760000  0x00040000  0x01008000
vendor            0xF07A0000  0xF07A0000  0x00020000  0x01008000

Les partitions à modifier sont donc la 1 et la 2. Cela peut varier selon les systèmes, attention à bien vérifier auparavant. Vous pouvez donc sauvegarder ainsi :

$ cat /dev/mtd1 > sauvegardenoyau
$ cat /dev/mtd2 > sauvegardeinitrd

Sauvegardez le tout sur une autre machine, cela pourra potentiellement vous servir (en effet vous ne pourrez pas récupérer votre système depuis les fichiers fournis par Acer sur son site. Ils sont en effet chiffré, on doit pouvoir récupérer la clef facilement dans l'un des fichiers du système installé par Acer mais je n'y ai pas pensé et depuis j'ai un peu tout effacé.

Ensuite vous pouvez flasher le kernel (depuis votre chroot debian, en ayant installé l'un des paquets linux-image*). Ici cependant, petite subtilité que l'on peut lire sur le Bug Debian Enable MACH_EM7210. (closes: #473136) " (et ça, c'est cool)). Le Nas en question est signalé comme une carte mère, sauf qu'il s'agit en fait d'une autre. Comme le type exact de système n'est pas maintenu dans le noyau, on prend celui qui s'en rapproche le plus. Pour cela on triche en "forçant" le noyau à prendre un type de carte, sans écouter RedBoot. En résumé :

$ devio > header 'wl 0xe3a01c04,4' 'wl 0xe38110bc,4' 
$ cat header /boot/vmlinux* > /dev/mtd1 
$ cat /boot/initrd* > /dev/mtd2

Sauvegardez sur une machine distante l'intégralité de votre /boot, vous pourrez en avoir besoin. Note : il y a une petite subtilité, l'initrd construit par Debian de base risque d'être trop gros. Deux solutions, soit supprimer du contenu à partir de /etc/initramfs-tools/initramfs.conf (par exemple busybox, ou alors faire une liste de modules à charger), soit utiliser un autre exécutable pour créer l'initrd. J'ai trouvé Yaird vraiment bien foutu, il m'a permis de passer de 3,2Mo à 1,4M (bien entendu c'est beaucoup moins modulaires, mais là il y a peu de chances que votre système change vraiment).

Et maintenant, le grand moment, le reboot. Avec le port série, on désactive le lancement automatique des scripts en appuyant sur ctrl+c depuis la console série. Là, si on veut faire quelque chose avec RedBoot, notamment qui demande du réseau, on a intérêt à passer dans le "rammode", qui allez savoir pourquoi bug beaucoup moins.

EM-438/EM-7220 ver.AG0 2006-05-23     
RedBoot> fis load rammode
RedBoot> go
+Ethernet eth0: MAC address 00:90:0b:0a:7b:79
IP: 192.168.0.145/255.255.255.0, Gateway: 192.168.0.1
Default server: 192.168.0.1, DNS server IP: 0.0.0.0

Là rappuyé sur ctrl+c pour éviter de nouveau le lancement du script automatique.

On en profite pour changer le script de lancement en question :

redboot > fconfig

Vous pouvez ainsi changer l'adresse ip utilisée par défaut, la passerelle, les DNS, plein de choses qui servent à rien en fait dans le cas présent. Par contre vous pouvez changez le script de lancement, et là c'est déjà plus intéressant. Ça donne quelque chose comme :

fis load ramdisk.gz -d
fis load zImage
exec -s 0x00400000 -c "console=ttyS0,115200 rw root=/dev/md1 initrd=0xa1800000,8M mem=256M@0xa0000000 panic=3" -w 3

Ce qui donne en résumé :

  1. On charge l'initird en mémoire en le décompressant
  2. On charge en mémoire le noyau
  3. On exécute le noyau, avec une console en port série pour suivre ce qu'il se passe, la partition /dev/md1 pour la racine (évidemment à changer selon les cas), un initrd chargé en mémoire, et à la fin un reboot automatique en cas de soucis de kernel panic (très utile, évite de devoir couper violemment la machine).

Sauvegardez le fichier de config, Et lancez le tout. Si tout se passe bien, vous avez un système Debian complètement fonctionnel. Cependant pour plus d'informations sur RedBoot, le RedBoot Guide est indispensable. Je me suis également fortement installé de ce wiki, les systèmes sont très proches (mais il n'est plus nécessaire de patcher le noyau pour pouvoir démarrer).

Autre avancée pour ma part du noyau 2.6.25, le module nécessaire au capteur de température est désormais activé. Je peux donc faire des jolis graphiques. Cependant comme vous pouvez le voir, très nettement cela reste mal étalonné. Si les tendances sont bonnes, il est peu probable que mes disques durs aient gelés hier (la courbe verte est la température du processeur, la rouge et la bleue corresponde aux sondes entre les disques durs 1 et 2 puis 3 et 4).

Mais bon l'étalonnage je le ferais bientôt, cela ne devrait pas être trop complexe (surtout que je ne suis pas vraiment au degré près).

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : http://flo.fourcot.fr/index.php?trackback/18

Fil des commentaires de ce billet