rss logo

Mon guide d'installation ArchLinux

Le logo d'ArchLinux

Je vais parler ici de l'installation de ArchLinux sur mon ordinateur. Avec un peu de chance cela pourra être utile à d'autres et peut être même à toi!

Par contre je ne l'installerai jamais sur un serveur pour lequel je préfère debian. Mais c'est un autre sujet.

Note : Ce guide s'inspire largement de l'article d'installation officiel.

Média d'installation

  • La première chose à faire est de télécharger l'iso depuis le site officiel (voir ici pour vérifier la signature) :

https://archlinux.org/download/

  • Identifier son média usb :
[root@host ~]# fdisk -l
  • J'utilise personnelement l'installation via une clé usb, la commande suivante permet de créer ce type de media :
[root@host ~]# dd if=archlinux-XXXX.XX.XX-x86_64.iso of=/dev/sdX bs=16M status=progress; sync
  • Désactiver la fonctionnalité secure boot dans l'UEFI (car le média d'installation n'est pas compatible) et démarrer sur l'USB.

Pré-Install

  • Changer la disposition du clavier de la console (fr pour français) :
root@archiso ~ # loadkeys fr
  • On vérifie que l'on est bien en démarrage UEFI :
root@archiso ~ # if [ -d /sys/firmware/efi/efivars ]; then echo "UEFI OK"; else echo "UEFI KO"; fi

Configuration réseau

  • Lister et identifier les interfaces réseau :
root@archiso ~ # ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:50:56:80:0b:32 brd ff:ff:ff:ff:ff:ff altname enp11s0
  • Obtenir la configuration réseau via dhcp :
root@archiso ~ # dhclient ens192
  • Ou paramétrer manuellement :
root@archiso ~ # ip addr add 192.168.1.10/24 dev ens192 root@archiso ~ # ip route add default via 192.168.1.254 root@archiso ~ # echo 'nameserver 192.168.1.254' >> /etc/resolv.conf
  • Vérifier la connexion internet :
root@archiso ~ # ping 46.105.57.169
  • Vérifier la résolution dns :
root@archiso ~ # host std.rocks std.rocks has address 46.105.57.169 std.rocks has IPv6 address 2001:41d0:301::20 std.rocks mail is handled by 1 mx4.mail.ovh.net. std.rocks mail is handled by 10 mx3.mail.ovh.net. Note : à partir de cette étape, si besoin, il est possible de se connecter depuis une autre machine à l'installeur avec ssh. Il faudra juste utiliser la commande passwd avant pour paramétrer un mot de passe.
  • Mettre à jour l'heure système :
root@archiso ~ # timedatectl set-ntp true

Partitionnement du disque

Je vais partitionner mon disque de 40G de la façon suivante.

Partition Note Système de fichier
EFI partition efi FAT32
/boot partition de démarrage ext2
swap partition fichiers d'échange swap sur LUKS
/ partition racine btrfs sur LUKS
  • La représentation graphique du partitionnement du disque :
un partitionnement d'un disque linux avec un efi, /boot, swap et une partition racine

⚠️ A noter que le disque sera complètement supprimé et par conséquent les données présentes seront effacées.⚠️

  • Identifier le disque de destination :
root@archiso ~ # fdisk -l Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors Disk model: Virtual disk 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 /dev/loop0: 683.24 MiB, 716427264 bytes, 1399272 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
  • Commencer le partitionnement, ici avec le disque /dev/sda :
root@archiso ~ # gdisk /dev/sda GPT fdisk (gdisk) version 1.0.9 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT.
  • Supprimer les partitions existantes :
Command (? for help): d
  • Créer la partition EFI :
Command (? for help): n Partition number (1-128, default 1): First sector (34-83886046, default = 2048) or {+-}size{KMGTP}: Last sector (2048-83886046, default = 83884031) or {+-}size{KMGTP}: +512M Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): EF00 Changed type of partition to 'EFI system partition'
  • Créer la partition /boot :
Command (? for help): n Partition number (2-128, default 2): First sector (34-83886046, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-83886046, default = 83884031) or {+-}size{KMGTP}: +500M Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'
  • Créer la partition de type LUKS pour swap :
Command (? for help): n Partition number (3-128, default 3): First sector (34-83886046, default = 2074624) or {+-}size{KMGTP}: Last sector (2074624-83886046, default = 83884031) or {+-}size{KMGTP}: +2G Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): 8309 Changed type of partition to 'Linux LUKS'
  • Créer la partition de type LUKS pour / :
Command (? for help): n Partition number (4-128, default 4): First sector (34-83886046, default = 6268928) or {+-}size{KMGTP}: Last sector (6268928-83886046, default = 83884031) or {+-}size{KMGTP}: Current type is 8300 (Linux filesystem) Hex code or GUID (L to show codes, Enter = 8300): 8309 Changed type of partition to 'Linux LUKS'
  • Vérifier et écrire le partitionnement du disque :
Command (? for help): p Disk /dev/sda: 83886080 sectors, 40.0 GiB Model: Virtual disk Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 45AB06C7-DDAF-45D4-A781-B5C33DAF56D2 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 83886046 Partitions will be aligned on 2048-sector boundaries Total free space is 4029 sectors (2.0 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 1050623 512.0 MiB EF00 EFI system partition 2 1050624 2074623 500.0 MiB 8300 Linux filesystem 3 2074624 6268927 2.0 GiB 8309 Linux LUKS 4 6268928 83884031 37.0 GiB 8309 Linux LUKS Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/sda. The operation has completed successfully.

Formater les partitions

  • Formater la partition EFI :
root@archiso ~ # mkfs.fat -F32 /dev/sda1
  • Formater la partition /boot :
root@archiso ~ # mkfs.ext2 /dev/sda2
  • Créer la partition LUKS pour le swap :
Note : La complexité du mot de passe n'a que peu d'importance ici car le mot de passe de la partition swap sera autogénéré à chaque démarrage (voir plus bas). root@archiso ~ # cryptsetup luksFormat /dev/sda3 WARNING! ======== This will overwrite data on /dev/sda3 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/sda3: STDp@$$ Verify passphrase: STDp@$$ cryptsetup luksFormat /dev/sda3 16.55s user 1.08s system 86% cpu 20.303 total
  • Déchiffrer la partition swap :
root@archiso ~ # cryptsetup luksOpen /dev/sda3 swap Enter passphrase for /dev/sda3: STDp@$$
  • Vérifier que la partition swap soit bien remontée :
root@archiso ~ # ls /dev/mapper control swap
  • Formater la partition swap :
root@archiso ~ # mkswap /dev/mapper/swap
  • Créer la partition LUKS pour / :
root@archiso ~ # cryptsetup luksFormat /dev/sda4 WARNING: Device /dev/sda4 already contains a 'dos' partition signature. WARNING! ======== This will overwrite data on /dev/sda4 irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/sda4: ComplexSTDp@$$ Verify passphrase: ComplexSTDp@$$ cryptsetup luksFormat /dev/sda4 9.72s user 0.68s system 75% cpu 13.721 total
  • Déchiffrer la partition / (root) :
root@archiso ~ # cryptsetup luksOpen /dev/sda4 root Enter passphrase for /dev/sda3: ComplexSTDp@$$
  • Vérifier que la partition root est présente :
root@archiso ~ # ls /dev/mapper control root swap
  • Formater la partition / (root) :
root@archiso ~ # mkfs.btrfs /dev/mapper/root

Monter les partitions et chrooter dans /mnt/

Monter les partitions dans /mnt

  • Monter la partition / (root) :
root@archiso ~ # mount /dev/mapper/root /mnt/
  • Activer le swap :
root@archiso ~ # swapon /dev/mapper/swap
  • Monter /boot :
root@archiso ~ # mount --mkdir /dev/sda2 /mnt/boot
  • Monter /efi :
root@archiso ~ # mount --mkdir /dev/sda1 /mnt/efi
Créer un sous volumes btrfs (Optionnel)

Si besoin on pourra ajouter ici un ou plusieurs sous-volumes btrfs, par exemple ici avec /home.

  • Créer un sous volume /home :
root@archiso ~ # btrfs subvolume create /mnt/home
  • Monter /home :
root@archiso ~ # mount /dev/mapper/root -o subvol=home /mnt/home

Installation

Installer les paquets essentiels

root@archiso ~ # pacstrap /mnt base linux linux-firmware btrfs-progs vim grub efibootmgr
  • Générer le fichier fstab :
root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab
  • Éditer le fichier /mnt/etc/fstab et remplacer l'entrée pour le swap par cette ligne :
/dev/mapper/swap none swap defaults 0 0
  • Chrooter dans /mnt :
root@archiso ~ # arch-chroot /mnt

Fuseau horaire

  • Identifier son Fuseau horaire :
[root@archiso /]# ls /usr/share/zoneinfo/
  • Paramétrer son Fuseau horaire :
[root@archiso /]# ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
  • Exemple :
[root@archiso /]# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
  • Générer le fichier /etc/adjtime :
[root@archiso /]# hwclock --systohc

Les locales

  • Éditer le fichier /etc/locale.gen et décommenter en_US.UTF-8 UTF-8 et les autres locales, par exemple pour la France :
[…] #en_SG ISO-8859-1 en_US.UTF-8 UTF-8 #en_US ISO-8859-1 […] #fr_CH ISO-8859-1 fr_FR.UTF-8 UTF-8 #fr_FR ISO-8859-1
  • Générer les locales :
[root@archiso /]# locale-gen
  • Créer le fichier /etc/locale.conf et paramétrer la variable LANG en rapport avec la langue qui sera utilisé sur le système :
    • Par exemple :
[root@archiso /]# echo 'LANG=en_US.UTF-8' > /etc/locale.conf [root@archiso /]# echo 'LANG=fr_FR.UTF-8' > /etc/locale.conf
  • Paramétrer le clavier :
    • Par exemple :
[root@archiso /]# echo 'KEYMAP=fr' > /etc/vconsole.conf [root@archiso /]# echo 'KEYMAP=us' > /etc/vconsole.conf

Configuration réseau

  • Paramétrer le nom de sa machine :
[root@archiso /]# echo 'stdesktop' > /etc/hostname

Initramfs

  • Éditer le fichier /etc/mkinitcpio.conf pour activer les modules utiles au démarrage :
MODULES=(dm_mod ext2 btrfs ext4 xfs) […] #add lvm2, mdadm if needed HOOKS=(base udev autodetect modconf block keyboard keymap encrypt filesystems usr fsck shutdown)
  • Générer le fichier initramfs :
[root@archiso /]# mkinitcpio -P
  • Ajouter l'entrée swap dans le /etc/crypttab pour paramétrer la génération d'une clé de chiffrement automatique pour la partition swap :
[root@archiso /]# echo 'swap /dev/sda3 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256' >> /etc/crypttab

Le chargeur d'amorçage

  • Éditer le fichier /etc/default/grub, ici je :
    • amdgpu.audio=0 : désactiver l'audio HDMI/DP Audio parce que je n'en ai point besoin et que j'ai déjà eu des problèmes avec. (pour info voir ici) les différents paramètres que l'on peut passer au module amdgpu.
    • je déclare mon disque chiffré root : /dev/sda4:root
    • J'ai supprimé le mot clé quiet parce que je veux que l'affichage soit verbeux au démarrage, dans le cas ou un débugage est nécessaire.
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 amdgpu.audio=0" #we can use /dev/sda4 UUID like that : cryptdevice=UUID=XXXX-XXXX-XXXX:root if you prefer GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda4:root"
  • Installer l'application GRUB EFI dans /efi/ (sda1) :
[root@archiso /]# grub-install --target=x86_64-efi --efi-directory=/efi/ --bootloader-id=GRUB Installing for x86_64-efi platform. Installation finished. No error reported.
  • Générer le fichier de configuration grub.cfg :
[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-linux Found initrd image: /boot/initramfs-linux.img Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... done

Redémarrage

  • Paramétrer le mot de passe du compte root :
[root@archiso /]# passwd
  • Retirer le média d'installation et redémarrer le système :
[root@archiso /]# exit root@archiso ~ # reboot

Post-Installation

Ajout d'un simple utilisateur

  • Créer un utilisateur :
[root@stdesktop ~]# useradd -m newuser
  • Définir le mot de passe utilisateur :
[root@stdesktop ~]# passwd newuser

Configuration réseau

On peut configurer le réseau de façon manuelle, statique ou via DHCP.

  • La première chose à faire est d'identifier son interface réseau :
[root@stdesktop ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 24:1f:fe:d3:bc:2a brd ff:ff:ff:ff:ff:ff

Configuration manuelle avec la commande ip

Note : Cette configuration sera réinitialisée après chaque redémarrage.

  • Activer l'interface réseau :
[root@stdesktop ~]# ip link set ens192 up
  • Attribuer une adresse ip :
[root@stdesktop ~]# ip addr add 192.168.1.10/24 dev ens192
  • Définir la passerelle :
[root@stdesktop ~]# ip route add default via 192.168.1.254
  • Définir le dns :
[root@stdesktop ~]# echo 'nameserver 80.67.169.12' > /etc/resolv.conf

Configuration statique avec systemd-networkd

  • Créer un fichier /etc/systemd/network/ens192.network :
[Match] Name=ens192 [Network] Address=192.168.1.10/24 Gateway=192.168.1.254 DNS=192.168.1.254
  • Activer et démarrer le service systemd-networkd :
[root@stdesktop ~]# systemctl enable systemd-networkd.service && systemctl start systemd-networkd.service

Configuration DHCP avec systemd-networkd

  • Créer un fichier /etc/systemd/network/ens192.network :
[Match] Name=ens192 [Network] DHCP=yes
  • Activer et démarrer le service systemd-networkd :
[root@stdesktop ~]# systemctl enable systemd-networkd.service && systemctl start systemd-networkd.service

L'environnement de bureau

  • Installer GNOME (presser simplement sur entrer à chaque question) :
[root@stdesktop ~]# pacman -S gnome
  • Si le clavier n'est pas en qwerty, paramétrer le clavier pour gdm :
[root@stdesktop ~]# localectl set-x11-keymap fr
  • Activer et démarrer le service gdm :
[root@stdesktop ~]# systemctl enable gdm [root@stdesktop ~]# systemctl start gdm écran de démarage gdm archlinux en attente de connexion

Misc

Accélération matérielle pour la carte AMD FirePro W5000

Si comme moi vous êtes propriétaire d'une carte AMD FirePro W5000 il peut être interessant d'activer l'accélération matérielle.

  • Installer les paquets libva-mesa-driver et mesa-vdpau :
[root@stdesktop ~]# pacman -S libva-mesa-driver mesa-vdpau
  • Installer les outils vainfo, vdpauinfo et radeontop :
[root@stdesktop ~]# pacman -S libva-utils vdpauinfo radeontop
  • Créer le fichier /etc/modprobe.d/amdgpu.conf :
options amdgpu si_support=1
  • Éditer le fichier /etc/mkinitcpio.conf :
MODULES=(dm_mod ext2 btrfs ext4 xfs amdgpu radeon)
  • Générer un nouveau initramfs :
[root@archiso /]# mkinitcpio -P
  • Redémarrer et vérifier que amdgpu est chargé :
[newuser@stdesktop ~]$ lspci -k | grep -A 3 -E "(VGA|3D)" 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Pitcairn LE GL [FirePro W5000] Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Device 0b06 Kernel driver in use: amdgpu Kernel modules: radeon, amdgpu
  • Ajouter la variable d'environnement VDPAU_DRIVER pour activer VDPAU :
[newuser@stdesktop ~]$ echo 'export VDPAU_DRIVER=radeonsi' >> ~/.bashrc
  • Vérifier le bon fonctionnement de VA-API :
[newuser@stdesktop ~]$ vainfo vainfo: VA-API version: 1.15 (libva 2.15.0) vainfo: Driver version: Mesa Gallium driver 22.1.7 for ATI FirePro V(FireGL V) Graphics Adapter (pitcairn, LLVM 14.0.6, DRM 3.47, 5.19.9-arch1-1) vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointVLD VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264Main : VAEntrypointVLD VAProfileH264High : VAEntrypointVLD VAProfileNone : VAEntrypointVideoProc
  • Vérifier le bon fonctionnement de VDPAU :
[newuser@stdesktop ~]$ vdpauinfo display: :0 screen: 0 API version: 1 Information string: G3DVL VDPAU Driver Shared Library version 1.0 Video surface: name width height types ------------------------------------------- 420 16384 16384 NV12 YV12 422 16384 16384 UYVY YUYV 444 16384 16384 Y8U8V8A8 V8U8Y8A8 420_16 16384 16384 422_16 16384 16384 444_16 16384 16384 Decoder capabilities: […]

Ouvrir des applications à l'ouverture de la session GNOME

Quand j'ouvre ma session, j'aime bien que les programmes que j'ai l'habitude d'utiliser s'ouvrent automatiquement.

  • Créer le dossier ~/.config/autostart/ :
[newuser@stdesktop ~]$ mkdir ~/.config/autostart
  • Créer le fichier ~/.config/autostart/apps.desktop :
[Desktop Entry] Name=AutostartScript GenericName=Gnome Auto Start Script Comment=Script wich launch applications at startup Exec=/home/newuser/.config/autostart.sh Terminal=false Type=Application X-GNOME-Autostart-enabled=true
  • Créer le fichier ~/.config/autostart.sh :
#Open terminal gnome-terminal& #Open Firefox firefox & #Open Explorer nautilus&
  • Donner les droits en exécution executions :
[newuser@stdesktop ~]$ chmod +x ~/.config/autostart.sh

Crontab

J'utilise hbaituellement cron comme planificateur de taches. Il existe des implémentations de cron dans ArchLinux mais aucune d'entre elle n'est préinstallée. Par défaut le système utilise les systemd/Timers. Nous allons voir ici comment créer une tache de type systemd/Timers.

  • Créer un fichier /etc/systemd/system/mytask.service qui définiera le programme à exécuter (ici on copie le fichier /home/newuser/a_file dans /backup en utilisant la substitution de la commande date) :
[Unit] Description=Copy a file Wants=mytask.timer [Service] Type=oneshot User=newuser #Normalement $(/usr/bin/date +%Y%m%d) mais les caractères $ et % doivent être échapés ExecStart=/bin/bash -c '/usr/bin/cp /home/newuser/a_file /backup/a_file.$$(/usr/bin/date +%%Y%%m%%d)' [Install] WantedBy=multi-user.target
  • Créer le fichier /etc/systemd/system/mytask.timer associé dans lequel on définiera à quel moment la tache sera exécutée :
[Unit] Description=Copy a file trigger Requires=mytask.service [Timer] Unit=mytask.service #It will run each day at 19h00 OnCalendar=*-*-* 19:00:00 [Install] WantedBy=timers.target
  • Activer et recharger les règles :
[root@stdesktop ~]# systemctl enable mytask.timer && systemctl daemon-reload
  • Vérifier la prise en compte :
[root@stdesktop ~]# systemctl status mytask.timer ● mytask.timer - Copy a file Loaded: loaded (/etc/systemd/system/mytask.timer; enabled; preset: disabled) Active: active (waiting) since Sun 2022-09-25 16:28:31 CEST; 26min ago Until: Sun 2022-09-25 16:28:31 CEST; 26min ago Trigger: Sun 2022-09-25 19:00:00 CEST; 2h 4min left Triggers: ● mytask.service sept. 25 16:28:31 stddesktop.local systemd[1]: Started Copy a file.

Références

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address