Arch linux sur Raspberry avec boot SSD en USB

Suite à mon article sur l'installation de Deluge sur raspberry, j'avais en tête qu'une version supérieure à celle proposée par raspbian existait. Linux Mint et Manjaro fournissant maintenant la V2 de deluge dans leurs dépôts et étant incompatible avec la version 1.3, je me suis mis en quête de faire une seedbox sur Arch. Le problème c'est que des tutos pour booter sur un ssd usb sans passer par une carte SD, il y en a un paquet pour raspbian mais je n'en ai pas trouvé pour Arch. J'ai fini par trouver la solution et j'en profite pour partager l'expérience.

En pré-requis il faut une version de raspberry capable de booter en USB et préparée pour le faire. Si vous en avez un capable de démarrer en usb sur Raspbian ça devrait le faire avec Arch.

Installation de la distribution

Concernant l'installation d'Arch j'ai suivi la procédure officielle, je vais la résumer ci-dessous avec quelques indications complémentaires. Je l'ai effectué depuis un pc sur linux. Sur windows je suppose que ça doit fonctionner avec WSL.

On commence donc par identifier le disque dur sur lequel on va réaliser l'installation. Je vous conseille d'effectuer toute la procédure en tant que root (sudo -i).

root@MIMINT:~# fdisk -l
Disque /dev/sda : 223,58 GiB, 240057409536 octets, 468862128 secteurs
Disk model: INTEL SSDSC2BW24
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 1FB02E21-ABA1-4638-A074-5927E322ED19

Périphérique     Début       Fin  Secteurs Taille Type
/dev/sda1         2048    448511    446464   218M Système EFI
/dev/sda2       448512  98105343  97656832  46,6G Système de fichiers Linux
/dev/sda3    461049856 468860927   7811072   3,7G Partition d'échange Linux
/dev/sda4     98105344 461049855 362944512 173,1G Système de fichiers Linux

Les entrées de la table de partitions ne sont pas dans l'ordre du disque.


Disque /dev/sdz : 7,47 GiB, 8004829184 octets, 15634432 secteurs
Disk model: USB DISK 2.0    
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x3d1d25da

Périphérique Amorçage Début     Fin Secteurs Taille Id Type
/dev/sdz1    *            0 4104575  4104576     2G  0 Vide
/dev/sdz2               672    5599     4928   2,4M ef EFI (FAT-12/16/32)

Attention, réalisez bien toutes les commandes de cette section sur le bon disque dur. Une commande passée sur le mauvais disque et ciao la partition. Dans la précipitation j'ai écrasé la partition boot de mon PC, c'était pas fun... donc prudence !

Pour ce tuto j'ai utilisé une clé usb de 8 go /dev/sdz qu'on voit ci-dessus. On commence donc avec la préparation du disque ainsi

root@MIMINT:~# fdisk /dev/sdz
Bienvenue dans fdisk (util-linux 2.34).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

On va créer 2 partitions, l'une au format W95 FAT32 de 200 Mo qui sera la partition boot et une seconde EXT4 sur le reste qui contiendra les données du système d'exploitation

La partition de boot est à créer ainsi

Commande (m pour l'aide) : o
Création d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0x1b487d33.

Commande (m pour l'aide) : n
Type de partition
   p   primaire (0 primaire, 0 étendue, 4 libre)
   e   étendue (conteneur pour partitions logiques)

Sélectionnez (p par défaut) : p

Numéro de partition (1-4, 1 par défaut) : 1

Premier secteur (2048-15634431, 2048 par défaut) :
 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-15634431, 15634431 par défaut) : +200M
Une nouvelle partition 1 de type « Linux » et de taille 200 MiB a été créée.

Commande (m pour l'aide) : t
Partition 1 sélectionnée

Code Hexa (taper L pour afficher tous les codes) : c
Type de partition « Linux » modifié en « W95 FAT32 (LBA) ».

J'ai donc commencé par la lettre o pour libérer les partitions du disque, ensuite n puis p et 1 pour créer la 1ère partition primaire. Pour la taille je saisi entrée pour le 1er secteur et +200M pour définir la taille de la partition. Enfin t puis c pour définir le type W95 FAT32.

Ensuite on enchaîne de la même manière pour la partition du système

Commande (m pour l'aide) : n
Type de partition
   p   primaire (1 primaire, 0 étendue, 3 libre)
   e   étendue (conteneur pour partitions logiques)

Sélectionnez (p par défaut) : p

Numéro de partition (2-4, 2 par défaut) : 

Premier secteur (411648-15634431, 411648 par défaut) : 

Last sector, +/-sectors or +/-size{K,M,G,T,P} (411648-15634431, 15634431 par défaut) : 

Une nouvelle partition 2 de type « Linux » et de taille 7,3 GiB a été créée.

Ici il suffit de saisir n puis p et valider tout le reste avec entrée ce qui va générer une partition de type linux sur tout le reste du disque.

Après ceci avec p vous devriez pouvoir vérifier vos 2 partitions sdz1 et sdz2 chez moi.

Commande (m pour l'aide) : p
Disque /dev/sdz : 7,47 GiB, 8004829184 octets, 15634432 secteurs
Disk model: USB DISK 2.0    
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x1b487d33

Périphérique Amorçage  Début      Fin Secteurs Taille Id Type
/dev/sdz1               2048   411647   409600   200M  c W95 FAT32 (LBA)
/dev/sdz2             411648 15634431 15222784   7,3G 83 Linux

Si c'est ok on valide le tout avec w

Commande (m pour l'aide) : w
La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
Synchronisation des disques.

On formate nos deux partitions (Ici Attention à ne pas se tromper !)

root@MIMINT:~# mkfs.vfat /dev/sdz1
mkfs.fat 4.1 (2017-01-24)

root@MIMINT:~# mkfs.ext4 /dev/sdz2
mke2fs 1.45.5 (07-Jan-2020)
En train de créer un système de fichiers avec 1902848 4k blocs et 475776 i-noeuds.
UUID de système de fichiers=3acaf573-85ba-4d43-99b8-795bcf67b071
Superblocs de secours stockés sur les blocs : 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocation des tables de groupe : complété                            
Écriture des tables d'i-noeuds : complété                            
Création du journal (16384 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Maintenant créez deux dossiers root et boot et montez vos partitions dessus

root@MIMINT:~# mkdir root boot
root@MIMINT:~# mount /dev/sdz1 boot/
root@MIMINT:~# mount /dev/sdz2 root/

Petit rappel ne mettez pas "/boot" mais bien boot/. J'ai du mal avec ça 🙄 .

Les partitions sont prêtes à recevoir la distribution. On lance donc le téléchargement de la distribution qu'on installe sur la partition root. Pour info, sur les versions récentes de Linux Mint/Ubuntu bsdtar s'installe avec le paquet libarchive-tools.

root@MIMINT:~# wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz
root@MIMINT:~# bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C root
root@MIMINT:~# sync

J'utilise la version rpi2 pour mon 3B+, comme indiqué sur le site de Arch, ça fonctionne nikel. Si vous voulez essayer avec d'autres versions elles sont listées ici. Pour les versions 3 et 2 je vous conseille de faire comme moi. Pour la version 4 du pi je renseignerais plutôt cette url : http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-4-latest.tar.gz

Enfin on déplace les fichiers boot dans la bonne partition

root@MIMINT:~# mv root/boot/* boot

La procédure d'installation officielle se termine ici. Avec une carte Sd l'installation serait terminée, il suffirait de démonter les partitions root et boot de cette manière pour commencer à utiliser son pi.

root@MIMINT:~# umount boot root

De mon côté je ne fais pas cette commande. J'enchaîne sur la configuration qui va permettre de démarrer cette installation depuis un disque usb.

Configuration du boot en USB

L'idée étant de faire fonctionner tout le système sur un disque usb, on va faire quelques modifications aux fichiers de la distribution.

Tout d'abord, on va récupérer les PARTUUID des deux partitions que nous venons de créer

root@MIMINT:~# ls -l /dev/disk/by-partuuid/
total 0
lrwxrwxrwx 1 root root 10 déc.   5 21:26 09cf210b-62af-4be8-80fa-12989c13fe56 -> ../../sda2
lrwxrwxrwx 1 root root 10 déc.   5 21:26 24028c9e-9d33-4f22-be1a-17188510499b -> ../../sda4
lrwxrwxrwx 1 root root 10 déc.   5 21:26 3d7de209-e32a-4801-b03f-0b4f34076115 -> ../../sda1
lrwxrwxrwx 1 root root 10 déc.   5 21:26 71e4eaf9-3ddf-4174-97a8-2824ed7a1475 -> ../../sda3
lrwxrwxrwx 1 root root 10 déc.   5 21:34 c3c6f0ff-01 -> ../../sdz1
lrwxrwxrwx 1 root root 10 déc.   5 21:34 c3c6f0ff-02 -> ../../sdz2

Les deux identifiants c3c6f0ff-01 et c3c6f0ff-02 correspondant aux partitions du disque sdz resteront les mêmes sur le raspberry. Nous allons donc les utiliser pour configurer le démarrage.

Une fois que c'est noté nous éditons le fichier cmdline.txt présent dans le dossier boot créé précédement et on indique le PARTUUID de la partition root comme ceci. Je ne modifie que le root=, c'est possible que le reste diffère avec le temps.

root=PARTUUID=c3c6f0ff-02 rw rootwait console=ttyAMA0,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop

Ensuite on modifie le fichier fstab du dossier root/etc comme ceci

# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
PARTUUID=c3c6f0ff-01    /boot   vfat    defaults        0       2
PARTUUID=c3c6f0ff-02    /       ext4    defaults,noatime        0       1

On peut démonter les dossiers root et boot cette fois

root@MIMINT:~# umount boot root

Voilà avec ceci votre Raspberry devrait démarrer directement sur votre disque USB. J'ai plutôt galéré pour trouver comment faire pour le contenu de cette section et c'est tout bête ^^

Premier pas après installation

Le ssh est actif automatiquement au démarrage du Raspberry, l'utilisateur par défaut est alarm et le mdp alarm. Le mdp root est root.

Avant d'installer vos premiers paquets ou de faire des mises à jour, il faudra passer ces commandes en root pour que pacman fonctionne

[alarm@alarmpi ~]$ su root
 
[root@alarmpi alarm]# pacman-key --init

[root@alarmpi alarm]# pacman-key --populate archlinuxarm

Après avoir passé ces deux commandes vous devriez pouvoir mettre à jour votre OS avec la commande

[root@alarmpi alarm]# pacman -Syyu

Vous pourrez renommer votre pi avec

echo nouveau_nom > /etc/hostname

Par défaut il me semble que la distribution est en qwerty en mode console, ces commandes permettent de le passer en Azerty

loadkeys fr-pc

echo "KEYMAP=fr-pc" > /etc/vconsole.conf

Sudo n'est pas inclus, si vous y êtes habitués et désirez l'installer faites

pacman -S sudo

Puis éditez le fichier /etc/sudoers pour ajouter la ligne qui commence par la ligne alarm et décomenter celle qui commance par %sudo

##
## User privilege specification
##
root ALL=(ALL) ALL
alarm ALL=(ALL) ALL

## Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Uncomment to allow members of group sudo to execute any command
%sudo   ALL=(ALL) ALL

Sinon vous trouverez tout un tas de trucs que je fais lors de l'installation d'un Raspberry sur mon wiki

Voilà vous n'avez plus qu'à faire vos trucs de geek.

6 réflexions sur “Arch linux sur Raspberry avec boot SSD en USB”

  1. Bonjour,
    Est ce que ce tutoriel est toujours d’actualité ?
    J’ai essayé de le suivre mais j’ai eu beaucoup de difficulté car certaines informations ne sont plus du tout à jour.
    Auriez vous un autre tutoriel mise à jour ?

  2. Bonjour Kamichetty,

    J’ai fait quelque chose de similaire il y a peu de temps avec un Raspberry Pi OS, je n’ai pas l’impression que ça ait changé des masses. Tu peux me dire à quel niveau tu bloques ou ce qui te semble obsolète? Tu utilise quoi comme raspberry? J’ai constaté sur plusieurs 3B que ça ne bootait pas sur SSD, j’ai l’impression que ça ne fonctionne vraiment qu’à partir des 3b+. Dans ce cas il faut laisser la partition boot sur la carte SD et uniquement traiter la partition root.

  3. Bonjour,
    Merci pour votre retour. Finalement, j’ai réussi à effectuer l’installation, en essayant de relire le tuto lentement.
    Mais là où je suis un peu perdu c’est dans l’installation de XFCE, il n’y a pas un site qui soit correcte du coup, j’ai regardé sur les divers sites et j’ai fait un mix de différents site, XFCE se lance mais très lentement. Est ce que vous auriez le procédé ou un tutoriel pour l’installation de XFCE ?

    Votre procédé est bien fait et très clair.

  4. Bonjour,

    Ah tant mieux si tu as pu réussir. Je ne suis pas familier de XFCE désolé, j’utilisais le raspberry en ligne de commande uniquement. Bon courage.

  5. Bonjour Tchoupislayer,

    Si j’ai l’occasion je testerais avec /boot/firmware/config.txt. Parce que le reste de ton lien je l’ai tenté sur plusieurs pi 3 sans succès à chaque fois.

Laisser un commentaire

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