Arch Linux ARM sur un Raspberry Pi 2

Installation et configuration de services de base d'Arch Linux sur un Raspberry Pi 2.

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

Raspberry Pi 2 et Rainbow Pibow

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.

Rainbox Pibow v1

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).

Raspberry Pi 2 et Rainbow Pibow

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.

  1. 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.
  1. 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 commande sudo) :

      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 est root.

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.

Administration du routeur pour trouver l'adresse IP allouée au Raspberry Pi

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 :

Password Strength, XKCD, CC BY-NC

  • 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 commande locale-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 commande timedatectl 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 service systemd 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 compte root, 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. »

  1. 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.


  1. 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. ↩︎