dimanche, mai 12, 2013

Installation de NetBSD (evbarm) sur un Raspberry Pi


Voilà une recette de cuisine pour installer NetBSD sur un Raspberry Pi modèle B (v2, 512Mo), en Français.



Tout ceci est largement inspiré de ce post de la mailing list port-arm NetBSD et cet article sur le wiki de NetBSD.org mais illustré de quelques photos d'écrans, et poussé un peu plus loin qu'un simple boot, l'idée étant d'arriver à un système utilisable en mode texte (avec le "userland").

Tout ce déroulé suppose que vous utilisez votre RPI sans clavier/écran, donc simplement branché au réseau. 
C'est la "méthode dure"... qui vous rappellera l'Informatique des années 80. 
La "méthode douce" consiste à brancher un clavier/écran (via la sortie RCA, pour donner une seconde vie à votre téléviseur cathodique si branché à un adaptateur RCA-Péritel ou direct RCA, ou via la sortie HDMI sur votre écran LED 16/9ème 24 pouces...).

  • Pré-requis:
    • Un accès internet,
    • Un serveur DHCP (votre Livebox, Freebox ou autre le fait très bien),
    • Un logiciel pour flasher l'image d'installation sur une carte mémoire SDCard (ex: USBWriter
    • Une image d'installation de NetBSD pour Raspberry (ex: allez sur http://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/ puis choisissez le répertoire le plus récent, par exemple au moment de l'écriture de ce billet c'est 201305102100Z puis continuez pour aller dans evbarm/binary/gzimg/ pour télécharger le fichier rpi_inst.img.gz Soit au final un lien de téléchargement qui ressemble à ça : http://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/201305102100Z/evbarm/binary/gzimg/rpi_inst.img.gz )
    • Un client ssh pour se connecter en mode texte à NetBSD/Raspberry (ex: putty).

  • Liste de matériel: Exemple ICI sur Amazon.fr
    • 1 carte mère Raspberry Pi modèle B
    • 1 carte mémoire SDCard (ou micro sd avec son adaptateur)
    • 1 boitier pour un peu de sécurité vs les chocs électriques

  • Flash de l'image d'installation sur la SDCard 
    • Dézipper rp_inst.img.gz (ex : avec winrar sous windows).
    • Flasher rp_inst.img sur la SDCard (attention à ne pas confondre les noms de lecteurs ou d'unités où vous allez déposer l'image, visez bien la SDCard !)

  • Boot sur l'image d'installation
    • Connecter la SDCard sur le Raspberry
    • Connecter le Raspberry au réseau, et éventuellement à un écran ou télé en HDMI si vous voulez voir ce qui se passe
    • Allumer le Raspberry et retrouver l'adresse IP que votre serveur DHCP (box) lui a attribué
    • Se connecter en ssh à cette adresse avec l'utilisateur "sysinst" mot de passe "netbsd"
Voilà, arrivé ici normalement vous êtes sur l'écran d’accueil de l'installeur NetBSD. 
Vous avez fait ce qui diffère le plus d'une installation sur un PC ou serveur "classique", le reste devrait paraître assez facile.
  • Etapes d'installation 
    • Voilà quelques copies d'écran intéressantes pendant la phase d'installation
La table des partitions, à la mode BSD ça donne ceci, une partition dos (/boot) suite au flashage de l'image d'installation sur votre SDCard, et le reste dédié à NetBSD:



La carte SDCard est le device "ld0", si comme moi vous avez en plus mis une clé USB (Kingston) vous verrez un autre device "sd0" mais ne le choisisez pas, le firmware du Raspberry amorse le système d'exploitation depuis la SDCard...

Installation type "b", en mode texte uniquement (choix personnel)

Géométrie: garder les valeurs par défaut


Etape intéressante: le partitionnement.
Ici un gros / un petit swap et un /tmp en mémoire.
En fait il faudrait se passer de la partition de swap, pour éviter de trop écrire et donc d'user la carte mémoire (chaque écriture endommage petit à petit les mémoires flash/ssd/usb etc... c'est comme ça :-(
Et /tmp sera de type mfs (Memory File System, donc prendra un peu de votre précieuse RAM pour y créer une partition éphémère). 
Pour éviter de faire trop d'accès en écriture sur la carte mémoire, monter les volumes avec les options suivantes: noatime, nodevmtime (sur le /).
Notez qu'il faut laisser la partition /boot tel quel, au format msdos, qui est nécessaire pour que le firmware du Raspberry puisse ammorcer le système.

Il vous faudra indiquer où sont les paquets d'installation en cohérence avec la version que vous installez, soit dans cet exemple:



Après un petit moment (téléchargement, install, etc...), lorsque l'installeur est terminé vous rebootez et si tout s'est bien passé vous pouvez vous connecter au système:

  • Etapes supplémentaires
Définir la variable PKG_PATH qui permet de faire pointer le gestionnaire de paquets vers un dépot adéquat, ex pour la version 6.1 actuelle:
export PKG_PATH="ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/evbarm/6.1/All/

Gagner un peu de mémoire vive (RAM) si vous n'utilisez votre Raspberry qu'a distance, en déplaçant la limite du partage CPU/GPU de la mémoire, qui par défaut est à 64Mb (64Mb pour le GPU -carte graphique- et 512-64=448Mb pour le CPU et donc l'OS, NetBSD...).
Cette petite quantité de mémoire n'est pas forcément cruciale, tant NetBSD est resté économique face à une installation Linux classique aujourd'hui (là je regarde vers CentOS et consort, et je ne pense même pas, non, à Windows Serveur 2012 ;-). Mais, rappelez-vous que vous devez éviter à tout prix d'utiliser la partition de swap (cf. la SDCard). 
Donc voilà :
    echo "gpu_mem=16" >> /boot/config.txt

Le "Userland" : Commencer à télécharger les paquets qui vous sont utiles. La commande est "pkg_add ", qui par analogie avec les dépôts (repository) sous Linux, se base sur pkgsrc. Pour  vous faciliter la vie installez en premier le programme "pkgin" qui est un gestionnaire un peu moins rustique que les commandes de base de gestion des paquets, soit "pkg_add pkgin" puis un petit "pkgin --help" vous montrera quoi faire (ex: "pkgin avail" liste tous les paquets disponibles et pré-compilés pour votre Raspberry, soit 4366 actuellement).
Je recommande "pkgin install wget nano free vim lynx irssi screen bash curl sudo" pour que vous retrouviez un environnement familier à la Linux. Après ça lancez /usr/pkg/bin/bash et vous comprendrez ;-)

Eviter de trop écrire sur la SDCard: Déplacer /var/log dans un mfs (tmpfs) donc en mémoire, ou comme moi pour aller au plus simple en attendant, arrêter quelques démons et tâches automatisées (cronées):
  syslogd: echo "syslogd=NO" >> /etc/rc.conf 
  la mise à jour des manpages: echo "manpagedb=NO" >> /etc/rc.conf 
  la création des core dump : echo "savecore=NO" >> /etc/rc.conf 
  la création de fichier de récupération sous VI : echo "virecover=NO" >> /etc/rc.conf

Forcer la réparation (si nécessaire) du système de fichier au démarrage, pour améliorer la résilience du système, car dans la le cas où votre RPI est utilisé sans clavier/écran, il restera figé au démarrage dans l'attente de votre action manuelle pour réparer le système de fichier. Alors qu'en paramétrant dans rc.conf la variable fsck_flags comme ceci, vous répondez "yes" aux questions posées par l'fsck lancé au démarrage :
  echo "fsck_flags="-P -p -y" >> /etc/rc.conf

Amusez vous bien, et ne restez pas bloqué à la première difficulté : NetBSD est un projet très bien documenté, un système très concis donc à la fois simple d'accès mais peu "assisté". 
Les manpages remplaceront avantageusement les wizards et autres assistants, qui font tout et souvent n'importe quoi.