:: Installation minimale d'ArchLinux avec système de fichier crypté et UEFI ::
Préparation de l'installation
- Télécharger l'archiso à partir du site https://www.archlinux.org/
Préparer la clé usb
# dd if=archlinux.img of=/dev/sdX bs=16M && sync
Démarrer sur la clé usb et attendre le prompt root
Installation
Sélection du clavier
Pour lister les types de clavier français disponibles :
# find /usr/share/kbd/keymaps -iname '*fr*' -printf '%f\n'
Chargement du clavier :
# loadkeys fr
Configuration du wifi
# wifi-menu
Synchronisation horaire
# timedatectl set-ntp true
Schéma de partitionnement
Sur mon Thinkpad, la taille du disque SSD est de 128Go.
1G sera réservé pour les partitions de boot (boot et EFI) et le reste intégralement chiffré.
A noter que les tailles des partitions efi et boot ne sont pas optimisées, 100M serait suffisant pour efi et 250M pour boot...
Configuration cible
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119,2G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 512M 0 part /boot
└─sda3 8:3 0 118,2G 0 part
└─cryptroot 254:0 0 118,2G 0 crypt
├─vg0-swap 254:1 0 4G 0 lvm [SWAP]
├─vg0-root 254:2 0 20G 0 lvm /
└─vg0-home 254:3 0 94,2G 0 lvm /home
Une partition de swap n'est pas nécessaire, mais peut s'avérer pratique si on souhaite utiliser les fonctions d'hibernation d'un portable.
Dans ce cas, la taille de la partition doit être au moins égale à la quantité de RAM, sur mon Thinkpad -> 3915312 octets.
Création des partitions
# cgdisk /dev/sda
Créer les partitions suivantes :
Partition | Périphérique | Taille | Système | Hex code |
---|---|---|---|---|
EFI | /dev/sda1 | 512M | vfat | ef00 |
boot | /dev/sda2 | 512M | ext2 | 8300 |
cryptroot | /dev/sda3 | Espace disque restant | luks | 8300 |
Formatage des partitions
# mkfs.vfat -F32 /dev/sda1
# mkfs.ext2 /dev/sda2
Chiffrement de la partition cryptroot
# cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y --use-random /dev/sda3
# cryptsetup luksOpen /dev/sda3 cryptroot
Création des volumes logiques
Créer un groupe de volume (vg0) et les volumes logiques suivants :
Volume logique | Taille |
---|---|
swap | 4G |
root | 20G |
home | le reste |
# pvcreate /dev/mapper/cryptroot
# vgcreate vg0 /dev/mapper/cryptroot
# lvcreate --size 4G vg0 --name swap
# lvcreate --size 20G vg0 --name root
# lvcreate --extents +100%FREE vg0 --name home
Création des systèmes de fichiers
# mkfs.ext4 /dev/mapper/vg0-root
# mkfs.ext4 /dev/mapper/vg0-home
# mkswap /dev/mapper/vg0-swap
# swapon /dev/mapper/vg0-swap
Montage des partitions
# mount /dev/mapper/vg0-root /mnt
# mkdir /mnt/boot && mount /dev/sda2 /mnt/boot
# mkdir /mnt/boot/efi && mount /dev/sda1 /mnt/boot/efi
# mkdir /mnt/home && mount /dev/mapper/vg0-home /mnt/home
Sélection des miroirs
Manuelle
/etc/pacman.d/mirrorlist
Décommenter et déplacer en haut du fichier le miroir préféré.
Test des miroirs
Sauvegarder le mirrorlist existant et préparer une copie de travail
# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak # cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.test
Modifier le fichier mirrorlist.test et décommenter les miroirs à tester
Pour garder les miroirs français, générer le fichier à partir de la commande suivante :
# grep -E '^## France$' -A 1 /etc/pacman.d/mirrorlist | grep -vE '^-' > /etc/pacman.d/mirrorlist.test
Pour décommenter tous les serveurs :
# sed -i 's/^#\s*Server/Server/' /etc/pacman.d/mirrorlist.test
Tester les miroirs et générer le nouveau mirrorlist (ici avec les 5 miroirs les plus rapides uniquement) :
# rankmirrors -n 5 /etc/pacman.d/mirrorlist.test > /etc/pacman.d/mirrorlist
Installation des paquets
Installation du système de base et des outils nécessaires au premier démarrage.
Système de base
# pacstrap /mnt base base-devel linux linux-firmware pacman-contrib
Outils supplémentaires (liste non-exhaustive) :
# pacstrap /mnt grub-efi-x86_64 efibootmgr mkinitcpio lvm2 wpa_supplicant wireless_tools vim zip unzip alsa-utils lsb-release ntfs-3g dosfstools exfat-utils bash-completion man-db
Création du fstab
# genfstab -pU /mnt >> /mnt/etc/fstab
tempfs sur /tmp
# /tmp
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
Options pour SSD
Remplacer les options relatime
par noatime
sur les partitions sauf celle de boot (limite les accès et augmente donc la durée de vie d'un disque SSD)
Entrer dans le nouveau système
# arch-chroot /mnt /bin/bash
Fuseau horaire
# ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
# hwclock --systohc --utc
Localisation
/etc/locale.gen
Décommenter fr_FR.UTF-8 UTF-8
dans le fichier puis regénérer les locales :
# locale-gen
/etc/locale.conf
LANG=fr_FR.UTF-8
/etc/vconsole.conf
KEYMAP=fr
Nom d'hôte
/etc/hostname
myhostname
/etc/hosts
127.0.0.1 localhost ::1 localhost 127.0.1.1 myhostname.domain.local myhostname
Utilisateurs
Modification du mot de passe root
# passwd
Utilisateur supplémentaire
# useradd -m -g users -G wheel username
# passwd username
Configuration de mkinitcpio
Editer le fichier /etc/mkinitcpio.conf
Ajouter les options suivantes avant 'filesystems' :
- keymap : chargement du clavier
- encrypt : gestion du chiffrement
- lvm2 : gestion des volumes logiques
- resume : gestion du mode hibernation
Note : quelque soit l'ordre choisi, pensez toujours à placer keymap devant encrypt, sous peine de vous retrouver avec un clavier qwerty pour taper la passphrase permettant de déchiffrer le volume principal
Au final, cela donne :
HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck)
Regénérer l'image initrd
# mkinitcpio -p linux
GRUB
Installation
# grub-install
Configuration
Editer le fichier /etc/default/grub
et modifier la variable GRUB_CMDLINE_LINUX
afin de préciser le périphérique chiffré (cryptroot) et le périphérique d'hibernation (partition de swap) :
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda3:cryptroot resume=/dev/mapper/vg0-swap"
Regénérer le grub.cfg
# grub-mkconfig -o /boot/grub/grub.cfg
Fin de l'installation et redémarrage
# exit
# umount -R /mnt
# swapoff -a
# reboot
Au démarrage la passphrase est demandée afin de déchiffrer le volume puis on accède à la console. On a maintenant un système minimal installé et fonctionnel.
Configuration du réseau
Avec l'arrivée de la version 197 de systemd le nom des interfaces réseau est maintenant préfixé de en (ethernet), wl (wlan) ou ww (wwan), suivi par un identifiant généré automatiquement et prévisible.
Le but étant de fixer le nom des interfaces entre chaque démarrage.
Pour lister les interfaces réseaux :
# ip link show
1: lo [...]
3: enp0s25 [...]
4: wlp3s0 [...]
6: wwp0s29u1u4i6 [...]
Configuration manuelle
Dans le cas où tous les outils ne sont pas encore installés ou si il n'y a pas de serveur dhcp sur le réseau, il peut s'avérer pratique de configurer une connexion manuellement.
Ethernet
Activer l'interface ethernet, ici enp0s25
# ip link set dev enp0s25 up
Affecter une adresse ipv4 à l'interface, ici 192.168.0.60 dans le réseau 192.168.0.0/24 :
# ip address add 192.168.0.60/24 broadcast + dev enp0s25
Ajouter la route par défaut pour accéder à internet, ici 192.168.0.254 :
# ip route add default via 192.168.0.254 dev enp0s25
systemd-networkd
systemd offre maintenant la possibilité de gérer le réseau par lui-même sans outils supplémentaires.
systemd-networkd permet de détecter, configurer et gérer les connexions réseaux; il peut aussi créer des connexions virtuelles.
Ethernet
Créer le fichier
/etc/systemd/network/enp0s25.network
[Match] Name=enp0s25 [Network] DHCP=yes [DHCP] RouteMetric=10
Activer et démarrer le service
# systemctl enable systemd-networkd.service # systemctl start systemd-networkd.service
Wifi
Créer le fichier
/etc/systemd/network/wlp3s0.network
[Match] Name=wlp3s0 [Network] DHCP=yes [DHCP] RouteMetric=20
Créer le fichier
/etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf
ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheel update_config=1 ap_scan=1 fast_reauth=1 country=FR
Ajouter un réseau
# wpa_passphrase ESSID passphrase >> /etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf
Si votre clé wifi est complexe, il est parfois plus simple de la coller dans un fichier texte et d'importer la clé directement :
# wpa_passphrase ESSID `cat /mnt/usb/essid.pwd` >> /etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf
Nettoyer le fichier
La commande précédente ajoute à la fin du fichier une section
network
qui contient votre clé wifi en clair.
Il est conseillé de supprimer cette ligne :network={ ssid="ESSID" #psk="passphrase" <------- Supprimer cette ligne psk=d5b7ea2dda330fb59753d126e0b98bc968644423abb76bb52374a027718219c6 }
Activer et démarrer les services
# systemctl enable systemd-networkd.service # systemctl enable wpa_supplicant@wlp3s0.service # systemctl start systemd-networkd.service # systemctl start wpa_supplicant@wlp3s0.service
systemd-resolved
systemd-resolved est un service systemd fournissant la résolution de noms aux applications locales.
Dans notre cas, le plus simple (et recommandé) est d'utiliser le fichier de stub DNS :
# ln -s /run/systemd/resolved/stub-resolv.conf /etc/resolv.conf
Activer et démarrer le service systemd-resolved.service
# systemctl enable systemd-resolved.service
# systemctl start systemd-resolved.service
Configuration post-install
Pour configurer un environnement graphique basé sur openbox, cf. Configuration environnement graphique avec Openbox
References
- The official installation guide
- Minimal instructions for installing arch linux on an UEFI system with full system encryption using dm-crypt and luks · GitHub
- An efficient method to install Arch Linux with encrypted root and swap filesystems and boot from UEFI. Multi-OS, and VirtualBox, UEFI-booting are also supported. · GitHub