Où l’on va voir comment installer et configurer FreeBSD 10.1 sur une Raspberry Pi.
depuis l’écriture de cet article, des images ISO spécifiques pour RaspberryPi ont été créées, facilitant la mise en place.
Pourquoi ?
Pour le fun bien sûr. Sur ce matériel, aucune possibilité d’utiliser ZFS. Pas assez de mémoire et sur une carte SD de 32 Go (ce que je possède), c’est inutile. En revanche pour de la formation on doit pouvoir faire quelque chose.
Récupérer une image installable
Il existe de nombreuse de façon d’installer un système pour une Rapsberry. De la création d’un kernel spécifique à partir des sources jusqu’à l’achat d’une carte SD préinstallé.
Téléchargement de l’image
Nous allons passer à un niveau de complexité intermédiaire en téléchargeant une image toute faite et en la transférant sur notre carte SD.
une version 11.0 est disponible, mais je préfère me contenter d’une version que je connais plus. Par contre, utiliser une rapsberry pour tester une nouvelle version peut-être un choix judicieux.
Nous allons télécharger la version de l’image qui nous intéresse en nous connectant sur le site FTP. L’image qui correspond à notre matériel est FreeBSD-10.1-STABLE-arm-armv6-RPI-B-20150509-r282689.img.bz2.
Mise à jour : de nouvelles images (de FreeBSD 11.0 entre autres) sont disponible sur le site raspbsd.org
Installation de l’image sur la carte SD
Cette image est compressée (.bz2), nous devons donc commencer par la décompresser :
|
|
Et on obtient le fichier FreeBSD-10.1-STABLE-arm-armv6-RPI-B-20150509-r282689.img. C’est lui que nous allons transférer sur la carte SD.
il est bien sûr nécessire d’avoir une machine qui comporte un lecteur de carte SD interne ou externe.
Déterminer le périphérique de la carte SD
Une fois la carte SD branchée sur votre machine (via un connecteur spécifique sur votre machine ou un lecteur de carte USB), il est nécessaire de connaître le nom du périphérique (au sens système d’exploitation). Par exemple, il y a de grandes chances que votre disque dur principal soit /dev/sda.
Avec la commande dmesg nous allons déterminer ce nom :
|
|
Sur machine, le périphérique est sdi (oui, j’ai beaucoup de périphériques de stockage branchés sur ma machine). Il est fort probable que chez vous ce soit /dev/sdb.
vous pouvez aussi déterminer ce nom en utilisant la commande df -h.
Copie de l’image sur la carte
Nous allons utiliser la commande dd pour faire la copie.
|
|
Ce qui signifie :
- dd→ c’est la commande, disk dump ;
- if=→ c’est le fichier en entrée, ici notre image (input file) ;
- of=→ c’est le fichier en sortie, notre périphérique usb (ouput file) ;
- bs=1M→ c’est la taille du bloc de données qui est transférée. Ici, 1Mo. La valeur par défaut est 512Ko. Une fois le transfert terminé, vous pouvez retirer la carte SD de votre machine et la mettre dans votre Raspberry.
Branchement de la Raspberry
Par défaut, l’utilisateur root de notre FreeBSD n’a pas de mot de passe. Ce qui est loin d’être sûr. Toutefois, il n’est pas possible de se connecter avec cet utilisateur que depuis la console. C’est-à-dire depuis le couple clavier/écran directement connecté à l’ordinateur (la Raspberry en l’espèce). Il est donc nécessaire de connecter la Raspberry sur un écran (par le connecteur HDMI). Branchez également un clavier sur l’un des ports usb (nous n’aurons pas besoin de souris).
Première connexion
À la première connexion, vous devez passer par l’utilisateur root :
|
|
À la demande de mot de passe, tapez directement ↵ Vous voilà connecté à votre FreeBSD !
Changement du mot de passe
Nous allons immédiatement changer (ou plus exactement mettre) le mot de passe de root :
|
|
Création d’un nouvel utilisateur
Afin d’éviter de modifier la configuration de sshd et autoriser les connexions via le réseau de root nous allons créer un utilisateur qui aura les mêmes privilèges que root1.
La commande de gestion des utilisateurs est pw, mais nous allons plutôt utiliser la commande adduser qui va nous poser des questions.
|
|
Vérifier la connexion réseau
Nous devons connaître l’adresse IP de la machine pour nous connecter dessus par le réseau :
|
|
Nous allons vérifier que nous pouvons nous connecter avec l’utilisateur jacques sur la machine en passant par ssh. Depuis une autre machine, tenter la commande suivante :
|
|
Et nous allons immédiatement vérifier notre capacité à devenir root :
|
|
Le mot de passe que vous devez donner ici est le mot de passe de root2.
Agrandir le système de fichier
La carte SD que j’utilise a une taille de 32Go. Seuls 120Mo sont utilisés pour l’instant. C’est suffisant pour faire booter le système, mais trop petit pour le faire tourner au quotidien. Nous allons donc agrandir le système de fichier.
Repérer la bonne partition
Notre carte est découpée en deux partitions. La première (/boot), au format ntfs est utilisée, comme vous l’imaginez, pour démarrer. La seconde au format ufs est utilisée par le système lui-même, c’est elle que nous allons agrandir.
|
|
/dev/mmcsd0s2a 907M 395M 440M 47% / ← c’est elle. Son nom peut varier chez vous.
Agrandir la partition
Commençons par obtenir des informations sur la partition :
|
|
Nous avons confirmation que la carte dispose de 29Go de libre. Nous allons agrandir la partition de manière a prendre toute la place disponible :
|
|
Les 29Go libres ont été “transférés” de mmcsd0 à mmcsd0s2. Nous redémarrons la raspberry pour que les changements soient complètement pris en compte :
|
|
Après le redémarrage, nous allons “transférer” cette place libre sur la partition mmcsd0s2 celle qui est au format freebsd-ufs :
|
|
Nous pouvons maintenant agrandir le système de fichier qui se trouve sur cette partition :
|
|
Et une fois de plus, nous redémarrons la machine pour avoir beaucoup de place :
|
|
Mise à jour du système et installation de logiciel
Maintenant que nous avons de la place sur notre partition, nous allons pouvoir installer un arbre de paquet à installer.
Récupérer et installer un arbre de paquet
Nous allons télécharger et installer une arborescence décrivant les paquets que nous pourrons installer par la suite.
|
|
Nous avons installé dans /usr/ports une arborescence de paquets. Ce sont les descriptions des logiciels, avec les URL de téléchargement des sources, des dépendances, où l’installer et comment.
Example d’utilisation
Nous n’allons pas utiliser poudriere la Raspberry, mais directement les ports. Il y a des tas d’outils dont je ne saurais me passer, mais deux en particulier sont essentiels : sudo et tmux. Nous allons voir comment installer ces deux logiciels en passant par les ports.
Installation de sudo
sudo est un élément important de la sécurité de votre système. Il permet d’avoir, pour un temps (par défaut 5 minutes) des privilèges supérieur à ceux que l’on à d’ordinaire. Le plus souvent on « devient root », mais il est possible de devenir postgres pour utiliser une base de données PostgreSQL. Il aussi possible d’accorder des droits root pour une petite série de commandes seulement. Reportez-vous au manuel de la commande pour plus d’information. Nous allons essayer d’installer sudo à partir d’un paquet binaire, déjà préparé que nous n’aurons qu’à télécharger et installer.
|
|
Malheureusement, cela ne fonctionne pas. En allant voir sur le site des gestions des paquets binaires, on apprend que seuls les paquets pour les architectures x86_32 et x86_64 (processeurs Intel 32 et 64 bits de la famille des x86) sont proposés.
Rappel : les raspberryPi sont animés de processeurs ARM.
Nous allons donc devoir compiler notre propre version de sudo.
Compiler notre version de sudo
Nous allons nous rendre dans le répertoire /usr/ports/security/sudo. Dans ce répertoire se trouve divers fichiers :
- Makefile → c’est le fichier qui contient les instructions pour compiler le logiciel. Quels sont les dépendances, les besoins, etc. C’est le cœur du système de compilation ;
- distinfo → un fichier au contenu un peu obscur. Il s’agit simplement du nom du fichier de source à télécharger (sudo-1.8.13.tar.gz«/code> et de la somme de contrôle de ce même fichier). On trouve également la taille que doit faire ce fichier. Lorsque nous allons demander la compilation de sudo, le fichier qui contient les sources sera téléchargé et ces éléments seront vérifiés
- files → est un répertoire qui contient des fichiers de configuration du logiciel. Ils seront installés au moment opportun
- pkg-desc → comme son nom semble l’indiquer, ce fichier contient une description du logiciel
- pkg-plist → contient une liste des fichiers qui seront installés, où le seront-ils.
Ces explications étant posées, nous allons maintenant pouvoir nous lancer dans la compilation et l’installation de sudo.
|
|
Et une fois la compilation terminée, nous pouvons installer sudo :
|
|
Je vous laisse lire la documentation pour savoir comment le configurer et vous en servir. Mais, souvenez-vous, l’utilisateur supplémentaire que nous avons créé au début de l’installation fait partie du groupe wheel, tout comme root.
Installation de tmux
Les fichiers de descriptions de tmux se trouvent dans /usr/ports/sysutils/tmux. Dans ce répertoire, on trouve les mêmes fichiers que vous sudo.
Nous allons faire cette installation en une seule commande.
|
|
Voilà, tmux est installé dans /usr/local/bin.
Vous pouvez (devez) faire de même pour sudo (qui se trouve dans /usr/ports/security).
Mises à jour des paquets
Les logiciels que nous utilisons et installons évoluent très vite. Certains nécessitent des mises à jour régulières (souvent des mises à jour de sécurité). Nous avons déjà utilisé la commande portsnap pour récupérer l’arborescence des paquets. Nous allons utiliser à nouveau cette commande pour mettre à jour notre arbre.
|
|
Pour éviter d’oublier de faire cette mise à jour, nous allons demander au logiciel cron (qui fait partie du système de base) de faire cette commande régulièrement3. Nous allons éditer le fichier /etc/crontab et y ajouter la ligne suivante&^nbsp;:
|
|
Ce qui signifie qu’à 4 heures 22 minutes, tous les jours, l’utilisateur root va lancer la commande portsnap -I cron update && pkg_versin -vIL=. Cette commande va réaliser la mise à jour de l’arborescence et envoyer un courrier électronique si l’un des logiciels installés nécessite une mise à jour.
Sécurisation du système
Vous pouvez sécuriser votre système avec des actions simples :
- vous assurez que vous avez toujours une version à jour de openssl ;
- changer le port d’écoute de SSH (dans le fichier /usr/local/etc/ssh/sshd_config) ;
- n’autoriser les connexions ssh qu’avec échange de clef…
- installer et configurer le firewall pf. Pour cela, vous pouvez allez voir l’article que j’ai écris à ce sujet.
Conclusion
Vous avez maintenant un FreeBSD sur RaspberryPi fonctionnel. Il vous reste à l’explorer, à voire comment il fonctionne, et qu’en faire. Vous trouverez sur ce blog une série d’articles sur la gestion d’une machine FreeBSD. Même si celle que je décris n’est pas une RaspberryPi, les instructions pour nginx, redmine ou owncloud restent sensiblement les mêmes. Pour ma part je vais me servir de cette petite machine pour mettre en place le système des jails de FreeBSD que je n’ai pas encore bien compris. Soyez sûr que je vous en parlerais ici.
-
pour cela notre utilisateur aura pour groupe secondaire wheel. ↩︎
-
cette façon de faire est maintenant obsolète, il est préférable de passer par sudo. Il n’est pas encore installé, nous allons faire le nécessaire rapidement. ↩︎
-
lisez la documentation de cron, c’est un outil extrêmement utile dans l’administration système Unix. ↩︎