Pour commenter cette installation, merci de le faire dans les commentaires de la vidéo.
Cahier des charges
Cette installation avancée de Arch Linux a pour but de proposer une alternative sécurisée et modulaire aux installations classiques. Elle permet d’aborder des sujets tels que UEFI, LVM, BTRFS et RAID.
Principales caractéristiques
- Firmware UEFI
- 5 disques physiques SSD / NVME interchangeables
- Chiffrage complet, y compris de la partition boot
- Partitions système / cache / logs / home séparées
- Partitions redimentionnables à chaud
- Répartition physique des données pour un maximum de performances et sécurité
- TRIM SSD cohérent sur l’ensemble des couches (LUKS, LVM, BTRFS)
- Données stratégiques en miroir (raid1 btrfs)
- Partition de swap chiffrée et redimentionnable
- Politique de snapshot pour le système et les données
- Stratégie de partage cohérente du cache de paquetages pacman
- Partition système spéciale “sandbox” pour essais
- Système de fichiers BTRFS
- Compression zstd, @, @/home, @/var, @/var/log, @/var/cache/pacman/pkg, @snapshot
- Schéma compatible snapper
Partitionnement
Le schéma de partitionnement est résumé ainsi :

Commandes d’installation
Ces commandes peuvent être utilisées comme base pour préparer et optimiser son installation.
Il est conseillé de préparer dans un fichier les commandes spécifiques à utiliser pour son installation. La plupart des commandes ci-dessous ont été étudiées pour être “scriptables”.
Variables utiles
Variables utilisées lors de l’installation :
# Options de montage & variables
OPTS=defaults,noatime,nodiratime,ssd,compress=zstd
DISKS_KEY_PATH='/etc/keys'
DISKS_KEY_FILE=/etc/keys'/disks.key'
Partitionnement des disques
Formatage initial des partitions :
# Disque 1 : EFI, systèmes, début des données
sgdisk --clear \
--new=1:0:+512MiB --typecode=1:ef00 --change-name=1:EFI \
--new=2:0:+500GiB --typecode=2:8309 --change-name=2:SYS \
--new=3:0:0 --typecode=3:8309 --change-name=3:CDISK1 \
/dev/vda
# Disques 2-5
sgdisk --clear --new=1:0:0 --typecode=1:8309 --change-name=1:CDISK2 /dev/vdb
sgdisk --clear --new=1:0:0 --typecode=1:8309 --change-name=1:CDISK3 /dev/vdc
sgdisk --clear --new=1:0:0 --typecode=1:8309 --change-name=1:CDISK4 /dev/vdd
sgdisk --clear --new=1:0:0 --typecode=1:8309 --change-name=1:CDISK5 /dev/vde
# Vérifications
fdisk -l | grep -e '^/dev'
ls -l /dev/disk/by-partlabel
Installation du système de fichiers pour la partition EFI :
# Formatage Fat32 pour EFI
mkfs.vfat -F32 -n EFI /dev/disk/by-partlabel/EFI
Chiffrement de la partition “system” :
# Chiffrement
cryptsetup luksFormat \
--type luks2 \
--align-payload 8192 \
--pbkdf argon2id \
--iter-time 5000 \
--key-size 256 \
--cipher aes-xts-plain64 \
--verify-passphrase \
/dev/disk/by-partlabel/SYS
# Ouverture
cryptsetup open /dev/disk/by-partlabel/SYS system
Couche LVM de la partition “system” :
# Création du volume physique LVM - optimisé pour SSD
pvcreate --dataalignment 4M /dev/mapper/system
# Création du groupe de volumes vgsys
vgcreate vgsys /dev/mapper/system
# Création du volume logique arch
lvcreate --extents +100%FREE vgsys /dev/mapper/system --name arch
Installation de la couche BTRFS des systèmes et Montage :
# Création du système de fichiers BTRFS des systèmes
# --nodiscard le TRIM sera exécuté de manière périodique par fstrim.timer
mkfs.btrfs -q --nodiscard --label ARCH /dev/vgsys/arch
# Montage du volume logique system
mount -o $OPTS /dev/mapper/vgsys-arch /mnt && cd /mnt
# Volume système racine
btrfs subvolume create @
# Volume racine du système sandbox
btrfs subvolume create @sandbox
# Démontage du groupe de volume et montage du volume logique du système
cd && umount /mnt && mount -o $OPTS,subvol=@ /dev/mapper/vgsys-arch /mnt
Création de la clé de chiffrement LUKS :
# Génération de la clé LUKS commune des disques
mkdir -p /mnt/etc/keys
dd if=/dev/urandom of=/mnt/etc/keys/disks.key bs=1024 count=1
chmod u=rw,g=,o= /mnt/etc/keys/disks.key
Il est important de sauvegarder la clé de chiffrement dans un endroit sûr avant de continuer, surtout s’il s’agit de l’installation d’un système définitif :
# Sauvegarder la clé dans un endroit sûr
scp /mnt/etc/keys/disks.key <user>@<backupserver>:<path>/
Chiffrement et ouverture des disques de données :
# Création des partitions chiffrées sur tous les disques
# Alignement 8192 adapté aux disques SSD
for i in 1 2 3 4 5; do
cryptsetup luksFormat \
--batch-mode \
--type luks2 \
--align-payload 8192 \
/dev/disk/by-partlabel/CDISK$i \
/mnt/etc/keys/disks.key
done
# Ouverture des disques
for i in 1 2 3 4; do
cryptsetup open /dev/disk/by-partlabel/CDISK$i disk$i --key-file=/mnt/etc/keys/disks.key
done
cryptsetup open /dev/disk/by-partlabel/CDISK5 mirror --key-file=/mnt/etc/keys/disks.key
# Vérification des tailles de volumes
lsblk
# Vérification de la présence des mappers
# disk1 disk2 disk3 disk4 mirror system vgsys-arch
ls /dev/mapper/
Puis on démonte toutes les partitions pour la suite :
# Nettoyage
umount -R /mnt
Installation des couches LVM pour les données :
# Création des volumes physiques
for i in 1 2 3 4; do
pvcreate --dataalignment 4M /dev/mapper/disk$i
done
# Création du groupe de volume des données
vgcreate vgdat /dev/mapper/disk1
for i in 2 3 4; do
vgextend vgdat /dev/mapper/disk$i
done
# Volume logique "home" hébergé sur les disques 1 et 2 (vda3, vdb1)
lvcreate --extents +100%FREE vgdat /dev/mapper/disk1 /dev/mapper/disk2 --name home
# Volume logique "var" hébergé sur le disque 3 (vdc1)
lvcreate --extents +100%FREE vgdat /dev/mapper/disk3 --name var
# Volume logique "swap" hébergé sur le disque 4 (vdd1)
lvcreate --size 32G vgdat /dev/mapper/disk4 --name swap
# Volume logique "clog" (cache & logs) hébergé sur le disque 4 (vdd1)
lvcreate --extents +100%FREE vgdat /dev/mapper/disk4 --name clog
# Vérifier les tailles des volumes logiques
#lvdisplay
lsblk
# Vérifier l'existance des mappers x5
ls -l /dev/mapper/vg*
Installation des systèmes de fichiers (swap, btrfs) pour les données :
# Partition de swap + label SWAP
mkswap --label SWAP /dev/vgdat/swap
# Partition btrfs HOME
# -d raid1 -> on mirror les données mais pas les méta-données (-m)
mkfs.btrfs -q --nodiscard -d raid1 --label HOME /dev/vgdat/home /dev/mapper/mirror
# Partition btrfs VAR
mkfs.btrfs -q --nodiscard --label VAR /dev/vgdat/var
# Partition btrfs CLOG
mkfs.btrfs -q --nodiscard --label CLOG /dev/vgdat/clog
Création des sous-volumes BTRFS :
# Montage du volume logique home
mount -o $OPTS /dev/mapper/vgdat-home /mnt && cd /mnt
# Volume home contenant les configs des utilisateurs
btrfs subvolume create @home
# Volume pour les données importantes des utilisateurs
btrfs subvolume create @data
# Montage du volume logique var
cd && umount /mnt && mount -o $OPTS /dev/mapper/vgdat-var /mnt && cd /mnt
# Volume pour les données (DB, VMs), optimisé avec NOCOW
btrfs subvolume create @var
# Désactivation du comportement copy-on-write sur le
# volume var et ses potentiels fichiers volumineux
chattr +C @var
# Sous-volume pour le cache de paquetages pacman partagé
btrfs subvolume create @pkg
# Montage du volume logique clog
cd && umount /mnt && mount -o $OPTS /dev/mapper/vgdat-clog /mnt && cd /mnt
# Sous-volume pour le cache
btrfs subvolume create @cache
# Sous-volume pour les logs
btrfs subvolume create @log
# Nettoyage
cd && umount /mnt
Montage du système de fichiers :
# On monte le nécessaire
# Note : on ne monte pas le swap, qui sera géré avec zram-generator
mount -o $OPTS,subvol=@ /dev/mapper/vgsys-arch /mnt
mount -o $OPTS,subvol=@home /dev/mapper/vgdat-home /mnt/home
mount -o $OPTS,subvol=@data /dev/mapper/vgdat-home /mnt/data
mount -o $OPTS,subvol=@var /dev/mapper/vgdat-var /mnt/var
mount -o $OPTS,subvol=@pkg /dev/mapper/vgdat-var /mnt/var/cache/pacman/pkg
mount -o $OPTS,subvol=@log /dev/mapper/vgdat-clog /mnt/var/log
mount -o $OPTS,subvol=@cache /dev/mapper/vgdat-clog /mnt/var/cache
mount -o defaults,ro --mkdir /dev/mapper/mirror /mnt/.mirror
mount --mkdir /dev/disk/by-partlabel/EFI /mnt/efi
# Vérification
df -h | grep /mnt
La sortie de la commande df doit donner ceci :
/dev/mapper/vgsys-arch 500G 5.9M 498G 1% /mnt
/dev/mapper/vgdat-home 1.0T 5.7M 1023G 1% /mnt/home
/dev/mapper/vgdat-home 1.0T 5.7M 1023G 1% /mnt/data
/dev/mapper/vgdat-var 2.0T 5.9M 2.0T 1% /mnt/var
/dev/mapper/vgdat-clog 168G 5.9M 166G 1% /mnt/var/log
/dev/mapper/vgdat-clog 168G 5.9M 166G 1% /mnt/var/cache
/dev/mapper/vgdat-home 1.0T 5.7M 1023G 1% /mnt/.mirror
/dev/vda1 511M 4.0K 511M 1% /mnt/efi
Installation du système principal
On commence par installer le système minimal :
# Fixes + paquets de base
pacman-key --init && \
pacman-key --populate && \
pacman -Sy --noconfirm archlinux-keyring && \
pacstrap -c -K /mnt base vim sudo tmux curl zsh git
Génération du fichier fstab :
- On utilise des LABELS et non des UUID car on est sur une couche logique.
- On supprime les mentions ‘subvolid’ pour pouvoir faire des snapshots.
# Vérification
genfstab -L -t LABEL /mnt | sed 's/subvolid=[0-9][0-9]*,//' \
| grep -v '^ *$' \
| grep -v '^#'
# Génération du fichier fstab
genfstab -L -t LABEL /mnt | sed 's/subvolid=[0-9][0-9]*,//' >> /mnt/etc/fstab
# Ajout d'un tmpfs de 1G dans fstab (optionnel)
echo "tmpfs /tmp tmpfs rw,nodev,nosuid,size=1G 0 0" >> /mnt/etc/fstab
# Vérification
cat /mnt/etc/fstab
Installation initiale et configurations de base. Concernant l’installation des paquets :
hdparmetutil-linuxservent à l’exécution périodique du TRIM SSDxdg-user-dirsest utile pour la génération des répertoires utilisateur
# On rentre dans le nouveau système
arch-chroot /mnt
# On peut installer reflector pour optimiser (optionnel)
pacman -S --noconfirm reflector
reflector \
--save /etc/pacman.d/mirrorlist \
--country Canada \
--protocol https \
--latest 10 \
--verbose
# Vérification des mirroirs
cat /etc/pacman.d/mirrorlist
# Optimisation du fichier de configuration pacman (optionnel)
sed -i 's/^#Color$/Color/' /etc/pacman.conf
sed -i 's/^#ParallelDownloads = .$/ParallelDownloads = 4/' /etc/pacman.conf
# Installation des paquets
pacman -S --noconfirm --needed \
linux intel-ucode qemu-guest-agent \
lvm2 btrfs-progs zram-generator \
net-tools dhcpcd openssh \
hdparm util-linux \
sbctl efibootmgr \
terminus-font less tree \
xdg-user-dirs \
git snapper snap-pac
Configurations initiales de notre système.
Concernant l’optimisation du swap avec zram : en général on met un swapiness faible pour limiter l’utilisation du swap, mais avec une utilisation en zram, une valeur > 100 permettra à zram de compresser les données en RAM les moins utilisées.
# Date et heure
ln -sf /usr/share/zoneinfo/America/Miquelon /etc/localtime
hwclock --systohc
# Langues
sed -i 's/^#\(fr_FR\.UTF-8\)/\1/' /etc/locale.gen
sed -i 's/^#\(en_US\.UTF-8\)/\1/' /etc/locale.gen
locale-gen
echo "LANG=fr_FR.UTF-8" > /etc/locale.conf
echo "LC_MESSAGES=fr_FR.UTF-8" >> /etc/locale.conf
# Clavier & font
echo "KEYMAP=fr-latin1" > /etc/vconsole.conf
echo "FONT=ter-132b" >> /etc/vconsole.conf
# Editeur par défaut (optionnel)
echo "EDITOR=vim" >> /etc/environment
# Nom de la machine
echo archadv > /etc/hostname
# Configuration ZRAM + SWAP
cat << 'EOF' > /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
swap-priority = 100
fs-type = swap
writeback-device = /dev/disk/by-label/SWAP
EOF
# Optimisation du swap avec zram
cat << 'EOF' > /etc/sysctl.d/99-vm-zram-parameters.conf
vm.swappiness = 180
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
vm.page-cluster = 0
EOF
Mise en place d’un hook (déclancheur) qui génère les répertoires utilisateurs et leurs liens vers la partition de données au moment de la création d’un utilisateur :
# Hook de création des users
mkdir -p /etc/shadow-maint/useradd-post.d
cat << 'EOF' > /etc/shadow-maint/useradd-post.d/01-home-links
#!/bin/bash
echo "Creating home directories links to data partition..."
source /etc/locale.conf
runuser -u $SUBJECT -- /usr/bin/xdg-user-dirs-update
HOMEDIRS=`cat /home/$SUBJECT/.config/user-dirs.dirs | grep -e '^XDG_' | sed 's#^.*/\(.*\)"$#\1#'`
for homedir in $HOMEDIRS
do
mkdir -p /data/$SUBJECT/$homedir
rmdir /home/$SUBJECT/$homedir
ln -sf /data/$SUBJECT/$homedir /home/$SUBJECT/$homedir
chown -h $SUBJECT:$SUBJECT /home/$SUBJECT/$homedir
done
chown -R $SUBJECT:$SUBJECT /data/$SUBJECT
chmod 0750 /data/$SUBJECT /data/$SUBJECT/*
EOF
sudo chmod a+x /etc/shadow-maint/useradd-post.d/01-home-links
Création d’un utilisateur et définition des mots de passe :
Lors de la création de l’utilisateur, le hook est déjà actif. Le message “Doit afficher “Creating home directories links to data partition…” doit s’afficher à l’exécution de
adduser.
# Utilisateur administrateur / principal + vérification du hook
useradd -m -G wheel --shell /usr/bin/zsh darkone
runuser -u darkone -- ls -l /home/darkone
# Mots de passe des utilisateurs + wheel = sudoers
passwd darkone
passwd
sed -i 's/^# \(.wheel.*NOPASSWD: ALL\)$/\1/' /etc/sudoers
On active le “discard” de la couche LVM pour optimiser l’utilisation des SSD, on crée la conf des snapshots et active les principaux services :
# Activation du discard pour LVM
# issue_discards = 1
sed -i 's/^\([\t ]*\)\# *issue_discards *= *[01]$/\1issue_discards = 1/' /etc/lvm/lvm.conf
cat /etc/lvm/lvm.conf | grep issue_discard
# Configuration des snapshots avec snapper
snapper --no-dbus -c arch create-config /
snapper --no-dbus -c home create-config /home
snapper --no-dbus -c data create-config /data
# Activation des services
systemctl enable \
systemd-timesyncd dhcpcd sshd \
reflector.timer fstrim.timer \
systemd-zram-setup@zram0.service
Ajout des modules de démarrage nécessaire aux opérations de déchiffrement et de montage :
# Dans les BINARIES, ajouter btrfsck
# Dans les HOOKS, ajouter encrypt lvm2 btrfs (resume) avant "filesystems"
cat /etc/mkinitcpio.conf | grep -e '^HOOKS'
sed -i 's/^\(HOOKS=.*block\) \(filesystems.*\)$/\1 encrypt lvm2 btrfs \2/' /etc/mkinitcpio.conf
cat /etc/mkinitcpio.conf | grep -e '^HOOKS'
# Régénérer
mkinitcpio -p linux
Configuration des partitions chiffrées
On procède à l’extraction des partitions chiffrées pour les injecter dans /etc/crypttab. On s’arrange pour que le mot de passe soit demandé une seul fois pour toutes les partitions :
# Entrées crypttab pour les partitions de données
blkid | grep CDISK \
| sed 's/"//g' \
| sed 's/PARTLABEL=C//' \
| awk '{print tolower($4) "\t" $2 "\t/etc/keys/disks.key\tluks,discard,no-read-workqueue,no-write-workqueue"}' \
| sort \
| tee -a /etc/crypttab
Paramétrage du boot UKI et création de l’entrée EFI : on crée une entrée dans /etc/kernel/cmdline avec les paramètres de démarrage :
Avec l’utilisation d’un autre bootloader (GRUB, systemd-boot) il faut également spécifier le disque de démarrage et les paramètres nécessaires au chargement du système.
# Commande de démarrage à intégrer au bundle EFI
# https://wiki.archlinux.org/title/EFISTUB#Using_UEFI_directly
blkid --match-token PARTLABEL=SYS -s UUID -o value \
| awk '{print "cryptdevice=UUID=" $1 ":vg:allow-discards root=/dev/mapper/vgsys-arch rootflags=subvol=@ rw initrd=\\intel-ucode.img initrd=\\initramfs-linux.img"}' \
| tee /etc/kernel/cmdline
# Génération des clés secure boot (optionel) et création du bundle efi
# Cf. https://wiki.archlinux.org/title/Unified_kernel_image#sbctl
sbctl create-keys
sbctl bundle --save /efi/arch-linux.efi
Enregistrement de l’entrée pour le firmware de démarrage :
Il faut que efivars soit accessibles et en écriture.
# Création du fichier EFI
efibootmgr --create \
--disk /dev/vda --part 1 \
--label "Arch Linux" \
--loader 'arch-linux.efi' \
--unicode
Démontrer proprement les partitions puis redémarrer :
# Sortir du chroot au besoin
exit
# Nettoyage et reboot
cd
umount -R /mnt
swapoff -L SWAP
for disk in sys disk{1,2,3,4,5}; do
echo cryptsetup close $disk
done
reboot
Installation du système sandbox
Après avoir redémarré et testé, on peut installer le système sandbox. Options de montage et ouverture de la partition système pour la récupération de la clé :
# Options de montage & variables + cache pacman
OPTS=defaults,x-mount.mkdir,noatime,nodiratime,ssd,compress=zstd
# Ouverture temporaire de la partition du système principal
cryptsetup open /dev/disk/by-partlabel/SYS system
Script d’installation complet du système “sandbox” :
# Montage du système principal
mount -o $OPTS,subvol=@ /dev/mapper/vgsys-arch /mnt
# Extraction de la clé
mkdir -p /tmp/etc/keys
cp /mnt/etc/keys/disks.key /tmp/etc/keys/disks.key
# Switch + montage de la partition du système sandbox + ajout de la clé
umount -R /mnt
mount -o $OPTS,subvol=@sandbox /dev/mapper/vgsys-arch /mnt
mkdir -p /mnt/etc/keys
mv /tmp/etc/keys/disks.key /mnt/etc/keys/disks.key
# Ouverture des disques de données
for i in 1 2 3 4 ;do \
cryptsetup open /dev/disk/by-partlabel/CDISK$i disk$i --key-file=/mnt/etc/keys/disks.key \
;done
cryptsetup open /dev/disk/by-partlabel/CDISK5 mirror --key-file=/mnt/etc/keys/disks.key
# Montages complémentaires
mount -o $OPTS,subvol=@data /dev/mapper/vgdat-home /mnt/data
mount -o $OPTS,subvol=@pkg /dev/mapper/vgdat-var /mnt/var/cache/pacman/pkg
mount --mkdir -o defaults,ro /dev/mapper/mirror /mnt/.mirror
mount --mkdir /dev/disk/by-partlabel/EFI /mnt/efi
# Installation...
pacman-key --init && \
pacman-key --populate && \
pacman -Sy --noconfirm archlinux-keyring && \
pacstrap -c -K /mnt base vim sudo linux intel-ucode qemu-guest-agent \
lvm2 btrfs-progs dhcpcd openssh hdparm util-linux \
sbctl efibootmgr terminus-font xdg-user-dirs
genfstab -L -t LABEL /mnt >> /mnt/etc/fstab
ln -sf /mnt/usr/share/zoneinfo/America/Miquelon /mnt/etc/localtime
arch-chroot /mnt hwclock --systohc
sed -i 's/^#\(fr_FR\.UTF-8\)/\1/' /mnt/etc/locale.gen
sed -i 's/^#\(en_US\.UTF-8\)/\1/' /mnt/etc/locale.gen
arch-chroot /mnt locale-gen
echo "LANG=fr_FR.UTF-8" > /mnt/etc/locale.conf
echo "LC_MESSAGES=fr_FR.UTF-8" >> /mnt/etc/locale.conf
echo "KEYMAP=fr-latin1" > /mnt/etc/vconsole.conf
echo "FONT=ter-132b" >> /mnt/etc/vconsole.conf
echo "EDITOR=vim" >> /mnt/etc/environment
echo sandbox > /mnt/etc/hostname
mkdir -p /mnt/etc/shadow-maint/useradd-post.d
cat << 'EOF' > /mnt/etc/shadow-maint/useradd-post.d/01-home-links
#!/bin/bash
echo "Creating home directories links to data partition..."
source /etc/locale.conf
runuser -u $SUBJECT -- /usr/bin/xdg-user-dirs-update
HOMEDIRS=`cat /home/$SUBJECT/.config/user-dirs.dirs | grep -e '^XDG_' | sed 's#^.*/\(.*\)"$#\1#'`
for homedir in $HOMEDIRS
do
mkdir -p /data/$SUBJECT/$homedir
rmdir /home/$SUBJECT/$homedir
ln -sf /data/$SUBJECT/$homedir /home/$SUBJECT/$homedir
chown -h $SUBJECT:$SUBJECT /home/$SUBJECT/$homedir
done
chown -R $SUBJECT:$SUBJECT /data/$SUBJECT
chmod 0750 /data/$SUBJECT /data/$SUBJECT/*
EOF
sudo chmod a+x /mnt/etc/shadow-maint/useradd-post.d/01-home-links
arch-chroot /mnt useradd -m -G wheel --shell /bin/bash darkone
arch-chroot /mnt passwd darkone
arch-chroot /mnt passwd
sed -i 's/^# \(.wheel.*NOPASSWD: ALL\)$/\1/' /mnt/etc/sudoers
sed -i 's/^\([\t ]*\)\# *issue_discards *= *[01]$/\1issue_discards = 1/' /mnt/etc/lvm/lvm.conf
arch-chroot /mnt systemctl enable systemd-timesyncd dhcpcd sshd fstrim.timer
sed -i 's/^\(HOOKS=.*block\) \(filesystems.*\)$/\1 encrypt lvm2 btrfs \2/' /mnt/etc/mkinitcpio.conf
arch-chroot /mnt mkinitcpio -p linux
arch-chroot /mnt blkid | grep CDISK \
| sed 's/"//g' \
| sed 's/PARTLABEL=C//' \
| awk '{print tolower($4) "\t" $2 "\t/etc/keys/disks.key\tluks,discard,no-read-workqueue,no-write-workqueue"}' \
| sort >> /mnt/etc/crypttab
arch-chroot /mnt blkid --match-token PARTLABEL=SYS -s UUID -o value \
| awk '{print "cryptdevice=UUID=" $1 ":vg:allow-discards root=/dev/mapper/vgsys-arch rootflags=subvol=@sandbox rw initrd=\\intel-ucode.img initrd=\\initramfs-linux.img"}' > /mnt/etc/kernel/cmdline
arch-chroot /mnt sbctl bundle --save /efi/arch-sandbox.efi
arch-chroot /mnt env --chdir=/efi -S efibootmgr --create \
--disk /dev/vda --part 1 \
--label "Arch Linux Sandbox" \
--loader 'arch-sandbox.efi' \
--unicode
# Arch linux avant sandbox
# Entrées A et B : arch & sandbox. Entrée 1 : live system
arch-chroot /mnt env --chdir=/efi -S efibootmgr -o 000A,000B,0001,0000,0002,0003,0004,0005,0006,0007,0008,0009
Redémarrage, vérifications, post-installation :
Redémarrer proprement et choisir “Arch Linux Sandbox” dans les options de boot UEFI. Puis se loguer avec l’utilisateur non-root.
# Utilisateur darkone
ls -ltrha
ls -l Documents/
# Utilisateur cardiac
sudo useradd -m -G wheel cardiac
sudo passwd cardiac
ls -l
echo "test" > Documents/cardiac-file.txt
# En root...
sudo -s
# Installation de XFCE
umount /var/cache/pacman/pkg
pacman -Syu --noconfirm xfce4 arc-solid-gtk-theme xorg-server ly
systemctl enable ly
localectl --no-convert set-x11-keymap fr pc104 ,oss
reboot
Suppression du système sandbox :
A utiliser depuis le shell du live system pour reprendre tout de zero.
cd
umount -R /mnt
mount -o $OPTS,subvol=@sandbox /dev/mapper/vgsys-arch /mnt
rm -rf /mnt/*
rm -rf /mnt/.*
umount /mnt
for disk in sys disk{1,2,3,4,5}; do
echo cryptsetup close $disk
done
reboot
Redémarrage du live système pour sandbox :
OPTS=defaults,noatime,nodiratime,ssd,compress=zstd
DISKS_KEY_PATH='/etc/keys'
DISKS_KEY_FILE=/etc/keys'/disks.key'
cryptsetup open /dev/disk/by-partlabel/SYS system
sleep 1
mount -o $OPTS,subvol=@ /dev/mapper/vgsys-arch /mnt
for i in 1 2 3 4 ;do \
cryptsetup open /dev/disk/by-partlabel/CDISK$i disk$i --key-file=/mnt/etc/keys/disks.key \
;done
cryptsetup open /dev/disk/by-partlabel/CDISK5 mirror --key-file=/mnt/etc/keys/disks.key
mount -o $OPTS,subvol=@sandbox /dev/mapper/vgsys-arch /mnt
mount -o $OPTS,subvol=@data /dev/mapper/vgdat-home /mnt/data
mount -o $OPTS,subvol=@pkg /dev/mapper/vgdat-var /mnt/var/cache/pacman/pkg
mount -o defaults,ro /dev/mapper/mirror /mnt/.mirror
mount /dev/disk/by-partlabel/EFI /mnt/efi
Redémarrage depuis le live system
Pour une raison ou une autre, un redémarrage depuis le live system pourrait être nécessaire. Dans ce cas il est utile de mettre de côté les commandes liées au montage de notre environnement :
# Options de montage & variables
OPTS=defaults,noatime,nodiratime,ssd,compress=zstd
DISKS_KEY_PATH='/etc/keys'
DISKS_KEY_FILE=/etc/keys'/disks.key'
# Ouverture de la partition système
cryptsetup open /dev/disk/by-partlabel/SYS system
sleep 1
mount -o $OPTS,subvol=@ /dev/mapper/vgsys-arch /mnt
# Ouverture des disques de données
for i in 1 2 3 4 ;do \
cryptsetup open /dev/disk/by-partlabel/CDISK$i disk$i --key-file=/mnt/etc/keys/disks.key \
;done
cryptsetup open /dev/disk/by-partlabel/CDISK5 mirror --key-file=/mnt/etc/keys/disks.key
# Montages
mount -o $OPTS,subvol=@ /dev/mapper/vgsys-arch /mnt
mount -o $OPTS,subvol=@home /dev/mapper/vgdat-home /mnt/home
mount -o $OPTS,subvol=@data /dev/mapper/vgdat-home /mnt/data
mount -o $OPTS,subvol=@var /dev/mapper/vgdat-var /mnt/var
mount -o $OPTS,subvol=@cache /dev/mapper/vgdat-clog /mnt/var/cache
mount -o $OPTS,subvol=@log /dev/mapper/vgdat-clog /mnt/var/log
mount -o defaults,ro /dev/mapper/mirror /mnt/.mirror
mount /dev/disk/by-partlabel/EFI /mnt/efi
# Sur-montage du cache des paquetages
arch-chroot /mnt mount -t 9p pkg /var/cache/pacman/pkg
# Dans la machine
arch-chroot /mnt
Sources & liens
- BTRFS par SebSauvage : Infos utiles + manipulations btrfs
- Install BTRFS + LUKS2 + Secure Boot (arch wiki)
- Bullet Proof Arch Install (arch wiki)
- Install Arch Linux on BTRFS subvolume inside LUKS
- Arch install encrypted BTRFS
- Archlinux sur un SSD avec EFI / LUKS2 / LVM2 / BTRFS
- Install avec LVM + LUKS
- Installer BTRFS sur LVM + considérations
- Autre article BTRFS + LVM
- BTRFS arch wiki
- BTRFS sur plusieurs disques
- Script d’install intéressant (LUKS, Secure Boot, etc.)
- Conf cohérente du TRIM / discard SSD
- TRIM & dm-crypt security issues
- Using zram-generator
- Enabling a backing device for a zram block