\documentclass[aspectratio=169]{beamer}

\makeatletter
\appto\input@path{{libs/awesome-beamer}, {libs/smile}}
\makeatother

\usepackage{fontspec}
\setmonofont[
	Path = ./fonts/,
	Scale = .9,
	Extension = .ttf,
	Contextuals=Alternate,
	BoldFont={*-Bold},
	UprightFont={*-Regular},
]{Fira Code}
\renewcommand\setmonofont[2][]{}

\usepackage[french]{babel}

\usepackage[
type={CC},
modifier={by-nc-sa},
version={4.0},
]{doclicense}

\definecolor{base-color}{HTML}{1793d1}
\usetheme[english, color, coloraccent=base-color, secslide]{awesome}

\usepackage{minted}
\usepackage[usenames,dvipsnames]{xcolor}
\hypersetup{
    colorlinks=true,
    linkcolor=black,
    filecolor=black,
    urlcolor=ForestGreen,
    citecolor=black,
}

\setlength{\fboxsep}{1pt}
\newcommand{\keystroke}[1]{\colorbox{darkgray}{\fbox{\strut\kern0.1em\color{white}\texttt{#1}\kern0.1em}}}
\newcommand{\keycombo}[2]{%
  \keystroke{#1}%
  \kern 0.1em%
  \texttt{+}%
  \kern 0.1em%
  \keystroke{#2}}

\newcommand{\command}[1]{\texttt{\textcolor{blue}{\$\,#1}}}

\usepackage{pgfpages}
\usepackage{everypage}
\ifdefined\printlandscape
\pgfpagesuselayout{4 on 1}[letterpaper, border shrink=1mm, landscape]
\AddEverypageHook{
  \begin{tikzpicture}[remember picture, overlay]
    \draw[ultra thick] (current page.north west) rectangle (current page.south east);
  \end{tikzpicture}
}
\fi
\ifdefined\printportrait
\pgfpagesuselayout{8 on 1}[letterpaper, border shrink=1mm]
\AddEverypageHook{
  \begin{tikzpicture}[remember picture, overlay]
    \draw[ultra thick] (current page.north west) rectangle (current page.south east);
  \end{tikzpicture}
}
\fi

\title[]{Séminaire d'Installation d'Arch Linux}
\subtitle{Département d'informatique}
\author{Eric Hervet et Andy Couturier}
\email{}
\institute{Faculté des sciences}
\uni{Université de Moncton}
\location{Université de Moncton}
\background{background.jpg}
\date{20 mars 2025}

\begin{document}
\maketitle

\begin{frame}
	\begin{wide}
		\centering
		\doclicenseImage[imagewidth=5cm]

		\vspace{1.5em}
		\LARGE\textbf{\doclicenseLongText}
	\end{wide}
\end{frame}

\section{Pourquoi ?}

\begin{frame} \frametitle{Pourquoi ?}
	\begin{wide}
		\begin{itemize}[<+->]
			\item La plupart des distributions Linux ont un installateur graphique facile d'utilisation. Il existe même des scripts d'installation semi-automatiques pour Arch Linux.
			\item Le séminaire proposé consiste à installer Arch Linux manuelle avec des commandes dans un terminal.
			\item Mais pourquoi s'infliger des souffrances en installant manuellement Arch Linux ?
				\begin{itemize}
					\item \textbf{\Rightarrow\:Pour apprendre.}
				\end{itemize}
			\item Une personne informaticienne explore en profondeur pour comprendre le fonctionnement des systèmes, tandis qu'une personne technicienne se concentre sur leur mise en œuvre et leur maintenance. L'approche scientifique pousse toujours à approfondir la connaissance.
			\item En réalisant cette installation, vous allez :
				\begin{itemize}
					\item Mieux comprendre la structure d'un système d'exploitation.
					\item Comprendre le système de partitionnement et sa relation aux systèmes de fichiers.
					\item Comprendre le processus de démarrage d'un système d'exploitation.
					\item Apprendre à personnaliser et maîtriser votre environnement Linux.
				\end{itemize}
		\end{itemize}
	\end{wide}
\end{frame}

\section{Support d'installation}

\begin{frame} \frametitle{Support d'installation}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Pour créer une clé USB qui contient l'image d'installation d'Arch Linux~:
				\begin{enumerate}
					\item Rendez vous à l'adresse \href{https://archlinux.org/download/}{https://archlinux.org/download/}.
					\item Choisissez un serveur Canadien dans la liste et cliquez sur son lien.
					\item Via la page d'index du serveur, téléchargez le fichier ISO qui aura un nom comme~: \texttt{archlinux-20XX.XX.01-x86\_64.iso}.
				\end{enumerate}
			\item Si vous êtes déjà sur Linux~:
				\begin{enumerate}
					\item Ouvrez un terminal.
					\item Branchez la clé USB qui servira de support d'installation.
					\item \command{sudo dmesg} pour identifier le code \texttt{sdX} de la clé USB.
					\item Placez vous dans le répertoire où se trouve l'ISO en utilisant \texttt{cd}.
					\item \command{sudo dd bs=32M if=archlinux-20XX.XX.01-x86\_64.iso of=/dev/sdX conv=fsync oflag=direct status=progress}
				\end{enumerate}
			\item Si vous êtes sur Windows (nos sincères sympathies)~: Vous pouvez utiliser \href{https://rufus.ie/en/}{Rufus}.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Partitionnement, formatage et montage}

\begin{frame} \frametitle{Table de Partitionnement}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \textbf{Définition:} Une table de partitionnement est une structure située sur un disque décrivant comment l'espace de stockage est divisé en zones distinctes appelées partitions.
			\item \textbf{Rôle:} Elle détermine où chaque partition commence et se termine sur le disque et le type de système de fichiers de chaque partition.
			\item \textbf{Fonctionnement:}
				\begin{itemize}
					\item Elle est placée généralement à un emplacement fixe sur le disque et est utilisée par l'ordinateur au démarrage pour détecter et gérer les partitions présentes.
					\item Elle indique quelles partitions sont amorçables (\textit{«~bootable~»}), aidant ainsi le processus de démarrage du système d'exploitation.
				\end{itemize}
			\item \textbf{Systèmes de fichiers:}
				\begin{itemize}
					\item Chaque partition peut être formatée avec un système de fichiers spécifique, permettant de stocker et d'organiser les fichiers.
					\item Différents systèmes de fichiers peuvent coexister sur le même disque dans différentes partitions.
				\end{itemize}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame}
	\frametitle{MBR vs GPT}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Il y a deux formats de table de partitionnement possible.
			\item \textbf{MBR (Master Boot Record)}
				\begin{itemize}
					\item Taille maximale de disque : 2 TiB.
					\item Limité à 4 partitions primaires.
					\item Plus ancien, compatible avec BIOS uniquement.
					\item Pas de redondance, si le MBR est corrompu, les données peuvent être inaccessibles.
				\end{itemize}
			\item \textbf{GPT (GUID Partition Table)}
				\begin{itemize}
					\item Taille maximale de disque : 9.4 ZiB.
					\item Supporte jusqu'à 128 partitions primaires.
					\item Utilise des identifiants globaux uniques (GUID) qui permettent l'identification précisent des partitions avec un identifiant \texttt{PARTUUID}.
					\item Plus moderne, conçu pour UEFI.
					\item Redondance avec deux copies de la table, une au début et une à la fin du disque.
						\begin{itemize}
							\item Inclut un hash CRC32 pour détecter la corruption de la table.
						\end{itemize}
				\end{itemize}
		\end{itemize}
	\end{wide}
\end{frame}


\begin{frame} \frametitle{Table de partitionnement}
	\begin{wide}
		\begin{center}
			\begin{tabular}{|c|l|l|c|l|}
				\hline
				\textbf{\#} & \textbf{Device} & \textbf{Mountpoint} & \textbf{Type} & \textbf{Taille} \\ \hline
				1  & /dev/sdX1 & /boot (/mnt/boot) & ef00 & 1 GiB  \\ \hline
				2  & /dev/sdX2 & / (/mnt) & 8300 & Reste  \\ \hline
			\end{tabular}
		\end{center}

		\begin{itemize}[<+->]
			\item Les mountpoints entre parenthèses seront les mountpoints temporaires des partitions pendant l'installation. Ils se trouveront sur le système de fichier existant du support d'installation.
			\item Le type de partition \texttt{ef00} indique qu'il s'agit d'une partition EFI. Cela signifie que le système à un firmware UEFI pour le démarrage.
			\item La taille de 1 GiB est généralement suffisante pour stocker le noyau Linux et les fichiers de démarrage nécessaires.
			\item Le type de partition \texttt{8300} est l'identifiant pour une partition Linux standard sous le schéma de partitionnement GPT.
			\item La partition racine utilisera le reste de l'espace libre du disque.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Partitionnement}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Branchez la clé sur laquelle vous allez installer Arch Linux et ensuite faites immédiatement \command{dmesg} pour identifier le code \texttt{sdX} de la clé USB.
			\item \command{gdisk /dev/sdX} pour commencer à partitionner le disque interactivement.
				\begin{itemize}
					\setlength\itemsep{-0.05em}
					\item \keystroke{o} puis \keystroke{y} pour effacer toutes les partitions.
					\item \keystroke{n} pour créer une nouvelle partition.
					\item \keystroke{Enter} pour choisir la partition par défaut (1).
					\item \keystroke{Enter} pour choisir le secteur de départ par défaut.
					\item \texttt{+1G} pour choisir le secteur de fin 1~GiB après le secteur de départ.
					\item \texttt{ef00} pour le type de partition.
					\item \keystroke{n} pour créer une nouvelle partition.
					\item \keystroke{Enter} pour choisir la partition par défaut (2).
					\item \keystroke{Enter} pour choisir le secteur de départ par défaut.
					\item \keystroke{Enter} pour choisir le secteur de fin par défaut (fin du disque).
					\item \keystroke{Enter} pour choisir type de partition par défaut (\texttt{8300}).
					\item \keystroke{p} pour vérifier le partitionnement.
					\item \keystroke{w} puis \keystroke{y} pour écrire la table de partitions au disque.
				\end{itemize}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame}
	\frametitle{Formatage de la partition de démarrage}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{mkfs.fat -F32 /dev/sdX1}
			\item \textbf{Conformité UEFI (Unified Extensible Firmware Interface)} : Le standard UEFI requiert une partition système EFI (ESP) au format FAT32.
			\item \textbf{Pilotes UEFI intégrés} : Les firmwares UEFI incluent des pilotes FAT. Sans ce format, l’UEFI ne peut ni localiser ni charger le bootloader, rendant le démarrage impossible.
			\item \textbf{Compatibilité universelle} : FAT32 est pris en charge nativement par la plupart des systèmes d’exploitation, simplifiant la mise à jour de la partition (fichiers EFI, bootloaders, etc.) depuis n’importe quelle plateforme.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame}
	\frametitle{Formatage de la partition racine}
	\small
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{mkfs.f2fs /dev/sdX2}
			\item \textbf{F2FS (Flash-Friendly File System)} a été conçu spécifiquement pour les supports de stockage à base de mémoire flash (SSD, eMMC, clés USB, cartes SD).
			\item \textbf{Log-structured file system} : Les données modifiées sont toujours inscrites dans de nouveaux blocs, au lieu de les réécrire directement au même endroit. Cela permet au système de grouper plusieurs écritures aléatoires en flux d’écritures séquentielles. Cela réduit la fragmentation, améliore considérablement les performances d'écriture et permet une répartition plus uniforme des écritures ce qui prolonge la durée de vie du support (wear-leveling).
			\item \textbf{Garbage collection} : L’espace est divisé en segments, et ceux contenant des données obsolètes sont régulièrement regroupés en blocs contigus. Ce processus limite l’amplification d’écriture, maintient un stockage homogène et préserve durablement les performances.
			\item \textbf{TRIM} : Le TRIM indique au contrôleur flash quels blocs sont libres (fichiers supprimés), lui permettant de les utiliser pour répartir uniformément les écritures, ce qui prolonge la durée de vie du support (wear-leveling).
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Montage des partitions}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Le montage des partitions sous Linux est le processus qui rend un système de fichiers prêt à être utilisé par le système d'exploitation. Cela implique d'associer un système de fichiers situé sur une partition à un répertoire spécifique du système de fichiers global appelé point de montage (mountpoint).
			\item \command{mount /dev/sdX2 /mnt} : On monte la partition racine dans le système de fichiers temporaire fourni par l’environnement d’installation.
			\item \command{mkdir /mnt/boot} : Création du répertoire \texttt{/mnt/boot} pour accueillir la partition de démarrage.
			\item \command{mount /dev/sdX1 /mnt/boot} : On monte la partition de démarrage dans le répertoire \texttt{boot} du système de fichiers racine.
			\item Ces opérations intègrent ainsi l’arborescence de fichier de \texttt{/dev/sdX1} et de \texttt{/dev/sdX2} dans celle du support d’installation, ce qui permet d’accéder à la structure complète du futur système.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Fichier fstab}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{mkdir /mnt/etc} : Création du répertoire des configurations du système.
			\item \command{genfstab -t PARTUUID /mnt > /mnt/etc/fstab} : Scanne les partitions montées et crée un fichier \texttt{/mnt/etc/fstab} en utilisant les \textbf{PARTUUID} pour identifier de manière unique chaque partition.
			\item Le fichier \texttt{/mnt/etc/fstab} spécifie les partitions à monter, leurs points de montage, les types de systèmes de fichiers, les options de montage, et les paramètres de dump et de vérification.
			\item Le fichier \texttt{/mnt/etc/fstab} est utilisé pour indiquer au système quelles partitions monter et comment procéder.
			\item \textbf{Pourquoi \texttt{PARTUUID} ?}
				\begin{itemize}
					\item Les noms de périphériques comme \texttt{/dev/sda}, \texttt{/dev/sdb} peuvent changer d'un démarrage à l'autre, surtout si des supports amovibles sont connectés.
					\item Les \textbf{PARTUUID} sont des identifiants uniques et persistants assignés à chaque partition, garantissant un montage fiable quel que soit l'ordre de détection des périphériques.
				\end{itemize}
		\end{itemize}
	\end{wide}
\end{frame}

\section{Installation}

\begin{frame} \frametitle{Paquets}
	\begin{wide}
		\begin{itemize}[<+->]
			\item L’une des plus grandes forces de Linux réside dans son système de paquets. Chaque logiciel est distribué sous forme de paquet avec une signature cryptographique qui garantie son authenticité et son intégrité.
			\item Grâce à la vérification cryptographique des paquets, il n’est pas nécessaire de faire confiance au serveur qui distribue les logiciels (miroir) lui-même, puisqu’un paquet non-signé ou altéré sera rejeté automatiquement par le gestionnaire de paquets du système (pacman).
			\item N’importe qui peut héberger un miroir des dépôts Arch Linux, c'est-à-dire un serveur qui contient une copie de tous les paquets officiels crées par les développeurs d’Arch Linux.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Optimisation des miroirs}
	\begin{wide}
		\begin{itemize}[<+->]
			\item L'écosystème des miroirs d'Arch Linux comprend plus de 800 serveurs répartis à travers le monde. Parmi ceux-ci, certains serveurs sont géographiquement plus proches, offrant ainsi une latence réduite ainsi qu'une bande passante souvent supérieure.
			\item Avant d’installer le système, il est donc préférable d’optimiser la liste des miroirs pour télécharger les paquets plus rapidement.
			\item \command{pacman --noconfirm -Syy reflector} : Installe et met à jour la base de données des paquets, puis installe \texttt{reflector} un outil d'optimisation des miroirs.
			\item \command{reflector --verbose --sort rate --country Canada --protocol http,https --save /etc/pacman.d/mirrorlist} : Met à jour la liste des miroirs en utilisant ceux au Canada et trié du plus rapide au plus lent.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame}
	\frametitle{Optimisation de pacman}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Pour améliorer les performances de pacman, éditez le fichier de configuration \texttt{/etc/pacman.conf}.
				Décommentez la ligne \texttt{ParallelDownloads} puis définissez sa valeur à \textbf{32} (ou un autre nombre selon vos préférences).

				\begin{block}{}
					\texttt{\#ParallelDownloads = 5}

					\texttt{ParallelDownloads = 32}
				\end{block}

			\item Cette modification permet d’effectuer plusieurs téléchargements en parallèle, réduisant significativement le temps total de mise à jour ou d’installation des paquets.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Installation du système}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{pacstrap /mnt base base-devel linux linux-headers linux-firmware xorg-drivers nvidia-open intel-ucode amd-ucode zram-generator git} \Leftarrow\: Ajouter un éditeur de texte (ex. nano, vim).
				\begin{itemize}
					\item \textbf{\texttt{base}} : Paquets essentiels pour un système Arch minimal.
					\item \textbf{\texttt{base-devel}} : Ensemble d'outils de développement pour la compilation de logiciels.
					\item \textbf{\texttt{linux} et \texttt{linux-headers}} : Noyau Linux et ses en-têtes nécessaires pour le développement de modules.
					\item \textbf{\texttt{linux-firmware}} : Collection de firmwares pour divers matériels pour assurer un bon support matériel.
					\item \textbf{\texttt{xorg-drivers} et \texttt{nvidia-open}} : Pilotes graphiques (Intel, AMD, Nvidia) pour assurer un bon support matériel.
					\item \textbf{\texttt{intel-ucode} et \texttt{amd-ucode}} : Microcodes pour les processeurs Intel et AMD, permettant l'installation des mises à jour critiques du microprogramme.
					\item \textbf{\texttt{zram-generator}} : Utilitaire permettant de configurer zram pour la compression de la mémoire vive.
					\item \textbf{\texttt{git}} : Système de gestion de versions distribué qui sera utile pour installer des paquets plus tard.
				\end{itemize}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Transfère des optimisations}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{cp /etc/pacman.conf /mnt/etc/pacman.conf} : Copie la configuration de \texttt{pacman} dans le nouveau système, préservant les optimisations précédemment définies.
			\item \command{cp /etc/pacman.d/mirrorlist /mnt/etc/pacman.d/mirrorlist} : Transfère la liste des miroirs optimisée dans le nouveau système, afin de conserver la liste de miroirs optimisés.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Chroot}

\begin{frame}
	\frametitle{Chroot}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{arch-chroot /mnt}
			\item La commande \texttt{arch-chroot} permet de « rentrer » dans l’environnement du nouveau système installé sur le point de montage \texttt{/mnt}.
			\item Elle modifie la racine du système de fichiers, faisant de \texttt{/mnt} le nouveau \texttt{/}.
			\item Une fois à l’intérieur, vous pouvez gérer votre système comme s’il était démarré, par exemple installer des paquets, configurer des services ou éditer des fichiers de configuration, sans avoir à démarrer immédiatement le nouveau système.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame}
	\frametitle{Étapes du processus de démarrage}
	\begin{wide}
		\begin{enumerate}[<+->]
			\item \textbf{Firmware} : Le firmware (UEFI) initialise le matériel minimal, localise la partition système EFI (ESP) et charge le bootloader se trouvant dessus.
			\item \textbf{Bootloader} : Le bootloader (systemd-boot) sélectionne le noyau et charge également l’initramfs en mémoire, puis passe la main au noyau en lui fournissant les paramètres nécessaires.
			\item \textbf{Initramfs} : Chargé avant l’exécution complète du noyau, l’initramfs sert de système de fichiers temporaire. Il contient les pilotes et outils indispensables pour trouver et monter la véritable racine du système.
			\item \textbf{Noyau Linux} : Utilisant l'initramfs, le noyau s'initialise, configure les périphériques, monte le système de fichiers racine, et lance le processus init.
			\item \textbf{Processus init} : Le premier processus est \texttt{systemd} (PID 1). Il lance les services, monte les partitions complémentaires, configure le réseau, met en place et lance l’environnement utilisateur final.
		\end{enumerate}
	\end{wide}
\end{frame}

\section{Bootloader}

\begin{frame} \frametitle{Bootloader}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{bootctl install} : Installe le chargeur de démarrage (\textit{bootloader}) systemd-boot sur la partition EFI.
			\item Créer le fichier \texttt{/boot/loader/loader.conf} avec le contenu suivant~:\\
				\begin{block}{}
					\texttt{default arch.conf} \\
					\texttt{timeout 0}
				\end{block}
			\item Cette configuration définit le fichier \texttt{arch.conf} comme l'entrée par défaut et désactive le délai d'attente (\texttt{timeout 0}), ce qui lance immédiatement Arch Linux au démarrage.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Bootloader}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{blkid -s PARTUUID -o value /dev/sdX2 > /boot/loader/entries/arch.conf} : Insère la PARTUUID de la partition racine dans \texttt{arch.conf} pour éviter de devoir la retaper manuellement.
			\item Éditer le fichier \texttt{/boot/loader/entries/arch.conf} avec le contenu suivant~:\\
				\begin{block}{}
					\texttt{title Arch Linux} \\
					\texttt{linux /vmlinuz-linux} \\
					\texttt{initrd /intel-ucode.img} \\
					\texttt{initrd /amd-ucode.img} \\
					\texttt{initrd /initramfs-linux-fallback.img} \\
					\texttt{options root=PARTUUID=<PARTUUID> rw}
				\end{block}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Bootloader}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \textbf{\texttt{title Arch Linux}} : Définit le nom qui apparaîtra dans le menu de démarrage.
			\item \textbf{\texttt{linux /vmlinuz-linux}} : Indique le chemin vers le noyau Linux.
			\item \textbf{\texttt{initrd /intel-ucode.img}} : Charge le microcode des processeurs Intel.
			\item \textbf{\texttt{initrd /amd-ucode.img}} : Charge le microcode des processeurs AMD. Ces fichiers ne sont appliqués que si le matériel correspondant est utilisé.
			\item \textbf{\texttt{initrd /initramfs-linux-fallback.img}} : Charge une image de système de fichier minimal en mémoire (initramfs) qui fournit les pilotes essentiels au noyau. La version \texttt{fallback} contient tous les pilotes disponibles, contrairement à la version standard qui est générée selon la configuration matérielle de l'ordinateur où a été réalisée l'installation.
			\item \textbf{\texttt{options root=PARTUUID=<PARTUUID> rw}} : Spécifie les options de démarrage du noyau, en particulier la partition racine (root) et l'option \texttt{rw} pour un accès en lecture-écriture.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Initramfs}

\begin{frame}
	\frametitle{Initramfs}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Pour permettre à l'initramfs de monter une partition racine se trouvant sur une clé USB, éditez le fichier de configuration \texttt{/etc/mkinitcpio.conf} comme suit~:
				\begin{block}{}
					\texttt{MODULES=(usbhid xhci\_hcd)}
				\end{block}
			\item Ce sont les modules nécessaires pour s'assurer que les pilotes USB requis sont chargés pendant le processus d'initialisation.
			\item \command{mkinitcpio -P} : Reconstruit les images initramfs en applicant les modifications.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Compression de la mémoire}

\begin{frame}
	\frametitle{Compression de la mémoire}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Pour activer la compression de la mémoire avec Zram, éditez le fichier de configuration \texttt{/etc/systemd/zram-generator.conf} comme suit :
				\begin{block}{}
					\texttt{[zram0]} \\
					\texttt{zram-size = ram / 2} \\
					\texttt{compression-algorithm = zstd}
				\end{block}
			\item Ces paramètres réservent la moitié de la RAM physique pour les pages compressées en mémoire, augmentant la capacité de mémoire disponible sans recourir à la pagination sur le disque (\textit{swap}). L'algorithme \texttt{zstd} offre un bon équilibre entre vitesse et taux de compression.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Configurations importantes}

\begin{frame} \frametitle{Horloge et fuseau horaire}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{ln -sf /usr/share/zoneinfo/Canada/Atlantic /etc/localtime} : Configure le fuseau horaire du Canada atlantique.
			\item \command{systemctl enable systemd-timesyncd} : Active le service de synchronisation périodique de l'horloge fourni par systemd pour qu'il démarre automatiquement au démarrage.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame}
	\frametitle{Langue du système}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Pour configurer la langue du système à l'anglais canadien, modifiez le fichier de configuration \texttt{/etc/locale.gen} comme suit :
				\begin{block}{}
					\texttt{\#en\_CA.UTF-8 UTF-8} \quad \text{(Décommentez cette ligne)}
				\end{block}
			\item \command{locale-gen} : Génère les locales sélectionnées pour le système.
			\item Ensuite, configurez la locale système par défaut dans le fichier \texttt{/etc/locale.conf} :
				\begin{block}{}
					\texttt{LANG=en\_CA.UTF-8}
				\end{block}
			\item Ces paramètres assurent que le système utilise l'anglais canadien comme langue par défaut. Vous pouvez configurer la locale de votre choix (par ex. \texttt{fr\_CA.UTF-8}).
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Fichier hosts et hostname}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Pour configurer le nom d'hôte (nom de la machine), éditez le fichier \texttt{/etc/hostname} et insérez le nom d'hôte de votre choix :
				\begin{block}{}
					\texttt{<nom\_hote\_choisi>}
				\end{block}
			\item Ensuite, mettez à jour \texttt{/etc/hosts}. Remplacez \texttt{<nom\_hote\_choisi>} par votre nom d'hôte choisi :
				\begin{block}{}
					\texttt{127.0.0.1 \quad localhost} \\
					\texttt{127.0.1.1 \quad <nom\_hote\_choisi>} \\
					\texttt{::1 \quad <nom\_hote\_choisi>.localdomain <nom\_hote\_choisi>}
				\end{block}
			\item Ces entrées permettent de mapper le nom d'hôte à l'adresse locale, facilitant ainsi la résolution locale des noms de domaines.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Comptes utilisateurs}

\begin{frame}
	\frametitle{Comptes utilisateurs}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \command{useradd -m -g users <nom\_utilisateur>} : Crée un nouveau compte utilisateur. Remplacez \texttt{<nom\_utilisateur>} par le nom d'utilisateur de votre choix.
			\item \command{usermod -G wheel <nom\_utilisateur>} : Ajoute le nouveau compte utilisateur au group \texttt{wheel} qui permettera à l'utilisateur d'utiliser la commande \texttt{sudo}.
			\item Pour permettre aux membres du groupe \texttt{wheel} d'utiliser \texttt{sudo}, éditez \texttt{/etc/sudoers} comme suit :
				\begin{block}{}
					\texttt{\# \%wheel ALL=(ALL) ALL} \quad \text{(Décommentez cette ligne)}
				\end{block}
			\item \command{passwd} : Crée le mot de passe du compte \texttt{root}.
			\item \command{passwd <nom\_utilisateur>} : Crée le mot de passe de l'utilisateur.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Arch User Repository (AUR)}

\begin{frame}
	\frametitle{Arch User Repository (AUR)}
	\begin{wide}
		\begin{itemize}[<+->]
			\item L'Arch User Repository (AUR) est un dépôt communautaire pour Arch Linux qui permet le partage et l'accès à des paquets créés par les utilisateurs, étendant l'offre logicielle au-delà des dépôts officiels.
			\item Cela fait d'Arch Linux la distribution en existance avec le plus grand nombre de paquets disponibles, et ce, de manière très accessible par rapport à d'autres distributions (par ex. PPA sur Ubuntu).
			\item \command{su <nom\_utilisateur>} : Entrer dans le compte utilisateur non privilégié.
			\item \command{cd} : Naviguer vers le répertoire \texttt{home} de l'utilisateur pour avoir l'accès en écriture.
			\item \command{git clone https://aur.archlinux.org/yay-bin.git} : Récupérer les fichiers nécessaires pour construire Yay, un gestionnaire de paquets pour l'AUR.
			\item \command{cd yay-bin} : Naviguer dans le répertoire contenant les fichiers.
			\item \command{makepkg -sri} : Construire et installer le paquet de Yay.
			\item \keycombo{Ctrl}{D} ou \command{exit} : Sortir du compte utilisateur non privilégié.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Installation d'un bureau graphique}

\begin{frame} \frametitle{Terminologie}
	\begin{wide}
		\begin{itemize}[<+->]
			\item \textbf{Display Manager (Gestionnaire d'affichage)} : C'est le logiciel qui gère l'écran de connexion et l'authentification des utilisateurs, lançant ensuite l'environnement de bureau choisi. Exemples : GDM, LightDM.
			\item \textbf{Window Manager (Gestionnaire de fenêtres)} : Il gère le positionnement et l'apparence des fenêtres sur l'écran, permettant des actions comme minimiser ou redimensionner. Exemples : KWin, Mutter.
			\item \textbf{Desktop Environment (Environnement de bureau)} : C'est un ensemble intégré d'applications et d'outils qui fournit une interface utilisateur graphique complète, comprenant un gestionnaire de fenêtres et des applications de base. Exemples : KDE Plasma, GNOME.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{KDE Plasma}
	\begin{wide}
		\centering
		\includegraphics[height=6.1cm]{media/kde.jpg}

		\begin{itemize}
			\item \command{pacman -S networkmanager plasma kde-applications sddm}
			\item \command{systemctl enable NetworkManager sddm}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Gnome}
	\begin{wide}
		\centering
		\includegraphics[height=6.1cm]{media/gnome.jpg}

		\begin{itemize}
			\item \command{pacman -S networkmanager gnome gnome-extra}
			\item \command{systemctl enable NetworkManager gdm}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Xfce}
	\begin{wide}
		\centering
		\includegraphics[height=5.6cm]{media/xfce.jpg}

		\begin{itemize}
			\item \command{pacman -S networkmanager network-manager-applet xfce4 xfce4-goodies lightdm lightdm-gtk-greeter}
			\item \command{systemctl enable NetworkManager lightdm}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{Cinnamon}
	\begin{wide}
		\centering
		\includegraphics[height=5.6cm]{media/cinnamon.jpg}

		\begin{itemize}
			\item \command{pacman -S networkmanager cinnamon lightdm lightdm-gtk-greeter}
			\item \command{systemctl enable NetworkManager lightdm}
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame} \frametitle{MATE}
	\begin{wide}
		\centering
		\includegraphics[height=5.6cm]{media/mate.jpg}

		\begin{itemize}
			\item \command{pacman -S networkmanager network-manager-applet mate mate-extra lightdm lightdm-gtk-greeter}
			\item \command{systemctl enable NetworkManager lightdm}
		\end{itemize}
	\end{wide}
\end{frame}

\section{Redémarrage}

\begin{frame} \frametitle{Redémarrage}
	\begin{wide}
		\begin{itemize}
			\item \keycombo{Ctrl}{D} ou \command{exit} : Sortir du chroot.
			\item \command{umount -R /mnt} : Démonter les paritions \texttt{/mnt/boot} et \texttt{/mnt}.
			\item \command{reboot} : Redémarer le système.
		\end{itemize}
	\end{wide}
\end{frame}

\section{Extras}

\begin{frame}
	\frametitle{Mise à jour du système}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Pour synchroniser la base de données des paquets et mettre à jour l'ensemble du système à partir des dépôts officiels, exécutez :
				\begin{itemize}
					\item \command{sudo pacman -Syu}
				\end{itemize}
			\item Si vous avez installé des paquets du AUR, vous pouvez mettre à jour tous les paquets (officiels et AUR) avec :
				\begin{itemize}
					\item \command{yay -Syu}
				\end{itemize}
			\item Si le paquel \texttt{linux} a été mis à jour, il est recommandé de redémarrer le système, mais cela est optionnel.
			\item Ces commandes garantissent que vous disposez des dernières versions, bénéficiant ainsi des correctifs de sécurité et des améliorations récentes.
			\item Il est recommandé de réaliser cette opération régulièrement afin de maintenir un système stable, sécurisé et performant.
		\end{itemize}
	\end{wide}
\end{frame}

\begin{frame}
	\frametitle{Configuration d'un serveur SSH}
	\begin{wide}
		\begin{itemize}[<+->]
			\item Installez le paquet OpenSSH afin d'installer le service SSH :
				\begin{itemize}
					\item \command{sudo pacman -S openssh}
				\end{itemize}
			\item Activez et démarrez le service SSH pour qu'il se lance automatiquement au démarrage :
				\begin{itemize}
					\item \command{systemctl enable sshd}
					\item \command{systemctl start sshd}
				\end{itemize}
			\item Vérifiez que le service fonctionne correctement avec :
				\begin{itemize}
					\item \command{systemctl status sshd}
				\end{itemize}
			\item Par la suite, pour se connecter en SSH \textbf{depuis une autre machine}, utilisez :
				\begin{itemize}
					\item \command{ssh nom\_utilisateur@adresse\_ip}
				\end{itemize}
		\end{itemize}
	\end{wide}
\end{frame}

\end{document}
