Première rédaction de cet article le 3 janvier 2016
Je viens d'installer FreeBSD sur un Raspberry Pi. Rien d'extraordinaire, je voulais juste expliquer pourquoi je ne garderai pas ce système en production.
Il y a désormais des images officielles pour le
Raspberry Pi chez
FreeBSD : ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.2/
(« ...arm-armv6-RPI-B...
»). On télécharge,
on décomprime, on copie sur un carte SD
avec dd et on démarre le Pi dessus :
wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/arm/armv6/ISO-IMAGES/10.2/FreeBSD-10.2-RELEASE-arm-armv6-RPI-B.img.xz unxz FreeBSD-10.2-RELEASE-arm-armv6-RPI-B.img.xz sudo dd if=FreeBSD-10.2-RELEASE-arm-armv6-RPI-B.img of=/dev/sdb bs=1M conv=sync [Démarrage du Pi ; il faut être patient la première fois, cela prend plusieurs minutes pour générer les clés SSH.]
Ensuite, on peut se connecter au Pi en SSH (login/mot de passe freebsd/freebsd). On crée des comptes, on change les mot de passe, tout va bien :
amour% uname -a FreeBSD amour 10.2-RELEASE FreeBSD 10.2-RELEASE #0 r286666: Thu Aug 13 03:16:22 UTC 2015 root@releng1.nyi.freebsd.org:/usr/obj/arm.armv6/usr/src/sys/RPI-B arm amour% uptime 1:59PM up 39 mins, 2 users, load averages: 1.67, 1.83, 1.66
(Les messages de démarrage du noyau sont disponibles ici.)
C'est ensuite que les ennuis commencent. Le programme
bsdinstall
censé permettre de configurer la
machine facilement ne marche pas, la liste des miroirs n'étant pas
adapté au processeur ARM : la plupart des
miroirs n'ont pas ARM et on n'a aucun moyen de le savoir à
l'avance. bsdinstall
quitte donc
rapidement. Il faut donc faire les réglages à la main. Par
exemple, pour la date et le fuseau horaire :
ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime ntpdate ntp.nic.fr
Et pour le clavier :
% kbdmap kbdcontrol: getting keymap: Inappropriate ioctl for device You are not on a virtual console - expect certain strange side-effects lang_default = en dialect = en lang_abk = en keymap="fr.kbd"
Mais le plus gênant concerne les paquetages. Dans la terminologie
FreeBSD, le port est le source et le
paquetage le binaire (pré-compilé,
donc). Quand on a démarré sur l'image officielle, on n'a que le
système de base. Pour des raisons historiques (enfin, plutôt,
pré-historiques), FreeBSD maintient une division des anciens Unix,
entre un système de base et les applications. La distinction est
assez arbitraire (le système « de base » contient un
compilateur, par exemple, alors que
l'écrasante majorité des machines n'en ont pas besoin). Pour
installer des applications utiles, il existe plusieurs mécanismes
(et qui changent tout le temps, donc les vieux articles récupérés
sur le Web ne vous aideront pas). Un peu au hasard, j'ai testé
avec pkg
:
# pkg update The package management tool is not yet installed on your system. Do you want to fetch and install it now? [y/N]: y Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:10:armv6/quarterly, please wait... pkg: Error fetching http://pkg.FreeBSD.org/FreeBSD:10:armv6/quarterly/Latest/pkg.txz: No address record A pre-built version of pkg could not be found for your system. Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.
Le message « No address record » est erroné. Le site existe bien, mais n'a rien pour les processeurs ARM. En fait, le fond du problème est qu'il n'y a pas de paquetages (donc de binaires) pour le Raspberry Pi ; il parait qu'ils apparaitront dans la prochaine version de FreeBSD (je rappelle que les mises à jour du système sont très complexes avec FreeBSD, rien à voir avec ce que permet un système comme Debian, donc je n'envisage pas de passer dans les systèmes ultérieurs).
Il faut donc tout compiler soi-même ce qui, sur le Raspberry
Pi, prend des siècles (et use la carte
SD). J'ai utilisé portsnap
pour
extraire les ports (les sources, ou plutôt les références aux
sources) comme suggéré par
Johnson D :
portsnap fetch portsnap extract
puis, cd /usr/ports/CATEGORY/SOFTWARE
et
make install
. C'est horriblement lent et je ne
rêve même pas d'arriver à installer emacs
ainsi. Donc, pas utilisable « en vrai ».
Autre problème, j'ai eu du mal à activer
IPv6 (qui ne l'est pas par défaut, ce qui est
incroyable en 2016). Il existe d'innombrables variables IPv6 pour le
/etc/rc.conf
et les explications sur leur
interaction sont confuses. Mon réseau utilise
SLAAC pour la configuration IPv6. Un peu au hasard, j'ai mis :
ipv6_enable="YES" ipv6_activate_all_interfaces="YES" ipv6_privacy="YES" ifconfig_ue0_ipv6="inet6 accept_rtadv"
Où ue0
est le nom de l'interface Ethernet du
Pi. Avec un peu de patience ensuite, cela marche.
Quelques documentations et articles :
Des alternatives possibles :
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)