Arch Linux ARM sur un Raspberry Pi 2
Je me suis acheté un Raspberry Pi 2 sur LDLC, le site de vente en ligne qui m'a octroyé une ristourne à l'occasion de mon anniversaire. Le délai entre la commande et la réception fut très long, rupture de stock oblige, mais en résumé je suis hyper-content.
Inutile de revenir une énième fois sur les spécificités matérielles et logicielles de la machine : d'autres s'en sont occupé·e·s avant moi et certainement bien mieux. Oui, ce modèle est tellement plus mieux que ses prédécesseurs. Évidemment, il faut être à l'aise avec la ligne de commande pour utiliser ce type de matériel.
Réception du paquet et montage
Comme je l'ai annoncé en préambule : le délai de livraison fut allongé à cause d'une rupture de stock de Raspberry Pi 2 chez LDLC. Qu'à cela ne tienne, je n'étais pas pressé.
J'ai profité de cette commande pour acheter une carte microSD de 16Go sur laquelle installer le système d'exploitation — voir ici une liste des distributions existantes — et un boîtier gay-friendly chez Adafruit compatible avec mon modèle de Raspberry Pi.
Le paquet du Raspberry Pi est minimal : une boîte en carton contenant une notice en 16 langues que je ne lirai certainement jamais, et un Raspberry Pi 2 sous film plastique de protection. C'est tout. Celui du Pibow l'est également : emballage en carton recyclé, pas de surabondance de matière première, à l'instar de l'emballage pour les précédentes versions du Raspberry Pi.
Note : toutes les « couches » du Pibow sont recouvertes d'un côté par un film blanc translucide qu'il faut enlever si vous ne voulez pas que votre Raspberry Pi ressemble à ça (la poussière en plus).
Du reste, il ne prend que très peu de place, il y en a même encore un peu sous le meuble où à brol / routeur / imprimante pour que je le branche à un disque dur portable qui servira à l'hébergement de données (torrents, sauvegardes, serveur multimédia DLNA/UPnP…). Je suis preneur de conseils concernant un disque dur portable abordable pouvant être allumés longtemps, très longtemps (pas de surchauffe ni de tendance à casser si trop souvent utilisé), avec une bonne alimentation (je n'ai pas envie qu'il brûle au moindre petit problème électrique).
Installation d'Arch Linux ARM
La distribution semble-t-il la plus utilisée est Raspbian, une distribution basée sur Debian qui incorpore l'utilitaire de configuration simplifiée raspi-config
. J'ai préféré installer Arch Linux ARM, suite a un problème de compatibilité de CUPS entre la version installée sur les ordinateurs (Debian Jessie, Arch Linux) et celle incluse dans Raspbian (Debian Wheezy).
Pour l'installation, il suffit de suivre le guide, que je traduis ci-dessous.
Vue d'ensemble
Le Raspberry Pi 2 est le successeur du Raspberry Pi. Il s'appuie sur le modèle original B +, mis à niveau vers 1Go de RAM, et en remplaçant le single-core vieillissant ARMv6l avec un quad-core Cortex-A7 ARMv7l.
Le Raspberry Pi 2 mesure 85.60mm × 53.98mm × 17mm (…).
Création de la carte SD contenant le système d'exploitation
Remplacer sdX dans les instructions suivantes par le nom de périphérique pour la carte SD tel qu'il apparaît sur votre ordinateur. Si vous ne parvenez pas à effectuer ces manipulations à cause de restrictions de droits sur les périphériques ou les partitions, exécutez-les avec votre compte root
.
-
Lancer
fdisk
pour partitionner la carte SD :fdisk /dev/sdX
-
À l'invite de
fdisk
, supprimer les anciennes partitions et en créer une nouvelle :- Taper o. Cela effacera toutes les partitions sur le disque.
- Taper p pour lister les partitions. Il devrait ne rester aucune partition.
- Taper n, puis p pour créer une partition primaire, 1 pour la première partition sur le disque, puis appuyer sur Entrée pour accepter le premier secteur par défaut, puis entrer +100M pour le dernier secteur (c'est-à-dire que la première partition fait 100M à partir du premier secteur).
- Taper t, puis c pour régler le type de la première partition sur W95 FAT32 (LBA).
- Taper n, puis p pour créer une partition primaire, 2 pour la deuxième partition sur le disque, puis appuyer deux fois sur Entrée pour accepter les premiers et derniers secteurs par défaut (prendre tout l'espace restant sur le disque).
- Écrire la table de partition et sortir de
fdisk
en tapant w.
-
Créer et monter le système de fichiers FAT :
mkfs.vfat /dev/sdX1 mkdir boot mount /dev/sdX1 boot
-
Créer et monter le système de fichiers ext4 :
mkfs.ext4 /dev/sdX2 mkdir root mount /dev/sdX2 root
-
Télécharger et extraire le système de fichiers racine (avec le compte
root
et non pas via la commandesudo
) :wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C root sync
-
Déplacer le fichiers de démarrage vers la première partition :
mv root/boot/* boot
-
Synchroniser les données sur la carte SD pour « éjecter en toute sécurité » :
sync
-
Démonter les deux partitions :
umount boot root
-
Supprimer les dossiers créés sur l'ordinateur :
rmdir boot root
-
Insérer la carte SD dans le Raspberry Pi, connecter le câble Ethernet, puis brancher l'alimentation de 5V.
-
Utiliser la console série (nécessite de brancher un clavier USB et un écran au Raspberry Pi et de configurer la disposition du clavier avec
loadkeys
, cf. la configuration du clavier dans la console virtuelle) ou se connecter par SSH à l'adresse IP donnée par votre routeur. Le mot de passe par défaut estroot
.
Configuration de base
Avant de faire quoi que ce soit, des manipulations de base doivent être effectuée : première mise à jour, configuration du mot de passe du compte root
, installation des composants de base, création d'un utilisateur et sécurisation de la connexion SSH,
Pour se connecter à votre Raspberry Pi par SSH (solution que je préfère), il faut en trouver l'adresse IP. Le plus simple à mon avis reste de la chercher dans l'interface d'administration de votre routeur.
J'en ai profité pour cocher l'option Always use the same address (toujours utiliser la même adresse IP) afin de ne pas devoir chercher à quelle adresse réside mon Raspberry Pi.
-
Une fois l'adresse IP du Raspberry Pi récupérée, ouvrir un terminal sur votre ordinateur et vous connecter par SSH au compte
root
. Entrer le mot de passe :root
.ssh root@192.168.1.66
-
Changer le mot de passe du compte
root
:passwd root
-
Entrer le mot de passe choisi (ne pas confondre complexité et difficulté) et valider :
-
Utiliser
pacman
, le gestionnaire de paquets d'Arch Linux, pour une première mise à jour des programmes installés (dont le noyau et les pilotes, le plus utile) :pacman -Syu
-
Installer quelques outils de base d'Arch Linux avec l'argument
--needed
pour ne pas réinstaller les paquets déjà à jour :pacman -Sy base base-devel archlinux-keyring archlinuxarm-keyring linux-tools-meta --needed
Reste à suivre la documentation ArchLinux de base pour la configuration générale du Raspberry Pi 2 (copie augmentée de la page Configuration d'Arch Linux du wiki francophone):
-
Le nom d'hôte est configurable dans le fichier
/etc/hostname
.echo nom > /etc/hostname
J'ai décidé d'appeler mon Raspberry Pi 2
fernand
, changement à reverser dans le fichier d'hôtes/etc/hosts
:127.0.0.1 localhost.localdomain localhost nom ::1 localhost.localdomain localhost nom
-
Différentes locales sont activables dans le fichier
/etc/locale.gen
et générées par la commandelocale-gen
. La locale utilisée par le système est configurable dans le fichier/etc/locale.conf
.nano /etc/locale.gen
Décommenter :
en_US.UTF-8 UTF-8 fr_FR.UTF-8 UTF-8
Générer les locales :
locale-gen
Rendre les changements effectifs directement&bsp;:
export LANG=fr_FR.UTF-8
Appliquer les changements en éditant
/etc/locale.conf
:# Spécifier fr par défaut LANG="fr_FR.UTF-8" # Préférer l'anglais à la langue par défaut si la traduction fr n'existe pas LANGUAGE="fr_FR:en_US" # Mais garder un tri par défaut LC_COLLATE=C
-
Les consoles virtuelles (TTY) sont configurables dans le fichier
/etc/vconsole.conf
, qui permet entre autres de choisir une police d'écriture ainsi qu'une configuration de clavier. -
La date et l'heure sont configurables en créant le lien symbolique
/etc/localtime
vers le fichier correspondant à la zone géographique souhaitée, disponible dans le dossier /usr/share/zoneinfo/. La commandetimedatectl
permet de le faire, ainsi que d'activer la synchronisation avec un serveur de temps pour garder la machine à l'heure :timedatectl set-timezone Europe/Paris timedatectl set-ntp true
-
fake-hwclock
a été spécialement conçu pour les systèmes sans horloge matérielle. Il comprend un servicesystemd
enregistre l'heure actuelle et restaure celle-ci au démarrage, évitant ainsi d'étranges erreurs de voyage dans le temps.pacman -Sy fake-hwclock systemctl enable fake-hwclock fake-hwclock-save.timer
-
Le gestionnaire de paquet,
pacman
, peut être configuré dans le fichier/etc/pacman.conf
. Pour les yeux seulement, j'active la coloration du logiciel (Color
) et une barre de progression sous forme de Pacman (ILoveCandy
).# Misc options #UseSyslog Color #TotalDownload CheckSpace #VerbosePkgLists ILoveCandy
-
Maintenant, il vous faut créer votre utilisateur avec lequel vous vous connecterez. Vous pouvez affecter l'utilisateur à certains groupes, en fonction des tâches qui seront effectuées. Je vous conseille de lire la page utilisateurs et groupes du wiki francophone.
Identifiez vous en
root
, avec le mot de passe défini à l'installation. Tapez ensuite :useradd -g users -m -s /bin/bash <nom utilisateur> passwd <nom utilisateur>
-
Pour finir, configurer et protéger la connexion par SSH. Je vous conseille de lire la page Ssh du wiki francophone. La configuration se fait dans le fichier
/etc/ssh/sshd_config
:-
PermitRootLogin no
interdit la connexion avec le compteroot
, pour ne plus pouvoir s'identifier qu'avec un compte aux droits limités comme celui créé à l'étape précédente. -
PasswordAuthentication no
désactive la connexion par mot de passe pour ne permettre de se connecter qu'avec un jeu de clés publique et privée, voir la section Clé publique/privée du wiki francophone pour configurer cela. -
PermitEmptyPasswords no
désactive les mots de passe vides. -
AllowUsers <nom utilisateur>
restreint l'accès aux utilisateurs indiqués. -
Redémarrer le service SSH pour appliquer les changements :
systemctl restart sshd
-
Pour vérifier que tout fonctionne, il suffit d'essayer d'ouvrir une nouvelle fenêtre de connexion.
-
-
Redémarrer :
reboot
Serveur d'impression partagé
La première utilisation que j'ai réservée à mon Raspberry Pi 2 est qu'il fasse office serveur d'impression CUPS pour partager une vieille imprimante HP connecté en USB sur mon réseau.
Pour ce faire, le serveur d'impression CUPS doit être installé, ainsi que le programme hplip
permettant de communiquer avec les imprimantes HP, et le service Avahi.
Avahi est une mise en œuvre des protocoles Zeroconf permettant ainsi « à des logiciels de publier et de découvrir des services et des hôtes en cours d'exécution sur un réseau local TCP/IP sans configuration particulière. Par exemple, un utilisateur peut brancher son ordinateur sur un réseau et trouver instantanément des imprimantes pour imprimer, des fichiers à lire et des personnes à qui parler. »
-
Installer les dépendances :
pacman -S nss-mdns avahi cups sane hplip --needed
-
Pour accéder aux ordinateurs du réseau local en utilisant leur nom de domaine (ex :
myhostname.local
) plutôt que leur adresse IP, il faut activer le support des requêtes avec.local
, ce qui n'est pas le cas par défaut sous Arch Linux. Pour l'activer, il fauch changer la ligne des hôtes dans/etc/nsswitch.conf
:hosts: files mdns_minimal [NOTFOUND=return] dns myhostname
-
Pour activer le support du scanner des imprimantes[1] multifonction de HP, il faut s'assurer d'avoir installé Sane (le serveur permettant de partager le scanner) et xinetd (un démon gérant les connexions basées sur Internet).
pacman -S sane xinetd --needed
Ensuite, il faut éditer le fichier de configuration de Sane
/etc/sane.d/dll.conf
et y ajouter (ou décommenter) la ligne suivante (la dernière ligne du fichier bien souvent) :hpaio
Après, il faut configurer Sane pour partager l'imprimante sur le réseau dans
/etc/sane.d/saned.conf
et y indiquer la plage réseau dans laquelle le scanner sera accessible :# Requis, machine elle-même localhost # Autoriser le réseau local 192.168.0.0/24 192.168.1.0/24
Ensuite, il faut activer le support de Sane par Xinetd en éditant le fichier
/etc/xinetd.d/sane
et empêcher la désactivation :# disabled by default! disable = no
Dans ce fichier, nous voyons que c'est l'utilisateur
nobody
qui devra gérer le scanner. On l'ajoute donc au groupe idoine :usermod -a -G scanner nobody
-
Activer les services :
systemctl enable avahi-daemon org.cups.cupsd cups-browsed xinetd
-
Démarrer les services :
systemctl start avahi-daemon org.cups.cupsd cups-browsed xinetd
-
Il faut ensuite ajouter l'imprimante HP à la liste des imprimantes connues avec la commande
hp-setup
:hp-setup -i
-
La commande qui suit sert à activer le partage des imprimantes sur le réseau local et restreindre au réseau local, activer l'administration à distance, permettre à n'importe qui sur le réseau local de supprimer une impression :
cupsctl --no-remote-any --share-printers --remote-admin --user-cancel-any
-
Pour finir, redémarrer le service pour être sûr·e que les changements sont bien pris en compte :
systemctl restart org.cups.cupsd
Pour accéder à l'interface web de CUPS, il suffit d'ouvrir l'adresse http://myhostname.local:631
, et y administrer les imprimantes (format de papier par défaut, imprimante par défaut du serveur…).
N.B. : Installer les dépendances optionnelles à hplip
peut être chaudement recommandé s'il y a un souci : python-dbus
(support dbus), python-pillow
(support du scan par ligne de commande), python-reportlab
(support de la sortie PDF du scan) et rpcbind
(support du réseau).
pacman -S python-dbus python-pillow python-reportlab rpcbind --needed
Partage de fichiers multimédia
Section à compléter en attendant de disposer d'un disque dur portable à brancher au Raspberry Pi 2, voir l'index Streaming media du wiki anglophone.
Serveur de sauvegarde
Section à compléter en attendant de disposer d'un disque dur portable à brancher au Raspberry Pi 2, voir l'index Backup programs du wiki anglophone.
Serveur BitTorrent
Section à compléter en attendant de disposer d'un disque dur portable à brancher au Raspberry Pi 2. J'ai dans l'idée d'utiliser Transmission, à administrer via l'interface web, l'extension pour GNOME Shell Transmission Daemon Indicator ou via l'application Transdroid.
Mise à jour du 19 juillet 2015 : suppression du module hpoj, ajout de l'installation des paquets Sane et Xinetd, ajout de la configuration de Xinetd, ajout des dépendances optionnelles de HPLIP. ↩︎