Arch linux sur Raspberry Pi : installation

Pourquoi installer Arch Linux ARM sur le Raspberry Pi ?

Après avoir goûté les joies de Raspbian, la distribution de Linux basée sur la Debian pour le Raspberry Pi, j’ai testé l’installation de la distribution Arch Linux ARM, une version de la distribution Arch Linux dédiée aux machines dotées d’une architecture ARM.

Arch Linux me paraissait légère, souple, simple et solide, et me permettait surtout de choisir ce que j’embarquais sans m’encombrer par exemple avec un serveur graphique alors que j’ai l’intention d’utiliser le Raspberry Pi dans cette configuration uniquement en tant que serveur.

Comme souvent, j’ai trouvé des informations détaillées sur la meilleure manière d’installer et de configurer Arch Linux ARM sur le Raspberry Pi dans des endroits divers, en butinant gaiement au fil des questions soulevées et des difficultés rencontrées. Ma principale source d’informations a cependant été le guide pour l’installation d’Arch Linux ARM sur le Raspberry Pi disponible (en anglais) sur le Wiki Embedded Linux : ArchLinux Install Guide.

Voici donc le parcours que j’ai emprunté pour cette installation, décrit pas à pas…

Téléchargement de la dernière image de la distribution Arch Linux ARM

La première étape consiste à télécharger la dernière version de l’image de la distribution d’Arch Linux adaptée au Raspberry Pi. Les liens permettant d’accéder aux dernières images pour carte SD des différentes distributions Linux recommandées ou suggérées pour le Raspberry Pi sont disponibles sur le site Web du projet, sur la page dédiée aux téléchargements. Les images à télécharger se présentent sous la forme de fichiers compressés (ZIP) accessibles soit en téléchargement direct depuis un serveur soit sous la forme d’un torrent.

J’ai choisi le torrent correspondant à la dernière version de l’image pour carte SD de la distribution Arch Linux ARM qui, à l’heure où j’écris ces lignes, permet de récupérer l’archive compressée archlinux-hf-2013-02-11.zip.

J’ai donc téléchargé l’archive et je l’ai décompressée. Je dispose désormais d’un fichier archlinux-hf-2013-02-11.img qu’il va me falloir installer sur la carte SD que j’insérerai ensuite dans le Raspberry Pi.

Montage de l’image de la distribution Arch Linux ARM sur une carte SD

Une fois l’archive archlinux-hf-2013-02-11.zip décompressée, il faut donc monter l’image sur une carte SD dont la capacité doit être d’au moins 2 Go. Il ne suffit pas de copier le fichier contenu dans l’archive et de le coller sur la carte SD: il faut utiliser un logiciel qui permet d’installer le système d’exploitation sur la carte de manière à ce que le Raspberry Pi puisse démarrer à partir de la carte.

J’ai choisi une carte SD de classe 10 d’une capacité de 8 Go récupérée d’un appareil photo et dont je n’avais plus l’usage (l’opération de montage conduira à la perte totale des données qui pouvaient éventuellement se trouver sur la carte SD).

Il existe plusieurs possibilités pour réaliser le montage de la carte. Les différentes manières de le faire sont expliquées en détail selon le système d’exploitation depuis lequel l’opération doit être réalisée sur la page RPi Easy Card Setup du Wiki Embedded Linux. Pour ma part, Comme la seule machine sur laquelle j’ai à ce jour installé une distribution de Linux ne dispose pas d’un lecteur de cartes SD utilisable avec les cartes au standard SDHC, j’ai effectué l’opération depuis une autre machine tournant sous Windows 7.

Sous Windows, il est recommandé de recourir au logiciel Win32 Disk Imager qui peut être téléchargé ici. Pour l’utiliser, il faut décompresser l’archive contenant la dernière version compilée du logiciel dans un dossier et lancer l’exécutable Win32DiskImager.exe depuis ce dossier. Il faut ensuite naviguer pour atteindre l’emplacement du fichier correspondant à l’image à monter sur la carte et (la carte SD ayant été insérée préalablement), de sélectionner l’unité sur laquelle l’image sera écrite (dans mon cas, la carte SD correspond à l’unité H:).

Attention à bien vérifier ce point avant de continuer, car le montage de l’image sur l’unité correspondante revient à une modification irréversible du support, ce qui veut dire que les données qui s’y trouvaient éventuellement avant le montage ont de très fortes chances de ne plus être accessibles après l’opération !

Une fois que tout est bien vérifié, cliquer sur le bouton Write pour lancer le montage de l’image sur la carte SD. Cette opération peut prendre un certain temps et se conclut normalement par le message Write Successful qui indique que tout s’est bien passé. On peut alors quitter Win32DiskImager et éjecter la carte SD désormais prête à faire démarrer le Raspberry Pi.

Configuration d’Arch Linux ARM sur le Raspberry Pi

La suite se passe sur le Raspberry Pi : une fois éjectée de la machine depuis laquelle j’ai procédé au montage de l’image, j’ai inséré la carte SD désormais configurée dans le Raspberry Pi hors tension, relié le Raspberry Pi à mon routeur via le port Ethernet. J’ai ensuite rebranché l’alimentation.

Je dispose d’un écran miniature pour le Raspberry Pi, mais il faut avoir du courage et de bons yeux pour travailler avec cet écran plus de 5 minutes. Je n’ai par ailleurs pas l’intention d’installer dans cette configuration un serveur graphique. J’ai donc effectué la suite de l’installation en me connectant au Raspberry Pi via SSH. C’est possible et relativement simple, car la distribution Arch Linux ARM embarque un serveur SSH activé par défaut. Pour cette installation, j’aurais pu continuer depuis la machine tournant sous Windows à partir de laquelle j’ai monté l’image sur la carte SD, en utilisant un client SSH tel que Bitvise ou encore Kitty, mais il était plus pratique pour moi de le faire à partir de mon autre machine sur laquelle tourne une distribution de Linux (Xubuntu, pour ne pas la nommer).

Connexion au Raspberry Pi en tant que root via SSH

Depuis un terminal, j’ai lancé la connexion au Raspberry Pi via SSH en tant qu’administrateur (utlisateur root :

$ ssh root@X.X.X.X

Où X.X.X.X est l’adresse IP attribuée au Raspberry Pi sur mon réseau local.

J’obtiens l’invite suivante :

root@X.X.X.X's password:

Je saisis le mot de passe par défaut de l’utilisateur root qui n’est autre que… root. Le prompt qui apparaît dans la console est alors :

[root@alarmpi ~]#

Ça y est, je suis connecté au Raspberry (dont le nom d’hôte est alarmpi) en tant que root. Je vais maintenant pouvoir procéder à l’installation finale et à la configuration du système.

Changement du mot de passe de l’utilisateur root

Première tâche qu’il est de bonne pratique d’accomplir : changer le mot de passe par défaut de l’utilisateur root.

Pour le faire, j’utilise la commande passwd :

# passwd

L’invite suivante apparaît alors :

Enter new UNIX password:

Je saisis le nouveau mot de passe, qu’il m’est demandé de confirmer :

Retype new UNIX password:

Je m’exécute, et j’obtiens la réponse suivante :

passwd: password updated successfully

Le mot de passe de l’utilisateur root est désormais changé.

Redimensionnement des partitions de la carte SD pour en exploiter toute la capacité

Ma carte SD ayant une capacité de 8 Go, largement supérieure à la capacité minimale requise de 2 Go, j’ai intérêt à redimensionner les partitions pour utiliser toute la capacité de la carte.

Comme pour le montage de l’image, il y a plusieurs manières de le faire. Des explications détaillées à ce sujet sont disponibles (en anglais) sur le Wiki Embedded Linux. J’ai choisi la méthode réalisable sur le Raspberry Pi lui-même, c’est à dire la méthode qui me permettait de redimensionner les partitions sans débrancher le Raspberry Pi, en éjecter la carte SD, insérer la carte dans une autre machine, etc.

11/07/2013 : ATTENTION : les indications pour redimensionner les partitions exposées ci-dessous ne sont plus complètement à jour depuis la mise à disposition de l’image archlinux-hf-2013-06-15.img (voir ici). Si vous avez configuré votre carte SD à partir de cette image, vous allez rencontrer des problèmes avec la partition 5 (mmcblk0p5), problèmes liés aux changements introduits depuis la sortie de NOOBS. La nouvelle séquence d’actions à effectuer dans ce cas est reprise en fin de billet.

La première étape consiste à changer la table de partition en utilisant l’outil fdisk. Il faut retirer les partitions existantes et créer un nouvelle partition unique qui occupe la totalité de l’espace disque libre sur la carte SD. Ceci ne change que la table de partition et non les données des différentes partitions sur le disque. Le point de départ de la nouvelle partition doit être aligné avec l’ancienne partition.

Je lance donc fdisk :

fdisk -c -u /dev/mmcblk0

J’obtiens la réponse suivante :

Welcome to fdisk (util-linux 2.22.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Et l’invite :

Command (m for help):

Fdisk me prévient du fait que les changements effectués resteront uniquement en mémoire jusqu’à ce que je décide de les écrire, et m’invite à faire attention avant d’utiliser la commande write.

Je saisis la commande p pour afficher les partitions existantes.

Fdisk me répond :

Disk /dev/mmcblk0: 8035 MB, 8035237888 bytes, 15693824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 186367 92160 c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 3667967 1740800 83 Linux

Ma carte SD a une capacité de 8035 Mo et comporte deux partitions : /dev/mmcblk0p1 qui contient le système et /dev/mmcblk0p2, la partition que je souhaite redimensionner pour occuper tout l’espace disponible.

J’efface la seconde partition :

Command (m for help): d
Partition number (1-4): 2

Fdisk me répond :

Partition 2 is deleted

Je vais maintenant créer une nouvelle partition (commande n) :

Command (m for help): n

Fdisk me demande d’indiquer le type de partition, et je choisis de créer une partition primaire (commande p :

Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p

Je crée la seconde partition (commande 2) :

Partition number (1-4, default 2): 2

Fdisk me demande de définir le premier secteur. Je veille à aligner la nouvelle partition sur l’ancienne (dans mon cas, il faut faire démarrer la partition au secteur 186368) :

First sector (186368-15693823, default 186368): 186368

Fdisk me demande de définir le dernier secteur. Je choisis la valeur la plus élevée possible pour occuper tout l’espace disponible (dans mon cas, le dernier secteur est le 15693823) :

Last sector, +sectors or +size{K,M,G} (186368-15693823, default 15693823): 15693823

Fdisk m’indique que la seconde partition est bien en place :

Partition 2 of type Linux and of size 7.4 GiB is set

C’est terminé, il me reste à confirmer l’écriture des changements (commande w) :

Command (m for help): w

Fdisk me répond que la table de partition a été modifiée :

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Je redémarre le système pour vérifier que mes changements ont bien été pris en compte :

# shutdown -r now

Nouvelle connexion au Raspberry Pi via SSH (en tant que root avec le nouveau mot de passe défini précédemment), et je relance fdisk pour vérifier :

# fdisk -c -u /dev/mmcblk0
Welcome to fdisk (util-linux 2.22.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/mmcblk0: 8035 MB, 8035237888 bytes, 15693824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 186367 92160 c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 15693823 7753728 83 Linux

Command (m for help):

La seconde partition commence bien au secteur 186368 mais finit désormais au secteur 15693823 (au lieu de 3667967 tout à l’heure) : tout s’est bien passé !

Je quitte fdisk (commande q).

Je vais désormais redimensionner le système de fichiers pour qu’il corresponde à la nouvelle partition, en utilisant la commande resize2fs :

# resize2fs /dev/mmcblk0p2

J’obtiens le résultat suivant (qui prend quelques secondes) :

resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 1938432 blocks long.

Je vérifie la nouvelle taille du système de fichiers en utilisant la commande df :

# df -h

J’obtiens la réponse suivante :

Filesystem Size Used Avail Use% Mounted on
rootfs 7.3G 459M 6.6G 7% /
/dev/root 7.3G 459M 6.6G 7% /
devtmpfs 83M 0 83M 0% /dev
tmpfs 232M 0 232M 0% /dev/shm
tmpfs 232M 240K 231M 1% /run
tmpfs 232M 0 232M 0% /sys/fs/cgroup
tmpfs 232M 0 232M 0% /tmp
/dev/mmcblk0p1 90M 24M 67M 27% /boot

Tout semble s’être bien passé.

C’est fini pour ce qui concerne le redimensionnement des partitions sur la carte SD.

Mise à jour du système

Il est temps de mettre à jour l’installation en utilisant le gestionnaire de paquets livré par défaut avec Arch Linux : pacman.

Avant d’utiliser pacman, il faut initialiser une clé pacman en utilisant la commande pacman-key :

# pacman-key --init

Cette opération prend un certain temps :

gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: Generating pacman keychain master key...
gpg: key 84E5A793 marked as ultimately trusted
gpg: Done
==> Updating trust database...
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u

Pacman est prêt à être lancé. Pour savoir ce que je fais, je parcours la description de pacman disponible en français ou de manière plus détaillée en anglais dans la documentation d’Arch Linux.

Pour mettre à jour le système :

pacman -Syu

À ce stade, j’ai rencontré des problèmes de connexion avec les miroirs hébergeant les dépôts, problèmes que je n’ai pas réussi à résoudre complètement à ce jour : certains dépôts, et en particulier le dépôt Core semblent fréquemment impossibles à atteindre. J’ai parcouru la documentation et les forums à la recherche d’une solution, et j’en ai essayé deux sans obtenir un succès total : la désactivation d’ipv6 d’une part, et l’ajout d’un miroir hébergé en France à la liste des miroirs d’autre part.

Désactivation d’ipv6

J’ai lu à plus d’une reprise que les problèmes de connexion aux miroirs pour la mise à jour des paquets pouvaient être liés à l’activation d’ipV6, dont la désactivation suffirait parfois à régler le problème.

En suivant les conseils donnés sur le Wiki francophone d’Arch Linux, j’ai donc tenté d’éditer /boot/config.txt en rajoutant disable.ipv6=1 à la fin.

# nano /boot/config.txt

Après la dernière ligne, je rajoute :

disable.ipv6=1

Je redémarre ensuite et je tente à nouveau de mettre à jour le système :

# shutdown -r now
# pacman -Syu

Et je rencontre toujours (assez) fréquemment des problèmes de dépôt(s) inatteignable(s) : il faut s’ reprendre à plusieurs fois pour mettre à jour les listes de paquets et/ou installer des mises à jour ou des paquets nouveaux.

Ajout d’un miroir hébergé en France à la liste des miroirs

Toujours en parcourant les forums, j’ai supposé que le problème pouvait être lié à un ou plusieurs miroirs indisponibles et j’ai cherché à savoir comment on pouvait étendre et modifier la liste des miroirs utilisée par pacman. En suivant les instructions en anglais publiées sur le Wiki d’Arch Linux, j’ai modifié la liste des miroirs en transformant en instruction la ligne commentée référençant le miroir hébergé en France.

# nano /etc/pacman.d/mirrorlist

Puis, comme conseillé :

# pacman -Syy

J’ai l’impression (que je n’ai pas cherché à objectiver) que le type d’erreurs que je cherchais à éliminer est moins fréquent, mais je n’en suis pas très sûr. En tous cas, la situation est tout à fait acceptable même s’il faut parfois s’armer de patience.

Quelques tâches de configuration complémentaires d’Arch Linux ARM

Ajout d’un utilisateur standard

Il est de bonne pratique de se connecter à la machine, pour ce qui ne concerne pas les tâches d’administration, avec un compte d’utilisateur standard.

Pour créer ce compte d’utilisateur, j’installe l’outil adduser :

# pacman -S adduser

Je lance adduser et je suis les instructions en choisissant les valeurs par défaut. Pour permettre ultérieurement à cet utilisateur d’effectuer des tâches d’administration, je l’ajoute au groupe wheel :

# usermod -a -G wheel [loginutilisateur]

Installation de sudo

Pour permettre à des utilisateurs standard d’effectuer des taches d’administration, j’installe sudo :

# pacman -S sudo

J’édite ensuite le fichier sudoers avec nano mais en utilisant l’outil visudo :

# EDITOR=nano visudo

Je recherche la section intitulée :

## User privilege specification

Et je décommente la ligne :

%wheel ALL=(ALL) ALL

Je sauvegarde et je redémarre :

# shutdown -r now

Les utilisateurs du groupe wheel (dont fait partie l’utilisateur régulier que je viens de créer) peuvent maitenant effectuer des tâches d’administration en utilisant sudo.

Montage d’une clé USB pour le stockage de masse

C’est quasiment terminé, il me reste à monter une unité de stockage de masse. Je dispose d’une clé USB formatée en ext4.

Je crée un répertoire cleusb1 dans /mnt/ :

# mkdir /mnt/cleusb1

J’édite le fichier /etc/fstab :

# nano /etc/fstab

Auquel je rajoute à la fin la ligne suivante :

/sda1 /mnt/cleusb1 ext4 defaults 0 0

Puis je redémarre le Raspberry Pi :

# shutdown -r now

Ma clé USB est montée.

C’est fini !

Pour aller plus loin :

Redimensionnement des partitions d’une carte SD d’une capacité supérieure à 2 Go pour utiliser la totalité de la mémoire disponible pour le système de fichiers : mise à jour

On lance fdisk :

# fdisk -c -u /dev/mmcblk0

Welcome to fdisk (util-linux 2.23.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help):

Commande p pour lister les partitions :

p

Disk /dev/mmcblk0: 3957 MB, 3957325824 bytes, 7729152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00057540

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 2048 186367 92160 c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 3667967 1740800 5 Extended
/dev/mmcblk0p5 188416 3667967 1739776 83 Linux

Command (m for help):

On commence par effacer la partition logique (d puis 5) :

d

Partition number (1,2,5, default 5):

5

Partition 5 is deleted

Command (m for help):

Puis on efface la partition étendue (d puis 2) :

d

Partition number (1,2, default 2):

2

Partition 2 is deleted

Command (m for help):

On recrée la partition étendue (n puis e, puis 2) :

n

Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):

e

Partition number (2-4, default 2):

2

On la fait démarrer au même endroit (186368, ce qui est ici proposé par défaut) :

First sector (186368-7729151, default 186368):

Entrée

Et elle finit au maximum possible (7729151, ce qui es tproposé ici par défaut) :

Using default value 186368
Last sector, +sectors or +size{K,M,G} (186368-7729151, default 7729151):

Entrée

Using default value 7729151
Partition 2 of type Extended and of size 3.6 GiB is set

Command (m for help):

On recrée ensuite la partition logique (n puis l puis 5) :

n

Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p):

l

La nouvelle partition 5 commence au même secteur que l’ancienne (188416) :

Adding logical partition 5
First sector (188416-7729151, default 188416):

Entrée

Et finit au maximum possible (7729151, valeur proposée par défaut) :

Using default value 188416
Last sector, +sectors or +size{K,M,G} (188416-7729151, default 7729151):

Entrée

Using default value 7729151
Partition 5 of type Linux and of size 3.6 GiB is set

Command (m for help):

On écrit les changements sur la carte :

w

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Redémarrage du Raspberry Pi :

# shutdown -r now

On met le système de fichiers à la dimension de la partition 5 :

# resize2fs /dev/mmcblk0p5

resize2fs 1.42.7 (21-Jan-2013)
Filesystem at /dev/mmcblk0p5 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p5 is now 942592 blocks long.

Et on vérifie que tout s’est bien passé :

# df -h

Filesystem Size Used Avail Use% Mounted on
/dev/root 3.6G 467M 3.0G 14% /
devtmpfs 83M 0 83M 0% /dev
tmpfs 231M 0 231M 0% /dev/shm
tmpfs 231M 264K 231M 1% /run
tmpfs 231M 0 231M 0% /sys/fs/cgroup
tmpfs 231M 0 231M 0% /tmp
/dev/mmcblk0p1 90M 24M 67M 27% /boot

C’est tout !

Une réflexion au sujet de « Arch linux sur Raspberry Pi : installation »

  1. Ping : Serveur d’impression CUPS sur Raspberry Pi et imprimante HP LaserJet P1006 | Carnet

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *