Analyse des problèmes
Pas d'affichage:
Les machines les plus basiques de Netgear n'ont aucun afficheur. Seul quelques leds en face avant indiquent leur état. Sur certains d'entre elles, il est possible de greffer un connecteur VGA, mais ce n'est pas le cas du 2000.
Heureusement, le constructeur a prévu à l'arrière, sous un petit scotch de protection, un accès direct au port sériel. Celui-ci étant en 3.3V, j'y ai raccordé un convertisseur USB / série comme celui-ci : https://www.banggood.com/FT232RL-FTDI-USB-To-TTL-Serial-Converter-Adapter-Module-For-Arduino-p-917226.html
Le brochage du connecteur à l'arrière du NAS est le suivant (de gauche à droite, en le regardant en se mettant avec l'arrière du NAS face à soi)
- gnd
- tx
- rx
- 3.3V (ne pas connecter!!!!)
Il suffit ensuite de raccorder un câble USB, et un terminal qui supporte l'ANSI (ex : Putty) et d'ouvrir une session sur ce port USB à 9600 bauds, no parity, 8 bits, 1 stop. A ce moment la magie opère : Tous les messages sont affichés sur le terminal et on peut accéder au bios.... (pour peu qu'on raccorde un clavier USB externe pour avoir accès aux touches de fonction pour sauver la config). Tout est configuré dans le bios et dans le kernel pour rediriger les sorties vers ce port.
Je ne m'étendrai pas sur ce que l'on peut faire avec la console, mais cela m'a permis d'appréhender comment le NAS boote.
Pas de CD et impossible de booter par défaut sur les disques SATA
Un disque USB de 128 Mo est intégré à la carte mère et le Bios est modifié pour booter dessus comme disque primaire. C'est à partir de ce disque qu'est monté le file system des disques ou l'installeur de l'OS en fonction du fait qu'il y ait des disques durs insérés et formatés avec un os valide dessus ou non. Par défaut il est impossible de booter sur autre chose que ce disque interne...
Si l'on appuie sur le bouton reset à l'arrière avant de démarrer, le readynas détecte cet appui et affiche les différentes configurations possibles sur ce boot de dépannage. Une pression cyclique sur le bouton backup permet de choisir la config désirée, et un appui sur le reset la valide.
Mais le comportement qui va nous intéresser le plus est que lorsque l'on appuie sur le bouton backup en face avant, avant d'allumer la machine, et qu'on reste appuyé jusqu'au boot, le bios détecte cet appui et boote sur la clé USB insérée en face avant en lieu et place du disque usb interne. Ce mode, à l'origine dédié à l'USB recovery va nous permettre d'installer un nouvel OS, qui sera placé sur une clé USB en façe avant.
Debian 8 a besoin d'un écran pour l'installer
Comme nous n'avons pas de port VGA, impossible de voir ce qui se passe avec l'installeur.. C'est ballot.
La solution consiste en la modification d'une Debian Firmware (c'est à dire intégrant les firmwares propriétaires) afin de la faire afficher sur le port sériel plutôt que sur l'affichage VGA. A y être nous allons prendre une Netinst (installation par le réseau) qui sera plus légère à modifier.
Création de la clé USB d'installation Debian pour terminaux série.
Pré requis
Pour réaliser ceci il nous faudra :
- Une machine sous Linux (idéalement Debian 8)
- Les paquets syslinux, isolinux et xorriso(sudo apt-get install syslinux isolinux xorriso)
- Une clé USB de 1Go
Créer un répertoire de travail
mkdir deb-serial; cd deb-serial ;
Récupération de l'image montage par loop
La première étape consiste à récupérer l'image de la Debian Firmware. Au jour de l'écriture, la dernière mouture disponible en Debian 8 est la 8.9.0 disponible ICI
curl -L -O http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/archive/8.9.0+nonfree/i386/iso-cd/firmware-8.9.0-i386-netinst.iso ; mkdir old ; sudo mount -o loop firmware-8.9.0-i386-netinst.iso old ;
Copier tous les fichiers de l'image vers un nouveau master que nous allons modifier
Nota : 'shopt -s dotglob' permet d'indiquer à bash que '*' doit aussi prendre en compte les fichiers cachés.
mkdir new ; shopt -s dotglob ; cp -rv old/* new/ ;
Editer le boot loader (syslinx / isolinux) afin d'utiliser la console série.
vi new/isolinux/isolinux.cfg ;
# D-I config version 2.0 # search path for the c32 support libraries (libcom32, libutil etc.) serial 0 115200 console 0 path include menu.cfg #default vesamenu.c32 #prompt 0 #timeout 0
vi new/isolinux/txt.cfg ;
default install label install menu label ^Install menu default kernel /install.amd/vmlinuz append vga=off console=ttyS0,115200n8 initrd=/install.amd/initrd.gz --- console=ttyS0,115200n8
vi new/isolinux/adtxt.cfg ,
label expert menu label ^Expert install kernel /install.amd/vmlinuz append priority=low vga=off console=ttyS0,115200n8 initrd=/install.amd/initrd.gz --- console=ttyS0,115200n8 include rqtxt.cfg label auto menu label ^Automated install kernel /install.amd/vmlinuz append auto=true priority=critical vga=off console=ttyS0,115200n8 initrd=/install.amd/initrd.gz --- console=ttyS0,115200n8
Les fichiers de boot sont patchés avec le texte en gras.
Fabriquer la nouvelle image iso bootable (avec MBR hybride)
Il vaudra avoir les packages xorriso, isolinux & syslinux installés:
sudo apt-get install isolinux syslinux xorriso sudo xorriso -as mkisofs -r -J -joliet-long -l -cache-inodes -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16 -A "Debian8.9" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o debian-8.9-serial-install.iso ./new/ ;
Ecrire la nouvelle iso sur une clé USB (ici sdc, à remplacer par le device concerné)
cp debian-8.9-serial-install.iso /dev/sdc
Installer la Debian sur le NAS
- Insérer la clé USB ainsi générée en face avant. Appyer et rester appuyé sur le bouton backup, puis allumez le NAS.
- Il détecte qu'il doit booter sur la clé en face avant et lance l'installeur Debian
Ensuite ça reste du classique de l'installation Debian, à part que l'interface fonctionne en mode texte...