Sheevaplug : installation d’Archlinux ARM

À l’heure où la popularité du Raspberrypi n’en fini pas de grimper, j’ai ressorti mon Sheevaplug.

Plusieurs raisons à cela. Déjà je me sens bien plus à l’aise avec l’administration système (depuis que je suis passé à Archlinux il y a 2 ans). Deuxième raison, depuis l’annonce de la fermeture de Google Reader, j’ai décidé de passer plus de temps pour m’auto-héberger.

Je vais donc expliquer pas à pas comment mettre en place un serveur auto-hébergé grace à un bon vieux Sheevaplug.

Matériel

Le Sheevaplug n’est pas un matériel récent. Cependant il est plus que correct et à de nombreux avantages :
  • consomation au démarrage : 5W
  • consomation moyenne : 3,5W
  • faible encombrement
  • très silencieux
  • ne chauffe pas
  • matériel très bien supporté

La première étape avant de jouer avec ce petit serveur est de vérifier que l’on arrive à se connecter par la liaison série.

Connection série

Si votre système inclu udev, vous ne devriez avoir aucun problème pour vous connecter par la liaison série (JTAG) avec screen :

$ screen /dev/ttyUSB0 115200

Normalement, en branchant le Sheevaplug puis en lançant la commande ci dessus, on doit voir la séquence de boot. Si ce n’est pas le cas, vérifiez que votre Sheevaplug est bien reconnu par votre système :

$ lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 058f:b002 Alcor Micro Corp.
Bus 004 Device 003: ID 9e88:9e8f

C’est la dernière ligne qui nous intéresse ici. Ces 2 valeurs hexadécimales sont les identifiants spécifiques au Sheevaplug. Si vous n’avez pas la dernière ligne ou que la liaison série ne fonctionne pas :

# modprobe usbserial vendor=0x9e88 product=0x9e8f
# modprobe ftdi_sio vendor=0x9e88 product=0x9e8f

On peut admirer la séquence de boot. Mon Sheevaplug a été livré avec une Debian Lenny dans la NAND. J’ai rapidement joué avec (utilisateur « root » et mot de passe « nosoup4u » par défaut). Cependant j’ai très vite voulu installer une distribution que j’ai l’habitude d’administrer.

Installation de la distribution Archlinux ARM

Le site d’Archlinux ARM propose un pack pour installer la distribution sur la NAND ou la carte SD. Après avoir télécharger les 2 archives et suivi la procédure un premier problème se pose : le fichier runme.php donné n’est pas compatible avec la dernière version de php. Il faut modifier le tag de la première ligne du fichier runme.php :

<?php

Il faut également commenter les lignes 7,8 et 43,44 (vérification root et système windows).

Mais ce n’est pas tout : les fichiers d’OpenOCD fournis dans le pack ne sont pas à jour ni utilisables sur mon système hôte Archlinux 64 bits.

Pour y remédier j’ai installé OpenOCD puis j’ai copié les fichiers suivants (en supposant que le pack d’installation a été décompréssé dans un dossier sheevapluginstall) :

$ cp /usr/share/openocd/scripts/board/sheevaplug.cfg \
    sheevapluginstall/uboot/openocd/config/board/sheevaplug.cfg
$ cp /usr/share/openocd/scripts/interface/sheevaplug.cfg \
    sheevapluginstall/uboot/openocd/config/interface/sheevaplug.cfg
$ cp /usr/share/openocd/scripts/target/feroceon.cfg \
    sheevapluginstall/uboot/openocd/config/board/feroceon.cfg
$ cp /usr/bin/openocd sheevapluginstall/uboot/openocd/openocd

Il y a aussi une solution plus simple qui consiste à modifier les lignes de runme.php :

chdir("uboot");
$openocd_cmd= "openocd/openocd";
$openocd_cmd.= ($WIN32==1) ? ".exe" : "";
$openocd_cmd.= " -f openocd/config/board/sheevaplug.cfg";
$openocd_cmd.= " -s openocd/config/";
$openocd_cmd.= " -c init";
$openocd_cmd.= " -c sheevaplug_reflash_uboot_env";
$openocd_cmd.= " -c sheevaplug_reflash_uboot";
$openocd_cmd.= ($WIN32==1) ? " -c init" : " -c exit";

pour obtenir :

chdir("uboot");
$openocd_cmd= "/usr/bin/openocd";
$openocd_cmd.= ($WIN32==1) ? ".exe" : "";
$openocd_cmd.= " -f /usr/share/openocd/scripts/board/sheevaplug.cfg";
$openocd_cmd.= " -s /usr/share/openocd/scripts/";
$openocd_cmd.= " -c init";
$openocd_cmd.= " -c sheevaplug_reflash_uboot_env";
$openocd_cmd.= " -c sheevaplug_reflash_uboot";
$openocd_cmd.= ($WIN32==1) ? " -c init" : " -c exit";

Voilà pour les modifications. Je met à disposition mon fichier runme au cas où…

Maintenant en suivant les instructions de la page d’Archlinux ARM :
  • formater une clé usb en FAT32 et y copier les fichiers modules.tar.gz, uImage et initrd
  • formater une carte SD
  • insérer la carte SD et la clé usb dans le Sheevaplug, connecter le JTAG et un câble ethernet
  • mettre sous tension, se connecter en série et interrompre le boot automatique
  • lancer la commande sudo php runme.php mmc sur le système hôte.

Le script se termine sur une erreur mais l’opération se termine toutefois correctement. Sur le terminal de la liaison série, on peut voir le boot du système sur la clé usb et l’installation d’Archlinux ARM sur la carte SD. L’opération dure environ 5 minutes. Après ça le Sheevaplug redémarre encore et on boot sur la carte SD cette fois et c’est systemd et Archlinux qui nous accueil (utilisateur et mot de passe « root » par défaut).

C’est tout pour ce billet. La suite traitera des premières étapes d’administration de votre serveur.