From 6f0af763380a046cb5c4f67c646498f7d41073dc Mon Sep 17 00:00:00 2001
From: Dimitri Lizzi <dimitri.lizzi@etu.hesge.ch>
Date: Mon, 17 Aug 2020 01:05:25 +0200
Subject: [PATCH] last changes!

---
 README.md          |   33 +-
 doc/rapport.gpp.md |    7 +
 doc/rapport.md     |   36 +-
 doc/rapport.pdf    |  Bin 1965450 -> 1966849 bytes
 doc/rapport.tex    | 5085 --------------------------------------------
 5 files changed, 67 insertions(+), 5094 deletions(-)
 delete mode 100644 doc/rapport.tex

diff --git a/README.md b/README.md
index e6bb758..68e4cfa 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,34 @@
 # Bootiful
 
-![Log book](doc/logbook.md)
\ No newline at end of file
+![Logo du projet Bootiful](doc/images/bootiful_logo_final.svg)
+
+Le sujet de ce travail de diplôme est le développement d’une solution de
+déploiement de systèmes d’exploitation à la demande, pour une
+utilisation dans le cadre d’une école d’informatique. À chaque démarrage
+d’un poste de travail, l’utilisateur peut choisir quel système il
+souhaite utiliser dans une liste prédéfinie. Il est aussi possible de
+définir une liste de personnalisations qui permettent de configurer ce
+système, comme par exemple l’installation de certains logiciels ou une
+configuration de réseau spécifique. La première fois qu’un système
+d’exploitation est choisi, une image contenant les données du système
+d’exploitation est téléchargée depuis un serveur central. Cette image
+est déployée sur le disque dur pour permettre son utilisation. Une copie
+de l’image est aussi sauvegardée dans un cache situé à la fin du disque
+dur, dans un format compressé, pour permettre de ne plus avoir à la
+télécharger à nouveau les prochaines fois qu’elle devra être installée.
+Une fois le déploiement terminé, les personnalisations choisies sont
+appliquées, puis le système choisi est démarré et est utilisable jusqu’à
+l’extinction de l’ordinateur. Au prochain démarrage, un nouveau système
+d’exploitation sera de nouveau déployé. Ce mode de fonctionnement permet
+aux élèves de l’école de toujours utiliser un système propre et
+spécifique à leurs besoins immédiats. Des efforts ont été menés pour
+faire en sorte que les déploiements se fassent le plus rapidement
+possible, en économisant un maximum les ressources disque et réseau,
+tout en fonctionnant avec des ordinateurs modernes. Le développement de
+ce projet étant destiné à être continué après ce travail de diplôme, un
+soin particulier a été apporté pour automatiser et simplifier au maximum
+la construction et la mise en fonctionnement du système dans un
+environnement réel.
+
+- [Documentation](doc/rapport.md)
+- [Journal de bord](doc/logbook.md)
\ No newline at end of file
diff --git a/doc/rapport.gpp.md b/doc/rapport.gpp.md
index ce17b30..a1d8146 100644
--- a/doc/rapport.gpp.md
+++ b/doc/rapport.gpp.md
@@ -223,6 +223,13 @@ d'un diagramme de Gantt. Ce diagramme est visible dans la figure
 
 !!pdfref{planning_gantt}{Diagramme de Gantt du planning}{images/planning}
 
+Le logiciel de gestion de révisions _Git_ a été utilisé pour gérer les
+différentes versions du code source du projet. Un dépôt a été créé sur
+le serveur Git de !!acronym{HEPIA}. Il est disponible à l'adresse
+suivante:
+
+<https://gitedu.hesge.ch/dimitri.lizzi/bootiful>
+
 ## Analyse
 
 ## Cas d'utilisation
diff --git a/doc/rapport.md b/doc/rapport.md
index 2b79868..db11406 100644
--- a/doc/rapport.md
+++ b/doc/rapport.md
@@ -199,6 +199,13 @@ d'un diagramme de Gantt. Ce diagramme est visible dans la figure
 </figure>
 
 
+Le logiciel de gestion de révisions _Git_ a été utilisé pour gérer les
+différentes versions du code source du projet. Un dépôt a été créé sur
+le serveur Git de <abbr title="Haute École du Paysage, d’Ingénierie et d’Architecture de Genève ">HEPIA</abbr>. Il est disponible à l'adresse
+suivante:
+
+<https://gitedu.hesge.ch/dimitri.lizzi/bootiful>
+
 ## Analyse
 
 ## Cas d'utilisation
@@ -1879,6 +1886,13 @@ Le lancement de ces trois machines en simultané ainsi que leur
 configuration est assuré par l'outil _docker-compose_ (voir source dans
 la section ).
 
+Pour simplifier le lancement du serveur, une cible `start-server` a été
+créée dans le _Makefile_ du projet. Il suffit de lancer la commande
+suivante pour construire et démarrer un serveur:
+
+```bash
+make start-server
+```
 
 ## Personnalisation d'images post-déploiement
 
@@ -2147,7 +2161,7 @@ LATEST_LOG := $(shell ls -1 nfs/nfsshared/log/*.log | tail -n 1)
 .PHONY: doc grub deployer start-server reprovision-server clean print_last_log help
 
 # Builds everything
-all: doc grub deployer
+all: grub deployer
 
 # Builds PDF and markdown documents
 doc:
@@ -2242,7 +2256,7 @@ services:
       - type: tmpfs
         target: /nfsroot
       - type: bind
-        source: /run/media/araxor/bigdata/nfsshared
+        source: ./nfs/nfsshared
         target: /nfsshared
       - type: bind
         source: /lib/modules
@@ -3648,20 +3662,26 @@ echo "Starting logging stdout and stderr to $log_file..."
 
     if [[ -n "$customization_choices"  ]]; then
         start_step_batch "customizations deployment"
-
+        readonly customization_partitions_mount_dir="/bootiful/mounted_customization_partitions"
         for customization_choice in $customization_choices; do
-            customization="${customizations[customization_choice]}"
+            customization="${customizations[$customization_choice]}"
             customization_dir="$remote_image_customizations_dir/$customization"
 
-            echo "Deploying customization '$customization' from '$customization_dir'"
-            for customization_partition in "$customization_dir"/*; do
+            echo "Deploying customization '$customization' ($customization_choice) from '$customization_dir'"
+            for customization_partition_full in "$customization_dir"/*; do
+                customization_partition=$(basename "$customization_partition_full")
                 validate_with_regex "$customization_partition" '^sda[0-9]$' "customization sub-directory name does not match a partition of sda"
-                customization_partition_mount_point="/bootiful/mounted_customization_partitions/$customization_partition"
+                customization_partition_mount_point="$customization_partitions_mount_dir/$customization_partition"
                 customization_partition_device="/dev/$customization_partition"
                 ensure_mounted "$customization_partition_device" "$customization_partition_mount_point"
-                cp -RT "$customization_dir/$customization_partition/"
+                cp -RTf "$customization_partition_full/" "$customization_partition_mount_point/"
             done
         done
+
+        for customization_partition_mount_dir in "$customization_partitions_mount_dir"/*; do
+            umount "$customization_partition_mount_dir" ||
+                fatal_error "Cannot unmount '$customization_partition_mount_dir'"
+        done
     fi
 
     start_step_batch "EFI entrypoint file creation"
diff --git a/doc/rapport.pdf b/doc/rapport.pdf
index b73cdd9ee8cc55b07ebf52ea9ad154c296b11cb1..efd361dea0e56bfffd2c91ce32fafbc159339297 100644
GIT binary patch
delta 123701
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

delta 122255
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
W=IPg&<m9;x%uJ2BR8?L5-M9c~02#3W

diff --git a/doc/rapport.tex b/doc/rapport.tex
deleted file mode 100644
index 19a3c6b..0000000
--- a/doc/rapport.tex
+++ /dev/null
@@ -1,5085 +0,0 @@
-% Options for packages loaded elsewhere
-\PassOptionsToPackage{unicode}{hyperref}
-\PassOptionsToPackage{hyphens}{url}
-%
-\documentclass[
-  12pt,
-  french,
-  a4paper,
-]{memoir}
-\usepackage{lmodern}
-\usepackage{amssymb,amsmath}
-\usepackage{ifxetex,ifluatex}
-\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
-  \usepackage[T1]{fontenc}
-  \usepackage[utf8]{inputenc}
-  \usepackage{textcomp} % provide euro and other symbols
-\else % if luatex or xetex
-  \usepackage{unicode-math}
-  \defaultfontfeatures{Scale=MatchLowercase}
-  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
-  \setmonofont[]{JetBrains Mono}
-\fi
-% Use upquote if available, for straight quotes in verbatim environments
-\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
-\IfFileExists{microtype.sty}{% use microtype if available
-  \usepackage[]{microtype}
-  \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
-}{}
-\makeatletter
-\@ifundefined{KOMAClassName}{% if non-KOMA class
-  \IfFileExists{parskip.sty}{%
-    \usepackage{parskip}
-  }{% else
-    \setlength{\parindent}{0pt}
-    \setlength{\parskip}{6pt plus 2pt minus 1pt}}
-}{% if KOMA class
-  \KOMAoptions{parskip=half}}
-\makeatother
-\usepackage{xcolor}
-\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
-\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
-\hypersetup{
-  pdftitle={Bootiful},
-  pdfauthor={Dimitri Lizzi},
-  pdflang={fr-CH},
-  pdfkeywords={Bachelor, HEPIA, HESSO, Bootiful},
-  hidelinks,
-  pdfcreator={LaTeX via pandoc}}
-\urlstyle{same} % disable monospaced font for URLs
-\usepackage[includeheadfoot,margin=2.5cm]{geometry}
-\usepackage{color}
-\usepackage{fancyvrb}
-\newcommand{\VerbBar}{|}
-\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
-\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
-% Add ',fontsize=\small' for more characters per line
-\newenvironment{Shaded}{}{}
-\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
-\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
-\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
-\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
-\newcommand{\BuiltInTok}[1]{#1}
-\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
-\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
-\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
-\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
-\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
-\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
-\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
-\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
-\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
-\newcommand{\ExtensionTok}[1]{#1}
-\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
-\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
-\newcommand{\ImportTok}[1]{#1}
-\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
-\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
-\newcommand{\NormalTok}[1]{#1}
-\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
-\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
-\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
-\newcommand{\RegionMarkerTok}[1]{#1}
-\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
-\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
-\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
-\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
-\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
-\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
-\usepackage{longtable,booktabs}
-% Correct order of tables after \paragraph or \subparagraph
-\usepackage{etoolbox}
-\makeatletter
-\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
-\makeatother
-% Allow footnotes in longtable head/foot
-\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
-\makesavenoteenv{longtable}
-\usepackage{graphicx}
-\makeatletter
-\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
-\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
-\makeatother
-% Scale images if necessary, so that they will not overflow the page
-% margins by default, and it is still possible to overwrite the defaults
-% using explicit options in \includegraphics[width, height, ...]{}
-\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
-% Set default figure placement to htbp
-\makeatletter
-\def\fps@figure{htbp}
-\makeatother
-\setlength{\emergencystretch}{3em} % prevent overfull lines
-\providecommand{\tightlist}{%
-  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
-\setcounter{secnumdepth}{5}
-\usepackage{pdfpages}
-\usepackage{fancyhdr}
-\usepackage{graphicx}
-\usepackage{float}
-\usepackage{lastpage}
-\usepackage{fvextra}
-\DefineVerbatimEnvironment{Highlighting}{Verbatim}{frame=single,breaklines,commandchars=\\\{\},fontsize=\footnotesize}
-
-\pagestyle{fancy}
-\setlength{\headheight}{14pt}
-
-\renewcommand{\headrulewidth}{0.4pt}
-\renewcommand{\footrulewidth}{0.4pt}
-
-\fancyhead[LO,LE]{Bootiful}
-\fancyhead[CO,CE]{Déploiement d'OS à choix durant le processus de boot}
-\fancyhead[RO,RE]{Dimitri Lizzi}
-\fancyfoot[LO,LE]{août 2020}
-\fancyfoot[CO,CE]{}
-\fancyfoot[RE,RO]{\thepage /\pageref{LastPage}}
-
-\setcounter{tocdepth}{4}
-
-\setlength{\parindent}{0pt}
-\setlength{\parskip}{9pt}
-\setlength{\beforechapskip}{-10pt}
-
-\OnehalfSpacing
-\ifxetex
-  % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic)
-  \usepackage{polyglossia}
-  \setmainlanguage[]{french}
-\else
-  \usepackage[shorthands=off,main=french]{babel}
-\fi
-\newlength{\cslhangindent}
-\setlength{\cslhangindent}{1.5em}
-\newenvironment{cslreferences}%
-  {}%
-  {\par}
-
-\title{Bootiful}
-\usepackage{etoolbox}
-\makeatletter
-\providecommand{\subtitle}[1]{% add subtitle to \maketitle
-  \apptocmd{\@title}{\par {\large #1 \par}}{}{}
-}
-\makeatother
-\subtitle{Déploiement d'OS à choix durant le processus de boot}
-\author{Dimitri Lizzi}
-\date{Août 2020}
-
-\begin{document}
-% Nom conformes des tables
-\renewcommand*\listfigurename{Liste des illustrations}
-\renewcommand*\listtablename{Liste des tableaux}
-% Sets the page numbering style to roman
-%\pagestyle{headings}
-%\setcounter{page}{1}
-%\pagenumbering{roman}
-
-% Hides the page number for the cover page
-\thispagestyle{empty}
-\addtolength{\voffset}{-5pt}
-% Hides the header for the cover page
-% Cover page
-\begin{figure}
-    \vspace*{-5cm}
-    \begin{sffamily}
-        \begin{minipage}{.4\textwidth}
-            \centering
-            \hspace*{-3cm}\includegraphics[height=1.25cm]{images/logo_hepia.pdf}
-        \end{minipage}\qquad
-        \begin{minipage}{.4\textwidth}
-            \centering
-            \hspace*{5cm}\includegraphics[height=1.25cm]{images/logo-hesso-geneve.pdf}
-        \end{minipage}
-    \end{sffamily}
-\end{figure}
-
-\begin{center}
-    \vspace{1.5cm}
-    \includegraphics[height=5cm]{images/bootiful_logo_final.pdf}\\
-    \vspace{5mm}
-
-    \huge{Déploiement d'OS à choix durant le processus de boot}\\
-    \vspace{2cm}
-
-    \large{Thèse de Bachelor présentée par}\\
-    \vspace{5mm}
-    \textbf{\Large{Dimitri Lizzi}}\\
-    \vspace{5mm}
-
-    \large{pour l’obtention du titre Bachelor of Science HES-SO en}\\
-    \vspace{5mm}
-    \textbf{\Large{Ingénierie des technologies de l’information \\avec orientation en \\logiciels
-et systèmes complexes}}
-
-    \vspace{5mm}
-    \textbf{Août 2020\\}
-    \vspace{8mm}
-    \begin{tabular}{ p{6cm} }
-      \multicolumn{1}{c}{Professeur-e HES responsable}\\
-      \multicolumn{1}{c}{\textbf{Florent Glück}}\\
-    \end{tabular}
-\end{center}
-
-
-\mainmatter
-\tableofcontents
-\newpage
-
-\chapter*{Remerciements}
-\addcontentsline{toc}{chapter}{Remerciements}
-
-\textbf{TODO: remerciements}
-
-\addcontentsline{toc}{chapter}{Résumé}
-\includepdf{abstract.pdf}
-
-\addcontentsline{toc}{chapter}{Énoncé}
-\includepdf{statement.pdf}
-
-\chapter*{Liste des acronymes}
-\addcontentsline{toc}{chapter}{Liste des acronymes}
-
-\begin{description}
-\tightlist
-\item[BIOS \protect\hypertarget{acronym__BIOS}{}{}]
-\emph{Basic Input Output System}: système de base d'entrée sortie
-\item[DHCP \protect\hypertarget{acronym__DHCP}{}{}]
-\emph{Dynamic Host Configuration Protocol}: protocole de configuration
-dynamique des hôtes
-\item[EFI \protect\hypertarget{acronym__EFI}{}{}]
-\emph{Extensible Firmware Interface}: interface micrologicielle
-extensible unifiée
-\item[ESP \protect\hypertarget{acronym__ESP}{}{}]
-\emph{EFI System Partition}: partition système EFI
-\item[FOG \protect\hypertarget{acronym__FOG}{}{}]
-\emph{Free Open-source Ghost}
-\item[FTP \protect\hypertarget{acronym__FTP}{}{}]
-\emph{File Transfer Protocol}: protocole de transfert de fichier
-\item[GPT \protect\hypertarget{acronym__GPT}{}{}]
-\emph{GUID Partition Table}: table de partitionnement GUID
-\item[GRUB \protect\hypertarget{acronym__GRUB}{}{}]
-\emph{GRand Unified Bootloader}
-\item[HEPIA \protect\hypertarget{acronym__HEPIA}{}{}]
-Haute école du paysage, d'ingénierie et d'architecture de Genève
-\item[HTTPS \protect\hypertarget{acronym__HTTPS}{}{}]
-\emph{HyperText Transfer Protocol Secure}: protocole de transfert
-hypertexte sécurisé
-\item[HTTP \protect\hypertarget{acronym__HTTP}{}{}]
-\emph{HyperText Transfer Protocol}: protocole de transfert hypertexte
-\item[IBM \protect\hypertarget{acronym__IBM}{}{}]
-\emph{International Business Machines corporation}
-\item[IPFS \protect\hypertarget{acronym__IPFS}{}{}]
-\emph{InterPlanetary File System}: système de fichier inter-planétaire
-\item[IP \protect\hypertarget{acronym__IP}{}{}]
-\emph{Internet Protocol}: protocole internet
-\item[LDAP \protect\hypertarget{acronym__LDAP}{}{}]
-\emph{Lightweight Directory Access Protocol}: protocole léger d'accès à
-un annuaire
-\item[MAC \protect\hypertarget{acronym__MAC}{}{}]
-\emph{Media Access Control (address)}: adresse physique
-\item[MBR \protect\hypertarget{acronym__MBR}{}{}]
-\emph{Master Boot Record}: enregistrement d'amorcage maître
-\item[NAT \protect\hypertarget{acronym__NAT}{}{}]
-\emph{Network Address Translation}: traduction d'adresse réseau
-\item[NFS \protect\hypertarget{acronym__NFS}{}{}]
-\emph{Network File System}: système de fichiers en réseau
-\item[NVRAM \protect\hypertarget{acronym__NVRAM}{}{}]
-\emph{Non-Volatile Random Access Memory}: mémoire vive non volatile
-\item[OS \protect\hypertarget{acronym__OS}{}{}]
-\emph{Operating System}: système d'exploitation
-\item[PC \protect\hypertarget{acronym__PC}{}{}]
-\emph{Personal Computer}: ordinateur personnel
-\item[PXE \protect\hypertarget{acronym__PXE}{}{}]
-\emph{Pre-boot eXecution Environment}: environnement d'exécution
-pré-démarrage
-\item[SCP \protect\hypertarget{acronym__SCP}{}{}]
-\emph{Secure CoPy}: protocole de copie sécurisée sur le réseau
-\item[SI \protect\hypertarget{acronym__SI}{}{}]
-Système d'Information
-\item[SMB \protect\hypertarget{acronym__SMB}{}{}]
-\emph{Server Message Block}
-\item[SSH \protect\hypertarget{acronym__SSH}{}{}]
-\emph{Secure SHell}: protocole de terminal à distance securisé
-\item[TFTP \protect\hypertarget{acronym__TFTP}{}{}]
-\emph{Trivial File Transfer Protocol}: protocole simplifié de transfert
-de fichiers
-\item[UEFI \protect\hypertarget{acronym__UEFI}{}{}]
-\emph{Unified Extensible Firmware Interface}: interface micrologicielle
-extensible unifiée
-\item[WWW \protect\hypertarget{acronym__WWW}{}{}]
-\emph{World Wide Web}: toile mondiale / réseau mondial
-\end{description}
-
-\newpage
-
-\listoffigures
-\newpage
-
-\listoftables
-
-\hypertarget{introduction}{%
-\chapter{Introduction}\label{introduction}}
-
-\hypertarget{contexte}{%
-\section{Contexte}\label{contexte}}
-
-Aujourd'hui les machines des salles de cours à
-\protect\hyperlink{acronym__HEPIA}{HEPIA} sont installées avec une image
-spécifique d'un système d'exploitation. Dans le cadre de certains cours,
-on désirerait pouvoir utiliser un autre système d'exploitation
-(\protect\hyperlink{acronym__OS}{OS}) et aussi avoir la possibilité
-d'être administrateur sur la machine physique. En effet, utiliser une
-machine virtuelle n'est pas toujours souhaitable, surtout lorsqu'il y a
-interaction avec du matériel, typiquement lors du développement pour
-l'embarqué. Le but de ce projet est de développer un système de
-déploiement répondant à ces besoins. Lors de la mise sous tension d'une
-machine, le système proposerait à l'utilisateur un choix d'OSes et
-celui-ci s'installerait à la volée (distributions Linux, différentes
-versions de Windows, etc.). Afin de minimiser le temps d'attente lors de
-l'installation de l'\protect\hyperlink{acronym__OS}{OS}, un mécanisme de
-cache évitant le téléchargement des images préalablement téléchargées
-sera mis en place. On désire aussi que le système de déploiement
-permette de customiser certains aspects de l'image choisie. Ce travail
-ce base sur une ébauche d'un travail déjà existant.
-
-\hypertarget{objectifs}{%
-\section{Objectifs}\label{objectifs}}
-
-\begin{itemize}
-\tightlist
-\item
-  Etude du travail existant.
-\item
-  Mise en place d'un déploiement automatisé et reproductible du travail
-  existant.
-\item
-  Ajout du support d'images Windows.
-\item
-  Optimisation du format d'image afin d'en accélérer sensiblement la
-  vitesse de téléchargement.
-\item
-  Mise en place d'un mécanisme de personnalisation des images en
-  post-installation.
-\item
-  Implémenter une gestion administrative aisée du système de déploiement
-
-  \begin{itemize}
-  \tightlist
-  \item
-    Il doit être aisé de créer des images et configurer les opérations à
-    effectuer en post-installation.
-  \end{itemize}
-\item
-  Le système doit pouvoir supporter l'authentification des utilisateurs
-  via un serveur \protect\hyperlink{acronym__LDAP}{LDAP} (Linux
-  seulement)
-
-  \begin{itemize}
-  \tightlist
-  \item
-    Les OS déployés (Linux), doivent pouvoir s'intégrer au processus
-    d'authentification utilisé dans les salles de laboratoires ITI.
-  \end{itemize}
-\item
-  Gestion du système aussi simple et aisée que possible.
-\item
-  Si le temps le permet: optimisation de la bande passante du réseau
-  dans le cas de nombreux téléchargements effectués en parallèle.
-\end{itemize}
-
-\hypertarget{duxe9roulement}{%
-\section{Déroulement}\label{duxe9roulement}}
-
-Ce projet n'a pas n'a pas été réalisé dans les locaux
-d'\protect\hyperlink{acronym__HEPIA}{HEPIA} mais à distance, depuis la
-maison, en partie à cause de la situation sanitaire due au COVID-19 mais
-aussi parce qu'il est effectué dans le cadre d'un bachelor en cours du
-soir, en parallèle à une activité professionnelle à 80\%.
-
-Des rendez-vous hebdomadaires avec le professeur responsable Florent
-Glück ainsi que l'assistant Sébastien Chassot ont été organisés tous les
-mercredis, afin d'assurer un suivi du projet.
-
-\hypertarget{matuxe9riel-uxe0-disposition}{%
-\section{Matériel à disposition}\label{matuxe9riel-uxe0-disposition}}
-
-Deux mini-ordinateurs ont étés prêtés par
-\protect\hyperlink{acronym__HEPIA}{HEPIA} pour la durée du projet, afin
-d'effectuer des tests sur du matériel réel. Les spécifications de ces
-ordinateurs sont définies dans la table \ref{mini_pc_specs}.
-
-\begin{longtable}[]{@{}ll@{}}
-\caption{Spécifications techniques des ordinateurs mis à disposition
-\label{mini_pc_specs}}\tabularnewline
-\toprule
-\begin{minipage}[b]{0.19\columnwidth}\raggedright
-Caractéristique\strut
-\end{minipage} & \begin{minipage}[b]{0.75\columnwidth}\raggedright
-Description\strut
-\end{minipage}\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-\begin{minipage}[b]{0.19\columnwidth}\raggedright
-Caractéristique\strut
-\end{minipage} & \begin{minipage}[b]{0.75\columnwidth}\raggedright
-Description\strut
-\end{minipage}\tabularnewline
-\midrule
-\endhead
-\begin{minipage}[t]{0.19\columnwidth}\raggedright
-Constructeur\strut
-\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright
-\emph{DELL}\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.19\columnwidth}\raggedright
-Modèle\strut
-\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright
-\emph{Optiplex 7060 micro}\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.19\columnwidth}\raggedright
-Processeur\strut
-\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright
-\emph{Intel® Core™ i7-8700 3.20GHz}\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.19\columnwidth}\raggedright
-Mémoire vive\strut
-\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright
-8 GiB (2 barettes 4GiB \emph{SODIMM DDR4 Synchronous} 2666 MHz (0.4
-ns))\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.19\columnwidth}\raggedright
-Disque\strut
-\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright
-\emph{TOSHIBA KSG60ZMV} SSD 476GiB (512GB)\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.19\columnwidth}\raggedright
-Réseau\strut
-\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright
-\emph{Intel e1000e Gigabit Ethernet}\strut
-\end{minipage}\tabularnewline
-\bottomrule
-\end{longtable}
-
-\hypertarget{muxe9thodologie}{%
-\section{Méthodologie}\label{muxe9thodologie}}
-
-Le travail a été découpé en plusieurs parties, dont la durée a été
-estimée en semaines de travail. Un planning a été effectué sous la forme
-d'un diagramme de Gantt. Ce diagramme est visible dans la figure
-\ref{planning_gantt}.
-
-\begin{figure}
-\centering
-\includegraphics{images/planning.pdf}
-\caption{Diagramme de Gantt du planning\label{planning_gantt}}
-\end{figure}
-
-\hypertarget{analyse}{%
-\section{Analyse}\label{analyse}}
-
-\hypertarget{cas-dutilisation}{%
-\section{Cas d'utilisation}\label{cas-dutilisation}}
-
-L'aspect fonctionnel du système à réaliser est décrit avec un diagramme
-de cas d'utilisations dans la figure \ref{diagram_usecases}.
-
-\begin{figure}
-\centering
-\includegraphics{images/diagram_usecases.svg}
-\caption{Diagramme des cas d'utilisation du
-système.\label{diagram_usecases}}
-\end{figure}
-
-\hypertarget{uxe9tude-des-solutions-existantes}{%
-\section{Étude des solutions
-existantes}\label{uxe9tude-des-solutions-existantes}}
-
-De nombreux systèmes de déploiement
-d'\protect\hyperlink{acronym__OS}{OS} existent, mais aucun d'entre eux
-ne répond précisément aux objectifs précis du cahier des charges de ce
-projet.
-
-Les sous-sections qui suivent décrivent quelques-uns de ces systèmes,
-leurs points forts et points faibles et pourquoi ils ne sont pas adaptés
-tels-quel pour ce projet.
-
-\hypertarget{bpbatch-rembo-ibm-tivoli}{%
-\subsection{\texorpdfstring{BpBatch / Rembo /
-\protect\hyperlink{acronym__IBM}{IBM}
-Tivoli}{BpBatch / Rembo / IBM Tivoli}}\label{bpbatch-rembo-ibm-tivoli}}
-
-Ce système est l'inspiration directe de ce projet. Son développement a
-commencé en 1996 au département informatique de l'université de Genève
-par Marc Vuilleumier Stückelberg et David Clerc.
-
-Les fonctionnalités de ce projet sont similaires à celles visée par le
-projet \emph{Bootiful}. Il permet aux postes clients de lancer un mini
-système d'exploitation via \protect\hyperlink{acronym__PXE}{PXE} au
-démarrage de la machine. Ce mini-système permet de télécharger et
-déployer des images de système d'exploitation sur la machine, tout en
-créant une copie en cache à la fin du disque pour éviter de la
-télécharger plusieurs fois.
-
-La première version, nommée \emph{BpBatch} fut distribuée gratuitement
-sur internet. Une entreprise nommée \emph{Rembo Technology Sàrl} a
-ensuite été fondée en 1999 pour continuer un développement commercial de
-ce projet sous le nom de \emph{Rembo}. En 2006, la société a été
-rachetée par IBM et le projet a été intégré à leur solution \emph{Tivoli
-Provisionning Manager}.
-
-Ce système réponde aux besoins de
-\protect\hyperlink{acronym__HEPIA}{HEPIA}, et il a même déjà été utilisé
-au sein de l'institution par le passé. Il a cependant été abandonné à
-cause de sa licence devenue très couteuse et de sa complexité devenue
-trop grande pour les besoins simple de l'école.
-
-Le développement d'une solution alternative \emph{open-source} plus
-simple et se basant sur des briques logicielles existantes serait donc
-très intéressante.
-
-\hypertarget{fog-project}{%
-\subsection{\texorpdfstring{\protect\hyperlink{acronym__FOG}{FOG}
-project}{FOG project}}\label{fog-project}}
-
-\protect\hyperlink{acronym__FOG}{FOG} est une solution open-source
-gratuite permettant de déployer des images de systèmes d'exploitation
-sur des postes clients.
-
-Elle fonctionne avec une architecture client-serveur. Le serveur est
-accédé par une interface web, où un administrateur peut gérer ses images
-et les déployer sur des clients qui démarrent un logiciel de déploiement
-avec \protect\hyperlink{acronym__PXE}{PXE}.
-
-Cette solution est utilisées dans certaines classes à
-\protect\hyperlink{acronym__HEPIA}{HEPIA} pour déployer des images sur
-certains postes, notemment pour les travaux de laboratoire de réseau.
-
-Malheureusement, ce système ne répond pas exactement au cahier des
-charges de ce projet: il est plutôt conçu pour ``pousser'' des images
-sur des clients, depuis le serveur, après une initiation du déploiement
-par un administrateur. Nous souhaitons plutôt un système ne nécessitant
-pas d'intervention d'un administrateur pour initier un déploiement.
-
-De plus,\protect\hyperlink{acronym__FOG}{FOG} ne dispose pas de
-mécanisme de cache sur les clients permettant de ne pas télécharger les
-images plusieurs fois. À chaque fois qu'un image doit être déployée,
-elle doit être téléchargée à nouveau depuis le serveur, ce qui peut
-prendre beaucoup de temps et doit être planifié à l'avance.
-
-\hypertarget{clonezilla}{%
-\subsection{Clonezilla}\label{clonezilla}}
-
-\emph{Clonezilla} est une solution open-source et gratuite de création
-et de restauration d'images.
-
-Cet outil peut être utilisé de deux manières:
-
-\begin{itemize}
-\tightlist
-\item
-  En faisant démarrer les clients sur le réseau. Ils chargent un petit
-  système d'exploitation de déploiement depuis un un serveur
-  \protect\hyperlink{acronym__PXE}{PXE}. Ils peuvent ensuite initier le
-  déploiement ou la restauration d'une image depuis/vers ce serveur.
-\item
-  En faisant démarrer les clients sur un CD ou une clé USB. Ils peuvent
-  ensuite initier le déploiement ou la restauration d'une image
-  d'\protect\hyperlink{acronym__OS}{OS} depuis/vers sur un autre disque
-  ou un serveur distant.
-\end{itemize}
-
-Un avantage de \emph{Clonezilla} est le format utilisé pour la
-sauvegarde des images. L'outil \emph{Partclone}, développé par la même
-équipe, est utilisé. Il permet de créer des images de partitions en ne
-copiant que les blocs utilisés dans le système de fichiers. Les parties
-non utilisées de la partition ne sont pas comprises dans l'image créée,
-ce qui permet de réduire sa taille et d'accélérer le processus de
-sauvegarde et de restauration.
-
-Malheureusement, comme pour \protect\hyperlink{acronym__FOG}{FOG},
-\emph{Clonezilla} ne dispose pas de mécanisme de cache sur les clients
-permettant de ne pas télécharger les images depuis un serveur distant
-plusieurs fois. À chaque fois qu'un image doit être déployée, elle doit
-être téléchargée à nouveau depuis le serveur, ce qui peut prendre
-beaucoup de temps et doit être planifié à l'avance.
-
-\emph{Clonezilla} ne peut donc pas être utilisé tel-quel. Cependant, il
-est possible de l'utiliser uniquement pour la création d'images et
-d'intégrer son mécanisme de restauration à un autre système de
-déploiement. Cette possibilité sera étudiée plus tard dans ce document.
-
-\hypertarget{architecture-initiale-du-projet}{%
-\chapter{Architecture initiale du
-projet}\label{architecture-initiale-du-projet}}
-
-Le projet \emph{Bootiful} n'a pas été initié dans le cadre de ce travail
-de bachelor: une implémentation basique
-(\protect\hyperlink{ref-venkatesh_remote_imaging}{1}) avait déjà été
-réalisée afin de prouver que l'idée fonctionne. Cette version initiale a
-été créée par Abhilash Venkatesh, un étudiant indien qui est venu à
-\protect\hyperlink{acronym__HEPIA}{HEPIA} effectuer un stage pendant la
-période de mai à juillet 2019.
-
-Les premières étapes de ce travail diplôme ont été de reproduire le
-système réalisé dans le projet initial afin de valider son
-fonctionnement, d'analyser en détail son fonctionnement et sa structure
-et de documenter son architecture.
-
-Ce chapitre est l'aboutissement de cette étude. Il décrit les détails de
-l'architecture du projet initial qui a été reproduite, afin d'apporter
-un contexte aux chapitres suivants qui décrivent les ajouts et
-modifications de cette architecture.
-
-\hypertarget{composants-initiaux}{%
-\section{Composants initiaux}\label{composants-initiaux}}
-
-Le système est composé de multiples clients qui communiquent avec un
-serveur central à travers un réseau \protect\hyperlink{acronym__IP}{IP}.
-
-\hypertarget{postes-clients}{%
-\subsection{Postes clients}\label{postes-clients}}
-
-Les postes clients supportés par le système sont des ordinateurs
-compatibles \protect\hyperlink{acronym__PC}{PC} x86.
-
-Ils doivent nécessairement être équipés d'une carte réseau et d'un
-micrologiciel \protect\hyperlink{acronym__BIOS}{BIOS} ou
-\protect\hyperlink{acronym__UEFI}{UEFI} capables et configurés pour
-amorcer un système d'exploitation à partir du réseau à chaque démarrage
-en utilisant le standard \protect\hyperlink{acronym__PXE}{PXE}.
-
-Ils doivent aussi disposer d'un disque dur sur lequel les images de
-système d'exploitation seront déployées et mises en cache. L'espace
-disque est subdivisé en trois parties distinctes ayant chacune un rôle
-précis.
-
-La première partie du disque est l'espace dédié au déploiement d'un
-\protect\hyperlink{acronym__OS}{OS}. Elle prend 80\% de l'espace total
-disponible, au début du disque. Au tout début de cette partie du disque,
-dans le premier secteur addressable du disque, se trouve le secteur
-d'amorçage au format \protect\hyperlink{acronym__MBR}{MBR}. Ce premier
-secteur contient deux informations nécessaires pour le chargement d'un
-système d'exploitation:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\item
-  \textbf{La routine d'amorcage}: c'est le premier programme exécuté
-  lors du démarrage sur le disque. Sa taille est très limitée: 440
-  octets. Il sert généralement à initier un chargeur d'amorcage ou
-  \emph{bootloader} présent un peu plus loin sur le disque, qui est un
-  petit programme qui va initier un système d'exploitation.
-\item
-  \textbf{La table des partitions}: définit une liste de partitions, qui
-  sont des subdivisions logiques de l'espace du disque. Selon le système
-  d'exploitation installé et la manière dont il a été configuré lors de
-  son installation initiale les partitions peuvent varier en nombre et
-  en taille. Les données à l'intérieur de chaque partition sont
-  généralement structurées en utilisant un système de fichiers. Les
-  partitions vont varier en nombre, taille, et format selon l'image
-  déployée.
-\end{enumerate}
-
-La seconde partie du disque est l'espace dédié à la mise en cache
-d'images d'\protect\hyperlink{acronym__OS}{OS}, qui prend 20\% de
-l'espace total disponible, moins 4096 octets, à la fin du disque. Ce
-cache permet de stocker des images disques compressées qui peuvent être
-décompressées sur la première partie du disque. Lors du premier
-déploiement d'une image disque compressée disponible sur le serveur,
-cette dernière est transmise depuis le serveur jusqu'au client en
-version compressée à travers le réseau. Au fur et à mesure que les
-données compressées de l'image sont réceptionnées par le client, elles
-sont simultanément copiées dans le cache et décompressées sur la
-première partie du disque.
-
-Ce mécanisme de cache permet de ne plus avoir à télécharger à nouveau
-l'image lors des prochains déploiements car elle sera disponible
-localement. Il suffira de décompresser le fichier présent dans le cache
-et d'écrire les données extraites séquentiellement sur la première
-partie du disque. Cela permet d'éviter de surcharger la bande passante
-du réseau et les ressources du serveur, en particulier quand un grand
-nombre de clients vont fréquemment déployer la même image en même temps,
-comme cela sera souvent le cas dans le contexte d'une école
-d'informatique où les élèves déploient la même image au début de chaque
-session d'un même cours.
-
-Enfin, les 4096 octets restants à la fin du disque sont dédiés à
-l'écriture d'une signature servant à signaler si une image vient d'être
-deployée sur le disque. La présence cette signature est verifiée à
-chaque démarrage pour déterminer s'il faut démarrer une image
-fraichement déployée ou si au contraire l'image déployée a déjà été
-utilisée et qu'il faut lancer un nouveau déploiement. Ainsi, le système
-peut s'assurer qu'une image disque déployée n'est exécutée qu'une seule
-fois, ce qui laisse la liberté à l'utilisateur du poste client de faire
-ce qu'il veut sur le système déployé sans se soucier de rendre le
-système inutilisable, car il suffit de redémarrer la machine pour
-repartir sur une base propre.
-
-Le mécanisme de signature est nécessaire à cause du moyen choisi pour
-déployer les images: un système d'exploitation Linux minimaliste est est
-chargé en mémoire depuis le réseau afin de lancer le processus de choix
-d'une image et de la déployer. Une fois le déploiement terminé, la
-machine redémarre. La signature à la fin du disque est un moyen simple
-et efficace de faire persister l'information qu'une image vient d'être
-déployée et de la vérifier au démarrage.
-
-\hypertarget{serveur}{%
-\subsection{Serveur}\label{serveur}}
-
-Le composant central du système est un \emph{serveur} linux qui
-inter-agit avec les postes clients pour leur permettre d'effectuer
-plusieurs actions:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  Recevoir une configuration IP et un chargeur d'amorcage
-  \protect\hyperlink{acronym__GRUB}{GRUB} à exécuter pour démarrer sur
-  le réseau en utilisant le standard PXE.
-\item
-  Analyser la signature présente sur le disque dur depuis le chargeur
-  d'amorçage chargeur d'amorcage
-  \protect\hyperlink{acronym__GRUB}{GRUB}.
-
-  \begin{itemize}
-  \tightlist
-  \item
-    Si elle n'est pas présente, amorcer un système d'exploitation
-    minimaliste servant à effectuer le choix d'une image et
-    d'automatiser son déploiement et sa mise en cache.
-  \item
-    Si elle est présente, l'effacer et démarrer sur le disque dur pour
-    initier l'amorçage de l'\protect\hyperlink{acronym__OS}{OS} déployé.
-  \end{itemize}
-\item
-  Lister les images disponible et les méta-données de chacune d'entre
-  elle:
-
-  \begin{itemize}
-  \tightlist
-  \item
-    Le nom de l'image, pour permettre aux utilisateurs d'effectuer un
-    choix.
-  \item
-    La taille de l'image décompressée, pour pouvoir vérifier que la
-    taille du disque client est suffisante pour déployer l'image.
-  \item
-    La taille de l'image compressée, pour pouvoir vérifier que l'image
-    puisse être mise en cache.
-  \item
-    Un \emph{hash} de l'image pour pouvoir l'identifier de manière
-    unique et vérifier si elle est déjà présente dans le cache ou s'il
-    faut la télécharger.
-  \end{itemize}
-\item
-  Télécharger une image choisie.
-\item
-  Sauvegarder et charger une copie du
-  \protect\hyperlink{acronym__MBR}{MBR} contenant la table des
-  partitions qui contient la partition cachée, afin de pouvoir le
-  restaurer et remonter cette partition.
-\item
-  Sauvegarder un log du déploiement afin de pouvoir garder une trace des
-  temps de déploiement et des éventuelles erreurs rencontrées.
-\end{enumerate}
-
-Trois protocoles réseau standard sont utilisés pour permettre au client
-d'effectuer ces actions:
-
-\begin{itemize}
-\item
-  \protect\hyperlink{acronym__DHCP}{DHCP}: fournit aux clients initiant
-  un démarrage sur le réseau une configuration IP, et l'adresse d'un
-  serveur TFTP et le nom du fichier exécutable du chargeur d'amorçage à
-  récupérer sur ce dernier
-\item
-  \protect\hyperlink{acronym__TFTP}{TFTP}: permet au clients de
-  télécharger:
-
-  \begin{itemize}
-  \tightlist
-  \item
-    le fichier exécutable du chargeur d'amorçage
-  \item
-    la configuration du chargeur d'amorçage
-  \item
-    les modules optionels du chargeur d'amorçage, téléchargés selon la
-    configuration
-  \item
-    l'image initrd permettant d'initialiser le système linux de
-    déploiement
-  \item
-    le noyeau linux de l'OS de déploiement
-  \item
-    l'image du système de fichier racine de l'OS de déploiement
-  \end{itemize}
-\item
-  \protect\hyperlink{acronym__NFS}{NFS}: permet au système linux de
-  monter un partage distant qui contient:
-
-  \begin{itemize}
-  \tightlist
-  \item
-    les scripts permettant d'effectuer le déploiement automatique
-  \item
-    un dossier contenant les images et leurs métadonnées
-  \item
-    un dossier dans lequel enregistrer une copie du MBR
-  \item
-    un dossier dans lequel enregistrer les logs du déploiement
-  \end{itemize}
-\end{itemize}
-
-\hypertarget{diagramme-des-composants-du-serveur}{%
-\subsection{Diagramme des composants du
-serveur}\label{diagramme-des-composants-du-serveur}}
-
-La figure \ref{diagram_components} est un diagramme qui détaille les
-différents composants et leurs interactions.
-
-\begin{figure}
-\centering
-\includegraphics{images/diagram_components.svg}
-\caption{Diagramme des composants du système\label{diagram_components}}
-\end{figure}
-
-\hypertarget{processus-de-duxe9ploiement-initial}{%
-\section{Processus de déploiement
-initial}\label{processus-de-duxe9ploiement-initial}}
-
-\textbf{TODO: décrire pas à pas les différentes étapes du processus de
-déploiement telles que montrées sur le diagramme.}
-
-Les différentes étapes du processus de déploiement d'images sont
-décrites dans la figure \ref{diagram_activity_deployment} qui est un
-diagrame d'activité détaillant les différentes étapes du processus de
-déploiement d'images.
-
-\begin{figure}
-\centering
-\includegraphics{images/diagram_activity_deployment.svg}
-\caption{Diagramme d'activité du processus de déploiement
-initial\label{diagram_activity_deployment}}
-\end{figure}
-
-\hypertarget{architecture-ruxe9seau-initiale}{%
-\section{Architecture réseau
-initiale}\label{architecture-ruxe9seau-initiale}}
-
-Pour faire fonctionner le système, il faut que les machines clientes et
-le serveur puissent communiquer à travers un réseau local.
-
-Les tests ont été effectués dans un réseau domestique classique: une
-\emph{box} internet sert à la fois de passerelle internet et de routeur
-DHCP dans le réseau local.
-
-Il y a un problème pour tester le système dans ce réseau local: le
-serveur de déploiement doit aussi jouer le rôle de serveur DHCP et il y
-aura des collisions entre les deux. La solution choisie pour palier à ce
-problème, est d'utiliser deux interfaces réseau sur le serveur pour le
-connecter à deux réseaux locaux distincts.
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\item
-  L'interface \texttt{eth0} du serveur de déploiement est connectée au
-  réseau \texttt{192.168.1.0/24}, dont les adresses IP sont distribuées
-  par la box internet, qui sert aussi de passerelle vers internet.
-\item
-  L'interface \texttt{eth1} du serveur de déploiement est connectée au
-  réseau \texttt{192.168.56.0/24}, dont les adresses IP sont distribuées
-  par le serveur de déploiement d'images. Il n'y a pas de passerelle
-  vers internet.
-\end{enumerate}
-
-Le serveur étant une machine virtuelle \emph{VirtualBox} créée par
-l'outil \emph{Vagrant}, ses interfaces réseau sont aussi virtuelles. Ces
-interfaces virtuelles ont été ratachées aux interfaces de la machine
-hôte de la manière suivante:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  L'interface \texttt{eth0} de la machine virtuelle est ratachée à
-  l'interface \texttt{wlan0} de la machine hôte en utilisant le mode
-  \protect\hyperlink{acronym__NAT}{NAT}.
-\item
-  L'interface \texttt{eth1} de la machine virtuelle est ratachée à
-  l'interface \texttt{eth0} de la machine hôte en utilisant le mode
-  \texttt{bridged}.
-\end{enumerate}
-
-La figure \ref{diagram_home_network} illustre les détails de la
-configuration réseau décrite ci-dessus.
-
-\begin{figure}
-\centering
-\includegraphics{images/diagram_home_network.svg}
-\caption{Diagramme montrant la configuration des équipements réseaux
-utilisée pendant le test du système
-initial.\label{diagram_home_network}}
-\end{figure}
-
-\hypertarget{mise-en-opuxe9ration-du-projet-initial}{%
-\section{Mise en opération du projet
-initial}\label{mise-en-opuxe9ration-du-projet-initial}}
-
-La mise en fonctionnement du système initial à partir de la
-documentation et des fichiers du dépôt git a été fastidieuse car il
-contient des fichiers de configuration, des binaires et des sources et
-des scripts non documentés. Il faut parcourir les différents fichiers
-\texttt{readme} éparpillés dans les dossiers pour tenter de comprendre
-comment installer un serveur. Aussi, certaines configurations ne
-semblaient pas être à jour et ne fonctionnaient pas en étant utilisées
-telles quel.
-
-La configuration du serveur \protect\hyperlink{acronym__DHCP}{DHCP} a du
-être modifiée pour qu'en plus du
-\texttt{option\ tftp-server-name\ "192.168.56.100"}, le paramètre
-\texttt{next-server\ 192.168.56.100} soit aussi envoyé aux clients. Le
-premier paramètre sert au client à savoir sur quel serveur TFTP
-l'exécutable d'amorçage (dans ce cas,
-\protect\hyperlink{acronym__GRUB}{GRUB}) doit être téléchargé.
-Cependant, une fois \protect\hyperlink{acronym__GRUB}{GRUB} démarré, il
-n'était pas capable de trouver l'image du système linux de déploiement.
-L'option \texttt{next-server} a permis de renseigner
-\protect\hyperlink{acronym__GRUB}{GRUB} sur le fait qu'il doit par
-défaut rechercher les fichiers mentionnés dans la configuration dans le
-serveur \protect\hyperlink{acronym__TFTP}{TFTP} accessible par l'adresse
-IP mentionnée.
-
-Ensuite, une fois capable de démarrer l'OS de déploiement, il a fallu
-résoudre de nombreux petits bugs dans les scripts de déploiement, qui ne
-s'exécutaient pas complètement à cause d'erreurs dans certaines
-commandes. Une fois les scripts corrigés, le démarrage de l'image
-déployée ne fonctionnait pas. Pour des raisons non documentées,
-\protect\hyperlink{acronym__GRUB}{GRUB} était configuré pour lancer le
-programme \texttt{ipxe} depuis le serveur
-\protect\hyperlink{acronym__TFTP}{TFTP}, qui lui même initie le
-démarrage depuis le premier disque. Ce système ne fonctionnait pas:
-\texttt{ipxe} ne se lançait même pas à cause d'un chemin invalide. De
-plus ce système rajoutait une étape inutile:
-\protect\hyperlink{acronym__GRUB}{GRUB} est tout à fait capable de
-démarrer sur le premier disque. Le fichier de configuration de
-\protect\hyperlink{acronym__GRUB}{GRUB} a donc été modifié pour
-directement démarrer sur le disque quand la signature est détectée à la
-fin du disque. Enfin, le système était fonctionnel.
-
-Pour faciliter l'utilisation et le développement du système dans le
-futur, il a été décidé d'automatiser la création d'une machine virtuelle
-du serveur, afin que la mise en fonctionnement d'un nouveau serveur de
-déploiement d'images soit le plus simple possible nécessite le moins
-d'intervention possible. Le programme \emph{Vagrant} a été utilisé dans
-un premier temps pour automatiser la création d'une machine virtuelle à
-partir d'un fichier \texttt{Vagrantfile} définissant la configuration de
-la machine et les commandes à lancer pour l'installer et la configurer.
-Une fois ce fichier de configuration créé, une seule commande est
-nécessaire pour créer, configurer et lancer un serveur fonctionnel dans
-une machine virtuelle: \texttt{vagrant\ up}.
-
-\begin{figure}
-\centering
-\includegraphics{images/vagrant_logo.svg}
-\caption{Logo du logiciel \emph{Vagrant} utilisé pour automatiser la
-création du serveur du système initial.}
-\end{figure}
-
-La distribution \emph{Linux} \emph{Debian} a été choisie comme
-\protect\hyperlink{acronym__OS}{OS} de base de cette machine virtuelle,
-car elle est \emph{open-source}, populaire, stable et dispose de
-nombreux paquets. Elle est utilisée dans la version \emph{Buster}, qui
-est la version stable au moment de ce travail.
-
-\begin{figure}
-\centering
-\includegraphics{images/debian_logo.svg}
-\caption{Logo de la distribution \emph{Linux} \emph{Debian} utilisée
-comme base du serveur.}
-\end{figure}
-
-\hypertarget{limitations-du-projet-initial}{%
-\section{Limitations du projet
-initial}\label{limitations-du-projet-initial}}
-
-Bien que le système du projet initial ait pu être mis en fonctionnement,
-il comporte de nombreuses limitations auxquelles il faudrait palier:
-
-\begin{itemize}
-\tightlist
-\item
-  Les systèmes EFI ne sont pas supportés.
-\item
-  Les images prennent beaucoup de place et sont longues à transférer.
-\item
-  Les grosses images prennent beaucoup de temps à être déployées.
-\item
-  La création d'images nécessite plusieurs opérations en ligne de
-  commande, ce n'est pas très facile à utiliser.
-\item
-  Les scripts de déploiement sont fragiles et gèrent mal les erreurs.
-\item
-  Il n'y a pas de système de personnalisation d'image. Si on veut faire
-  \(n\) personnalisation partant sur la base du même
-  \protect\hyperlink{acronym__OS}{OS}, il faut faire \(n\) images: une
-  pour chaque personnalisation.
-\item
-  L'installation de nouveaux outils sur le système d'exploitation de
-  l'\protect\hyperlink{acronym__OS}{OS} de déploiement créé avec
-  \emph{Buildroot} peut être compliqué si l'outil a beaucoup de
-  dépendances.
-\item
-  Les dépendances du projet sont difficile à reproduire: il faut
-  disposer des bonnes dépendances et du bon environnement.
-\item
-  Les scripts de déploiement ne fonctionnent que si le client utilise
-  une interface réseau nommée \texttt{eth0}.
-\item
-  Les logs sauvés sur le serveur ne sont pas très complets et il est
-  difficile de diagnostiquer les erreurs et les timings des différentes
-  étapes à partir de ceux-ci.
-\item
-  Le système de déploiement doit sauver et restaurer un
-  \protect\hyperlink{acronym__MBR}{MBR} sur le serveur pour utiliser sa
-  partition cachée de cache des images. Cela implique des
-  lectures/écritures sur le disque et sur le partage NFS du serveur qui
-  prennent du temps et rajoutent de la complexité. Étant donné que la
-  position du cache est fixe (elle est calculée à partir de la taille du
-  disque, qui ne devrait pas changer), le client devrait être capable de
-  détecter et monter la partition sans dépendre du serveur.
-\end{itemize}
-
-\hypertarget{recherche-et-duxe9veloppement}{%
-\chapter{Recherche et
-développement}\label{recherche-et-duxe9veloppement}}
-
-\hypertarget{compatibilituxe9-efi}{%
-\section{\texorpdfstring{Compatibilité
-\protect\hyperlink{acronym__EFI}{EFI}}{Compatibilité EFI}}\label{compatibilituxe9-efi}}
-
-Lors des tests du système initial sur les PC fournis par l'école (DELL
-Optiplex 7060 micro), il s'est avéré que bien que le système de
-déploiement était fonctionnel, l'initialisation des images
-d'\protect\hyperlink{acronym__OS}{OS} qui venaient d'être déployées par
-le logiciel d'amorçage \protect\hyperlink{acronym__GRUB}{GRUB} ne
-fonctionnait pas: un écran noir était affiché, avec parfois une suite de
-caractères étranges affichée à l'écran, parfois non, alors que sur des
-machines virtuelles \emph{VirtualBox}, le démarrage des mêmes images ne
-posait aucun problème.
-
-Ces mini-ordinateurs sont capables de démarrer sur le réseau avec le
-protocole \protect\hyperlink{acronym__PXE}{PXE} en mode émulation
-\emph{legacy} ou en mode natif \protect\hyperlink{acronym__EFI}{EFI}. Le
-système initial fonctionne uniquement en mode \emph{legacy} et il est
-soupçonné que c'est un bug ou une limitation dans l'émulation du mode
-\emph{legacy} sur ces machines qui empêchait le démarrage de
-l'\protect\hyperlink{acronym__OS}{OS} déployé, bien qu'il n'ait pas été
-possible de le prouver avec certitude.
-
-Cela a conduit à effectuer un autre test sur un ordinateur portable
-personnel à disposition (Lenovo U530), sur lequel il s'est avéré que le
-boot \protect\hyperlink{acronym__PXE}{PXE} \emph{legacy} n'était même
-pas supporté: seul le démarrage en mode
-\protect\hyperlink{acronym__EFI}{EFI} était possible.
-
-À ce moment, il a été décidé de modifier le système pour le rendre
-compatible
-\protect\hyperlink{acronym__EFI}{EFI}/\protect\hyperlink{acronym__UEFI}{UEFI},
-en partant du principe qu'il serait utilisé sur des
-\protect\hyperlink{acronym__PC}{PC} récents qui sont compatibles avec ce
-mode de démarrage.
-
-La première étape de cette transition vers
-\protect\hyperlink{acronym__EFI}{EFI} a été de recompiler le logiciel
-d'amorçage \protect\hyperlink{acronym__GRUB}{GRUB} dans sa version
-\protect\hyperlink{acronym__EFI}{EFI} pour une architecture x86 64 bits.
-Jusqu'à présent, l'exécutable déjà compilé de
-\protect\hyperlink{acronym__GRUB}{GRUB} présent dans les dossiers du
-projet initial avait été utilisé. Il avait été compilé pour une
-architecture x86 32 bits en mode \protect\hyperlink{acronym__PC}{PC}
-\emph{legacy} uniquement. La compilation du système est nécessaire car
-le système de déploiement initial comporte un module
-\protect\hyperlink{acronym__GRUB}{GRUB} développé spécifiquement pour le
-projet, qui permet d'effectuer la vérification et l'effacement de la
-signature à la fin du disque et de changer l'option de démarrage par
-défaut en fonction de sa présence. Il n'est donc pas possible d'utiliser
-un exécutable déjà compilé de \protect\hyperlink{acronym__GRUB}{GRUB}
-car il faut que ce module soit aussi compilé.
-
-Dans le projet initial, le code source de
-\protect\hyperlink{acronym__GRUB}{GRUB} dans sa version 2.02 avait
-simplement été recopié dans un dossier du dépôt git, le fichier source
-du module de vérification de la signature \texttt{isign.c} avait été
-rajouté au code source et les fichiers de \texttt{Makefile} avaient été
-modifiés pour que le nouveau module soit compilé. Le problème avec cette
-approche est qu'il est difficile de mettre à jour
-\protect\hyperlink{acronym__GRUB}{GRUB} sur une nouvelle version.
-
-Une nouvelle approche a été choisie pour intégrer le module
-\texttt{isign} à \protect\hyperlink{acronym__GRUB}{GRUB}, qui permet de
-mettre à jour plus facilement \protect\hyperlink{acronym__GRUB}{GRUB},
-qui a d'ailleurs été utilisé en version 2.04, la dernière version sortie
-au moment où cela a été fait. La nouvelle approche est la suivante:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  Un clone du dépôt officiel de \protect\hyperlink{acronym__GRUB}{GRUB}
-  a été créé sur le serveur git de
-  \protect\hyperlink{acronym__HEPIA}{HEPIA}. Il a été nommé
-  \texttt{bootiful-grub}.
-\item
-  Un commit a été fait sur ce clone du dépôt git, contenant l'ajout du
-  fichier source \texttt{isign.c} et la modification du fichier générant
-  le \texttt{Makefile} pour prendre en compte ce module lors de la
-  compilation.
-\item
-  Le dépôt git cloné a été rajouté comme sous module du dépôt principal
-  du projet \emph{Bootiful} dans le sous dossier
-  \texttt{grub/bootiful-grub}.
-\end{enumerate}
-
-L'avantage de cette nouvelle approche est qu'il est maintenant facile
-d'intégrer les changements survenus dans le dépôt git officiel sur son
-clone pour bénéficier des dernières mises à jour de
-\protect\hyperlink{acronym__GRUB}{GRUB}.
-
-\textbf{TODO: expliquer les problèmes rencontrés sans
-\protect\hyperlink{acronym__EFI}{EFI} avec lesmachines récentes, des
-modifications nécessaires pour supporter ce nouveau système et des
-limitations que cela apporte.}
-
-\hypertarget{amuxe9lioration-de-la-vitesse-de-transfert-des-images}{%
-\section{Amélioration de la vitesse de transfert des
-images}\label{amuxe9lioration-de-la-vitesse-de-transfert-des-images}}
-
-Le protocole \protect\hyperlink{acronym__NFS}{NFS} est utilisé dans le
-système initial pour transférer une image depuis le client vers le
-serveur. Peut-être que la vitesse de transfert des images à travers le
-réseau pourrait être améliorée en utilisant un autre protocole. Pour
-décider si le choix de ce protocole est adapté ou si au contraire il
-serait bénéfique d'en utiliser un autre, la vitesse de transfert d'une
-grosse image a été mesurée sur différents protocoles de transfert de
-fichier.
-
-\hypertarget{protocoles-considuxe9ruxe9s}{%
-\subsection{Protocoles considérés}\label{protocoles-considuxe9ruxe9s}}
-
-Les différents protocoles qui ont été mesurés sont:
-
-\begin{itemize}
-\tightlist
-\item
-  \protect\hyperlink{acronym__SCP}{SCP}: ce protocole, utilisable avec
-  le programme éponyme \texttt{scp}, permet le transfert de fichiers
-  sécurisé entre un client et un serveur utilisant le protocole d'accès
-  à distance sécurisé \protect\hyperlink{acronym__SSH}{SSH}. Bien que le
-  chiffrage de la communication n'est pas nécessaire dans notre cas, il
-  est intéressant d'observer si ce dernier a un impact sur le temps de
-  transfert.
-\item
-  \protect\hyperlink{acronym__HTTP}{HTTP}: c'est le protocole
-  client-serveur utilisé sur le World Wide Web
-  (\protect\hyperlink{acronym__WWW}{WWW}) pour la communication entre en
-  les navigateurs (client) et les serveurs. Il est souvent utilisé pour
-  le téléchargement de fichiers sur internet et offre probablement des
-  performances acceptables. Il existe aussi une version chiffrée de ce
-  protocole, \protect\hyperlink{acronym__HTTPS}{HTTPS}, mais uniquement
-  la version non-chiffrée sera testée ici, car le chiffrement de la
-  communication ne semble pas nécessaire et pourrait impacter les
-  performances.
-\item
-  \protect\hyperlink{acronym__FTP}{FTP}: ce protocole standard fait
-  exactement ce que nous avons besoin: transférer des fichiers à travers
-  le réseau. Il y a de forte chances qu'il offre de très bonnes
-  performances.
-\item
-  \protect\hyperlink{acronym__NFS}{NFS}: le protocole standard pour
-  monter à distance des dossiers partagés entre des
-  \protect\hyperlink{acronym__OS}{OS} Linux. C'est ce système qui est
-  utilisé par le projet initial, mais ce n'est probablement pas le plus
-  rapide, car permet de faire plus qu'un simple transfert de fichiers.
-\item
-  \protect\hyperlink{acronym__SMB}{SMB}: le protocole standard pour
-  monter à distance des dossier partagés entre des
-  \protect\hyperlink{acronym__OS}{OS} Windows. Une implémentation existe
-  sous linux, \emph{Samba}, et elle est courremment utilisée pour une
-  meilleure compatiblité avec les systèmes Windows que sont équivalent
-  \protect\hyperlink{acronym__NFS}{NFS}.
-\item
-  \protect\hyperlink{acronym__IPFS}{IPFS}: ce protocole pair à pair
-  décentralisé permet à chacun de des pairs de mettre à disposition ou
-  de télécharger des fichiers. Il pourrait être intéressant d'utiliser
-  ce protocole pour soulager la charge du serveur, car tous les clients
-  connectés peuvent se partager des parties d'images qu'ils ont déjà. Le
-  serveur de déploiement ne serait qu'un pair de plus, qui dispose de
-  toutes les images. Il est cependant possible que ce protocole ne soit
-  pas le plus performant à cause de sa jeunesse et de son mode de
-  fonctionnement complexe qui apporte un surcout à l'échange, en tout
-  cas dans le cas ou il n'y a que deux pairs.
-\end{itemize}
-
-\hypertarget{environnement-des-tests-de-performance-des-protocoles-de-transfert-de-fichiers}{%
-\subsection{Environnement des tests de performance des protocoles de
-transfert de
-fichiers}\label{environnement-des-tests-de-performance-des-protocoles-de-transfert-de-fichiers}}
-
-Deux machines de test identiques ont été utilisées: il s'agit de mini-PC
-DELL Optiplex 7060 micro avec les spécifications suivantes:
-
-\begin{itemize}
-\tightlist
-\item
-  Processeur: Intel® Core™ i7-8700 CPU cadencé à 3.20GHz,
-\item
-  Mémoire vive: 8 GiB (2 barettes 4GiB SODIMM DDR4 Synchronous 2666 MHz
-  (0.4 ns))
-\item
-  Disque: TOSHIBA KSG60ZMV SSD 476GiB (512GB)
-\item
-  Réseau: Intel e1000e Gigabit Ethernet
-\end{itemize}
-
-Les deux machines de test sont connectées en réseau avec un switch
-Gigabit Ethernet. Le système d'exploitation Debian 10.4.0 (nom de code
-\emph{buster}) AMD64 a été installé sur deux machines de test, sans
-interface graphique. La première machine est nommée \texttt{debian1} et
-la seconde \texttt{debian2}. Les noms \texttt{debian1.home} et
-\texttt{debian2.home} permettent aux deux machines de communiquer entre
-elles en faisant abstraction de leur adresse
-\protect\hyperlink{acronym__IP}{IP}. L'utilisateur \texttt{debian} avec
-le mot de passe \texttt{debian} est utilisé sur chacune des deux
-machines.
-
-Le fichier à copier, \texttt{win10.tar.gz} est une image brute de
-windows 10 compressée avec \texttt{gzip}, qui fait une taille totale de
-13743592907 B (12.8 GiB). Il est présent dans le dossier
-\texttt{/home/debian} de la machine \texttt{debian1}.
-
-La commande \texttt{perf} est utilisée pour tester 4 exécutions d'une
-commande de copie lancée depuis la machine \texttt{debian2}. Elle est
-installée à l'aide de la commande suivante:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{apt}\NormalTok{ install linux{-}perf}
-\end{Highlighting}
-\end{Shaded}
-
-Pour faire fonctionner la commande sans être root, le kernel doit être
-configuré avec la commande suivante:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\BuiltInTok{echo}\NormalTok{ 1 }\OperatorTok{\textgreater{}}\NormalTok{ /proc/sys/kernel/perf\_event\_paranoid}
-\end{Highlighting}
-\end{Shaded}
-
-Les sections suivantes détaillent les configurations spécifiques à
-chaque protocole effectuées sur chacune des machines et les résultats du
-test. La dernière section récapitule les résultats et explique quel
-protocole est choisi pour la suite du travail et pourquoi.
-
-\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-scp}{%
-\subsection{\texorpdfstring{Tests de performance du protocole de
-transfert de fichiers
-\protect\hyperlink{acronym__SCP}{SCP}}{Tests de performance du protocole de transfert de fichiers SCP}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-scp}}
-
-Tout d'abord, des clés SSH ont été générées sur chaque machine avec la
-commande suivante:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\FunctionTok{ssh{-}keygen}
-\end{Highlighting}
-\end{Shaded}
-
-Ensuite, les clés ont été échangées. Sur \texttt{debian1}, la commande
-suivante a été utilisée:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{ssh{-}copy{-}id}\NormalTok{ debian2.home}
-\end{Highlighting}
-\end{Shaded}
-
-Sur \texttt{debian2}, la commande suivante a été utilisée:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{ssh{-}copy{-}id}\NormalTok{ debian1.home}
-\end{Highlighting}
-\end{Shaded}
-
-Finalement, le benchmark de la copie a été lancé sur \texttt{debian2}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz}
-\ExtensionTok{win10.tar.gz}\NormalTok{                                                                       100\%   13GB 109.6MB/s   01:59    }
-\ExtensionTok{win10.tar.gz}\NormalTok{                                                                       100\%   13GB 109.6MB/s   01:59    }
-\ExtensionTok{win10.tar.gz}\NormalTok{                                                                       100\%   13GB 109.7MB/s   01:59    }
-\ExtensionTok{win10.tar.gz}\NormalTok{                                                                       100\%   13GB 109.6MB/s   01:59    }
-
- \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:}
-
-         \ExtensionTok{60}\NormalTok{,349.20 msec task{-}clock                \#    0.504 CPUs utilized            ( +{-}  3.61\% )}
-           \ExtensionTok{808}\NormalTok{,243      context{-}switches          \#    0.013 M/sec                    ( +{-}  0.26\% )}
-                \ExtensionTok{16}\NormalTok{      cpu{-}migrations            \#    0.000 K/sec                    ( +{-} 14.73\% )}
-            \ExtensionTok{16}\NormalTok{,862      page{-}faults               \#    0.279 K/sec                    ( +{-} 18.95\% )}
-   \ExtensionTok{191}\NormalTok{,612,352,176      cycles                    \#    3.175 GHz                      ( +{-}  0.33\% )  }\KeywordTok{(}\ExtensionTok{50.09\%}\KeywordTok{)}
-   \ExtensionTok{406}\NormalTok{,400,076,305      instructions              \#    2.12  insn per cycle           ( +{-}  0.25\% )  }\KeywordTok{(}\ExtensionTok{62.64\%}\KeywordTok{)}
-    \ExtensionTok{13}\NormalTok{,334,327,547      branches                  \#  220.953 M/sec                    ( +{-}  1.42\% )  }\KeywordTok{(}\ExtensionTok{62.43\%}\KeywordTok{)}
-       \ExtensionTok{246}\NormalTok{,499,018      branch{-}misses             \#    1.85\% of all branches          ( +{-}  3.10\% )  }\KeywordTok{(}\ExtensionTok{62.36\%}\KeywordTok{)}
-    \ExtensionTok{64}\NormalTok{,653,696,732      L1{-}dcache{-}loads           \# 1071.326 M/sec                    ( +{-}  0.44\% )  }\KeywordTok{(}\ExtensionTok{62.40\%}\KeywordTok{)}
-     \ExtensionTok{4}\NormalTok{,559,992,550      L1{-}dcache{-}load{-}misses     \#    7.05\% of all L1{-}dcache hits    ( +{-}  0.41\% )  }\KeywordTok{(}\ExtensionTok{62.43\%}\KeywordTok{)}
-       \ExtensionTok{784}\NormalTok{,218,339      LLC{-}loads                 \#   12.995 M/sec                    ( +{-}  0.64\% )  }\KeywordTok{(}\ExtensionTok{50.01\%}\KeywordTok{)}
-       \ExtensionTok{121}\NormalTok{,317,304      LLC{-}load{-}misses           \#   15.47\% of all LL{-}cache hits     ( +{-}  0.52\% )  }\KeywordTok{(}\ExtensionTok{50.29\%}\KeywordTok{)}
-
-          \ExtensionTok{119.8094}\NormalTok{ +{-} 0.0182 seconds time elapsed  ( +{-}  0.02\% )}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-http}{%
-\subsection{\texorpdfstring{Tests de performance du protocole de
-transfert de fichiers
-\protect\hyperlink{acronym__HTTP}{HTTP}}{Tests de performance du protocole de transfert de fichiers HTTP}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-http}}
-
-Le serveur \protect\hyperlink{acronym__HTTP}{HTTP} \emph{Apache} a été
-installé sur la machine \texttt{debian1} et le fichier a été mis à
-disposition sur ce serveur avec les commandes suivantes:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{apt}\NormalTok{ install apache2}
-\FunctionTok{cp}\NormalTok{ win10.tar.gz /var/www/html/}
-\end{Highlighting}
-\end{Shaded}
-
-Finalement, le benchmark du téléchargement du fichier avec la commande
-\texttt{wget} a été lancé sur \texttt{debian2}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d wget http://debian1.home/win10.tar.gz}
-\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:53:53{-}{-}  http://debian1.home/win10.tar.gz}
-\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29}
-\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.}
-\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK}
-\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]}
-\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.2’}
-
-\ExtensionTok{win10.tar.gz.2}\NormalTok{                100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{]  12.80G   110MB/s    in 2m 0s   }
-
-\ExtensionTok{2020{-}05{-}20}\NormalTok{ 09:55:53 (110 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.2’ saved [13743592907/13743592907]}
-
-\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:55:53{-}{-}  http://debian1.home/win10.tar.gz}
-\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29}
-\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.}
-\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK}
-\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]}
-\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.3’}
-
-\ExtensionTok{win10.tar.gz.3}\NormalTok{                100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{]  12.80G   108MB/s    in 2m 0s   }
-
-\ExtensionTok{2020{-}05{-}20}\NormalTok{ 09:57:52 (109 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.3’ saved [13743592907/13743592907]}
-
-\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:57:52{-}{-}  http://debian1.home/win10.tar.gz}
-\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29}
-\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.}
-\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK}
-\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]}
-\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.4’}
-
-\ExtensionTok{win10.tar.gz.4}\NormalTok{                100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{]  12.80G   108MB/s    in 2m 1s   }
-
-\ExtensionTok{2020{-}05{-}20}\NormalTok{ 09:59:53 (109 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.4’ saved [13743592907/13743592907]}
-
-\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:59:53{-}{-}  http://debian1.home/win10.tar.gz}
-\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29}
-\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.}
-\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK}
-\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]}
-\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.5’}
-
-\ExtensionTok{win10.tar.gz.5}\NormalTok{                100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{]  12.80G   110MB/s    in 2m 0s   }
-
-\ExtensionTok{2020{-}05{-}20}\NormalTok{ 10:01:52 (110 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.5’ saved [13743592907/13743592907]}
-
-
- \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}wget http://debian1.home/win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:}
-
-         \ExtensionTok{46}\NormalTok{,792.73 msec task{-}clock                \#    0.390 CPUs utilized            ( +{-}  0.64\% )}
-           \ExtensionTok{417}\NormalTok{,641      context{-}switches          \#    0.009 M/sec                    ( +{-}  0.31\% )}
-                \ExtensionTok{18}\NormalTok{      cpu{-}migrations            \#    0.000 K/sec                    ( +{-}  8.25\% )}
-               \ExtensionTok{292}\NormalTok{      page{-}faults               \#    0.006 K/sec                    ( +{-}  0.30\% )}
-    \ExtensionTok{61}\NormalTok{,311,321,905      cycles                    \#    1.310 GHz                      ( +{-}  0.25\% )  }\KeywordTok{(}\ExtensionTok{49.71\%}\KeywordTok{)}
-    \ExtensionTok{55}\NormalTok{,652,602,418      instructions              \#    0.91  insn per cycle           ( +{-}  0.20\% )  }\KeywordTok{(}\ExtensionTok{61.93\%}\KeywordTok{)}
-    \ExtensionTok{10}\NormalTok{,835,524,321      branches                  \#  231.564 M/sec                    ( +{-}  0.14\% )  }\KeywordTok{(}\ExtensionTok{62.04\%}\KeywordTok{)}
-       \ExtensionTok{229}\NormalTok{,073,690      branch{-}misses             \#    2.11\% of all branches          ( +{-}  1.03\% )  }\KeywordTok{(}\ExtensionTok{62.77\%}\KeywordTok{)}
-    \ExtensionTok{16}\NormalTok{,218,621,768      L1{-}dcache{-}loads           \#  346.606 M/sec                    ( +{-}  0.16\% )  }\KeywordTok{(}\ExtensionTok{62.94\%}\KeywordTok{)}
-     \ExtensionTok{1}\NormalTok{,767,713,664      L1{-}dcache{-}load{-}misses     \#   10.90\% of all L1{-}dcache hits    ( +{-}  0.17\% )  }\KeywordTok{(}\ExtensionTok{62.78\%}\KeywordTok{)}
-       \ExtensionTok{392}\NormalTok{,258,789      LLC{-}loads                 \#    8.383 M/sec                    ( +{-}  1.79\% )  }\KeywordTok{(}\ExtensionTok{50.19\%}\KeywordTok{)}
-       \ExtensionTok{113}\NormalTok{,116,138      LLC{-}load{-}misses           \#   28.84\% of all LL{-}cache hits     ( +{-}  0.25\% )  }\KeywordTok{(}\ExtensionTok{49.57\%}\KeywordTok{)}
-
-           \ExtensionTok{119.871}\NormalTok{ +{-} 0.235 seconds time elapsed  ( +{-}  0.20\% )}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-ftp}{%
-\subsection{\texorpdfstring{Tests de performance du protocole de
-transfert de fichiers
-\protect\hyperlink{acronym__FTP}{FTP}}{Tests de performance du protocole de transfert de fichiers FTP}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-ftp}}
-
-Le serveur \protect\hyperlink{acronym__FTP}{FTP} \texttt{vsftpd} a été
-installé sur la machine \texttt{debian1} avec la commande suivante:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{apt}\NormalTok{ install vsftpd}
-\end{Highlighting}
-\end{Shaded}
-
-Le client \protect\hyperlink{acronym__FTP}{FTP} \texttt{ftp} a été
-installé sur la machine \texttt{debian2} avec la commande suivante:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{apt}\NormalTok{ install ftp}
-\end{Highlighting}
-\end{Shaded}
-
-Par défaut, un utilisateur se connecte sur son dossier \texttt{home} sur
-le serveur, donc il n'y a pas besoin de créer de configuration spéciale
-car le fichier à \texttt{win10.tar.gz} est déjà présent dans le dossier
-\texttt{/home/debian}. La commande suivante est lancée pour mesurer le
-temps de transfert:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d lftp {-}u debian,debian {-}e }\StringTok{"get {-}e win10.tar.gz;quit"}\NormalTok{ debian1.home}
-\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (109.61 MiB/s)             }
-\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (109.11 MiB/s)             }
-\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (108.81 MiB/s)             }
-\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (109.01 MiB/s)             }
-
- \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}lftp {-}u debian,debian {-}e get {-}e win10.tar.gz;quit debian1.home\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:}
-
-         \ExtensionTok{43}\NormalTok{,760.05 msec task{-}clock                \#    0.364 CPUs utilized            ( +{-}  3.19\% )}
-           \ExtensionTok{416}\NormalTok{,480      context{-}switches          \#    0.010 M/sec                    ( +{-}  0.21\% )}
-                \ExtensionTok{20}\NormalTok{      cpu{-}migrations            \#    0.000 K/sec                    ( +{-} 17.44\% )}
-               \ExtensionTok{768}\NormalTok{      page{-}faults               \#    0.018 K/sec                    ( +{-}  1.76\% )}
-    \ExtensionTok{50}\NormalTok{,319,107,200      cycles                    \#    1.150 GHz                      ( +{-}  1.87\% )  }\KeywordTok{(}\ExtensionTok{49.42\%}\KeywordTok{)}
-    \ExtensionTok{41}\NormalTok{,925,907,326      instructions              \#    0.83  insn per cycle           ( +{-}  2.58\% )  }\KeywordTok{(}\ExtensionTok{61.97\%}\KeywordTok{)}
-     \ExtensionTok{8}\NormalTok{,345,354,967      branches                  \#  190.707 M/sec                    ( +{-}  2.51\% )  }\KeywordTok{(}\ExtensionTok{62.63\%}\KeywordTok{)}
-       \ExtensionTok{192}\NormalTok{,939,322      branch{-}misses             \#    2.31\% of all branches          ( +{-}  3.57\% )  }\KeywordTok{(}\ExtensionTok{62.66\%}\KeywordTok{)}
-    \ExtensionTok{12}\NormalTok{,148,795,763      L1{-}dcache{-}loads           \#  277.623 M/sec                    ( +{-}  2.11\% )  }\KeywordTok{(}\ExtensionTok{63.06\%}\KeywordTok{)}
-     \ExtensionTok{1}\NormalTok{,646,404,955      L1{-}dcache{-}load{-}misses     \#   13.55\% of all L1{-}dcache hits    ( +{-}  0.76\% )  }\KeywordTok{(}\ExtensionTok{62.79\%}\KeywordTok{)}
-       \ExtensionTok{516}\NormalTok{,891,020      LLC{-}loads                 \#   11.812 M/sec                    ( +{-}  0.79\% )  }\KeywordTok{(}\ExtensionTok{49.87\%}\KeywordTok{)}
-       \ExtensionTok{112}\NormalTok{,961,435      LLC{-}load{-}misses           \#   21.85\% of all LL{-}cache hits     ( +{-}  0.29\% )  }\KeywordTok{(}\ExtensionTok{49.56\%}\KeywordTok{)}
-
-           \ExtensionTok{120.151}\NormalTok{ +{-} 0.213 seconds time elapsed  ( +{-}  0.18\% )}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-nfs}{%
-\subsection{\texorpdfstring{Tests de performance du protocole de
-transfert de fichiers
-\protect\hyperlink{acronym__NFS}{NFS}}{Tests de performance du protocole de transfert de fichiers NFS}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-nfs}}
-
-Le serveur \protect\hyperlink{acronym__NFS}{NFS} est installé et
-configuré avec les commandes suivantes sur \texttt{debian1}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{apt}\NormalTok{ install nfs{-}kernel{-}server}
-\FunctionTok{mkdir}\NormalTok{ /nfsroot}
-\FunctionTok{cp}\NormalTok{ win10.tar.gz /nfsroot/}
-\BuiltInTok{echo} \StringTok{\textquotesingle{}/nfsroot/         *(rw,fsid=0,no\_root\_squash,no\_subtree\_check,async,insecure)\textquotesingle{}} \OperatorTok{\textgreater{}\textgreater{}}\NormalTok{ /etc/exports}
-\ExtensionTok{systemctl}\NormalTok{ restart nfs{-}server}
-\end{Highlighting}
-\end{Shaded}
-
-Le client partage est monté sur le client \texttt{debian2} avec les
-commandes suivantes:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\FunctionTok{su}
-\ExtensionTok{apt}\NormalTok{ install nfs{-}common}
-\FunctionTok{mkdir}\NormalTok{ /nfsroot}
-\FunctionTok{mount}\NormalTok{ {-}t nfs debian1.home:/nfsroot /nfsroot}
-\BuiltInTok{exit}
-\end{Highlighting}
-\end{Shaded}
-
-Finalement, le benchmark de la copie a été lancé sur \texttt{debian2}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d cp {-}f /nfsroot/win10.tar.gz \textasciitilde{}/win10.tar.gz}
-
- \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}cp {-}f /nfsroot/win10.tar.gz /home/debian/win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:}
-
-         \ExtensionTok{17}\NormalTok{,076.43 msec task{-}clock                \#    0.142 CPUs utilized            ( +{-}  7.26\% )}
-            \ExtensionTok{13}\NormalTok{,716      context{-}switches          \#    0.803 K/sec                    ( +{-}  3.93\% )}
-                 \ExtensionTok{3}\NormalTok{      cpu{-}migrations            \#    0.000 K/sec                    ( +{-} 22.88\% )}
-               \ExtensionTok{360}\NormalTok{      page{-}faults               \#    0.021 K/sec                    ( +{-}  0.24\% )}
-    \ExtensionTok{29}\NormalTok{,329,681,962      cycles                    \#    1.718 GHz                      ( +{-}  0.84\% )  }\KeywordTok{(}\ExtensionTok{50.10\%}\KeywordTok{)}
-    \ExtensionTok{39}\NormalTok{,303,308,222      instructions              \#    1.34  insn per cycle           ( +{-}  0.27\% )  }\KeywordTok{(}\ExtensionTok{62.64\%}\KeywordTok{)}
-     \ExtensionTok{7}\NormalTok{,592,336,916      branches                  \#  444.609 M/sec                    ( +{-}  0.28\% )  }\KeywordTok{(}\ExtensionTok{62.68\%}\KeywordTok{)}
-        \ExtensionTok{79}\NormalTok{,751,186      branch{-}misses             \#    1.05\% of all branches          ( +{-}  0.28\% )  }\KeywordTok{(}\ExtensionTok{62.46\%}\KeywordTok{)}
-    \ExtensionTok{10}\NormalTok{,749,309,904      L1{-}dcache{-}loads           \#  629.482 M/sec                    ( +{-}  0.40\% )  }\KeywordTok{(}\ExtensionTok{62.54\%}\KeywordTok{)}
-     \ExtensionTok{1}\NormalTok{,097,825,933      L1{-}dcache{-}load{-}misses     \#   10.21\% of all L1{-}dcache hits    ( +{-}  1.45\% )  }\KeywordTok{(}\ExtensionTok{62.44\%}\KeywordTok{)}
-       \ExtensionTok{230}\NormalTok{,105,352      LLC{-}loads                 \#   13.475 M/sec                    ( +{-}  1.25\% )  }\KeywordTok{(}\ExtensionTok{49.92\%}\KeywordTok{)}
-        \ExtensionTok{13}\NormalTok{,665,720      LLC{-}load{-}misses           \#    5.94\% of all LL{-}cache hits     ( +{-}  8.55\% )  }\KeywordTok{(}\ExtensionTok{49.87\%}\KeywordTok{)}
-
-           \ExtensionTok{120.417}\NormalTok{ +{-} 0.119 seconds time elapsed  ( +{-}  0.10\% )}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-smb}{%
-\subsection{\texorpdfstring{Tests de performance du protocole de
-transfert de fichiers
-\protect\hyperlink{acronym__SMB}{SMB}}{Tests de performance du protocole de transfert de fichiers SMB}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-smb}}
-
-Le serveur \protect\hyperlink{acronym__SMB}{SMB} \texttt{samba} est
-installé et configuré avec les commandes suivantes sur \texttt{debian1}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{apt}\NormalTok{ install samba}
-\ExtensionTok{smbpasswd}\NormalTok{ {-}a debian }
-\FunctionTok{cat} \StringTok{\textquotesingle{}[debian]}
-\StringTok{path = /home/debian}
-\StringTok{valid users = debian}
-\StringTok{read only = no\textquotesingle{}} \OperatorTok{\textgreater{}\textgreater{}}\NormalTok{ /etc/samba/smb.conf}
-\ExtensionTok{systemctl}\NormalTok{ restart smbd}
-\end{Highlighting}
-\end{Shaded}
-
-Le client \protect\hyperlink{acronym__SMB}{SMB} \texttt{samba} est
-installé sur le client avec la commande suivante:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{apt}\NormalTok{ install samba{-}client}
-\end{Highlighting}
-\end{Shaded}
-
-Finalement, le benchmark de la copie est lancé sur \texttt{debian2}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d smbclient {-}U debian\%debian //debian1.home/debian {-}c }\StringTok{\textquotesingle{}get win10.tar.gz\textquotesingle{}}
-\ExtensionTok{Unable}\NormalTok{ to initialize messaging context}
-\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (109684.9 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 109684.9 KiloBytes/sec}\KeywordTok{)}
-\ExtensionTok{Unable}\NormalTok{ to initialize messaging context}
-\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (109443.4 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 109443.4 KiloBytes/sec}\KeywordTok{)}
-\ExtensionTok{Unable}\NormalTok{ to initialize messaging context}
-\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (110095.1 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 110095.1 KiloBytes/sec}\KeywordTok{)}
-\ExtensionTok{Unable}\NormalTok{ to initialize messaging context}
-\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (109244.7 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 109244.7 KiloBytes/sec}\KeywordTok{)}
-
- \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}smbclient {-}U debian\%debian //debian1.home/debian {-}c get win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:}
-
-         \ExtensionTok{35}\NormalTok{,488.67 msec task{-}clock                \#    0.290 CPUs utilized            ( +{-}  0.49\% )}
-           \ExtensionTok{352}\NormalTok{,535      context{-}switches          \#    0.010 M/sec                    ( +{-}  0.24\% )}
-                \ExtensionTok{14}\NormalTok{      cpu{-}migrations            \#    0.000 K/sec                    ( +{-} 19.12\% )}
-             \ExtensionTok{3}\NormalTok{,915      page{-}faults               \#    0.110 K/sec                    ( +{-}  3.20\% )}
-    \ExtensionTok{35}\NormalTok{,420,663,303      cycles                    \#    0.998 GHz                      ( +{-}  0.45\% )  }\KeywordTok{(}\ExtensionTok{50.50\%}\KeywordTok{)}
-    \ExtensionTok{35}\NormalTok{,124,728,140      instructions              \#    0.99  insn per cycle           ( +{-}  2.40\% )  }\KeywordTok{(}\ExtensionTok{62.99\%}\KeywordTok{)}
-     \ExtensionTok{6}\NormalTok{,843,251,403      branches                  \#  192.829 M/sec                    ( +{-}  2.43\% )  }\KeywordTok{(}\ExtensionTok{62.60\%}\KeywordTok{)}
-       \ExtensionTok{115}\NormalTok{,346,267      branch{-}misses             \#    1.69\% of all branches          ( +{-}  1.05\% )  }\KeywordTok{(}\ExtensionTok{62.27\%}\KeywordTok{)}
-     \ExtensionTok{9}\NormalTok{,922,177,546      L1{-}dcache{-}loads           \#  279.587 M/sec                    ( +{-}  1.82\% )  }\KeywordTok{(}\ExtensionTok{61.98\%}\KeywordTok{)}
-     \ExtensionTok{1}\NormalTok{,307,137,276      L1{-}dcache{-}load{-}misses     \#   13.17\% of all L1{-}dcache hits    ( +{-}  0.23\% )  }\KeywordTok{(}\ExtensionTok{62.22\%}\KeywordTok{)}
-       \ExtensionTok{437}\NormalTok{,456,998      LLC{-}loads                 \#   12.327 M/sec                    ( +{-}  4.03\% )  }\KeywordTok{(}\ExtensionTok{50.00\%}\KeywordTok{)}
-       \ExtensionTok{159}\NormalTok{,643,085      LLC{-}load{-}misses           \#   36.49\% of all LL{-}cache hits     ( +{-}  8.69\% )  }\KeywordTok{(}\ExtensionTok{50.44\%}\KeywordTok{)}
-
-           \ExtensionTok{122.565}\NormalTok{ +{-} 0.215 seconds time elapsed  ( +{-}  0.18\% )}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-ipfs}{%
-\subsection{\texorpdfstring{Tests de performance du protocole de
-transfert de fichiers
-\protect\hyperlink{acronym__IPFS}{IPFS}}{Tests de performance du protocole de transfert de fichiers IPFS}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-ipfs}}
-
-Sur chacune des machines, le langage \emph{Go} doit être installé avec
-les commandes suivantes:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\FunctionTok{wget}\NormalTok{ https://dl.google.com/go/go1.14.3.linux{-}amd64.tar.gz}
-\FunctionTok{tar}\NormalTok{ {-}C /usr/local {-}xzf go1.14.3.linux{-}amd64.tar.gz}
-\BuiltInTok{echo} \StringTok{\textquotesingle{}export PATH=$PATH:/usr/local/go/bin\textquotesingle{}} \OperatorTok{\textgreater{}\textgreater{}}\NormalTok{ /etc/profile}
-\BuiltInTok{export} \VariableTok{PATH=$PATH}\NormalTok{:/usr/local/go/bin}
-\end{Highlighting}
-\end{Shaded}
-
-Ensuite, \protect\hyperlink{acronym__IPFS}{IPFS} est installé sur
-chacune des machines:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\FunctionTok{wget}\NormalTok{ https://dist.ipfs.io/go{-}ipfs/v0.5.1/go{-}ipfs\_v0.5.1\_linux{-}amd64.tar.gz}
-\FunctionTok{tar}\NormalTok{ xvzf go{-}ipfs\_v0.5.1\_linux{-}amd64.tar.gz}
-\FunctionTok{mv}\NormalTok{ go{-}ipfs/ipfs /usr/local/bin/ipfs}
-\end{Highlighting}
-\end{Shaded}
-
-Un noeud \protect\hyperlink{acronym__IPFS}{IPFS} est ensuite initialisé
-sur chacune des machines:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ init}
-\end{Highlighting}
-\end{Shaded}
-
-Pour avoir un réseau IPFS privé, on génère une clé de \emph{swarm} sur
-\texttt{debian1} et on la copie sur \texttt{debian2}, en lançant les
-commandes suivantes sur la machine \texttt{debian1}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\BuiltInTok{echo}\NormalTok{ {-}e }\StringTok{"/key/swarm/psk/1.0.0/\textbackslash{}n/base16/\textbackslash{}n}\KeywordTok{\textasciigrave{}}\FunctionTok{tr}\NormalTok{ {-}dc }\StringTok{\textquotesingle{}a{-}f0{-}9\textquotesingle{}} \OperatorTok{\textless{}}\NormalTok{ /dev/urandom }\KeywordTok{|} \FunctionTok{head}\NormalTok{ {-}c64}\KeywordTok{\textasciigrave{}}\StringTok{"} \OperatorTok{\textgreater{}}\NormalTok{ \textasciitilde{}/.ipfs/swarm.key}
-\FunctionTok{scp}\NormalTok{ /home/debian/.ipfs/swarm.key debian2.home:/home/debian/.ipfs/swarm.key}
-\end{Highlighting}
-\end{Shaded}
-
-Maintenant, il faut configurer un noeud d'amorçage (\emph{bootstrap
-node}) sur \texttt{debian1}, qui sera utilisé par \texttt{debian2} pour
-se connecter au réseau \protect\hyperlink{acronym__IPFS}{IPFS} privé
-séparé du réseau public qui utilise d'autres noeuds d'amorçage. Pour
-faire cela, il faut commencer par supprimer la liste des noeuds
-d'amorçage publics sur les deux machines avec la commande suivante:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ bootstrap rm {-}{-}all}
-\end{Highlighting}
-\end{Shaded}
-
-Ensuite, il faut récupérer l'identifiant unique \texttt{PeerID} de
-\texttt{debian1} pour pouvoir le configurer comme un noeud d'amorçage
-dans \texttt{debian2}. La commande suivante est lancée sur
-\texttt{debian1}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ config show }\KeywordTok{|} \FunctionTok{grep} \StringTok{"PeerID"}
-    \StringTok{"PeerID"}\NormalTok{: }\StringTok{"QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei"}
-\end{Highlighting}
-\end{Shaded}
-
-L'identitfiant unique \texttt{PeerID} de \texttt{debian1} retourné par
-la commande est:
-
-\texttt{QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei}
-
-On peutmaintenant le rajouter dans la configuration des noeuds
-d'amorçage des deux machines en lançant la commande suivante sur chacune
-d'entre elle:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ bootstrap add /dnsaddr/debian1.home/p2p/QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei}
-\end{Highlighting}
-\end{Shaded}
-
-Maintenant, le \emph{daemon} \protect\hyperlink{acronym__IPFS}{IPFS}
-peut être lancé sur chacune des machines. La variable d'environnement
-\texttt{LIBP2P\_FORCE\_PNET=1} est définie pour forcer les échanges à se
-faire sur un réseau privé.
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\BuiltInTok{export} \VariableTok{LIBP2P\_FORCE\_PNET=}\NormalTok{1}
-\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ daemon}
-\end{Highlighting}
-\end{Shaded}
-
-Dans ce cas, le \emph{daemon} a été exécuté en avant plan et un second
-terminal sera ouvert pour la suite des commandes. Dans une configuration
-plus durable, il faudrait le faire tourner en arrière plan, par exemple
-avec une unité systemd.
-
-Maintenant on peut partager l'image sur le réseau avec la commande
-suivante sur \texttt{debian1}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ add win10.tar.gz }
-\ExtensionTok{added}\NormalTok{ QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv win10.tar.gz}
- \ExtensionTok{12.80}\NormalTok{ GiB / 12.80 GiB [==============================================================================] 100.00\%}
-\end{Highlighting}
-\end{Shaded}
-
-Le temps d'ajout de l'image a pris plus de trois minutes. À la fin, la
-référence du fichier, qui l'identifie de manière unique sur le réseau,
-est affichée: \texttt{QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv}.
-
-On peut maintenant tenter de récupérer le fichier depuis
-\texttt{debian2}:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{$ }\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ get QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv}
-\ExtensionTok{Saving}\NormalTok{ file(s) }\ExtensionTok{to}\NormalTok{ QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv}
- \ExtensionTok{12.80}\NormalTok{ GiB / 12.80 GiB [==============================================================================] 100.00\% 7m27s}
-\end{Highlighting}
-\end{Shaded}
-
-Le transfert a pris \(7m27s = 447s\). C'est beaucoup trop long pour nos
-besoins. Le benchmark avec \texttt{perf} n'a même pas été effectué au vu
-de ce résultat.
-
-\hypertarget{choix-du-protocole-de-transfert-de-fichiers}{%
-\subsection{Choix du protocole de transfert de
-fichiers}\label{choix-du-protocole-de-transfert-de-fichiers}}
-
-La table \ref{table_protocols} ainsi que la figure \ref{chart_protocols}
-récapitulent les résultats mesurés pour chacun des protocoles testés. On
-peut remarquer que pour tous les protocoles, sauf
-\protect\hyperlink{acronym__IPFS}{IPFS}, les résultats sont proches de
-120 secondes. Cette durée montre que pour ces protocoles, on est proches
-de la limite théorique de gigabit ethernet:
-
-\[ \frac{13743592907 [B]}{120 [s]} = \frac{109948743256 [b]}{120 [s]} \approx 916239527 [b/s] \approx 0.916 [Gb/s] \approx 1 [Gb/s] \]
-
-On peut donc conclure que le choix du protocole
-\protect\hyperlink{acronym__NFS}{NFS} est approprié car les autres
-protocole n'accélèrent pas considérablement la vitesse de transfert
-d'une image.
-
-\clearpage
-
-\begin{longtable}[]{@{}llll@{}}
-\caption{Table des mesures de la durée de la copie d'un fichier avec
-différents protocoles \label{table_protocols}}\tabularnewline
-\toprule
-\begin{minipage}[b]{0.22\columnwidth}\raggedright
-Protocole\strut
-\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright
-Durée (secondes)\strut
-\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright
-Écart entre les mesures (± secondes)\strut
-\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright
-Nombre de mesures\strut
-\end{minipage}\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-\begin{minipage}[b]{0.22\columnwidth}\raggedright
-Protocole\strut
-\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright
-Durée (secondes)\strut
-\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright
-Écart entre les mesures (± secondes)\strut
-\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright
-Nombre de mesures\strut
-\end{minipage}\tabularnewline
-\midrule
-\endhead
-\begin{minipage}[t]{0.22\columnwidth}\raggedright
-SCP\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-119.8094\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-0.0182\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-4\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.22\columnwidth}\raggedright
-HTTP\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-119.871\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-0.235\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-4\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.22\columnwidth}\raggedright
-FTP\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-120.151\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-0.213\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-4\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.22\columnwidth}\raggedright
-NFS\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-120.417\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-0.119\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-4\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.22\columnwidth}\raggedright
-SMB\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-122.565\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-0.215\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-4\strut
-\end{minipage}\tabularnewline
-\begin{minipage}[t]{0.22\columnwidth}\raggedright
-IPFS\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-447\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-0\strut
-\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright
-1\strut
-\end{minipage}\tabularnewline
-\bottomrule
-\end{longtable}
-
-\begin{figure}
-\centering
-\includegraphics{charts/chart_protocols.svg}
-\caption{Graphique des mesures de la durée de la copie d'un fichier avec
-différents protocoles\label{chart_protocols}}
-\end{figure}
-
-\clearpage
-
-\hypertarget{ruxe9duction-de-la-taille-des-images}{%
-\section{Réduction de la taille des
-images}\label{ruxe9duction-de-la-taille-des-images}}
-
-Dans le système initial, une image prend beaucoup de place. Chaque image
-est une copie exacte des partitions d'un système effectuée avec l'outil
-\texttt{dd}, qui est ensuite compressée avec \texttt{gzip}. Cette taille
-massive a plusieurs impacts négatifs:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  Ralentissement de la vitesse de déploiement: il y a plus de données à
-  transmettre à travers le réseau et à copier sur le disque à chaque
-  déploiement.
-\item
-  Réduction du nombre d'images pouvant être mise en cache en même temps.
-\item
-  Réduction du nombre d'images pouvant être stockées sur le serveur.
-\end{enumerate}
-
-L'outil \emph{Clonezilla} a été considéré pour créer des images de
-taille plus réduites. Les images clonezilla sont créées avec l'outil
-\emph{Partclone}. Cet outil utilise une approche différente de
-\texttt{dd}: seuls les blocs utilisés sur les partitions sont copiés
-dans le fichier de l'image et seuls les blocs utilisés sont ensuite
-restaurés. Les images contentant uniquement les blocs utilisés sont
-ensuite compressées avec \texttt{gzip}.
-
-La taille des images créées avec clonezilla a été comparée à la taille
-des images déployées et à la taille des images juste compressées avec
-\texttt{gzip}, avec trois images:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  Une petite image (environ 3.2 GB) du système \emph{Debian}, dont les
-  tailles sont comparées dans le tableau \ref{table_image_sizes_debian}
-  et la figure \ref{chart_image_sizes_debian}
-\item
-  Une image moyenne (environ 200GB) du système \emph{Xubuntu}, dont les
-  tailles sont comparées dans le tableau \ref{table_image_sizes_xubuntu}
-  et la figure \ref{chart_image_sizes_xubuntu}
-\item
-  Une grande image (environ 512GB) du système \emph{Windows 10}, dont
-  les tailles sont comparées dans le tableau
-  \ref{table_image_sizes_win10} et la figure
-  \ref{chart_image_sizes_win10}
-\end{enumerate}
-
-\clearpage
-
-\begin{longtable}[]{@{}ll@{}}
-\caption{Table des tailles d'une petite image \emph{Debian} dans
-plusieurs formats \label{table_image_sizes_debian}}\tabularnewline
-\toprule
-Type & Taille (GB)\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-Type & Taille (GB)\tabularnewline
-\midrule
-\endhead
-Déployé & 3.220176384\tabularnewline
-Gzip & 0.496763976\tabularnewline
-Clonezilla & 0.29615293\tabularnewline
-\bottomrule
-\end{longtable}
-
-\begin{figure}
-\centering
-\includegraphics{charts/chart_image_sizes_debian.svg}
-\caption{Graphique des tailles d'une petite image \emph{Debian} dans
-plusieurs formats\label{chart_image_sizes_debian}}
-\end{figure}
-
-\clearpage
-
-\begin{longtable}[]{@{}ll@{}}
-\caption{Table des tailles d'une image \emph{Xubuntu} moyenne dans
-plusieurs formats \label{table_image_sizes_xubuntu}}\tabularnewline
-\toprule
-Type & Taille (GB)\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-Type & Taille (GB)\tabularnewline
-\midrule
-\endhead
-Déployé & 200.511847936\tabularnewline
-Gzip & 2.031040094\tabularnewline
-Clonezilla & 1.840064982\tabularnewline
-\bottomrule
-\end{longtable}
-
-\begin{figure}
-\centering
-\includegraphics{charts/chart_image_sizes_xubuntu.svg}
-\caption{Graphique des tailles d'une image \emph{Xubuntu} moyenne dans
-plusieurs formats\label{chart_image_sizes_xubuntu}}
-\end{figure}
-
-\clearpage
-
-\begin{longtable}[]{@{}ll@{}}
-\caption{Table des tailles d'une grande image \emph{Windows 10} dans
-plusieurs formats \label{table_image_sizes_win10}}\tabularnewline
-\toprule
-Type & Taille (GB)\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-Type & Taille (GB)\tabularnewline
-\midrule
-\endhead
-Déployé & 512.09515776\tabularnewline
-Gzip & 31.9568621077\tabularnewline
-Clonezilla & 12.855020882\tabularnewline
-\bottomrule
-\end{longtable}
-
-\begin{figure}
-\centering
-\includegraphics{charts/chart_image_sizes_win10.svg}
-\caption{Graphique des tailles d'une grande image \emph{Windows 10} dans
-plusieurs formats\label{chart_image_sizes_win10}}
-\end{figure}
-
-On peut voir que les images créées avec \emph{Clonezilla} prennent
-environ la moitié de la taille des images simplement compressées avec
-\texttt{gzip}. Les résultats de ces mesures de tailles ont donc motivé
-la modification du système de déploiement pour que des images
-\emph{Clonezilla} puissent être utilisées.
-
-\hypertarget{amuxe9lioration-de-los-de-duxe9ploiement}{%
-\section{Amélioration de l'OS de
-déploiement}\label{amuxe9lioration-de-los-de-duxe9ploiement}}
-
-\hypertarget{buildroot-loutil-de-construction-de-los-de-duxe9ploiement-initial}{%
-\subsection{\texorpdfstring{\emph{Buildroot}: l'outil de construction de
-l'\protect\hyperlink{acronym__OS}{OS} de déploiement
-initial}{Buildroot: l'outil de construction de l'OS de déploiement initial}}\label{buildroot-loutil-de-construction-de-los-de-duxe9ploiement-initial}}
-
-L'image du système d'exploitation \emph{Linux} servant à l'exécution des
-scripts de déploiement dans le système initial est construit avec
-\emph{Buildroot}. Cet outil permet de générer compiler un noyau linux,
-de créer un système de fichier racine minimal et de générer un chargeur
-d'amorçage (\emph{bootloader}). Cet outil est principalement utilisé
-pour générer des systèmes embarqués. Il avait été choisi dans le système
-initial car il permettait de créer une image
-d'\protect\hyperlink{acronym__OS}{OS} très petite qui peut être
-téléchargée très rapidement sur le réseau.
-
-\hypertarget{probluxe8mes-avec_buildroot_-pour-construire-los-de-duxe9ploiement}{%
-\subsection{\texorpdfstring{Problèmes avec\_Buildroot\_ pour construire
-l'\protect\hyperlink{acronym__OS}{OS} de
-déploiement}{Problèmes avec\_Buildroot\_ pour construire l'OS de déploiement}}\label{probluxe8mes-avec_buildroot_-pour-construire-los-de-duxe9ploiement}}
-
-Buildroot permet d'installer facilement les paquets de nombreuses
-applications dans le système de fichiers de l'image. Malheureusement,
-aucun paquet n'existe pour \emph{Clonezilla}. L'idée de créer un paquet
-pour ce logiciel a été étudiée, mais n'a pas été retenue, car il
-nécessite de nombreuses dépendances, et bien que cela aurait été
-possible de le faire, le temps à investir dans cette tâche aurait été
-considérable, et le résultat n'aurait été testable qu'une fois cette
-tâche accomplie. De plus, pour chaque mise à jour de \emph{Clonezilla}
-que l'on souhaiterait utiliser, par exemple pour profiter de
-l'implémentation d'un nouveau système de fichier ou des résolutions de
-bugs, il faudrait remettre à jour ce paquet.
-
-\hypertarget{choix-de-debian-pour-remplauxe7er-buildroot}{%
-\subsection{\texorpdfstring{Choix de \emph{Debian} pour remplaçer
-\emph{Buildroot}}{Choix de Debian pour remplaçer Buildroot}}\label{choix-de-debian-pour-remplauxe7er-buildroot}}
-
-Pour simplifier l'utilisation de \emph{Clonezilla} et de nombreux autres
-outils, le passsage à une solution alternative à \emph{Buildroot} a été
-décidé. De nombreuses distributions Linux proposent des paquets pour
-\emph{Clonezilla}. Les plus intéressantes sont \emph{Debian} et
-\emph{Ubuntu} car l'équipe de \emph{Clonezilla} les utilise pour la
-version \emph{live-CD} de l'outil. Ils développent et distribuent
-eux-mêmes des paquets au format \texttt{deb} pour ces deux
-distributions. Un travail a donc été entrepris pour remplacer
-l'\protect\hyperlink{acronym__OS}{OS} de déploiement basé sur
-\emph{Buildroot} par un \protect\hyperlink{acronym__OS}{OS} basé sur
-\emph{Debian}. Ce choix permettra d'utiliser facilement les nombreux
-paquets disponibles pour cette distribution si il y en a besoin dans les
-versions futures du système de déploiement.
-
-Le problème avec l'utilisation d'une distribution telle que
-\emph{Debian} est que la taille du système de fichiers racine n'est pas
-aussi réduite que ce que l'on peut obtenir avec \emph{Buildroot}. La
-stratégie d'exécution du système d'exploitation a donc été modifiée pour
-tenir compte de ce changement de taille. Le système initial chargeait à
-chaque fois une image entière du système de fichiers racine (environ
-100MB) en mémoire. Sur le nouveau système, seul le noyau linux est
-téléchargé, ainsi que l'image \emph{initrd}. Le sytème de fichier racine
-est monté à partir d'un partage \protect\hyperlink{acronym__NFS}{NFS}.
-Cela permet d'avoir un système de fichiers racine contenant beaucoup
-plus de données, mais de ne télécharger à travers le réseau que ceux qui
-sont utilisés, au moment où ils sont utilisés.
-
-\hypertarget{cruxe9ation-du-systuxe8me-de-fichiers-racine-debian-avec-multistrap}{%
-\subsection{\texorpdfstring{Création du système de fichiers racine
-\emph{Debian} avec
-\emph{multistrap}}{Création du système de fichiers racine Debian avec multistrap}}\label{cruxe9ation-du-systuxe8me-de-fichiers-racine-debian-avec-multistrap}}
-
-Le système de fichiers racine accessible via un partage
-\protect\hyperlink{acronym__NFS}{NFS} est créé en utilisant l'outil
-\emph{multistrap} fourni par Debian. Cet outil permet de générer un
-système de fichiers racine pour une architecture donnée, et d'y
-installer une liste de paquets choisie. Une fois le sytème de fichiers
-racine créé, certains fichiers de configurations doivent sont créés
-manuellement:
-
-\begin{itemize}
-\tightlist
-\item
-  \texttt{/etc/hostname}: le nom d'hôte de la machine. Dans notre cas,
-  la valeur \texttt{bootiful-deployer} a été entrée.
-\item
-  \texttt{/etc/hosts}: la liste des hôtes connus. Dans notre cas, une
-  seule entrée est nécessaire: \texttt{127.0.0.1\ \ localhost}
-\item
-  \texttt{/etc/fstab}: la liste de systèmes de fichiers à monter au
-  démarrage. Pour palier au fait que le système de fichiers racine sera
-  en lecture seule, plusieurs dossiers ont été montés en \texttt{tmpfs}
-  (système de fichier temporaire chargé en mémoire) afin de permettre
-  aux processus du système d'y écrire des fichiers: \texttt{/tmp},
-  \texttt{/dev}, \texttt{/var/run}, \texttt{/var/lock},
-  \texttt{/var/tmp}, \texttt{/var/log}, \texttt{/var/lib/clonezilla},
-  \texttt{/bootiful}
-\item
-  \texttt{/etc/mtab}: ce fichier contient la liste des volumes
-  actuellement montés. Au début, il n'avait pas été créé et cela causait
-  une erreur fatale dans \emph{Partclone}, qui n'arrivait pas à détecter
-  si une partition était montée ou non. Cela a été résolu en créant ce
-  fichier comme un lien symbolique vers le fichier \texttt{/proc/mounts}
-  qui est un faux fichier généré en mémoire par le noyau \emph{Linux} et
-  qui contient la liste des points des volumes actuellement montés.
-\end{itemize}
-
-Quelques autres fichiers sont rajoutés/remplacés dans le système de
-fichiers racine:
-
-\begin{itemize}
-\tightlist
-\item
-  \texttt{/etc/initramfs.conf}: configuration pour générer une image
-  \emph{initramfs} qui va initialiser montage du système de fichiers
-  racine depuis un partage NFS
-\item
-  \texttt{/etc/systemd/system/bootiful-deploy-log.service}:
-  configuration d'unité \emph{Systemd} qui permet de lancer le script
-  d'initialisation du déploiement d'images au démarrage
-\item
-  \texttt{/usr/bin/bootiful-deploy-init}: script d'initialisation du
-  déploiement d'images. Lance le script de déploiement d'images et
-  affiche permet de choisir quelle action effectuer si le déploiement ne
-  se termine pas avec succès.
-\item
-  \texttt{/usr/bin/bootiful-common}: script contenant des fonctions
-  communes aux différents script de déploiement \texttt{bootiful-*}. Il
-  n'est pas conçu pour être exécuté directement, mais à être chargé par
-  les autres scripts avec la commande \texttt{source}.
-\item
-  \texttt{/usr/bin/bootiful-deploy}: script permettant le choix de
-  l'image, des configurations (si applicable), et d'effectuer le
-  déploiement de l'image choisie.
-\item
-  \texttt{/usr/bin/bootiful-save-image}: script utilitaire permettant de
-  construire une image avec \emph{dd}. Il a été utilisé pour construire
-  les images des benchmarks, mais il vaut mieux utiliser le live-cd
-  \emph{Clonezilla} pour la création d'une nouvelle image.
-\item
-  \texttt{/usr/bin/bootiful-reset-cache}: script utilitaire permettant
-  de réinitialiser le cache des images. Il a été utilisé pour pouvoir
-  facilement réinitialiser le cache lors des benchmarks.
-\end{itemize}
-
-Ensuite, la commande \texttt{chroot} est utilisée pour remplacer
-temporairement le système de fichier racine actuel de la machine (celle
-qui a lancé \emph{multistrap}) par celui qui vient d'être créé.
-Plusieurs commandes sont lancées dans cet environnement pour initialiser
-le système:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  \texttt{dpkg\ -\/-configure\ -a}: lance la configuration
-  post-installation de tous les paquets \emph{Debian}.
-\item
-  \texttt{apt-get\ autoremove\ -\/-purge\ \&\&\ apt-get\ clean}:
-  désinstalle les dépendances inutiles et vide le cache des paquets.
-\item
-  \texttt{update-initramfs\ -u}: regénère une image \emph{initramfs} qui
-  va initialiser montage du système de fichiers racine depuis un partage
-  NFS en utilisant la configuration rajoutée précédemment dans
-  \texttt{/etc/initramfs.conf}.
-\item
-  \texttt{systemctl\ enable\ bootiful-deploy-log.service}: active
-  l'unité \emph{Systemd} de lancement automatique du script de
-  déploiement décrite dans le fichier
-  \texttt{/etc/systemd/system/bootiful-deploy-log.service} ajouté
-  précédemment.
-\end{enumerate}
-
-\hypertarget{automatisation-de-la-cruxe9ation-du-systuxe8me-de-duxe9ploiement-avec-docker}{%
-\subsection{\texorpdfstring{Automatisation de la création du système de
-déploiement avec
-\emph{Docker}}{Automatisation de la création du système de déploiement avec Docker}}\label{automatisation-de-la-cruxe9ation-du-systuxe8me-de-duxe9ploiement-avec-docker}}
-
-Pour utiliser l'outil \emph{multistrap} afin de créer un système de
-fichier racine \emph{Debian}, il faut que le programme
-\texttt{multistrap} soit lancé depuis un système d'exploitation
-\emph{Debian}. Pour rendre la création de ce système de fichiers
-possible depuis d'autres distributions Linux, un conteneur \emph{Docker}
-a été créé.
-
-Le processus de création du système décrit dans la section précédente a
-été automatisé et est décrit dans un fichier \texttt{Dockerfile} (le
-code-souce de ce fichier peut être consulté dans la section
-\ref{deployer_dockerfile}). La fonctionnalité de Docker de construction
-en plusieurs ``étages'' (\emph{multi-stage build}) a été utilisée. Trois
-``étages'' sont définis:
-
-\begin{itemize}
-\tightlist
-\item
-  \texttt{build-stage}: depuis une image \texttt{debian:bullseye}
-  construit une image de système de fichier racine \emph{Debian} et le
-  configure comme décrit dans la section précédente. Le dossier
-  \texttt{/boot/} est sorti du dossier du système de fichiers racine
-  nouvellement créé et déplacé dans \texttt{/multistrap/boot}. Le reste
-  du système de fichier racine (tout sauf \texttt{/boot/} est compressé
-  dans une archive \texttt{/multistrap/nfsroot.tar.gz}. Cette étape est
-  un pré-requis des étapes suivantes et n'est normalement pas exécutée
-  directement.
-\item
-  \texttt{nfs-export-stage}: dans une image vide
-  (\texttt{FROM\ scratch}), copie le fichier
-  \texttt{/multistrap/nfsroot.tar.gz} depuis l'étape
-  \texttt{build-stage}. L'image de cette étape contient donc uniquement
-  un fichier à sa racine, \texttt{nfsroot.tar.gz}, qui pourra être
-  exporté et extrait dans le serveur
-  \protect\hyperlink{acronym__NFS}{NFS} pour être partagé.
-\item
-  \texttt{tftp-export-stage}: dans une image vide
-  (\texttt{FROM\ scratch}), copie le contenu du dossier
-  \texttt{/multistrap/boot} depuis l'étape \texttt{build-stage}. L'image
-  de cette étape contient donc uniquement le contenu de la du dossier
-  \texttt{/boot/} de la partition racine, c'est à dire les fichiers
-  \texttt{initrd.img} (image \emph{initrd} initialisant le système de
-  fichier racine depuis \protect\hyperlink{acronym__NFS}{NFS}) et
-  \texttt{vmlinuz} (le noyau \emph{Linux}). Le contenu de cette image
-  pourra être exporté dans le dossier partagé du serveur
-  \protect\hyperlink{acronym__TFTP}{TFTP}, afin d'être téléchargé depuis
-  le logiciel d'amorçage \protect\hyperlink{acronym__GRUB}{GRUB} pour
-  lancer le système de déploiement.
-\end{itemize}
-
-Le fichier \texttt{Makefile} à la racine du projet définit des cibles et
-des recettes pour exécuter \texttt{docker\ build} exporter les données
-des deux derniers étages dans leurs dossiers respectifs:
-
-\begin{itemize}
-\tightlist
-\item
-  le contenu de l'étage \texttt{nfs-export-stage}, c'est à dire
-  l'archive \texttt{nfsroot.tar.gz}, est exportée dans le dossier
-  \texttt{nfs/}. Elle sera extraite dans le serveur
-  \protect\hyperlink{acronym__NFS}{NFS}.
-\item
-  le contenu de l'étage \texttt{tftp-export-stage}, c'est à dire
-  \texttt{initrd.img} et \texttt{vmlinuz} sont exportés dans le dossier
-  \texttt{tftp/tftpboot/boot/deployer} qui contient le système de
-  déploiement d'image servi par le serveur
-  \protect\hyperlink{acronym__TFTP}{TFTP}.
-\end{itemize}
-
-\hypertarget{duxe9ploiement-dimage-windows}{%
-\section{Déploiement d'image
-Windows}\label{duxe9ploiement-dimage-windows}}
-
-Une image \emph{Windows 10} a été créée avec \emph{Clonezilla}, à partir
-du système présent par défaut sur les mini-pc DELL que l'école avait mis
-à disposition. Les PC étant neufs il s'agit du système d'exploitation
-par défaut installé pour le constructeur. L'image qui a été créée a déjà
-été mentionnée dans la section \emph{Réduction de la taille des images}.
-Elle a la particularité d'être très grande car elle prend l'espace
-entier du disque.
-
-Un problème a été rencontré lors du premier déploiement de l'image: le
-script de déploiement ne gérait pas une image qui est tellement grande
-qu'elle écrase la partition de cache et plantait. Une vérification a
-donc été rajoutée sur la taille de l'image. Quand une image va écraser
-la partition de cache, un message d'avertissement est affiché et
-l'utilisateur doit confirmer qu'il souhaite continuer. Si l'utilisateur
-accepte, le déploiment se fait sans mise en cache de l'image et la
-partition cachée de cache est détruite.
-
-Une fois ce système mis en place, le déploiement de l'image s'est
-déroulé sans problème particulier, et a confirmé que le déploiement
-d'une image \emph{Windows} est faisable avec ce système.
-
-\hypertarget{ruxe9duction-du-temps-de-duxe9ploiement-total}{%
-\section{Réduction du temps de déploiement
-total}\label{ruxe9duction-du-temps-de-duxe9ploiement-total}}
-
-Théoriquement, le déploiement d'images avec clonezilla devrait être plus
-court que le déploiement d'images \emph{raw}. Des mesures ont été
-effectuées avec les trois images dont les différences de taille ont déjà
-étudiées précédemment dans la section \emph{Réduction de la taille des
-images}:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  Une petite image (environ 3.2 GB) du système \emph{Debian}, dont les
-  temps de déploiement sont comparés dans le tableau
-  \ref{table_deploy_time_debian} et la figure
-  \ref{chart_deploy_time_debian}
-\item
-  Une image moyenne (environ 200GB) du système \emph{Xubuntu}, dont les
-  temps de déploiement sont comparés dans le tableau
-  \ref{table_deploy_time_xubuntu} et la figure
-  \ref{chart_deploy_time_xubuntu}
-\item
-  Une grande image (environ 512GB) du système \emph{Windows 10}, dont
-  les temps de déploiement sont comparés dans le tableau
-  \ref{table_deploy_time_win10} et la figure
-  \ref{chart_deploy_time_win10}
-\end{enumerate}
-
-\clearpage
-
-\begin{longtable}[]{@{}ll@{}}
-\caption{Table des temps de déploiement d'une petite image \emph{Debian}
-dans plusieurs formats \label{table_deploy_time_debian}}\tabularnewline
-\toprule
-Type & Temps de déploiement (secondes)\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-Type & Temps de déploiement (secondes)\tabularnewline
-\midrule
-\endhead
-Gzip (sans cache) & 14\tabularnewline
-Gzip (avec cache) & 13\tabularnewline
-Clonezilla (sans cache) & 39\tabularnewline
-Clonezilla (avec cache) & 39\tabularnewline
-\bottomrule
-\end{longtable}
-
-\begin{figure}
-\centering
-\includegraphics{charts/chart_deploy_time_debian.svg}
-\caption{Graphique des temps de déploiement d'une petite image
-\emph{Debian} dans plusieurs formats\label{chart_deploy_time_debian}}
-\end{figure}
-
-\clearpage
-
-\begin{longtable}[]{@{}ll@{}}
-\caption{Table des temps de déploiement d'une image \emph{Xubuntu}
-moyenne dans plusieurs formats
-\label{table_deploy_time_xubuntu}}\tabularnewline
-\toprule
-Type & Temps de déploiement (secondes)\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-Type & Temps de déploiement (secondes)\tabularnewline
-\midrule
-\endhead
-Gzip (sans cache) & 623\tabularnewline
-Gzip (avec cache) & 630\tabularnewline
-Clonezilla (sans cache) & 109\tabularnewline
-Clonezilla (avec cache) & 85\tabularnewline
-\bottomrule
-\end{longtable}
-
-\begin{figure}
-\centering
-\includegraphics{charts/chart_deploy_time_xubuntu.svg}
-\caption{Graphique des temps de déploiement d'une image \emph{Xubuntu}
-moyenne dans plusieurs formats\label{chart_deploy_time_xubuntu}}
-\end{figure}
-
-\clearpage
-
-\begin{longtable}[]{@{}ll@{}}
-\caption{Table des temps de déploiement d'une grande image \emph{Windows
-10} dans plusieurs formats
-\label{table_deploy_time_win10}}\tabularnewline
-\toprule
-Type & Temps de déploiement (secondes)\tabularnewline
-\midrule
-\endfirsthead
-\toprule
-Type & Temps de déploiement (secondes)\tabularnewline
-\midrule
-\endhead
-Gzip (sans cache) & 3433\tabularnewline
-Clonezilla (sans cache) & 371\tabularnewline
-\bottomrule
-\end{longtable}
-
-\begin{figure}
-\centering
-\includegraphics{charts/chart_deploy_time_win10.svg}
-\caption{Graphique des temps de déploiement d'une grande image
-\emph{Windows 10} dans plusieurs formats\label{chart_deploy_time_win10}}
-\end{figure}
-
-\clearpage
-
-Ces mesures permettent de se rendre contre de plusieurs faits
-remarquables, qui ne sont pas forcément intuitifs.
-
-Sur des très petites images le déploiement au format \emph{raw}
-compressé avec \emph{gzip} est plus rapide que le déploiement avec
-\emph{Clonezilla}. Ceci peut s'expliquer par le fait que
-\emph{Clonezilla} prend du temps pour créer une table des partitions, un
-système de fichiers pour chacune de ces partitions et copie ensuite les
-blocs un à un sur chaque système de fichiers. Sur une grande image, ce
-mode de fonctionnement est ``rentable'' car il y a beaucoup de blocs qui
-n'auront pas à être copiés, alors qu'une image \emph{raw} devra passer
-du temps à copier les données de chacun de ces blocs. Sur une très
-petite image comme l'image \emph{Debian} mesurée ici, presque tous les
-blocs du système de fichiers sont déjà utilisés, donc la copie brute des
-données des partitions est plus rapide car tout le temps est passé à
-copier les données.
-
-Sur les plus grosses images, cependant, \emph{Clonezilla} a clairement
-l'avantage, car de nombreux blocs vides n'ont pas besoin d'être copiés.
-Ainsi, avec les images plus larges utilisées dans les mesures, le temps
-de déploiement des images plus larges au format \emph{raw} prend environ
-5 à 9 fois plus de temps que le temps de déploiement avec
-\emph{Clonezilla}.
-
-Un autre fait remarquable est que le déploiement d'une image \emph{raw}
-déjà mise en cache prend plus de temps que le déploiement avec une copie
-simultanée dans le cache. Cela s'explique peut être par le fait que dans
-le premier cas, des données doivent être lues depuis le disque et
-écrites sur le même disque, tandis que dans le second cas, seule de
-l'écriture est effectuée.
-
-Par contre, dans le cas des images \emph{Clonezilla}, le déploiement
-d'une image déjà présente en cache s'effectue plus rapidement que le
-déploiement d'une image présente en cache. C'est l'inverse de ce qui se
-passe avec les images \emph{raw}. Cela s'explique par le fait que les
-images \emph{Clonezilla} sont copiées avant d'être déployées, alors que
-les images \emph{raw} sont copiées et déployées simultanément.
-
-Il est important de se rappeller que les mesures montrées ici sont
-effectuées dans des circonstances idéales: il n'y a qu'un seul client
-qui télécharge l'image, seul un switch réseau sépare le client du
-serveur et le client et le serveur sont les appareils connectés à ce
-réseau local. Dans des conditions réelles, plusieurs machines seront
-fréquemment en train de télécharger des images depuis le serveur en même
-temps. Dans ce cas, le temps de déploiement d'une image non présente en
-cache risque de prendre beaucoup plus de temps. Au contraire, le
-déploiement d'une image déjà mise en cache devrait théoriquement prendre
-le même temps que dans ces circonstances idéales.
-
-\hypertarget{amuxe9lioration-des-scripts-de-duxe9ploiement}{%
-\section{Amélioration des scripts de
-déploiement}\label{amuxe9lioration-des-scripts-de-duxe9ploiement}}
-
-De très nombreuses améliorations ont été apportées aux scripts de
-déploiement, au point qu'ils sont presque complètement différents des
-scripts initiaux.
-
-\hypertarget{gestion-des-erreurs}{%
-\subsection{Gestion des erreurs}\label{gestion-des-erreurs}}
-
-Premièrement, la gestion des erreurs, inexistante dans le script initial
-a été rajoutée. Les codes de retour des commandes sont vérifiés et les
-données récupérées depuis la sortie de ces commandes sont validées avant
-utilisation. Si un code de retour ou une donnée récupérée n'est pas au
-format attendu, une fonction spéciale \texttt{fatal\_error} est appelée
-avec comme argument un message d'erreur adapté à la situation. Cette
-fonction va afficher le message d'erreur, ainsi qu'une trace de la pile
-des appels (\emph{stack trace} en anglais). Cette trace permet
-d'identifier précisément à quelle ligne de quel fonction et dans quel
-fichier une erreur a eu lieu.
-
-Finalement, le script de déploiement \texttt{bootiful-deploy} sera
-quitté avec un code d'erreur, ce qui permet au script parent,
-\texttt{bootiful-init}, de détecter qu'une erreur a eu lieu et de
-proposer à l'utilisateur quelle action il souhaite effectuer parmi les
-choix suivants:
-
-\begin{itemize}
-\tightlist
-\item
-  Recommencer le déploiement
-\item
-  Redémarrer la machine
-\item
-  Éteindre la machine
-\item
-  Ouvrir un \emph{shell} interactif (\texttt{/bin/bash}) pour étudier la
-  cause de l'erreur. Une fois le \emph{shell} terminé, l'utilisateur
-  peut à nouveau choisir ce qu'il souhaite faire.
-\end{itemize}
-
-Le mécanisme de gestion d'erreurs a été très utile lors du développement
-et du test des scripts de déploiement pour comprendre pourquoi certaines
-erreurs arrivaient et adapter les scripts pour les éviter. Ce mécanisme
-sera aussi utile pour aider un futur administrateur du système à
-comprendre ce qu'il se passe si un déploiement ne se déroule pas comme
-prévu.
-
-\hypertarget{mesure-du-temps-uxe9couluxe9}{%
-\subsection{Mesure du temps écoulé}\label{mesure-du-temps-uxe9couluxe9}}
-
-Un système permettant de mesurer et d'afficher le temps passé dans
-chaque section du script de déploiement a été créé. Il permet de mesurer
-chacune des parties et d'afficher le temps passé dans chaque partie à la
-fin du script. Les parties mesurées sont classées en deux catégories:
-\emph{batch} et \emph{interactive}. Les parties \emph{batch} sont celles
-qui sont exécutées automatiquement, sans intervention de l'utilisateur,
-tandis que les parties \emph{interactive} sont celles où le système
-attend un choix de l'utilisateur, comme par exemple le choix de l'image
-à déployer. Cette catégorisation des parties permet d'afficher à la fin
-du script combien de temps a été passé dans les parties \emph{batch}
-sans prendre en compte le temps passé à attendre un choix de
-l'utilisateur.
-
-\hypertarget{amuxe9lioration-des-logs}{%
-\subsection{Amélioration des logs}\label{amuxe9lioration-des-logs}}
-
-Plusieurs améliorations ont été apportées au mécanisme de logging. Dans
-le système initial, les flux \texttt{stdin} et \texttt{stdout} du script
-de déploiement étaient redirigés vers un fichier de log sur le serveur.
-Cela permet d'étudier à \emph{posteriori} comment le déploiement s'est
-effectué, et de vérifier la durée d'exécution. Cela permet aussi de
-comprendre ce qui s'est mal passé en cas d'erreur.
-
-Dans le système initial, étant donné que les flux sont redirigés vers un
-fichier, un écran noir est affiché sur l'écran du poste client. Cela a
-l'inconvénient de ne pas permettre à l'utilisateur du poste client de
-savoir ce qu'il est en train de se passer. Il n'est pas possible pour
-l'utilisateur de savoir si le déploiement est en cours ou s'il est
-bloqué sur une étape. La première modification apportée au système de
-logging a été d'utiliser la commande \texttt{tee} pour écrire dans les
-fichiers de log, au lieu d'une simple redirection. Cela permet aux
-sorties d'être simultanément affichées sur l'écran du client et
-sauvegardée dans les logs.
-
-De nombreux textes informatifs ont aussi été rajoutés dans la sortie du
-script pour expliquer ce qu'il est en train de se passer petit à petit.
-Cela permet de mieux contextualiser chaque ligne de log. Une barre de
-progression a aussi été rajoutée lors du déploiement d'une image au
-format \emph{raw} pour que l'utilisateur puisse suivre la progression du
-déploiement et qu'il puisse voir le temps écoulé ainsi qu'une estimation
-du temps restant.
-
-Le mécanisme initial de logging créait un fichier de log par poste
-client, en le nommant avec l'adresse
-\protect\hyperlink{acronym__MAC}{MAC} du poste. Chaque déploiement
-successif était loggué dans ce même fichier. Pour bien différencier le
-début et la fin d'un log, une ligne facilement reconnaissable contenant
-la date et l'heure était affichée. Il y a plusieurs problèmes avec ce
-système:
-
-\begin{itemize}
-\tightlist
-\item
-  Les fichiers de log peuvent devenir très gros après de nombreux
-  déploiements.
-\item
-  Le nettoyage du dossier de logs pour ne garder que les plus récents
-  est compliqué, car chaque fichier contient les logs de plusieurs
-  déploiements.
-\item
-  La manipulation avec des commandes standard telles que \texttt{grep},
-  \texttt{awk}, \texttt{tail} du log d'un déploiement précis est
-  compliqué.
-\item
-  La comparaison de deux logs de déploiement sur la même machine est
-  difficile car il faut trouver où les déploiements commencent et se
-  terminent dans le même fichier.
-\end{itemize}
-
-Le système de log a donc été modifié pour qu'un fichier par déploiement
-soit créé par déploiement. Chaque fichier de log est nommé selon
-l'adresse mac de la machine ainsi que la date et l'heure du début du
-déploiement.
-
-\hypertarget{intuxe9gration-de-clonezilla-comme-type-dimage}{%
-\subsection{\texorpdfstring{Intégration de \emph{Clonezilla} comme type
-d'image}{Intégration de Clonezilla comme type d'image}}\label{intuxe9gration-de-clonezilla-comme-type-dimage}}
-
-Le script de déploiement a été modifié pour pouvoir détecter si une
-image est au format \emph{raw} ou s'il s'agit d'une image
-\emph{Clonezilla}. Selon le type d'image, des stratégies différentes
-sont utilisées pour différentes étapes du déploiement:
-
-\begin{itemize}
-\tightlist
-\item
-  Détermination de la place nécessaire sur le disque pour déployer
-  l'image
-\item
-  Commandes utilisées pour le déploiement
-\item
-  Détermination du point d'entrée EFI.
-\end{itemize}
-
-\hypertarget{duxe9tection-automatique-du-point-dentruxe9e-efi}{%
-\subsection{\texorpdfstring{Détection automatique du point d'entrée
-\protect\hyperlink{acronym__EFI}{EFI}}{Détection automatique du point d'entrée EFI}}\label{duxe9tection-automatique-du-point-dentruxe9e-efi}}
-
-Si l'image est au format \emph{Clonezilla}, le script de déploiement est
-capable de déterminer automatiquement quel sera le programme
-\protect\hyperlink{acronym__EFI}{EFI} qui sera exécuté au prochain
-démarrage pour démarrer l'\protect\hyperlink{acronym__OS}{OS} déployé.
-
-En effet, les images \emph{Clonezilla} de systèmes
-\protect\hyperlink{acronym__EFI}{EFI} contiennent un fichier spécial,
-\texttt{efi-nvram.dat}, qui contient les variables contenues dans la
-\protect\hyperlink{acronym__NVRAM}{NVRAM} du système
-\protect\hyperlink{acronym__EFI}{EFI} au moment de la création de
-l'image. Cette mémoire contient notemment l'ordre des entrées de boot et
-les programmes \protect\hyperlink{acronym__EFI}{EFI} à exécuter pour
-chacune de ces entrées, si applicable.
-
-Par exemple, voici le contenu du fichier \texttt{nvram.dat} de l'image
-\emph{Windows 10} mentionnée dans les sections précédentes:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{BootCurrent: 0001}
-\NormalTok{Timeout: 0 seconds}
-\NormalTok{BootOrder: 0000,0001}
-\NormalTok{Boot0000* Windows Boot Manager  HD(1,GPT,0cccfd69{-}e584{-}4e2d{-}8a5d{-}6afa7130fcab,0x800,0x15e000) /File(\textbackslash{}EFI\textbackslash{}Microsoft\textbackslash{}Boot\textbackslash{}bootmgfw.efi) WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.\{.9.d.e.a.8.6.2.c.{-}.5.c.d.d.{-}.4.e.7.0.{-}.a.c.c.1.{-}.f.3.2.b.3.4.4.d.4.7.9.5.\}....................}
-\NormalTok{Boot0001* UEFI:  USB DISK 3.0 PMAP  PciRoot(0x0)/Pci(0x14,0x0)/USB(16,0)/CDROM(1,0x344,0x5e00)..BO}
-\end{Highlighting}
-\end{Shaded}
-
-Le script de déploiement est capable de lire ce fichier, de trouver la
-première entrée contenant un chemin vers un exécutable
-\protect\hyperlink{acronym__EFI}{EFI}, et transformer ce chemin en un
-chemin \emph{Unix}, c'est à dire avec le caractère \texttt{/} au lieu de
-\texttt{\textbackslash{}} et des noms de dossiers et fichiers sensibles
-à la casse, qui correspondent à des dossiers et fichiers présents sur la
-partition \protect\hyperlink{acronym__ESP}{ESP} qui vient d'être
-déployée. Cette conversion est importante car ce chemin devra être passé
-à \protect\hyperlink{acronym__GRUB}{GRUB}, qui ne sait lire que des
-chemins au format \emph{Unix}.
-
-Une fois le point d'entrée déterminé un fichier \texttt{efi\_entrypoint}
-est écrit à la racine de la partition
-\protect\hyperlink{acronym__ESP}{ESP}. Il sera ensuite lu par
-\protect\hyperlink{acronym__GRUB}{GRUB} au prochain démarrage pour
-trouver le point d'entrée à exécuter. Le contenu de ce fichier
-ressemblera à ceci:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{set} \VariableTok{efi\_entrypoint=}\NormalTok{/efi/Microsoft/Boot/bootmgfw.efi}
-\end{Highlighting}
-\end{Shaded}
-
-Si l'image est au format \emph{raw}, ou alors qu'il est souhaité
-d'outrepasser la lecture automatique du point d'entrée d'une image
-\emph{Clonezilla}, il suffit de rajouter un fichier
-\texttt{efi\_entrypoint} dans le dossier de l'image. Ce fichier sera
-directement copié dans l'\protect\hyperlink{acronym__ESP}{ESP}, sans
-qu'une tentative de détermination automatique du point d'entrée à partir
-du fichier \texttt{nvram.dat} soit effectuée.
-
-\hypertarget{personnalisation-dimages-post-duxe9ploiement}{%
-\section{Personnalisation d'images
-post-déploiement}\label{personnalisation-dimages-post-duxe9ploiement}}
-
-Un système a été conçu pour que l'utilisateur puisse choisir des
-personnalisations post-déploiement pour une image parmi un ensemble
-prédéfini. Ces personnalisations peuvent être implémentées de plusieurs
-manières: il ne s'agit que de fichiers qui seront copiés dans un dossier
-présent dans un répertoire de la machine déployée.
-
-Une image supportant les personnalisation post-déploiement peut par
-exemple être configurée pour exécuter des scripts qui auront été copiés
-dans un répertoire. Par exemple, sur une image dont
-l'\protect\hyperlink{acronym__OS}{OS} est une distribution \emph{Linux}
-utilisant \emph{Systemd}, une unité peut être configurée pour être
-exécutée au démarrage. Cette unité peut lancer au démarrage un script
-servant à exécuter séquentiellement des scripts présents dans un dossier
-prédéfini, ou alors exécuter des \emph{playbooks} \emph{Ansible}.
-
-Des personnalisations peuvent aussi être ``passives'' et ne pas
-nécessiter de configuration particulière du côté du client. Par exemple,
-si elle consiste uniquement à copier/remplacer un fichier de
-configuration à un endroit précis.
-
-Après le choix d'une image, le script de déploiement va chercher si un
-sous dossier \texttt{customizations} existe. Ce dossier contient un
-sous-dossier par personnalisation que l'utilisateur peut choisir. Chaque
-sous dossier personnalisation doit contenir une arborescence de dossiers
-et de fichiers dont le premier niveau contient uniquement des dossier
-correspondant à des noms de partitions existant dans l'image déployée. À
-l'intérieur de ce dossier, une arborescence des fichiers copiés sur la
-machine depuis laS
-
-Étudions une arborescence fictive de personnalisations pour mieux
-comprendre ce système. Voici l'arborescence du dossier
-\texttt{customizations} d'une image:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{customizations}
-\NormalTok{├── C language development environment}
-\NormalTok{│   └── sda2}
-\NormalTok{│       └── etc}
-\NormalTok{│           └── bootiful}
-\NormalTok{│               └── postdeploy{-}playbooks}
-\NormalTok{│                   └── 002{-}install{-}c{-}dev.yml}
-\NormalTok{├── Custom bashrc}
-\NormalTok{│   └── sda2}
-\NormalTok{│       └── etc}
-\NormalTok{│           └── bash.bashrc}
-\NormalTok{└── Join LDAP domain}
-\NormalTok{    └── sda2}
-\NormalTok{        └── etc}
-\NormalTok{            └── bootiful}
-\NormalTok{                └── postdeploy{-}playbooks}
-\NormalTok{                    └── 001{-}join{-}ldap.yml}
-\end{Highlighting}
-\end{Shaded}
-
-Cette arborescence définit les personnalisations suivantes, qui peuvent
-être choisies par l'utilisateur:
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  \texttt{C\ language\ development\ environment}: copie un
-  \emph{playbook} \emph{Ansible} servant à installer un environnement de
-  développement C dans le dossier
-  \texttt{/etc/bootiful/postdeploy-playbooks} de la partition
-  \texttt{sda2}
-\item
-  \texttt{Custom\ bashrc}: remplace le ficher \texttt{/etc/bash.bashrc}
-  de la partition \texttt{sda2} par un fichier personnalisé.
-\item
-  \texttt{Join\ LDAP\ domain}: copie un \emph{playbook} \emph{Ansible}
-  servant à rejoindre un domaine \protect\hyperlink{acronym__LDAP}{LDAP}
-  dans le dossier \texttt{/etc/bootiful/postdeploy-playbooks} de la
-  partition \texttt{sda2}
-\end{enumerate}
-
-Les personnalisations \textbf{1} et \textbf{3} nécessitent que l'image
-soit équipée d'un mécanisme qui va exécuter les \emph{playbooks Ansible}
-présents dans \texttt{/etc/bootiful/postdeploy-playbooks} au démarrage.
-Des exemples d'un tel script et de l'unité \emph{systemd} servant à le
-lancer au démarrage sont consultables dans les sections
-\ref{source_ansible_run} et \ref{source_ansible_init}.'w'\,'\,'\,'
-
-La personnalisation \textbf{2} est passive: elle remplace juste un
-fichier mais ne nécessite pas de mécanisme spécial sur la machine de
-déploiement pour l'exécuter.
-
-\hypertarget{architecture-finale-du-projet}{%
-\chapter{Architecture finale du
-projet}\label{architecture-finale-du-projet}}
-
-\hypertarget{composants}{%
-\section{Composants}\label{composants}}
-
-\textbf{TODO: diagramme des composants du projet et description}
-
-\hypertarget{processus-de-duxe9ploiement}{%
-\section{Processus de déploiement}\label{processus-de-duxe9ploiement}}
-
-\textbf{TODO: diagramme du processus de déploiement et description
-complète de ce dernier. Explication détaillées de la structure des
-scripts de déploiement, de leurs possibilités et de leurs limitations.}
-
-\hypertarget{architecture-ruxe9seau}{%
-\section{Architecture réseau}\label{architecture-ruxe9seau}}
-
-\textbf{TODO: description de l'architecture réseau finale utilisée pour
-développer et tester le système avec diagramme. Expliquer comment cette
-architecture de test peut être transposée à une architecture de
-production.}
-
-\hypertarget{processus-de-build}{%
-\section{Processus de build}\label{processus-de-build}}
-
-\textbf{TODO: expliquer comment sont construites les différentes parties
-du projet. Expliquer les différentes parties du makefile et les
-différentes images docker utilisées pour construire les différents
-composants.}
-
-\hypertarget{duxe9ploiement-du-serveur}{%
-\section{Déploiement du serveur}\label{duxe9ploiement-du-serveur}}
-
-\textbf{TODO: expliquer comment le serveur peut fonctionner à l'aide
-d'un \texttt{docker-compose} réunissant les serveurs TFTP, NFS et DHCP.
-Expliquer comment ces différentes parties sont utilisés dans un
-environnement de développement, les limitations, et comment adapter
-cette configuration à un environnement de production.}
-
-\hypertarget{structure-des-images}{%
-\section{Structure des images}\label{structure-des-images}}
-
-\textbf{TODO: expliquer exactement comment sont structurées les données
-des images (raw et clonezilla).}
-
-\hypertarget{utilisation-du-systuxe8me-duxe9ployuxe9}{%
-\chapter{Utilisation du système
-déployé}\label{utilisation-du-systuxe8me-duxe9ployuxe9}}
-
-\hypertarget{duxe9ployer-une-image-sur-un-poste}{%
-\section{Déployer une image sur un
-poste}\label{duxe9ployer-une-image-sur-un-poste}}
-
-Cette section contient une marche à suivre qui décrit les étapes pour
-déployer une image sur un poste client quand un serveur est déjà
-installé et configuré, que la machine est configurée pour démarrer sur
-le réseau.
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\tightlist
-\item
-  Démarrer la machine et attendre qu'elle
-\end{enumerate}
-
-\textbf{TODO: expliquer pas à pas comment utiliser l'interface pour
-déployer une image sur un client et les différentes inter-actions de
-l'utilisateur, avec des captures d'écran, etc.}
-
-\hypertarget{cruxe9ation-dune-image-clonezilla}{%
-\section{Création d'une image
-clonezilla}\label{cruxe9ation-dune-image-clonezilla}}
-
-\textbf{TODO: expliquer pas à pas comment créer une image avec
-clonezilla et comment l'ajouter au serveur de déploiement.}
-
-\hypertarget{cruxe9ation-dune-image-dd}{%
-\section{Création d'une image dd}\label{cruxe9ation-dune-image-dd}}
-
-\textbf{TODO: expliquer pas à pas comment créer une image avec
-clonezilla et comment l'ajouter au serveur de déploiement.}
-
-\hypertarget{pruxe9paration-dune-image-pour-quelle-supporte-le-systuxe8me-de-personnalisation}{%
-\section{Préparation d'une image pour qu'elle supporte le système de
-personnalisation}\label{pruxe9paration-dune-image-pour-quelle-supporte-le-systuxe8me-de-personnalisation}}
-
-\textbf{TODO: expliquer comment préparer un système pour qu'il supporte
-le système de personnalisation avec ansible, et comment créer les
-scripts de personnalisation, avec un exemple type simple.}
-
-\hypertarget{conclusion}{%
-\chapter{Conclusion}\label{conclusion}}
-
-\hypertarget{synthuxe8se-du-travail-effectuuxe9}{%
-\section{Synthèse du travail
-effectué}\label{synthuxe8se-du-travail-effectuuxe9}}
-
-Le travail initial a été récupéré, analysé, documenté et remis en
-fonctionnement en corrigeant quelques problèmes dans les fichiers de
-configuration et les scripts de déploiement. L'outil \emph{Vagrant} a
-été utilisé pour automatiser la création d'un serveur virtuel qui
-exécute les différents services du système.
-
-Le système a été ensuite modifié pour le rendre compatible avec les
-ordinateurs modernes utilisant le standard
-\protect\hyperlink{acronym__UEFI}{UEFI} au lieu d'un
-\protect\hyperlink{acronym__BIOS}{BIOS}.
-
-Des mesures ont été effectuées pour déterminer si le choix du protocole
-\protect\hyperlink{acronym__NFS}{NFS}, le protocole réseau utilisé pour
-transférer les images, était pertinent. Il été comparé aux protocoles
-\protect\hyperlink{acronym__SCP}{SCP},
-\protect\hyperlink{acronym__HTTP}{HTTP},
-\protect\hyperlink{acronym__FTP}{FTP},
-\protect\hyperlink{acronym__NFS}{NFS},
-\protect\hyperlink{acronym__SMB}{SMB} et
-\protect\hyperlink{acronym__IPFS}{IPFS} en mesurant le temps de
-transfert d'une image. Ces mesures ont montré que les temps de
-déploiement avec ces différents protocoles étaient similaires, à
-l'exception d'\protect\hyperlink{acronym__IPFS}{IPFS} qui prenait
-beaucoup plus de temps. Le protocole
-\protect\hyperlink{acronym__NFS}{NFS} a donc été gardé car les mesures
-ont prouvé que ses performances étaient similaires à ses alternatives.
-
-Un format d'images alternatif aux images brutes compressées a été
-recherché. Une solution produisant des images plus petites et
-déployables plus rapidement a été trouvée: utiliser des images produites
-avec l'outil \emph{Clonezilla}. Cet outil permet aussi de faciliter la
-création d'images en utilisant sa version \emph{live}. Des mesures
-prouvant que ce système de déploiement d'images offre un réel avantage
-en espace utilisé et en temps de déploiement par rapport aux images
-brutes compressées.
-
-Le système d'exploitation utilisé pour effectuer le déploiement a été
-complètement remplacé. Initialement construit avec \emph{Buildroot},
-avec un système de fichiers racine chargé entièrement en mémoire, il a
-été remplacé par un système \emph{Debian} dont le système de fichiers
-racine est monté depuis un partage \protect\hyperlink{acronym__NFS}{NFS}
-en lecture seule. Ce système permet une installation aisée de tous les
-paquets \emph{Debian}, notamment \emph{Clonezilla} qui était compliqué à
-installer sur un système construit avec \emph{Buildroot}. La création de
-ce système d'exploitation a été automatisée et encapsulée dans un
-conteneur \emph{Docker} pour rendre sa modification et reconstruction
-très simple, indépendamment du système d'exploitation utilisé.
-
-Les scripts de déploiement du système initial ont été réécrits. Une
-gestion avancée des erreurs a été implémentée. Un système de mesure et
-d'affichage du temps d'exécution de chaque partie du déploiement a été
-développé. La génération de fichiers de log a été améliorée pour qu'ils
-fournissent plus d'informations utiles et qu'ils soient structurés de
-manière à rendre leur gestion et leur consultation plus aisée. Le
-déploiement d'images avec \emph{Clonezilla} a été implémenté, tout en
-gardant la possibilité d'utiliser des images brutes compressées pour
-offrir plus de flexibilité et permettre de comparer les deux systèmes.
-Le support des images de systèmes d'exploitations compatibles
-\protect\hyperlink{acronym__UEFI}{UEFI} a aussi été implémenté,
-notamment en permettant de déterminer automatiquement l'exécutable
-\protect\hyperlink{acronym__EFI}{EFI} qui devra être lancé pour démarrer
-le système déployé.
-
-Enfin, un système de personnalisation d'un système après son déploiement
-a été conçu, permettant de définir des configurations que l'utilisateur
-peut choisir de copier ou non sur le système déployé. Une image de
-système d'exploitation peut être conçue pour exécuter les fichiers
-copiés par ces personnalisations dans un dossier spécifique, pour
-permettre des configurations complexes exécutées lors du démarrage avec
-un outil choisi, par exemple \emph{Ansible}. Ce système offre beaucoup
-de flexibilité et permet de définir des configurations avancées tout en
-gardant le système de déploiement indépendant de ce qui est utilisé pour
-les exécuter, car le seul mécanisme présent dans le système de
-déploiement est la copie de fichiers sur une partition donnée.
-
-\hypertarget{points-damuxe9lioration}{%
-\section{Points d'amélioration}\label{points-damuxe9lioration}}
-
-Bien que le système à la fin de ce projet soit parfaitement fonctionnel,
-il existe des points qui devraient ou pourraient être étudiés, améliorés
-ou implémentés pour que le système soit prêt à une utilisation dans un
-cadre réel.
-
-\hypertarget{amuxe9lioration-des-performances-de-tuxe9luxe9chargement-des-images-sur-un-ruxe9seau-ruxe9el-avec-de-nombreux-clients-simultanuxe9s}{%
-\subsection{Amélioration des performances de téléchargement des images
-sur un réseau réel avec de nombreux clients
-simultanés}\label{amuxe9lioration-des-performances-de-tuxe9luxe9chargement-des-images-sur-un-ruxe9seau-ruxe9el-avec-de-nombreux-clients-simultanuxe9s}}
-
-Le protocole réseau utilisé pour le téléchargement des images a été
-testé avec un client unique, sur un réseau minimal ne comprenant que le
-client et le serveur. Il est très probable que le temps de
-téléchargement des images soit beaucoup plus long que celui mesuré dans
-le cadre de ce travail si de nombreux clients téléchargent des images en
-même temps, dans un réseau plus complexe tel que celui de l'école.
-
-L'étude et la mitigation de cette problématique a volontairement été
-mise de côté dans le cadre de ce travail car il était difficile de
-simuler les conditions réelles du système déployé dans une école alors
-que tout le travail a été effectué hors de l'école, dans un petit réseau
-local domestique avec une quantité limitée d'ordinateurs à disposition
-pour faire des tests.
-
-Différentes approches pourraient être utilisées pour améliorer ces
-performances, telles que la copie en \emph{multicast} des images, la
-redondance des serveurs mettant à disposition les images ou encore
-l'utilisation d'un protocole \emph{pair à pair} tel que
-\emph{Bittorrent} ou \emph{IPFS} pour permettre de distribuer le
-transfert des images sur tous les clients connectés plutôt que
-d'utiliser uniquement le serveur central comme source du fichiers.
-
-\hypertarget{amuxe9lioration-du-systuxe8me-de-personnalisation-des-images}{%
-\subsection{Amélioration du système de personnalisation des
-images}\label{amuxe9lioration-du-systuxe8me-de-personnalisation-des-images}}
-
-Le système de personnalisation des images a été implémenté tardivement
-dans le travail. Bien qu'il soit fonctionnel, il n'a pas été testé
-extensivement. Il faudrait passer un peu de temps à créer des
-configurations post-déploiement complexes qui sont exécutées au
-démarrage par le système déployé et de valider leur fonctionnement.
-
-Par exemple, il était prévu de tester l'exécution de \emph{playbooks}
-\emph{Ansible} au démarrage du système, copiés selon les choix de
-personnalisation de l'utilisateur. Ces \emph{playbooks} pourraient étre
-utilisés pour effectuer de nombreuses actions, telles que l'installation
-de groupes de paquets choisis, la génération d'un nom d'hôte unique pour
-la machine et la connexion à un domaine \emph{Active Directory} pour
-permettre aux élèves de se connecter avec le même nom d'utilisateur et
-d'avoir accès à leur dossier \emph{home} depuis un partage
-\protect\hyperlink{acronym__NFS}{NFS}, comme sur les postes de travail
-standards présents de l'école.
-
-\hypertarget{amuxe9lioration-de-la-suxe9curituxe9}{%
-\subsection{Amélioration de la
-sécurité}\label{amuxe9lioration-de-la-suxe9curituxe9}}
-
-Sur le système actuel, un utilisateur mal intentionné peut détruire ou
-modifier les images présentes sur le serveur distant, car elles sont
-récupérées sur un partage \protect\hyperlink{acronym__NFS}{NFS} avec des
-droits de lecture-écriture. La raison de ce partage en lecture et
-écriture est que les logs sont écrits sur le même partage. Une manière
-simple de résoudre ce problème serait de séparer ce partage en deux: le
-premier en lecture seule contiendrait les images et le second
-contiendrait les logs uniquement.
-
-Il faudrait ensuite trouver une solution pour empêcher une machine
-d'aller modifier ou supprimer les logs d'une autre machine, ce qui est
-compliqué à mettre en oeuvre avec un partage
-\protect\hyperlink{acronym__NFS}{NFS}. Peut être que les logs pourraient
-être transmis au serveur en utilisant un autre canal de communication et
-de déléguer la création et le nommage du fichier au serveur, pour que
-les clients ne soient plus capables d'accéder directement aux fichiers
-des logs, mais que ce soit le serveur qui ait la responsabilité de les
-créer et de les gérer.
-
-\hypertarget{ruxe9trospection-sur-le-duxe9roulement-du-travail}{%
-\section{Rétrospection sur le déroulement du
-travail}\label{ruxe9trospection-sur-le-duxe9roulement-du-travail}}
-
-J'ai eu beaucoup d'intérêt à travailler sur ce sujet. Cela m'a permis de
-mettre en pratique de nombreuses compétences acquises lors des cours
-suivis les quatre années précédentes, dont en particulier les cours de
-programmation des systèmes (\emph{sIT\_242}), systèmes d'exploitation
-(\emph{sIT\_244}), réseaux et protocoles informatiques (sIT\_362),
-réseaux avancés (\emph{sIT\_384}), programmation avancée des systèmes
-(\emph{sIT\_632}) et virtualisation des
-\protect\hyperlink{acronym__SI}{SI} (\emph{sIT\_632}).
-
-\hypertarget{ruxe9fuxe9rences}{%
-\chapter{Références}\label{ruxe9fuxe9rences}}
-
-\appendix
-
-\hypertarget{appendix_source}{%
-\chapter{Codes sources notables}\label{appendix_source}}
-
-Cette annexe contient les listings des codes sources les plus importants
-du projet.
-
-\hypertarget{makefile-configuration-gnu-make-du-projet}{%
-\section{\texorpdfstring{\texttt{Makefile}: configuration \emph{GNU
-Make} du
-projet}{Makefile: configuration GNU Make du projet}}\label{makefile-configuration-gnu-make-du-projet}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\DataTypeTok{SHELL }\CharTok{:=}\StringTok{ /bin/bash}
-\DataTypeTok{MAKEFLAGS }\CharTok{+=}\StringTok{ "{-}j 4"}
-
-\DataTypeTok{DOCKER\_BUILDKIT\_BUILD }\CharTok{=}\StringTok{ DOCKER\_BUILDKIT=1 docker build {-}{-}progress=plain}
-
-\DataTypeTok{GRUB\_SRC }\CharTok{:=}\StringTok{ }\CharTok{$(}\KeywordTok{shell}\StringTok{ find grub/bootiful{-}grub/ {-}type f {-}regex ".*\textbackslash{}.[c|h|sh|py|cfg|conf]"}\CharTok{)}
-\DataTypeTok{GRUB\_I386\_PC\_BIN }\CharTok{=}\StringTok{ tftp/tftpboot/boot/grub/i386{-}pc/core.0}
-\DataTypeTok{GRUB\_I386\_EFI\_BIN }\CharTok{=}\StringTok{ tftp/tftpboot/boot/grub/i386{-}efi/core.efi}
-\DataTypeTok{GRUB\_X86\_64\_EFI\_BIN }\CharTok{=}\StringTok{ tftp/tftpboot/boot/grub/x86\_64{-}efi/core.efi}
-\DataTypeTok{DEPLOYER\_SRC }\CharTok{:=}\StringTok{ }\CharTok{$(}\KeywordTok{wildcard}\StringTok{ deployer/*}\CharTok{)}
-\DataTypeTok{TFTP\_DEPLOYER\_DIR }\CharTok{=}\StringTok{ tftp/tftpboot/boot/deployer}
-\DataTypeTok{TFTP\_DEPLOYER\_VMLINUZ }\CharTok{:=}\StringTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_DIR}\CharTok{)}\StringTok{/vmlinuz}
-\DataTypeTok{TFTP\_DEPLOYER\_INITRD }\CharTok{:=}\StringTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_DIR}\CharTok{)}\StringTok{/initrd.img}
-\DataTypeTok{NFS\_DEPLOYER\_ROOT }\CharTok{:=}\StringTok{ nfs/nfsroot.tar.gz}
-\DataTypeTok{LATEST\_LOG }\CharTok{:=}\StringTok{ }\CharTok{$(}\KeywordTok{shell}\StringTok{ ls {-}1 nfs/nfsshared/log/*.log | tail {-}n 1}\CharTok{)}
-
-\OtherTok{.PHONY:}\DataTypeTok{ doc grub deployer start{-}server reprovision{-}server clean print\_last\_log help}
-
-\CommentTok{\# Builds everything}
-\DecValTok{all:}\DataTypeTok{ doc grub deployer}
-
-\CommentTok{\# Builds PDF and markdown documents}
-\DecValTok{doc:}
-    \CharTok{$(}\DataTypeTok{MAKE}\CharTok{)}\NormalTok{ {-}C doc}
-
-\DecValTok{grub/bootiful{-}grub/bootstrap partclone/bootiful{-}partclone/Makefile.am:}\DataTypeTok{ .gitmodules}
-\NormalTok{    git submodule init \&\& git submodule update}
-
-\CommentTok{\# Bootstraps GRUB  dependencies and configuration script}
-\DecValTok{grub/bootiful{-}grub/configure:}\DataTypeTok{ grub/bootiful{-}grub/bootstrap}
-\NormalTok{    (pushd grub/bootiful{-}grub \&\& ./bootstrap; popd)}
-
-\CommentTok{\# Builds GRUB for i386{-}pc}
-\DecValTok{$(GRUB\_I386\_PC\_BIN):}\DataTypeTok{ grub/Dockerfile grub/bootiful{-}grub/configure }\CharTok{$(}\DataTypeTok{GRUB\_SRC}\CharTok{)}
-    \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./grub }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}output ./tftp/tftpboot }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}build{-}arg PLATFORM=pc }\CharTok{\textbackslash{}}
-\NormalTok{          {-}{-}build{-}arg TARGET=i386}
-
-\CommentTok{\# Builds GRUB for i386{-}efi}
-\DecValTok{$(GRUB\_I386\_EFI\_BIN):}\DataTypeTok{ grub/Dockerfile grub/bootiful{-}grub/configure }\CharTok{$(}\DataTypeTok{GRUB\_SRC}\CharTok{)}
-    \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./grub }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}output ./tftp/tftpboot }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}build{-}arg PLATFORM=efi }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}build{-}arg TARGET=i386}
-
-\CommentTok{\# Builds GRUB for x86\_64{-}efi}
-\DecValTok{$(GRUB\_X86\_64\_EFI\_BIN):}\DataTypeTok{ grub/Dockerfile grub/bootiful{-}grub/configure }\CharTok{$(}\DataTypeTok{GRUB\_SRC}\CharTok{)}
-    \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./grub }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}output ./tftp/tftpboot }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}build{-}arg PLATFORM=efi }\CharTok{\textbackslash{}}
-\NormalTok{        {-}{-}build{-}arg TARGET=x86\_64}
-
-\CommentTok{\# Builds GRUB for all platforms}
-\DecValTok{grub:}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{GRUB\_I386\_PC\_BIN}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{GRUB\_I386\_EFI\_BIN}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{GRUB\_X86\_64\_EFI\_BIN}\CharTok{)}
-
-\CommentTok{\# Builds the deployer OS}
-\DecValTok{deployer:}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_VMLINUZ}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_INITRD}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{NFS\_DEPLOYER\_ROOT}\CharTok{)}
-
-\DecValTok{$(TFTP\_DEPLOYER\_VMLINUZ) $(TFTP\_DEPLOYER\_INITRD) \&:}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{DEPLOYER\_SRC}\CharTok{)}
-    \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./deployer {-}{-}target tftp{-}export{-}stage {-}{-}output }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_DIR}\CharTok{)}\NormalTok{ \&\& }\CharTok{\textbackslash{}}
-\NormalTok{    touch {-}c }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_VMLINUZ}\CharTok{)} \CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_INITRD}\CharTok{)}
-
-\DecValTok{$(NFS\_DEPLOYER\_ROOT):}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{DEPLOYER\_SRC}\CharTok{)}
-    \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./deployer {-}{-}target nfs{-}export{-}stage {-}{-}output nfs/ \&\& }\CharTok{\textbackslash{}}
-\NormalTok{    touch {-}c }\CharTok{$(}\DataTypeTok{NFS\_DEPLOYER\_ROOT}\CharTok{)}
-
-\CommentTok{\# Starts bootiful services in docker containers}
-\DecValTok{start{-}server:}\DataTypeTok{ grub deployer}
-\NormalTok{    docker{-}compose up {-}{-}build {-}{-}remove{-}orphans {-}{-}abort{-}on{-}container{-}exit}
-
-\CommentTok{\# Removes all generated files}
-\DecValTok{clean:}
-\NormalTok{    rm {-}rf deployer/rootfs}
-    \CharTok{$(}\DataTypeTok{MAKE}\CharTok{)}\NormalTok{ {-}C doc clean}
-
-\CommentTok{\# Prints the latest deployment log file}
-\DecValTok{print{-}latest{-}log:}
-\NormalTok{    cat }\CharTok{$(}\DataTypeTok{LATEST\_LOG}\CharTok{)}
-
-\CommentTok{\# Show this help.}
-\DecValTok{help:}
-\NormalTok{    printf }\StringTok{"Usage:  make \textless{}target\textgreater{}\textbackslash{}n\textbackslash{}nTargets:\textbackslash{}n"}
-\NormalTok{    awk }\StringTok{\textquotesingle{}/\^{}\#/\{c=substr(}\CharTok{$$}\StringTok{0,3);next\}c\&\&/\^{}[[:alpha:]][[:alnum:]\_{-}]+:/\{print "  " substr(}\CharTok{$$}\StringTok{1,1,index(}\CharTok{$$}\StringTok{1,":")),c\}1\{c=0\}\textquotesingle{}} \CharTok{$(}\DataTypeTok{MAKEFILE\_LIST}\CharTok{)}\NormalTok{ | column {-}s: {-}t}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{docker-compose.yml-configuration-docker-compose-du-serveur-de-duxe9ploiement}{%
-\section{\texorpdfstring{\texttt{docker-compose.yml}: configuration
-\emph{docker-compose} du serveur de
-déploiement}{docker-compose.yml: configuration docker-compose du serveur de déploiement}}\label{docker-compose.yml-configuration-docker-compose-du-serveur-de-duxe9ploiement}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\FunctionTok{version}\KeywordTok{:}\AttributeTok{ }\StringTok{"3.8"}
-
-\FunctionTok{services}\KeywordTok{:}
-\AttributeTok{  }\FunctionTok{bootiful{-}dhcp}\KeywordTok{:}
-\AttributeTok{    }\FunctionTok{build}\KeywordTok{:}\AttributeTok{ ./dhcp}
-\AttributeTok{    }\FunctionTok{network\_mode}\KeywordTok{:}\AttributeTok{ host}
-\AttributeTok{  }\FunctionTok{bootiful{-}tftp}\KeywordTok{:}
-\AttributeTok{    }\FunctionTok{build}\KeywordTok{:}\AttributeTok{ ./tftp}
-\AttributeTok{    }\FunctionTok{network\_mode}\KeywordTok{:}\AttributeTok{ host}
-\AttributeTok{    }\FunctionTok{volumes}\KeywordTok{:}
-\AttributeTok{      }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ bind}
-\AttributeTok{        }\FunctionTok{source}\KeywordTok{:}\AttributeTok{ ./tftp/tftpboot}
-\AttributeTok{        }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /tftpboot}
-\AttributeTok{        }\FunctionTok{read\_only}\KeywordTok{:}\AttributeTok{ }\CharTok{yes}
-\AttributeTok{  }\FunctionTok{bootiful{-}nfs}\KeywordTok{:}
-\AttributeTok{    }\FunctionTok{build}\KeywordTok{:}\AttributeTok{ ./nfs}
-\AttributeTok{    }\FunctionTok{network\_mode}\KeywordTok{:}\AttributeTok{ host}
-\AttributeTok{    }\FunctionTok{privileged}\KeywordTok{:}\AttributeTok{ }\CharTok{yes}
-\AttributeTok{    }\FunctionTok{volumes}\KeywordTok{:}
-\AttributeTok{      }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ tmpfs}
-\AttributeTok{        }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /nfsroot}
-\AttributeTok{      }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ bind}
-\AttributeTok{        }\FunctionTok{source}\KeywordTok{:}\AttributeTok{ /run/media/araxor/bigdata/nfsshared}
-\AttributeTok{        }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /nfsshared}
-\AttributeTok{      }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ bind}
-\AttributeTok{        }\FunctionTok{source}\KeywordTok{:}\AttributeTok{ /lib/modules}
-\AttributeTok{        }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /lib/modules}
-\AttributeTok{        }\FunctionTok{read\_only}\KeywordTok{:}\AttributeTok{ }\CharTok{yes}
-\AttributeTok{    }\FunctionTok{environment}\KeywordTok{:}
-\AttributeTok{      }\FunctionTok{NFS\_LOG\_LEVEL}\KeywordTok{:}\AttributeTok{ DEBUG}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployer_dockerfile}{%
-\section{\texorpdfstring{\texttt{deployer/Dockerfile}: configuration
-\emph{Docker} pour la construction de l'OS de
-déploiement}{deployer/Dockerfile: configuration Docker pour la construction de l'OS de déploiement}}\label{deployer_dockerfile}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{FROM}\NormalTok{ debian:bullseye as build{-}stage}
-\KeywordTok{RUN}\NormalTok{ apt{-}get update \&\& apt{-}get install {-}y multistrap}
-
-\KeywordTok{WORKDIR}\NormalTok{ /multistrap}
-
-\KeywordTok{ADD}\NormalTok{ ./multistrap.config ./}
-\KeywordTok{RUN}\NormalTok{ multistrap {-}{-}arch amd64 {-}{-}file ./multistrap.config {-}{-}dir ./rootfs {-}{-}tidy{-}up}
-
-\KeywordTok{ADD}\NormalTok{ ./hostname ./rootfs/etc/hostname}
-\KeywordTok{ADD}\NormalTok{ ./hosts ./rootfs/etc/hosts}
-\KeywordTok{ADD}\NormalTok{ ./fstab ./rootfs/etc/fstab}
-\KeywordTok{ADD}\NormalTok{ ./initramfs.conf ./rootfs/etc/initramfs{-}tools/initramfs.conf}
-\KeywordTok{ADD}\NormalTok{ ./bootiful{-}deploy{-}log.service ./rootfs/etc/systemd/system/bootiful{-}deploy{-}log.service}
-
-\KeywordTok{ADD}\NormalTok{ ./configure.sh ./rootfs/}
-\KeywordTok{RUN}\NormalTok{ chroot /multistrap/rootfs ./configure.sh}
-
-\KeywordTok{RUN}\NormalTok{ mkdir ./boot ./rootfs/bootiful ./rootfs/var/lib/clonezilla ./rootfs/home/partimag}
-\KeywordTok{RUN}\NormalTok{ ln {-}s /proc/mounts rootfs/etc/mtab}
-\KeywordTok{RUN}\NormalTok{ cp ./rootfs/vmlinuz ./rootfs/initrd.img ./boot/ \&\& \textbackslash{}}
-\NormalTok{    rm {-}rf ./rootfs/configure.sh ./rootfs/vmlinuz* ./rootfs/initrd.img* ./rootfs/boot}
-
-\KeywordTok{ADD}\NormalTok{ ./bootiful{-}deploy{-}init ./rootfs/usr/bin/}
-\KeywordTok{ADD}\NormalTok{ ./bootiful{-}common ./rootfs/usr/bin/}
-\KeywordTok{ADD}\NormalTok{ ./bootiful{-}deploy ./rootfs/usr/bin/}
-\KeywordTok{ADD}\NormalTok{ ./bootiful{-}save{-}image ./rootfs/usr/bin/}
-\KeywordTok{ADD}\NormalTok{ ./bootiful{-}reset{-}cache ./rootfs/usr/bin/}
-\KeywordTok{RUN}\NormalTok{ tar {-}czf nfsroot.tar.gz rootfs {-}{-}hard{-}dereference \&\& rm {-}rf ./rootfs}
-
-\KeywordTok{FROM}\NormalTok{ scratch AS nfs{-}export{-}stage}
-\KeywordTok{COPY}\NormalTok{ {-}{-}from=build{-}stage /multistrap/nfsroot.tar.gz /}
-
-\KeywordTok{FROM}\NormalTok{ scratch AS tftp{-}export{-}stage}
-\KeywordTok{COPY}\NormalTok{ {-}{-}from=build{-}stage /multistrap/boot /}
-
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerbootiful-deploy-log.service-configuration-de-lunituxe9-systemd-des-script-de-duxe9ploiement}{%
-\section{\texorpdfstring{\texttt{deployer/bootiful-deploy-log.service}:
-configuration de l'unité \emph{Systemd} des script de
-déploiement}{deployer/bootiful-deploy-log.service: configuration de l'unité Systemd des script de déploiement}}\label{deployerbootiful-deploy-log.service-configuration-de-lunituxe9-systemd-des-script-de-duxe9ploiement}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{[Unit]}
-\DataTypeTok{Description}\OtherTok{=}\StringTok{Bootiful interactive remote image deployment}
-\DataTypeTok{Conflicts}\OtherTok{=}\StringTok{gettytty1.service}
-\DataTypeTok{Before}\OtherTok{=}\StringTok{getty.target}
-
-\KeywordTok{[Service]}
-\DataTypeTok{Type}\OtherTok{=}\StringTok{oneshot}
-\DataTypeTok{RemainAfterExit}\OtherTok{=}\KeywordTok{yes}
-\DataTypeTok{ExecStartPre}\OtherTok{=}\StringTok{/bin/sleep }\DecValTok{2}
-\DataTypeTok{ExecStart}\OtherTok{=}\StringTok{/usr/bin/bootiful{-}deploy{-}init}
-\DataTypeTok{StandardInput}\OtherTok{=}\StringTok{tty}
-\DataTypeTok{StandardOutput}\OtherTok{=}\StringTok{tty}
-\DataTypeTok{StandardError}\OtherTok{=}\StringTok{tty}
-\DataTypeTok{ }
-\KeywordTok{[Install]}
-\DataTypeTok{WantedBy}\OtherTok{=}\StringTok{multi{-}user.target}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerinitramfs.conf-configuration-pour-cruxe9ation-dun-initramfs-pour-duxe9marrer-avec-nfs}{%
-\section{\texorpdfstring{\texttt{deployer/initramfs.conf}: configuration
-pour création d'un \emph{initramfs} pour démarrer avec
-\protect\hyperlink{acronym__NFS}{NFS}}{deployer/initramfs.conf: configuration pour création d'un initramfs pour démarrer avec NFS}}\label{deployerinitramfs.conf-configuration-pour-cruxe9ation-dun-initramfs-pour-duxe9marrer-avec-nfs}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#}
-\CommentTok{\# initramfs.conf}
-\CommentTok{\# Configuration file for mkinitramfs(8). See initramfs.conf(5).}
-\CommentTok{\#}
-\CommentTok{\# Note that configuration options from this file can be overridden}
-\CommentTok{\# by config files in the /etc/initramfs{-}tools/conf.d directory.}
-
-\CommentTok{\#}
-\CommentTok{\# MODULES: [ most | netboot | dep | list ]}
-\CommentTok{\#}
-\CommentTok{\# most {-} Add most filesystem and all harddrive drivers.}
-\CommentTok{\#}
-\CommentTok{\# dep {-} Try and guess which modules to load.}
-\CommentTok{\#}
-\CommentTok{\# netboot {-} Add the base modules, network modules, but skip block devices.}
-\CommentTok{\#}
-\CommentTok{\# list {-} Only include modules from the \textquotesingle{}additional modules\textquotesingle{} list}
-\CommentTok{\#}
-
-\VariableTok{MODULES=}\NormalTok{netboot}
-
-\CommentTok{\#}
-\CommentTok{\# BUSYBOX: [ y | n | auto ]}
-\CommentTok{\#}
-\CommentTok{\# Use busybox shell and utilities.  If set to n, klibc utilities will be used.}
-\CommentTok{\# If set to auto (or unset), busybox will be used if installed and klibc will}
-\CommentTok{\# be used otherwise.}
-\CommentTok{\#}
-
-\VariableTok{BUSYBOX=}\NormalTok{auto}
-
-\CommentTok{\#}
-\CommentTok{\# KEYMAP: [ y | n ]}
-\CommentTok{\#}
-\CommentTok{\# Load a keymap during the initramfs stage.}
-\CommentTok{\#}
-
-\VariableTok{KEYMAP=}\NormalTok{n}
-
-\CommentTok{\#}
-\CommentTok{\# COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz ]}
-\CommentTok{\#}
-
-\VariableTok{COMPRESS=}\NormalTok{xz}
-
-\CommentTok{\#}
-\CommentTok{\# NFS Section of the config.}
-\CommentTok{\#}
-
-\CommentTok{\#}
-\CommentTok{\# DEVICE: ...}
-\CommentTok{\#}
-\CommentTok{\# Specify a specific network interface, like eth0}
-\CommentTok{\# Overridden by optional ip= or BOOTIF= bootarg}
-\CommentTok{\#}
-
-\VariableTok{DEVICE=}
-
-\CommentTok{\#}
-\CommentTok{\# NFSROOT: [ auto | HOST:MOUNT ]}
-\CommentTok{\#}
-
-\VariableTok{NFSROOT=}\NormalTok{auto}
-
-\CommentTok{\#}
-\CommentTok{\# RUNSIZE: ...}
-\CommentTok{\#}
-\CommentTok{\# The size of the /run tmpfs mount point, like 256M or 10\%}
-\CommentTok{\# Overridden by optional initramfs.runsize= bootarg}
-\CommentTok{\#}
-
-\VariableTok{RUNSIZE=}\NormalTok{10}\ExtensionTok{\%}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployermultistrap.config-configuration-multistrap-pour-la-cruxe9ation-du-systuxe8me-de-fichiers-racine}{%
-\section{\texorpdfstring{\texttt{deployer/multistrap.config}:
-configuration \emph{multistrap} pour la création du système de fichiers
-racine}{deployer/multistrap.config: configuration multistrap pour la création du système de fichiers racine}}\label{deployermultistrap.config-configuration-multistrap-pour-la-cruxe9ation-du-systuxe8me-de-fichiers-racine}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{[General]}
-\DataTypeTok{unpack}\OtherTok{=}\KeywordTok{true}
-\DataTypeTok{bootstrap}\OtherTok{=}\StringTok{DRBL Debian}
-\DataTypeTok{aptsources}\OtherTok{=}\StringTok{Debian}
-\DataTypeTok{addimportant}\OtherTok{=}\KeywordTok{true}
-
-\KeywordTok{[Debian]}
-\DataTypeTok{packages}\OtherTok{=}\StringTok{nfs{-}common linux{-}image{-}amd64 parted systemd udev strace zstd dialog lolcat gdisk gawk pigz pv clonezilla partclone partimage cifs{-}utils}
-\DataTypeTok{source}\OtherTok{=}\StringTok{http://http.debian.net/debian}
-\DataTypeTok{keyring}\OtherTok{=}\StringTok{debian{-}archive{-}keyring}
-\DataTypeTok{suite}\OtherTok{=}\StringTok{bullseye}
-\DataTypeTok{components}\OtherTok{=}\StringTok{main contrib non{-}free}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerconfigure.sh-script-de-configuration-du-systuxe8me-de-fichier-racine-uxe0-exuxe9cuter-en-chroot}{%
-\section{\texorpdfstring{\texttt{deployer/configure.sh}: script de
-configuration du système de fichier racine à exécuter en
-\texttt{chroot}}{deployer/configure.sh: script de configuration du système de fichier racine à exécuter en chroot}}\label{deployerconfigure.sh-script-de-configuration-du-systuxe8me-de-fichier-racine-uxe0-exuxe9cuter-en-chroot}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#!/bin/bash}
-
-\KeywordTok{set} \ExtensionTok{{-}e}
-
-\BuiltInTok{export} \VariableTok{DEBIAN\_FRONTEND=}\NormalTok{noninteractive }\VariableTok{DEBCONF\_NONINTERACTIVE\_SEEN=}\NormalTok{true}
-\BuiltInTok{export} \VariableTok{LC\_ALL=}\NormalTok{C }\VariableTok{LANGUAGE=}\NormalTok{C }\VariableTok{LANG=}\NormalTok{C}
-
-\ExtensionTok{dpkg}\NormalTok{ {-}{-}configure {-}a}
-
-\ExtensionTok{apt{-}get}\NormalTok{ autoremove {-}{-}purge}
-\ExtensionTok{apt{-}get}\NormalTok{ clean}
-
-\ExtensionTok{update{-}initramfs}\NormalTok{ {-}u}
-
-\ExtensionTok{systemctl}\NormalTok{ enable bootiful{-}deploy{-}log.service}
-
-\BuiltInTok{echo} \StringTok{"root:bootiful"} \KeywordTok{|} \ExtensionTok{chpasswd}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerbootiful-deploy-init-script-dinitialisation-du-duxe9ploiement}{%
-\section{\texorpdfstring{\texttt{deployer/bootiful-deploy-init}: script
-d'initialisation du
-déploiement}{deployer/bootiful-deploy-init: script d'initialisation du déploiement}}\label{deployerbootiful-deploy-init-script-dinitialisation-du-duxe9ploiement}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#!/bin/bash}
-
-\BuiltInTok{umask}\NormalTok{ {-}S 0000 }\OperatorTok{\&\textgreater{}}\NormalTok{/dev/null}
-\FunctionTok{clear}
-\ExtensionTok{/usr/games/lolcat}\NormalTok{ {-}a {-}d 6 {-}s 20 {-}F 0.5 }\OperatorTok{\textless{}\textless{}\textquotesingle{}EOF\textquotesingle{}}
-\NormalTok{ .o8                               .    o8o   .o88o.             oooo}
-\NormalTok{"888                             .o8    \textasciigrave{}"\textquotesingle{}   888 \textasciigrave{}"             \textasciigrave{}888}
-\NormalTok{ 888oooo.   .ooooo.   .ooooo.  .o888oo oooo  o888oo  oooo  oooo   888}
-\NormalTok{ d88\textquotesingle{} \textasciigrave{}88b d88\textquotesingle{} \textasciigrave{}88b d88\textquotesingle{} \textasciigrave{}88b   888   \textasciigrave{}888   888    \textasciigrave{}888  \textasciigrave{}888   888}
-\NormalTok{ 888   888 888   888 888   888   888    888   888     888   888   888}
-\NormalTok{ 888   888 888   888 888   888   888 .  888   888     888   888   888}
-\NormalTok{ \textasciigrave{}Y8bod8P\textquotesingle{} \textasciigrave{}Y8bod8P\textquotesingle{} \textasciigrave{}Y8bod8P\textquotesingle{}   "888" o888o o888o    \textasciigrave{}V88V"V8P\textquotesingle{} o888o}
-\OperatorTok{EOF}
-\BuiltInTok{declare} \VariableTok{logo\_pressed\_key}
-\BuiltInTok{read}\NormalTok{ {-}t 0.001 {-}n 1 {-}s {-}r }\VariableTok{logo\_pressed\_key}
-\BuiltInTok{readonly} \VariableTok{logo\_pressed\_key}
-
-\FunctionTok{select\_next\_action()} \KeywordTok{\{}
-    \BuiltInTok{local} \VariableTok{next\_action\_pressed\_key}
-    \KeywordTok{while} \FunctionTok{true}\KeywordTok{;} \KeywordTok{do}
-        \BuiltInTok{echo}
-        \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}d\textquotesingle{} to restart deployment"}
-        \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}s\textquotesingle{} to start an interactive command{-}line shell"}
-        \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}r\textquotesingle{} to reboot"}
-        \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}p\textquotesingle{} to power off"}
-
-        \BuiltInTok{read}\NormalTok{ {-}n 1 {-}s {-}r }\VariableTok{next\_action\_pressed\_key}
-        \KeywordTok{case} \StringTok{"}\VariableTok{$next\_action\_pressed\_key}\StringTok{"}\KeywordTok{ in}
-\NormalTok{            [dD]}\KeywordTok{)}
-                \BuiltInTok{echo} \StringTok{"Restarting deployment..."}
-                \BuiltInTok{break}
-                \KeywordTok{;;}
-\NormalTok{            [sS]}\KeywordTok{)}
-                \BuiltInTok{echo} \StringTok{"Starting an interactive command{-}line shell..."}
-                \ExtensionTok{/bin/bash}\NormalTok{ {-}i}
-                \KeywordTok{;;}
-\NormalTok{            [rR]}\KeywordTok{)}
-                \BuiltInTok{echo} \StringTok{"Rebooting..."}
-                \ExtensionTok{reboot}
-                \KeywordTok{;;}
-\NormalTok{            [pP]}\KeywordTok{)}
-                \BuiltInTok{echo} \StringTok{"Powering off..."}
-                \ExtensionTok{poweroff}
-                \KeywordTok{;;}
-\NormalTok{            *}\KeywordTok{)}
-                \BuiltInTok{echo} \StringTok{"Error: No action defined for key \textquotesingle{}}\VariableTok{$next\_action\_pressed\_key}\StringTok{\textquotesingle{}"}
-                \KeywordTok{;;}
-        \KeywordTok{esac}
-    \KeywordTok{done}
-\KeywordTok{\}}
-
-\KeywordTok{if [[} \StringTok{"}\VariableTok{$logo\_pressed\_key}\StringTok{"}\NormalTok{ =\textasciitilde{} \^{}[sS]$}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \BuiltInTok{echo} \StringTok{"Skipping deployment...."}
-    \ExtensionTok{/bin/bash}\NormalTok{ {-}i}
-    \ExtensionTok{select\_next\_action}
-\KeywordTok{fi}
-
-\KeywordTok{while}\NormalTok{ ! }\ExtensionTok{bootiful{-}deploy}\KeywordTok{;} \KeywordTok{do}
-    \BuiltInTok{echo} \StringTok{"Error in deployment."}
-    \ExtensionTok{select\_next\_action}
-\KeywordTok{done}
-
-\BuiltInTok{echo} \StringTok{"Deployment successful. Rebooting..."}
-\ExtensionTok{reboot}
-
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerbootiful-common-script-de-duxe9finition-des-fonctions-communes-aux-scripts-bootiful-}{%
-\section{\texorpdfstring{\texttt{deployer/bootiful-common}: script de
-définition des fonctions communes aux scripts
-\texttt{bootiful-*}}{deployer/bootiful-common: script de définition des fonctions communes aux scripts bootiful-*}}\label{deployerbootiful-common-script-de-duxe9finition-des-fonctions-communes-aux-scripts-bootiful-}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#!/bin/bash}
-
-\KeywordTok{if [[} \StringTok{"}\VariableTok{$\{BASH\_SOURCE[0]\}}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$0}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"Error: script \textquotesingle{}}\VariableTok{$0}\StringTok{\textquotesingle{} must be sourced, not executed."}
-    \BuiltInTok{return}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\KeywordTok{if [[} \OtherTok{{-}n} \StringTok{"}\VariableTok{$BOOTIFUL\_COMMON\_SOURCED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"Warning: script \textquotesingle{}}\VariableTok{$0}\StringTok{\textquotesingle{} sourced more than once."}
-    \BuiltInTok{return}\NormalTok{ 0}
-\KeywordTok{fi}
-
-\BuiltInTok{readonly} \VariableTok{BOOTIFUL\_COMMON\_SOURCED=}\NormalTok{true}
-
-\FunctionTok{echo\_err()} \KeywordTok{\{}
-    \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"$"}
-\KeywordTok{\}}
-
-\CommentTok{\# Writes an error message and a stack trace to stderr, then exits the current}
-\CommentTok{\# shell with the error status code 1.}
-\CommentTok{\#}
-\CommentTok{\# Warning: if called in a sub{-}shell, the error messages are written to stderr}
-\CommentTok{\#          but only the sub{-}shell is exited. The parent shell should always}
-\CommentTok{\#          check the sub{-}shells exit status codes and call \textasciigrave{}fatal\_error\textasciigrave{} if a}
-\CommentTok{\#          non{-}0 exit status is returned.}
-\FunctionTok{fatal\_error()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{message=}\StringTok{"}\VariableTok{$\{1:{-}}\NormalTok{unknown reason}\VariableTok{\}}\StringTok{"}
-
-    \ExtensionTok{echo\_err} \StringTok{"Fatal error: }\VariableTok{$message}\StringTok{"}
-
-    \ExtensionTok{echo\_err} \StringTok{"Stack trace:"}
-    \BuiltInTok{local} \VariableTok{frame=}\NormalTok{0}
-    \KeywordTok{while} \OperatorTok{\textgreater{}\&2} \BuiltInTok{caller} \VariableTok{$frame}\KeywordTok{;} \KeywordTok{do}
-        \KeywordTok{((}\NormalTok{frame++}\KeywordTok{))}
-    \KeywordTok{done}
-
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{\}}
-
-\CommentTok{\# If the INT signal (ctrl+c) is received, a fatal error is thrown}
-\FunctionTok{fatal\_error\_on\_sigint()} \KeywordTok{\{}
-    \ExtensionTok{fatal\_error} \StringTok{"SIGINT received"}
-\KeywordTok{\}}
-\BuiltInTok{trap}\NormalTok{ fatal\_error\_on\_sigint INT}
-
-\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{exit\_callbacks=()}
-\FunctionTok{execute\_exit\_callbacks()} \KeywordTok{\{}
-    \KeywordTok{for} \ExtensionTok{exit\_callback}\NormalTok{ in }\StringTok{"}\VariableTok{$\{exit\_callbacks[]\}}\StringTok{"}\KeywordTok{;} \KeywordTok{do}
-        \StringTok{"}\VariableTok{$exit\_callback}\StringTok{"}
-    \KeywordTok{done}
-\KeywordTok{\}}
-\BuiltInTok{trap} \StringTok{\textquotesingle{}execute\_exit\_callbacks\textquotesingle{}}\NormalTok{ EXIT}
-
-\FunctionTok{add\_exit\_callback()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{exit\_callback\_function=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \VariableTok{exit\_callbacks+=(}\StringTok{"}\VariableTok{$exit\_callback\_function}\StringTok{"}\VariableTok{)}
-\KeywordTok{\}}
-
-\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_names=()}
-\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_timestamps=()}
-\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_durations=()}
-\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_types=()}
-
-\BuiltInTok{readonly} \VariableTok{STEP\_TYPE\_BATCH=}\StringTok{"batch"}
-\BuiltInTok{readonly} \VariableTok{STEP\_TYPE\_INTERACTIVE=}\StringTok{"interactive"}
-
-\FunctionTok{timestamp\_now()} \KeywordTok{\{}
-    \FunctionTok{date}\NormalTok{ +\%s}
-\KeywordTok{\}}
-
-\FunctionTok{finish\_step()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_start\_timestamp=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_finish\_timestamp=}\StringTok{"}\VariableTok{$3}\StringTok{"}
-
-    \VariableTok{step\_durations+=($((}\StringTok{"}\VariableTok{$step\_finish\_timestamp}\StringTok{"}\NormalTok{ {-} }\StringTok{"}\VariableTok{$\{step\_start\_timestamp\}}\StringTok{"}\VariableTok{)))}
-    \ExtensionTok{echo\_err} \StringTok{"Finished }\VariableTok{$step\_name}\StringTok{ (duration: }\VariableTok{$\{step\_durations[{-}1]\}}\StringTok{s)"}
-\KeywordTok{\}}
-
-\FunctionTok{print\_step\_durations()} \KeywordTok{\{}
-
-    \KeywordTok{if [[} \StringTok{"$\{\#step\_timestamps[]\}"} \OtherTok{{-}gt}\NormalTok{ 1}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{finish\_step} \StringTok{"}\VariableTok{$\{step\_names[{-}1]\}}\StringTok{"} \KeywordTok{\textbackslash{}}
-            \StringTok{"}\VariableTok{$\{step\_timestamps[{-}1]\}}\StringTok{"} \KeywordTok{\textbackslash{}}
-            \StringTok{"}\VariableTok{$(}\ExtensionTok{timestamp\_now}\VariableTok{)}\StringTok{"}
-    \KeywordTok{fi}
-
-    \BuiltInTok{local} \VariableTok{total\_batch\_duration=}\NormalTok{0}
-    \BuiltInTok{local} \VariableTok{total\_interactive\_duration=}\NormalTok{0}
-    \BuiltInTok{local} \VariableTok{total\_duration=}\NormalTok{0}
-    \BuiltInTok{local} \VariableTok{step\_name}
-    \BuiltInTok{local} \VariableTok{step\_type}
-    \BuiltInTok{local} \VariableTok{step\_duration}
-    \BuiltInTok{local} \VariableTok{step\_number}
-
-    \ExtensionTok{echo\_err}
-    \ExtensionTok{echo\_err} \StringTok{"Steps duration summary:"}
-
-    \KeywordTok{for} \ExtensionTok{i}\NormalTok{ in }\StringTok{"$\{!step\_durations[]\}"}\KeywordTok{;} \KeywordTok{do}
-        \VariableTok{step\_name=}\StringTok{"}\VariableTok{$\{step\_names[$i]\}}\StringTok{"}
-        \VariableTok{step\_duration=}\StringTok{"}\VariableTok{$\{step\_durations[$i]\}}\StringTok{"}
-        \VariableTok{step\_type=}\StringTok{"}\VariableTok{$\{step\_types[$i]\}}\StringTok{"}
-        \VariableTok{step\_number=$((}\NormalTok{i + 1}\VariableTok{))}
-
-        \ExtensionTok{echo\_err} \StringTok{"}\VariableTok{$step\_number}\StringTok{ {-} }\VariableTok{$step\_name}\StringTok{ took }\VariableTok{$\{step\_duration\}}\StringTok{ seconds (}\VariableTok{$step\_type}\StringTok{)"}
-
-        \KeywordTok{case} \StringTok{"}\VariableTok{$step\_type}\StringTok{"}\KeywordTok{ in}
-        \StringTok{"}\VariableTok{$STEP\_TYPE\_BATCH}\StringTok{"}\KeywordTok{)}
-            \KeywordTok{((}\NormalTok{total\_batch\_duration += }\StringTok{"}\VariableTok{$step\_duration}\StringTok{"}\KeywordTok{))}
-            \KeywordTok{;;}
-        \StringTok{"}\VariableTok{$STEP\_TYPE\_INTERACTIVE}\StringTok{"}\KeywordTok{)}
-            \KeywordTok{((}\NormalTok{total\_interactive\_duration += }\StringTok{"}\VariableTok{$step\_duration}\StringTok{"}\KeywordTok{))}
-            \KeywordTok{;;}
-        \KeywordTok{esac}
-
-        \KeywordTok{((}\NormalTok{total\_duration += }\StringTok{"}\VariableTok{$step\_duration}\StringTok{"}\KeywordTok{))}
-    \KeywordTok{done}
-
-    \ExtensionTok{echo\_err}
-    \ExtensionTok{echo\_err} \StringTok{"Total batch duration: }\VariableTok{$\{total\_batch\_duration\}}\StringTok{s"}
-    \ExtensionTok{echo\_err} \StringTok{"Total interactive duration: }\VariableTok{$\{total\_interactive\_duration\}}\StringTok{s"}
-    \ExtensionTok{echo\_err} \StringTok{"Total duration: }\VariableTok{$\{total\_duration\}}\StringTok{s"}
-\KeywordTok{\}}
-
-\FunctionTok{start\_step()} \KeywordTok{\{}
-    \VariableTok{step\_timestamps+=(}\StringTok{"}\VariableTok{$(}\ExtensionTok{timestamp\_now}\VariableTok{)}\StringTok{"}\VariableTok{)}
-    \VariableTok{step\_names+=(}\StringTok{"}\VariableTok{$1}\StringTok{"}\VariableTok{)}
-    \VariableTok{step\_types+=(}\StringTok{"}\VariableTok{$2}\StringTok{"}\VariableTok{)}
-
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{steps\_count=}\StringTok{"$\{\#step\_timestamps[]\}"}
-
-    \KeywordTok{if [[} \VariableTok{$steps\_count} \OtherTok{{-}eq}\NormalTok{ 1}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{add\_exit\_callback} \StringTok{"print\_step\_durations"}
-    \KeywordTok{elif [[} \StringTok{"$\{\#step\_timestamps[]\}"} \OtherTok{{-}gt}\NormalTok{ 1}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{finish\_step} \StringTok{"}\VariableTok{$\{step\_names[{-}2]\}}\StringTok{"} \KeywordTok{\textbackslash{}}
-            \StringTok{"}\VariableTok{$\{step\_timestamps[{-}2]\}}\StringTok{"} \KeywordTok{\textbackslash{}}
-            \StringTok{"}\VariableTok{$\{step\_timestamps[{-}1]\}}\StringTok{"}
-    \KeywordTok{fi}
-
-    \ExtensionTok{echo\_err} \StringTok{"Started }\VariableTok{$\{step\_names[{-}1]\}}\StringTok{"}
-\KeywordTok{\}}
-
-\FunctionTok{start\_step\_batch()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \ExtensionTok{start\_step} \StringTok{"}\VariableTok{$step\_name}\StringTok{"} \StringTok{"}\VariableTok{$STEP\_TYPE\_BATCH}\StringTok{"}
-\KeywordTok{\}}
-
-\FunctionTok{start\_step\_interactive()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \ExtensionTok{start\_step} \StringTok{"}\VariableTok{$step\_name}\StringTok{"} \StringTok{"}\VariableTok{$STEP\_TYPE\_INTERACTIVE}\StringTok{"}
-\KeywordTok{\}}
-
-\FunctionTok{warning()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{message=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-
-    \ExtensionTok{echo\_err}
-    \ExtensionTok{echo\_err} \StringTok{"Warning: }\VariableTok{$message}\StringTok{"}
-
-    \BuiltInTok{local} \VariableTok{pressed\_key}
-    \KeywordTok{while} \FunctionTok{true}\KeywordTok{;} \KeywordTok{do}
-        \ExtensionTok{echo\_err}
-        \ExtensionTok{echo\_err} \StringTok{"Continue? (y/n) "}
-
-        \BuiltInTok{read}\NormalTok{ {-}n 1 {-}s {-}r }\VariableTok{pressed\_key}
-        \KeywordTok{case} \StringTok{"}\VariableTok{$pressed\_key}\StringTok{"}\KeywordTok{ in}
-\NormalTok{        [yY]}\KeywordTok{)}
-            \ExtensionTok{echo\_err} \StringTok{"Continuing..."}
-            \BuiltInTok{return}\NormalTok{ 0}
-            \KeywordTok{;;}
-\NormalTok{        [nN]}\KeywordTok{)}
-            \ExtensionTok{echo\_err} \StringTok{"Aborting..."}
-            \BuiltInTok{exit}\NormalTok{ 1}
-            \KeywordTok{;;}
-\NormalTok{        *}\KeywordTok{)}
-            \ExtensionTok{echo\_err} \StringTok{"Invalid key \textquotesingle{}}\VariableTok{$pressed\_key}\StringTok{\textquotesingle{}"}
-            \KeywordTok{;;}
-        \KeywordTok{esac}
-    \KeywordTok{done}
-\KeywordTok{\}}
-
-\FunctionTok{validation\_error()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{validation\_error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{fatal\_error\_message=}\StringTok{"}\VariableTok{$3}\StringTok{"}
-    \ExtensionTok{echo\_err} \StringTok{"Validation error: value \textquotesingle{}}\VariableTok{$value}\StringTok{\textquotesingle{} }\VariableTok{$validation\_error\_message}\StringTok{."}
-    \ExtensionTok{fatal\_error} \StringTok{"}\VariableTok{$fatal\_error\_message}\StringTok{"}
-\KeywordTok{\}}
-
-\FunctionTok{validate\_not\_empty()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-
-    \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$value}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is empty"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"}
-    \KeywordTok{fi}
-\KeywordTok{\}}
-
-\FunctionTok{validate\_with\_regex()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{regex\_pattern=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{fatal\_error\_message=}\StringTok{"}\VariableTok{$3}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{validation\_error\_message=}\StringTok{"}\VariableTok{$\{4:{-}}\StringTok{"does not match regex pattern \textquotesingle{}}\VariableTok{$regex\_pattern}\StringTok{\textquotesingle{}"}\VariableTok{\}}\StringTok{"}
-
-    \KeywordTok{if [[} \OtherTok{!} \StringTok{"}\VariableTok{$value}\StringTok{"}\NormalTok{ =\textasciitilde{} }\VariableTok{$regex\_pattern}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$validation\_error\_message}\StringTok{"} \StringTok{"}\VariableTok{$fatal\_error\_message}\StringTok{"}
-    \KeywordTok{fi}
-\KeywordTok{\}}
-
-\FunctionTok{validate\_uint()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{regex\_pattern=}\StringTok{\textquotesingle{}\^{}[0{-}9]+$\textquotesingle{}}
-
-    \ExtensionTok{validate\_with\_regex} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$regex\_pattern}\StringTok{"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} \StringTok{"is not a positive integer"}
-\KeywordTok{\}}
-
-\FunctionTok{validate\_nonzero\_uint()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-
-    \ExtensionTok{validate\_uint} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"}
-
-    \KeywordTok{if [[} \StringTok{"}\VariableTok{$value}\StringTok{"} \OtherTok{{-}le}\NormalTok{ 0}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is not bigger than zero"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"}
-    \KeywordTok{fi}
-\KeywordTok{\}}
-
-\FunctionTok{validate\_file\_exists()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$\{2:{-}}\NormalTok{File does not exist}\VariableTok{\}}\StringTok{"}
-
-    \KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$value}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is not the path of an existing regular file"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"}
-    \KeywordTok{fi}
-\KeywordTok{\}}
-
-\CommentTok{\# Validates that the given file exists but do not test if it\textquotesingle{}s a regular file}
-\CommentTok{\# like \textasciigrave{}validate\_file\_exists\textasciigrave{}.}
-\FunctionTok{validate\_exists()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-
-    \KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}e} \StringTok{"}\VariableTok{$value}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is not an existing path"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"}
-    \KeywordTok{fi}
-\KeywordTok{\}}
-
-\CommentTok{\# Usage:}
-\CommentTok{\#   ensure\_variable VARIABLE\_NAME COMPUTATION\_FUNCTION VALIDATION\_FUNCTION}
-\CommentTok{\#}
-\CommentTok{\# Description:}
-\CommentTok{\#   Ensures that a readonly global variable named VARIABLE\_NAME is declared,}
-\CommentTok{\#   that it\textquotesingle{}s value is initialized using COMPUTATION\_FUNCTION and validated}
-\CommentTok{\#   using VALIDATION\_FUNCTION.}
-\CommentTok{\#}
-\CommentTok{\#   The value is computed, validated and set to a readonly global variable}
-\CommentTok{\#   during the first call to this function. Nothing more is done on}
-\CommentTok{\#   subsequent calls if the variable is already set.}
-\CommentTok{\#}
-\CommentTok{\#   If this function returns, the variable VARIABLE\_NAME should be safe to}
-\CommentTok{\#   use without any further validation. The variable can be accessed from}
-\CommentTok{\#   it\textquotesingle{}s name, or using an expression like \textasciigrave{}$\{!VARIABLE\_NAME\}\textasciigrave{}.}
-\CommentTok{\#}
-\CommentTok{\# Arguments:}
-\CommentTok{\#   VARIABLE\_NAME}
-\CommentTok{\#       The name of the variable to ensure.}
-\CommentTok{\#}
-\CommentTok{\#   COMPUTATION\_FUNCTION}
-\CommentTok{\#       A function that takes 0 arguments, writes the computed value to}
-\CommentTok{\#       standard output and returns 0 if the computation is successful.}
-\CommentTok{\#}
-\CommentTok{\#   VALIDATION\_FUNCTION}
-\CommentTok{\#       A function that takes the computed value and returns 0 if the value}
-\CommentTok{\#       is valid.}
-\CommentTok{\#}
-\CommentTok{\# Exit status code:}
-\CommentTok{\#   0  when no error is encountered. If any error is encountered during}
-\CommentTok{\#      declaration, computation, validation or assignation, the current shell}
-\CommentTok{\#      will be exited by a call to \textasciigrave{}fatal\_error\textasciigrave{} so the function will never}
-\CommentTok{\#      return.}
-\FunctionTok{ensure\_variable()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{variable\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{computation\_function=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{validation\_function=}\StringTok{"}\VariableTok{$3}\StringTok{"}
-
-    \KeywordTok{if [[}\NormalTok{ {-}v }\StringTok{"}\VariableTok{$variable\_name}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{return}\NormalTok{ 0}
-    \KeywordTok{fi}
-
-    \BuiltInTok{local} \VariableTok{computed\_value} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"cannot declare local variable \textquotesingle{}computed\_value\textquotesingle{}"}
-
-    \VariableTok{computed\_value=}\StringTok{"}\VariableTok{$(}\StringTok{"}\VariableTok{$computation\_function}\StringTok{"}\VariableTok{)}\StringTok{"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"cannot compute value of \textquotesingle{}}\VariableTok{$variable\_name}\StringTok{\textquotesingle{} with \textquotesingle{}}\VariableTok{$computation\_function}\StringTok{\textquotesingle{}"}
-
-    \StringTok{"}\VariableTok{$validation\_function}\StringTok{"} \StringTok{"}\VariableTok{$computed\_value}\StringTok{"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"cannot validate value of \textquotesingle{}}\VariableTok{$variable\_name}\StringTok{\textquotesingle{} with \textquotesingle{}}\VariableTok{$validation\_function}\StringTok{\textquotesingle{}"}
-
-    \BuiltInTok{declare}\NormalTok{ {-}g {-}r }\StringTok{"}\VariableTok{$variable\_name}\StringTok{"}\VariableTok{=}\StringTok{"}\VariableTok{$computed\_value}\StringTok{"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"cannot initialize global readonly variable \textquotesingle{}}\VariableTok{$variable\_name}\StringTok{\textquotesingle{} with value \textquotesingle{}}\VariableTok{$computed\_value}\StringTok{\textquotesingle{}"}
-
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{log\_variable\_name=}\StringTok{"}\VariableTok{$(}\BuiltInTok{echo} \StringTok{"}\VariableTok{$\{variable\_name\^{}\}}\StringTok{"} \KeywordTok{|} \FunctionTok{tr} \StringTok{\textquotesingle{}\_\textquotesingle{}} \StringTok{\textquotesingle{} \textquotesingle{}}\VariableTok{)}\StringTok{"}
-    \ExtensionTok{echo\_err} \StringTok{"}\VariableTok{$log\_variable\_name}\StringTok{: }\VariableTok{$\{!variable\_name\}}\StringTok{"}
-
-    \BuiltInTok{return}\NormalTok{ 0}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $remote\_address is declared, initialized and valid.}
-\FunctionTok{ensure\_remote\_address()} \KeywordTok{\{}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{remote\_address}
-
-    \FunctionTok{get\_remote\_address()} \KeywordTok{\{}
-        \FunctionTok{mount}\NormalTok{ {-}t nfs }\KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}d}\StringTok{\textquotesingle{}:\textquotesingle{}}\NormalTok{ {-}f1 }\KeywordTok{|} \FunctionTok{head}\NormalTok{ {-}1 }\KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve remote server address."}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_remote\_address()} \KeywordTok{\{}
-        \ExtensionTok{validate\_not\_empty} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"no valid remote server address has not been found."}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"remote\_address"} \StringTok{"get\_remote\_address"} \StringTok{"validate\_remote\_address"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $net\_interface is declared, initialized and valid.}
-\FunctionTok{ensure\_net\_interface()} \KeywordTok{\{}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{net\_interface}
-
-    \ExtensionTok{ensure\_remote\_address}
-
-    \FunctionTok{get\_net\_interface()} \KeywordTok{\{}
-        \ExtensionTok{ip}\NormalTok{ route get }\StringTok{"}\VariableTok{$remote\_address}\StringTok{"} \KeywordTok{|} \FunctionTok{head}\NormalTok{ {-}1 }\KeywordTok{|} \FunctionTok{sed}\NormalTok{ {-}n }\StringTok{\textquotesingle{}s/.* dev \textbackslash{}([\^{} ]*\textbackslash{}).*/\textbackslash{}1/p\textquotesingle{}} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve network interface with route to \textquotesingle{}}\VariableTok{$remote\_address}\StringTok{\textquotesingle{}."}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_net\_interface()} \KeywordTok{\{}
-        \ExtensionTok{validate\_not\_empty} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"no valid network interface has been found."}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"net\_interface"} \StringTok{"get\_net\_interface"} \StringTok{"validate\_net\_interface"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $mac\_address is declared, initialized and valid.}
-\FunctionTok{ensure\_mac\_address()} \KeywordTok{\{}
-    \CommentTok{\# shellcheck disable=SC2034 \# the variable is declared for parent scripts that source this one}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{mac\_address}
-
-    \ExtensionTok{ensure\_net\_interface}
-
-    \FunctionTok{get\_mac\_address()} \KeywordTok{\{}
-        \FunctionTok{tr} \StringTok{"[:upper:]:"} \StringTok{"[:lower:]{-}"} \OperatorTok{\textless{}} \StringTok{"/sys/class/net/}\VariableTok{$net\_interface}\StringTok{/address"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"failed to retrieve and convert mac address of network interface \textquotesingle{}}\VariableTok{$net\_interface}\StringTok{\textquotesingle{}"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_mac\_address()} \KeywordTok{\{}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{regex\_pattern=}\StringTok{\textquotesingle{}\^{}([0{-}9a{-}f]\{2\}{-})\{5\}[0{-}9a{-}f]\{2\}$\textquotesingle{}}
-
-        \ExtensionTok{validate\_with\_regex} \KeywordTok{\textbackslash{}}
-            \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$regex\_pattern}\StringTok{"} \KeywordTok{\textbackslash{}}
-            \StringTok{"mac address does not match required format."} \KeywordTok{\textbackslash{}}
-            \StringTok{"is not a mac address formatted as lower{-}case hexadecimal bytes separated by hyphens."}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"mac\_address"} \StringTok{"get\_mac\_address"} \StringTok{"validate\_mac\_address"}
-\KeywordTok{\}}
-
-\BuiltInTok{readonly} \VariableTok{mounting\_point\_remote=}\StringTok{"/bootiful/shared"}
-\BuiltInTok{readonly} \VariableTok{deployment\_disk=}\StringTok{"/dev/sda"}
-
-\CommentTok{\# Ensures the kernel is informed of the latest partition table changes}
-\FunctionTok{refresh\_partition\_table()} \KeywordTok{\{}
-    \ExtensionTok{echo\_err} \StringTok{"Refreshing partition table on disk \textquotesingle{}}\VariableTok{$deployment\_disk}\StringTok{\textquotesingle{}..."}
-    \ExtensionTok{partprobe} \StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}
-\KeywordTok{\}}
-
-\CommentTok{\# Checks if something is currently mounted on the given mount point}
-\FunctionTok{is\_mounted()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_point=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-
-    \ExtensionTok{refresh\_partition\_table}
-    \ExtensionTok{findmnt}\NormalTok{ {-}{-}mountpoint }\StringTok{"}\VariableTok{$mount\_point}\StringTok{"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures that the given directory exists or create it. If the directory does}
-\CommentTok{\# not exist and cannot be created, \textasciigrave{}fatal\_error\textasciigrave{} is called.}
-\FunctionTok{ensure\_directory()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{directory=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-
-    \ExtensionTok{echo\_err} \StringTok{"Ensuring directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} exists..."}
-    \KeywordTok{if [[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$directory}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{echo\_err} \StringTok{"Directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} already exists."}
-        \BuiltInTok{return}\NormalTok{ 0}
-    \KeywordTok{fi}
-
-    \ExtensionTok{echo\_err} \StringTok{"Directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} does not exist. Attempting to create it..."}
-    \FunctionTok{mkdir}\NormalTok{ {-}p }\StringTok{"}\VariableTok{$directory}\StringTok{"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"Cannot create directory }\VariableTok{$directory}\StringTok{."}
-    \ExtensionTok{echo\_err} \StringTok{"Directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} created."}
-\KeywordTok{\}}
-
-\CommentTok{\# Mounts a device to a mount point if it\textquotesingle{}s not already mounted}
-\FunctionTok{ensure\_mounted()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{source\_device=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_point=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_fstype=}\StringTok{"}\VariableTok{$3}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_options=}\StringTok{"}\VariableTok{$4}\StringTok{"}
-
-    \ExtensionTok{echo\_err} \StringTok{"Ensuring device \textquotesingle{}}\VariableTok{$source\_device}\StringTok{\textquotesingle{} is mounted on \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{}..."}
-
-    \KeywordTok{if} \ExtensionTok{is\_mounted} \StringTok{"}\VariableTok{$mount\_point}\StringTok{"}\KeywordTok{;} \KeywordTok{then}
-        \ExtensionTok{echo\_err} \StringTok{"Mount point \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{} is already mounted."}
-        \BuiltInTok{return}\NormalTok{ 0}
-    \KeywordTok{fi}
-
-    \ExtensionTok{echo\_err} \StringTok{"Nothing is mounted on mount point \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{}."}
-
-    \ExtensionTok{ensure\_directory} \StringTok{"}\VariableTok{$mount\_point}\StringTok{"}
-
-    \ExtensionTok{echo\_err} \StringTok{"Attempting to mount \textquotesingle{}}\VariableTok{$source\_device}\StringTok{\textquotesingle{} on \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{} as \textquotesingle{}}\VariableTok{$mount\_fstype}\StringTok{\textquotesingle{} with options \textquotesingle{}}\VariableTok{$mount\_options}\StringTok{\textquotesingle{}."}
-
-    \FunctionTok{mount}\NormalTok{ {-}t }\StringTok{"}\VariableTok{$mount\_fstype}\StringTok{"}\NormalTok{ {-}o }\StringTok{"}\VariableTok{$mount\_options}\StringTok{"} \StringTok{"}\VariableTok{$source\_device}\StringTok{"} \StringTok{"}\VariableTok{$mount\_point}\StringTok{"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"Failed to mount device \textquotesingle{}}\VariableTok{$source\_device}\StringTok{\textquotesingle{} on \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{}"}\NormalTok{.}
-
-    \ExtensionTok{echo\_err} \StringTok{"Mount successful."}
-\KeywordTok{\}}
-
-\CommentTok{\# Mounts the remote shared data if it\textquotesingle{}s not already mounted}
-\FunctionTok{ensure\_remote\_shared\_mounted()} \KeywordTok{\{}
-    \ExtensionTok{ensure\_remote\_address}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_nfs\_share=}\StringTok{"}\VariableTok{$remote\_address}\StringTok{:/nfsshared"}
-    \ExtensionTok{ensure\_mounted} \StringTok{"}\VariableTok{$remote\_nfs\_share}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_remote}\StringTok{"} \StringTok{"nfs"} \StringTok{"nolock"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $total\_disk\_size is declared, initialized and valid.}
-\FunctionTok{ensure\_total\_disk\_size()} \KeywordTok{\{}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{total\_disk\_size}
-
-    \FunctionTok{get\_total\_disk\_size()} \KeywordTok{\{}
-        \ExtensionTok{parted}\NormalTok{ {-}{-}script }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ unit B print }\KeywordTok{|}
-            \FunctionTok{sed}\NormalTok{ {-}En }\StringTok{\textquotesingle{}s\#\^{}Disk\textbackslash{}s*\textquotesingle{}"}\VariableTok{$deployment\_disk}\StringTok{"\textquotesingle{}:\textbackslash{}s*([0{-}9]+)B$\#\textbackslash{}1\#p\textquotesingle{}} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve total disk size"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_total\_disk\_size()} \KeywordTok{\{}
-        \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"retrieved disk size format is invalid."}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"total\_disk\_size"} \StringTok{"get\_total\_disk\_size"} \StringTok{"validate\_total\_disk\_size"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $sector\_sizes is declared, initialized and valid}
-\FunctionTok{ensure\_sector\_sizes()} \KeywordTok{\{}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{sector\_sizes}
-
-    \FunctionTok{get\_sector\_sizes()} \KeywordTok{\{}
-        \ExtensionTok{parted}\NormalTok{ {-}{-}script }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ print }\KeywordTok{|}
-            \FunctionTok{sed}\NormalTok{ {-}En }\StringTok{\textquotesingle{}s\#\^{}Sector size \textbackslash{}(logical/physical\textbackslash{}):\textbackslash{}s*([0{-}9]+)B/([0{-}9]+)B$\#\textbackslash{}1\textbackslash{}t\textbackslash{}2\#p\textquotesingle{}} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve sector size"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_sector\_sizes()} \KeywordTok{\{}
-        \ExtensionTok{validate\_with\_regex} \KeywordTok{\textbackslash{}}
-            \StringTok{"}\VariableTok{$1}\StringTok{"} \KeywordTok{\textbackslash{}}
-            \StringTok{\textquotesingle{}\^{}[0{-}9]+\textbackslash{}s+[0{-}9]+$\textquotesingle{}} \KeywordTok{\textbackslash{}}
-            \StringTok{\textquotesingle{}retrieved sector sizes are invalid\textquotesingle{}} \KeywordTok{\textbackslash{}}
-            \StringTok{\textquotesingle{}does not contain two unsigned integers separated by spaces\textquotesingle{}}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"sector\_sizes"} \StringTok{"get\_sector\_sizes"} \StringTok{"validate\_sector\_sizes"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $logical\_sector\_size is declared, initialized and valid}
-\FunctionTok{ensure\_logical\_sector\_size()} \KeywordTok{\{}
-    \CommentTok{\# shellcheck disable=SC2034 \# the variable is declared for parent scripts that source this one}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{logical\_sector\_size}
-
-    \ExtensionTok{ensure\_sector\_sizes}
-
-    \FunctionTok{extract\_logical\_sector\_size()} \KeywordTok{\{}
-        \BuiltInTok{echo} \StringTok{"}\VariableTok{$sector\_sizes}\StringTok{"} \KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}f 1 }\KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot extract logical sector size from sector sizes"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_logical\_sector\_size()} \KeywordTok{\{}
-        \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"retrieved logical sector size is invalid"}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"logical\_sector\_size"} \StringTok{"extract\_logical\_sector\_size"} \StringTok{"validate\_logical\_sector\_size"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $physical\_sector\_size is declared, initialized and valid}
-\FunctionTok{ensure\_physical\_sector\_size()} \KeywordTok{\{}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{physical\_sector\_size}
-
-    \ExtensionTok{ensure\_sector\_sizes}
-
-    \FunctionTok{extract\_physical\_sector\_size()} \KeywordTok{\{}
-        \BuiltInTok{echo} \StringTok{"}\VariableTok{$sector\_sizes}\StringTok{"} \KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}f 2 }\KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot extract physical sector size from sector sizes"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_physical\_sector\_size()} \KeywordTok{\{}
-        \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"retrieved physical sector size is invalid"}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"physical\_sector\_size"} \StringTok{"extract\_physical\_sector\_size"} \StringTok{"validate\_physical\_sector\_size"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $image\_cache\_partition\_size is declared, initialized and valid}
-\FunctionTok{ensure\_image\_cache\_partition\_size()} \KeywordTok{\{}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{image\_cache\_partition\_size}
-
-    \ExtensionTok{ensure\_total\_disk\_size}
-    \ExtensionTok{ensure\_physical\_sector\_size}
-
-    \FunctionTok{calculate\_image\_cache\_partition\_size()} \KeywordTok{\{}
-        \BuiltInTok{echo} \StringTok{"}\VariableTok{$((}\NormalTok{(20 * total\_disk\_size / 100) / physical\_sector\_size * physical\_sector\_size}\VariableTok{))}\StringTok{"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot calculate image partition size"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_image\_cache\_partition\_size()} \KeywordTok{\{}
-        \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"calculated image cache partition size is invalid"}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"image\_cache\_partition\_size"} \KeywordTok{\textbackslash{}}
-        \StringTok{"calculate\_image\_cache\_partition\_size"} \KeywordTok{\textbackslash{}}
-        \StringTok{"validate\_image\_cache\_partition\_size"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $image\_cache\_partition\_start is declared, initialized and valid}
-\FunctionTok{ensure\_image\_cache\_partition\_start()} \KeywordTok{\{}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{image\_cache\_partition\_start}
-
-    \ExtensionTok{ensure\_total\_disk\_size}
-    \ExtensionTok{ensure\_physical\_sector\_size}
-    \ExtensionTok{ensure\_image\_cache\_partition\_size}
-
-    \FunctionTok{calculate\_image\_cache\_partition\_start()} \KeywordTok{\{}
-        \BuiltInTok{echo} \StringTok{"}\VariableTok{$((}\NormalTok{(total\_disk\_size {-} image\_cache\_partition\_size) / physical\_sector\_size * physical\_sector\_size {-} 4096}\VariableTok{))}\StringTok{"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot calculate image cache partition start"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_image\_cache\_partition\_start()} \KeywordTok{\{}
-        \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"calculated image cache partition start is invalid"}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"image\_cache\_partition\_start"} \KeywordTok{\textbackslash{}}
-        \StringTok{"calculate\_image\_cache\_partition\_start"} \KeywordTok{\textbackslash{}}
-        \StringTok{"validate\_image\_cache\_partition\_start"}
-\KeywordTok{\}}
-
-\CommentTok{\# Ensures $image\_cache\_partition\_end is declared, initialized and valid}
-\FunctionTok{ensure\_image\_cache\_partition\_end()} \KeywordTok{\{}
-    \CommentTok{\# shellcheck disable=SC2034 \# the variable is declared for parent scripts that source this one}
-    \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{image\_cache\_partition\_end}
-
-    \ExtensionTok{ensure\_image\_cache\_partition\_size}
-    \ExtensionTok{ensure\_image\_cache\_partition\_start}
-
-    \FunctionTok{calculate\_image\_cache\_partition\_end()} \KeywordTok{\{}
-        \BuiltInTok{echo} \StringTok{"}\VariableTok{$((}\NormalTok{image\_cache\_partition\_start + image\_cache\_partition\_size}\VariableTok{))}\StringTok{"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"cannot calculate image cache partition end"}
-    \KeywordTok{\}}
-
-    \FunctionTok{validate\_image\_cache\_partition\_end()} \KeywordTok{\{}
-        \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"calculated image cache partition start is invalid"}
-    \KeywordTok{\}}
-
-    \ExtensionTok{ensure\_variable} \StringTok{"image\_cache\_partition\_end"} \KeywordTok{\textbackslash{}}
-        \StringTok{"calculate\_image\_cache\_partition\_end"} \KeywordTok{\textbackslash{}}
-        \StringTok{"validate\_image\_cache\_partition\_end"}
-\KeywordTok{\}}
-
-\FunctionTok{parse\_last\_partition\_end()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{gawk\_input\_data=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{input\_size\_unit=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{start\_parse\_token=}\StringTok{"}\VariableTok{$3}\StringTok{"}
-
-    \BuiltInTok{local} \VariableTok{gawk\_program}
-    \BuiltInTok{read}\NormalTok{ {-}r {-}d }\StringTok{\textquotesingle{}\textquotesingle{}} \VariableTok{gawk\_program} \OperatorTok{\textless{}\textless{} \textquotesingle{}EOF\textquotesingle{}}
-\NormalTok{        $0 \textasciitilde{} start\_parse\_regex\_pattern \{}
-\NormalTok{            parsing=1;}
-\NormalTok{            max\_part\_end=0;}
-\NormalTok{            next;}
-\NormalTok{        \}}
-\NormalTok{        parsing \&\& $3 \textasciitilde{} disk\_end\_regex\_pattern \{}
-\NormalTok{            part\_end=substr($3, 1, length($3){-}length(size\_unit)) + 0;}
-\NormalTok{            if(part\_end\textgreater{}max\_part\_end) \{}
-\NormalTok{                max\_part\_end=part\_end;}
-\NormalTok{            \}}
-\NormalTok{        \}}
-\NormalTok{        END \{}
-\NormalTok{            printf "\%d", max\_part\_end;}
-\NormalTok{        \}}
-\OperatorTok{EOF}
-
-    \BuiltInTok{echo} \StringTok{"}\VariableTok{$gawk\_input\_data}\StringTok{"} \KeywordTok{|} \FunctionTok{gawk} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}v}\NormalTok{ start\_parse\_regex\_pattern=}\StringTok{"\^{}}\VariableTok{$start\_parse\_token}\StringTok{"} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}v}\NormalTok{ disk\_end\_regex\_pattern=}\StringTok{"\^{}[0{-}9]+}\VariableTok{$input\_size\_unit}\StringTok{$"} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}v}\NormalTok{ size\_unit=}\StringTok{"}\VariableTok{$input\_size\_unit}\StringTok{"} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}M} \StringTok{"}\VariableTok{$gawk\_program}\StringTok{"} \KeywordTok{\textbackslash{}}
-        \KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"cannot extract image size"}
-\KeywordTok{\}}
-
-\CommentTok{\# Print the end offset of the last partition of a parted output}
-\FunctionTok{parse\_parted\_last\_partition\_end()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{parted\_output=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{parted\_unit=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-
-    \ExtensionTok{parse\_last\_partition\_end} \StringTok{"}\VariableTok{$parted\_output}\StringTok{"} \StringTok{"}\VariableTok{$parted\_unit}\StringTok{"} \StringTok{\textquotesingle{}Number\textquotesingle{}}
-\KeywordTok{\}}
-
-\FunctionTok{parse\_parted\_last\_partition\_end\_sector()} \KeywordTok{\{}
-    \ExtensionTok{parse\_parted\_last\_partition\_end} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"s"}
-\KeywordTok{\}}
-
-\FunctionTok{parse\_fdisk\_last\_partition\_end\_sector()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{fdisk\_output=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-
-    \ExtensionTok{parse\_last\_partition\_end} \StringTok{"}\VariableTok{$fdisk\_output}\StringTok{"} \StringTok{\textquotesingle{}\textquotesingle{}} \StringTok{\textquotesingle{}Device\textquotesingle{}}
-\KeywordTok{\}}
-
-\FunctionTok{create\_hidden\_partition()} \KeywordTok{\{}
-    \BuiltInTok{echo} \StringTok{"Erasing MBR..."}
-    \FunctionTok{dd}\NormalTok{ if=/dev/zero bs=512 count=1 of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}
-    \BuiltInTok{echo} \StringTok{"MBR erased."}
-
-    \BuiltInTok{echo} \StringTok{"Creating new partition table with hidden partition..."}
-    \ExtensionTok{ensure\_image\_cache\_partition\_start}
-    \ExtensionTok{ensure\_image\_cache\_partition\_end}
-    \ExtensionTok{parted}\NormalTok{ {-}s {-}a opt }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ mklabel msdos mkpart primary ext2 }\StringTok{"}\VariableTok{$\{image\_cache\_partition\_start\}}\StringTok{B"} \StringTok{"}\VariableTok{$\{image\_cache\_partition\_end\}}\StringTok{B"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"parted exited with error code }\VariableTok{$?}\StringTok{"}
-    \BuiltInTok{echo} \StringTok{"New partition table with hidden partition created."}
-
-    \ExtensionTok{refresh\_partition\_table}
-
-    \BuiltInTok{echo} \StringTok{"Creating file system in hidden partition..."}
-    \ExtensionTok{mke2fs}\NormalTok{ {-}t ext2 }\StringTok{"}\VariableTok{$\{deployment\_disk\}}\StringTok{1"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"mke2fs exited with error code }\VariableTok{$?}\StringTok{"}
-    \BuiltInTok{echo} \StringTok{"File system in hidden partition created."}
-
-    \ExtensionTok{refresh\_partition\_table}
-\KeywordTok{\}}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerbootiful-deploy-script-de-duxe9ploiement-dimages}{%
-\section{\texorpdfstring{\texttt{deployer/bootiful-deploy}: script de
-déploiement
-d'images}{deployer/bootiful-deploy: script de déploiement d'images}}\label{deployerbootiful-deploy-script-de-duxe9ploiement-dimages}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#!/bin/bash}
-
-\BuiltInTok{shopt}\NormalTok{ {-}s nullglob}
-
-\BuiltInTok{readonly} \VariableTok{SCRIPT\_NAME=}\StringTok{"}\VariableTok{$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}
-\BuiltInTok{readonly} \VariableTok{SCRIPT\_DIR=}\StringTok{"}\VariableTok{$(}\FunctionTok{readlink}\NormalTok{ {-}m }\StringTok{"}\VariableTok{$(}\FunctionTok{dirname} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}\VariableTok{)}\StringTok{"}
-
-\FunctionTok{usage()} \KeywordTok{\{}
-    \FunctionTok{cat} \OperatorTok{\textless{}\textless{} EOF}
-\NormalTok{Usage:}
-  \VariableTok{$SCRIPT\_DIR}\NormalTok{ [{-}h | {-}{-}help]}
-
-\NormalTok{Description:}
-\NormalTok{  Deploys an operating system image on the disk.}
-
-\NormalTok{  The image is retrieved from the NFS server that already provides the root file}
-\NormalTok{  system. The NFS shared directory /nfsshared is mounted on /bootiful/shared and}
-\NormalTok{  contains multiple images that can be deployed.}
-
-\NormalTok{  The available images from the server are scanned from /bootiful/shared/images}
-\NormalTok{  and displayed in an interactive menu that allows to choose which particular}
-\NormalTok{  image will be deployed.}
-
-\NormalTok{  All the data written in the standard input and standard error during the}
-\NormalTok{  deployment is also written in a log file in /bootiful/shared/logs.}
-
-\NormalTok{  If there is enough disk space available, the image is cached in a hidden}
-\NormalTok{  partition to avoid downloading it again over the network during a future}
-\NormalTok{  deployment. This hidden partition takes 20\% of the disk.}
-
-\NormalTok{  If the image to deploy overlaps the image cache partition (i.e. the image}
-\NormalTok{  takes more than 80\% of the disk size), a warning message is shown and an}
-\NormalTok{  interactive menu allows to choose whether to abort or continue the deployment}
-\NormalTok{  without using the cache.}
-
-\NormalTok{Options:}
-\NormalTok{  {-}h, {-}{-}help  Shows this help}
-
-\NormalTok{Exit status:}
-\NormalTok{  0  if an image has been deployed successfully}
-\NormalTok{  1  if some error has occured during deployment}
-
-\NormalTok{Example:}
-  \VariableTok{$SCRIPT\_NAME}
-\OperatorTok{EOF}
-\KeywordTok{\}}
-
-\KeywordTok{if [[} \StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}h"}\NormalTok{ || }\StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}{-}help"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \ExtensionTok{usage}
-    \BuiltInTok{exit}\NormalTok{ 0}
-\KeywordTok{fi}
-
-\CommentTok{\# Loads declarations from the \textquotesingle{}bootiful{-}common\textquotesingle{} script, which is a "library"}
-\CommentTok{\# of functions and constants shared by multiple bootiful{-}* scripts.}
-\BuiltInTok{readonly} \VariableTok{bootiful\_common\_script\_file=}\StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"}
-\KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"Fatal error: cannot find required script file \textquotesingle{}}\VariableTok{$bootiful\_common\_script\_file}\StringTok{\textquotesingle{}."}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-\CommentTok{\# shellcheck source=./bootiful{-}common}
-\BuiltInTok{.} \StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"}
-
-\ExtensionTok{start\_step\_batch} \StringTok{"remote shared data mount initialization"}
-\VariableTok{start\_timestamp=}\StringTok{"}\VariableTok{$\{step\_timestamps[0]\}}\StringTok{"}
-
-\ExtensionTok{ensure\_remote\_shared\_mounted}
-
-\ExtensionTok{start\_step\_batch} \StringTok{"log file initialization"}
-\BuiltInTok{readonly} \VariableTok{log\_dir=}\StringTok{"}\VariableTok{$mounting\_point\_remote}\StringTok{/log"}
-
-\ExtensionTok{ensure\_mac\_address}
-\ExtensionTok{ensure\_directory} \StringTok{"}\VariableTok{$log\_dir}\StringTok{"}
-\BuiltInTok{readonly} \VariableTok{logfile\_date=$(}\FunctionTok{date}\NormalTok{ {-}{-}date }\StringTok{"}\VariableTok{$start\_timestamp}\StringTok{"}\NormalTok{ {-}{-}universal +\%Y{-}\%m{-}\%d\_\%H{-}\%M{-}\%S}\VariableTok{)}
-\BuiltInTok{readonly} \VariableTok{log\_file\_prefix=}\StringTok{"}\VariableTok{$log\_dir}\StringTok{/}\VariableTok{$\{mac\_address\}}\StringTok{\_}\VariableTok{$logfile\_date}\StringTok{"}
-
-\BuiltInTok{readonly} \VariableTok{log\_file=}\StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{.log"}
-\BuiltInTok{echo} \StringTok{"Starting logging stdout and stderr to }\VariableTok{$log\_file}\StringTok{..."}
-
-\KeywordTok{\{}
-    \ExtensionTok{start\_step\_batch} \StringTok{"hardware log files creation"}
-
-    \FunctionTok{log\_command\_to\_file()} \KeywordTok{\{}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{prefix=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{extension=}\StringTok{"}\VariableTok{$2}\StringTok{"}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{command=}\StringTok{"}\VariableTok{$3}\StringTok{"}
-
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{hardware\_log\_file=}\StringTok{"}\VariableTok{$prefix}\StringTok{.}\VariableTok{$extension}\StringTok{"}
-
-        \BuiltInTok{echo} \StringTok{"Writing }\VariableTok{$extension}\StringTok{ log file }\VariableTok{$hardware\_log\_file}\StringTok{..."}
-
-        \CommentTok{\# shellcheck disable=SC2086 \# we need to expand args}
-        \FunctionTok{bash}\NormalTok{ {-}c }\StringTok{"}\VariableTok{$command}\StringTok{"} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$hardware\_log\_file}\StringTok{"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"Cannot write }\VariableTok{$extension}\StringTok{ log file }\VariableTok{$hardware\_log\_file}\StringTok{."}
-
-        \BuiltInTok{echo} \StringTok{"Wrote }\VariableTok{$extension}\StringTok{ log file }\VariableTok{$hardware\_log\_file}\StringTok{."}
-    \KeywordTok{\}}
-
-    \ExtensionTok{log\_command\_to\_file} \StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{"}\NormalTok{ cpuinfo }\StringTok{\textquotesingle{}cat /proc/cpuinfo\textquotesingle{}}
-    \ExtensionTok{log\_command\_to\_file} \StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{"}\NormalTok{ meminfo }\StringTok{\textquotesingle{}cat /proc/meminfo\textquotesingle{}}
-    \ExtensionTok{log\_command\_to\_file} \StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{"}\NormalTok{ parted }\StringTok{\textquotesingle{}parted {-}{-}script {-}{-}list\textquotesingle{}}
-
-    \ExtensionTok{start\_step\_batch} \StringTok{"remote images search"}
-
-    \VariableTok{remote\_images\_dir=}\StringTok{"}\VariableTok{$mounting\_point\_remote}\StringTok{/images"}
-
-    \BuiltInTok{echo} \StringTok{"Finding remote images..."}
-    \BuiltInTok{declare} \VariableTok{count=}\NormalTok{0}
-    \BuiltInTok{declare}\NormalTok{ {-}A }\VariableTok{images}
-    \BuiltInTok{declare} \VariableTok{found\_image\_name}
-    \KeywordTok{for} \ExtensionTok{image\_folder}\NormalTok{ in }\StringTok{"}\VariableTok{$remote\_images\_dir}\StringTok{"}\NormalTok{/*}\KeywordTok{;} \KeywordTok{do}
-        \VariableTok{found\_image\_name=$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$image\_folder}\StringTok{"}\VariableTok{)}
-        \BuiltInTok{echo} \StringTok{"Image \textquotesingle{}}\VariableTok{$found\_image\_name}\StringTok{\textquotesingle{} found"}
-        \VariableTok{options=(}\StringTok{"}\VariableTok{$\{options[]\}}\StringTok{"} \StringTok{"}\VariableTok{$((}\NormalTok{++count}\VariableTok{))}\StringTok{"} \StringTok{"}\VariableTok{$found\_image\_name}\StringTok{"}\VariableTok{)}
-        \VariableTok{images[$count]=}\StringTok{"}\VariableTok{$found\_image\_name}\StringTok{"}
-    \KeywordTok{done}
-    \BuiltInTok{echo} \StringTok{"}\VariableTok{$count}\StringTok{ remote images found."}
-
-    \KeywordTok{if [[} \VariableTok{$count} \OtherTok{{-}eq}\NormalTok{ 0}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{fatal\_error} \StringTok{"No image found in remote images directory }\VariableTok{$remote\_images\_dir}\StringTok{"}
-    \KeywordTok{fi}
-
-    \ExtensionTok{start\_step\_interactive} \StringTok{"image selection"}
-
-    \BuiltInTok{declare} \VariableTok{tty}
-    \VariableTok{tty=$(}\ExtensionTok{tty}\VariableTok{)}
-    \BuiltInTok{readonly} \VariableTok{tty}
-
-    \BuiltInTok{declare} \VariableTok{choice}
-    \VariableTok{choice=$(}\ExtensionTok{dialog} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}{-}clear} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}{-}title} \StringTok{"Image selection"} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}{-}menu} \StringTok{"Select an image to deploy"} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{0}\NormalTok{ 0 0 }\KeywordTok{\textbackslash{}}
-        \StringTok{"}\VariableTok{$\{options[]\}}\StringTok{"} \KeywordTok{\textbackslash{}}
-        \OperatorTok{2\textgreater{}\&1} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$tty}\StringTok{"}\VariableTok{)}
-    \BuiltInTok{readonly} \VariableTok{choice}
-
-    \ExtensionTok{validate\_not\_empty} \StringTok{"}\VariableTok{$choice}\StringTok{"} \StringTok{"No image has been chosen"}
-
-    \BuiltInTok{readonly} \VariableTok{image\_name=$\{images[$choice]\}}
-
-    \BuiltInTok{echo} \StringTok{"Chosen image is }\VariableTok{$image\_name}\StringTok{"}
-
-    \BuiltInTok{readonly} \VariableTok{remote\_image\_dir=}\StringTok{"}\VariableTok{$remote\_images\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{"}
-    \BuiltInTok{readonly} \VariableTok{remote\_image\_gzip\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"}
-    \BuiltInTok{readonly} \VariableTok{remote\_image\_clonezilla\_id\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/Info{-}img{-}id.txt"}
-
-    \BuiltInTok{readonly} \VariableTok{IMAGE\_TYPE\_RAW=}\StringTok{"raw"}
-    \BuiltInTok{readonly} \VariableTok{IMAGE\_TYPE\_CLONEZILLA=}\StringTok{"clonezilla"}
-
-    \KeywordTok{if [[} \OtherTok{{-}f} \StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{readonly} \VariableTok{image\_type=}\StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}
-        \BuiltInTok{readonly} \VariableTok{remote\_image\_md5\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"}
-        \BuiltInTok{readonly} \VariableTok{remote\_image\_size\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.partition"}
-        \BuiltInTok{readonly} \VariableTok{parse\_end\_sector\_function=}\NormalTok{parse\_fdisk\_last\_partition\_end\_sector}
-    \KeywordTok{elif [[} \OtherTok{{-}f} \StringTok{"}\VariableTok{$remote\_image\_clonezilla\_id\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{readonly} \VariableTok{image\_type=}\StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}
-        \BuiltInTok{readonly} \VariableTok{remote\_image\_size\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/sda{-}pt.parted"}
-        \BuiltInTok{readonly} \VariableTok{parse\_end\_sector\_function=}\NormalTok{parse\_parted\_last\_partition\_end\_sector}
-    \KeywordTok{else}
-        \ExtensionTok{fatal\_error} \StringTok{"Cannot find type of image \textquotesingle{}}\VariableTok{$image\_name}\StringTok{\textquotesingle{} in \textquotesingle{}}\VariableTok{$remote\_image\_dir}\StringTok{\textquotesingle{}"}
-    \KeywordTok{fi}
-
-    \ExtensionTok{start\_step\_batch} \StringTok{"image size verification"}
-
-    \ExtensionTok{validate\_file\_exists} \KeywordTok{\textbackslash{}}
-        \StringTok{"}\VariableTok{$remote\_image\_size\_file}\StringTok{"} \KeywordTok{\textbackslash{}}
-        \StringTok{"cannot retrieve size of image because parted/fdisk dump file does not exist."}
-
-    \BuiltInTok{readonly} \VariableTok{remote\_image\_size\_file\_content=}\StringTok{"}\OperatorTok{$(\textless{}} \StringTok{"}\VariableTok{$remote\_image\_size\_file}\StringTok{"}\OperatorTok{)}\StringTok{"} \KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"Cannot read parted/fdisk dump file \textquotesingle{}}\VariableTok{$remote\_image\_size\_file}\StringTok{\textquotesingle{}"}
-
-    \BuiltInTok{declare} \VariableTok{image\_end\_sector}
-    \VariableTok{image\_end\_sector=$(}\StringTok{"}\VariableTok{$parse\_end\_sector\_function}\StringTok{"} \StringTok{"}\VariableTok{$remote\_image\_size\_file\_content}\StringTok{"}\VariableTok{)}
-    \BuiltInTok{readonly} \VariableTok{image\_end\_sector}
-    \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$image\_end\_sector}\StringTok{"} \StringTok{"Invalid image end sector"}
-
-    \ExtensionTok{ensure\_logical\_sector\_size}
-    \KeywordTok{((}\NormalTok{image\_size = image\_end\_sector * logical\_sector\_size}\KeywordTok{))}
-    \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$image\_size}\StringTok{"} \StringTok{"Retrieved image size is invalid"}
-
-    \BuiltInTok{echo} \StringTok{"Image type: }\VariableTok{$image\_type}\StringTok{"}
-    \BuiltInTok{echo} \StringTok{"Image size: }\VariableTok{$image\_size}\StringTok{ B"}
-
-    \ExtensionTok{ensure\_total\_disk\_size}
-    \BuiltInTok{echo} \StringTok{"Available space in disk without image cache partition: }\VariableTok{$total\_disk\_size}\StringTok{ B"}
-    \ExtensionTok{ensure\_image\_cache\_partition\_size}
-    \BuiltInTok{echo} \StringTok{"Available space before image cache partition partition: }\VariableTok{$image\_cache\_partition\_size}\StringTok{ B"}
-
-    \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_size}\StringTok{"} \OtherTok{{-}gt} \StringTok{"}\VariableTok{$total\_disk\_size}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{fatal\_error} \StringTok{"Insufficient disk space for imaging. Image size: }\VariableTok{$image\_size}\StringTok{ B Disk size: }\VariableTok{$total\_disk\_size}\StringTok{ B"}
-    \KeywordTok{fi}
-
-    \VariableTok{mounting\_point\_hidden=}\StringTok{"/mnt"}
-    \VariableTok{DEPLOY\_MODE\_ALREADY\_CACHED=}\StringTok{\textquotesingle{}cached\textquotesingle{}}
-    \VariableTok{DEPLOY\_MODE\_CACHED\_NOW=}\StringTok{\textquotesingle{}cached\_now\textquotesingle{}}
-    \VariableTok{DEPLOY\_MODE\_NOT\_CACHED=}\StringTok{\textquotesingle{}not\_cached\textquotesingle{}}
-
-    \ExtensionTok{ensure\_image\_cache\_partition\_start}
-    \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_size}\StringTok{"} \OtherTok{{-}gt} \StringTok{"}\VariableTok{$image\_cache\_partition\_start}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \ExtensionTok{start\_step\_interactive} \StringTok{"hidden partition destruction confirmation"}
-
-        \ExtensionTok{warning} \StringTok{"Image overlaps with local image cache."} \KeywordTok{\textbackslash{}}
-            \StringTok{"It can be deployed from network but the image cache will be destroyed."} \KeywordTok{\textbackslash{}}
-            \StringTok{"Continue?"}
-
-        \BuiltInTok{echo} \StringTok{"Sufficient disk space for imaging, but image cache partition will be destroyed if it exists."}
-        \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_NOT\_CACHED}\StringTok{"}
-    \KeywordTok{else}
-        \BuiltInTok{echo} \StringTok{"Sufficient disk space for imaging with cache. Image cache partition will be restored or created."}
-
-        \BuiltInTok{readonly} \VariableTok{hidden\_partition\_dev=}\StringTok{"/dev/loop0"}
-
-        \BuiltInTok{readonly} \VariableTok{HIDDEN\_PARTITION\_STATUS\_UNKNOWN=}\StringTok{\textquotesingle{}unknown\textquotesingle{}}
-        \BuiltInTok{readonly} \VariableTok{HIDDEN\_PARTITION\_STATUS\_CREATED=}\StringTok{\textquotesingle{}created\textquotesingle{}}
-        \BuiltInTok{readonly} \VariableTok{HIDDEN\_PARTITION\_STATUS\_RESTORED=}\StringTok{\textquotesingle{}restored\textquotesingle{}}
-        \BuiltInTok{declare} \VariableTok{hidden\_partition\_status=}\StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_UNKNOWN}\StringTok{"}
-
-        \CommentTok{\# Mounts the hidden partition.}
-        \CommentTok{\# If there is a mount error and the partition was restored, the partition will be}
-        \CommentTok{\# recreated and there will be another tentative to mount it.}
-        \FunctionTok{mount\_hidden\_partition()} \KeywordTok{\{}
-            \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition mount tentative"}
-
-            \BuiltInTok{echo} \StringTok{"Creating loopback node for }\VariableTok{$deployment\_disk}\StringTok{ (offset=}\VariableTok{$image\_cache\_partition\_start}\StringTok{) on }\VariableTok{$hidden\_partition\_dev}\StringTok{"}
-
-            \ExtensionTok{losetup}\NormalTok{ {-}o }\StringTok{"}\VariableTok{$image\_cache\_partition\_start}\StringTok{"} \StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"} \StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} \KeywordTok{||}
-                \ExtensionTok{fatal\_error} \StringTok{"Failed to create loopback node for }\VariableTok{$deployment\_disk}\StringTok{ on }\VariableTok{$hidden\_partition\_dev}\StringTok{"}
-            \BuiltInTok{echo} \StringTok{"Created loopback node for }\VariableTok{$deployment\_disk}\StringTok{ on }\VariableTok{$hidden\_partition\_dev}\StringTok{"}
-
-            \BuiltInTok{echo} \StringTok{"Mounting hidden partition from }\VariableTok{$hidden\_partition\_dev}\StringTok{ on }\VariableTok{$mounting\_point\_hidden}\StringTok{..."}
-            \KeywordTok{if}\NormalTok{ ! }\FunctionTok{mount}\NormalTok{ {-}t ext2 }\StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"}\KeywordTok{;} \KeywordTok{then}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"Cannot mount }\VariableTok{$hidden\_partition\_status}\StringTok{ hidden partition from }\VariableTok{$hidden\_partition\_dev}\StringTok{ on }\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-
-                \KeywordTok{if [[} \StringTok{"}\VariableTok{$hidden\_partition\_status}\StringTok{"} \OtherTok{!=} \StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                    \BuiltInTok{echo} \StringTok{"}\VariableTok{$error\_message}\StringTok{"}
-
-                    \ExtensionTok{losetup}\NormalTok{ {-}d }\StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"} \KeywordTok{||}
-                        \ExtensionTok{fatal\_error} \StringTok{"Cannot detach loopback device }\VariableTok{$hidden\_partition\_dev}\StringTok{"}
-
-                    \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition creation"}
-                    \ExtensionTok{create\_hidden\_partition}
-                    \ExtensionTok{mount\_hidden\_partition}
-                    \VariableTok{hidden\_partition\_status=}\StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"}
-                \KeywordTok{else}
-                    \ExtensionTok{fatal\_error} \StringTok{"}\VariableTok{$error\_message}\StringTok{"}
-                \KeywordTok{fi}
-            \KeywordTok{fi}
-
-            \KeywordTok{if [[} \StringTok{"}\VariableTok{$hidden\_partition\_status}\StringTok{"} \OtherTok{!=} \StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \VariableTok{hidden\_partition\_status=}\StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_RESTORED}\StringTok{"}
-            \KeywordTok{fi}
-
-            \BuiltInTok{echo} \StringTok{"Hidden partition mounted on }\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-        \KeywordTok{\}}
-
-        \ExtensionTok{mount\_hidden\_partition}
-
-        \FunctionTok{read\_raw\_image\_id\_file()} \KeywordTok{\{}
-            \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{image\_id\_file=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-            \FunctionTok{head}\NormalTok{ {-}n 1 }\StringTok{"}\VariableTok{$image\_id\_file}\StringTok{"} \KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}d }\StringTok{" "}\NormalTok{ {-}f 1}
-        \KeywordTok{\}}
-
-        \FunctionTok{read\_clonezilla\_image\_id\_file()} \KeywordTok{\{}
-            \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{image\_id\_file=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-            \FunctionTok{awk}\NormalTok{ {-}F }\StringTok{\textquotesingle{}=\textquotesingle{}} \StringTok{\textquotesingle{}/IMG\_ID/ \{print $2\}\textquotesingle{}} \StringTok{"}\VariableTok{$image\_id\_file}\StringTok{"}
-        \KeywordTok{\}}
-
-        \CommentTok{\# Check if the selected image exists in cache by comparing its id file to the one stored in cache.}
-        \CommentTok{\# Return value: 0 if the image is cached, 1 if it\textquotesingle{}s not}
-        \FunctionTok{is\_image\_cached()} \KeywordTok{\{}
-            \KeywordTok{if [[}\NormalTok{ hidden\_partition\_status }\OtherTok{==} \StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \BuiltInTok{return}\NormalTok{ 1}
-            \KeywordTok{fi}
-
-            \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_image\_id\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{cached\_image\_id\_file=}\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{read\_image\_id\_file=}\NormalTok{read\_raw\_image\_id\_file}
-            \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_image\_id\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/Info{-}img{-}id.txt"}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{cached\_image\_id\_file=}\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{/Info{-}img{-}id.txt"}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{read\_image\_id\_file=}\NormalTok{read\_clonezilla\_image\_id\_file}
-            \KeywordTok{else}
-                \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"}
-            \KeywordTok{fi}
-
-            \KeywordTok{if [[} \OtherTok{{-}f} \StringTok{"}\VariableTok{$cached\_image\_id\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{cached\_image\_id=$($read\_image\_id\_file} \StringTok{"}\VariableTok{$cached\_image\_id\_file}\StringTok{"}\VariableTok{)}
-                \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$cached\_image\_id}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                    \BuiltInTok{return}\NormalTok{ 1}
-                \KeywordTok{fi}
-
-                \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_image\_id=$($read\_image\_id\_file} \StringTok{"}\VariableTok{$remote\_image\_id\_file}\StringTok{"}\VariableTok{)}
-                \KeywordTok{if [[} \StringTok{"}\VariableTok{$cached\_image\_id}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$remote\_image\_id}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                    \BuiltInTok{return}\NormalTok{ 0}
-                \KeywordTok{fi}
-            \KeywordTok{fi}
-            \BuiltInTok{return}\NormalTok{ 1}
-        \KeywordTok{\}}
-
-        \ExtensionTok{start\_step\_batch} \StringTok{"cached image search"}
-        \BuiltInTok{echo} \StringTok{"Checking if image is cached..."}
-        \KeywordTok{if} \ExtensionTok{is\_image\_cached}\KeywordTok{;} \KeywordTok{then}
-            \BuiltInTok{echo} \StringTok{"Image found in cache."}
-            \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_ALREADY\_CACHED}\StringTok{"}
-        \KeywordTok{else}
-            \BuiltInTok{echo} \StringTok{"Image not found in cache."}
-
-            \ExtensionTok{start\_step\_batch} \StringTok{"image cache space availability check"}
-
-            \VariableTok{cache\_available\_size\_bytes=$(}\FunctionTok{df}\NormalTok{ {-}{-}block{-}size=1 {-}{-}output=avail }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"} \KeywordTok{|} \FunctionTok{tail}\NormalTok{ {-}n 1}\VariableTok{)}
-
-            \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$cache\_available\_size\_bytes}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \ExtensionTok{fatal\_error} \StringTok{"Cannot retrieve available size in cache."}
-            \KeywordTok{fi}
-
-            \KeywordTok{((}\NormalTok{cache\_available\_size\_bytes = cache\_available\_size\_bytes {-} 4096}\KeywordTok{))}
-
-            \BuiltInTok{echo} \StringTok{"Available size in cache: }\VariableTok{$cache\_available\_size\_bytes}\StringTok{ B"}
-
-            \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \VariableTok{image\_size\_bytes=$(}\FunctionTok{stat}\NormalTok{ {-}c \%s }\StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"}\VariableTok{)}
-            \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \VariableTok{image\_size\_bytes=$(}\FunctionTok{du}\NormalTok{ {-}b {-}c }\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{"} \KeywordTok{|} \FunctionTok{tail}\NormalTok{ {-}n1 }\KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}f1}\VariableTok{)}
-            \KeywordTok{else}
-                \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"}
-            \KeywordTok{fi}
-
-            \BuiltInTok{echo} \StringTok{"Size of image to download: }\VariableTok{$image\_size\_bytes}\StringTok{ B"}
-
-            \CommentTok{\# Check enough space available in hidden partition for caching}
-            \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_size\_bytes}\StringTok{"} \OtherTok{{-}lt} \StringTok{"}\VariableTok{$cache\_available\_size\_bytes}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \BuiltInTok{echo} \StringTok{"Enough space for caching. Image will be cached and deployed simultaneously."}
-                \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_CACHED\_NOW}\StringTok{"}
-            \KeywordTok{else}
-                \BuiltInTok{echo} \StringTok{"Not enough space for caching. Image will be deployed without caching."}
-                \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_NOT\_CACHED}\StringTok{"}
-            \KeywordTok{fi}
-        \KeywordTok{fi}
-    \KeywordTok{fi}
-
-    \FunctionTok{deploy\_image\_with\_clonezilla()} \KeywordTok{\{}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{clonezilla\_images\_dir=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-        \BuiltInTok{echo} \StringTok{"Starting deployment of image }\VariableTok{$image\_name}\StringTok{ from }\VariableTok{$clonezilla\_images\_dir}\StringTok{ with clonezilla..."}
-        \CommentTok{\# yes \textquotesingle{}\textquotesingle{} 2\textgreater{}/dev/null |}
-        \ExtensionTok{ocs{-}sr} \KeywordTok{\textbackslash{}}
-            \ExtensionTok{{-}{-}ignore{-}update{-}efi{-}nvram} \KeywordTok{\textbackslash{}}
-            \ExtensionTok{{-}{-}ocsroot} \StringTok{"}\VariableTok{$clonezilla\_images\_dir}\StringTok{"} \KeywordTok{\textbackslash{}}
-            \ExtensionTok{{-}{-}skip{-}check{-}restorable{-}r} \KeywordTok{\textbackslash{}}
-            \ExtensionTok{{-}{-}nogui} \KeywordTok{\textbackslash{}}
-            \ExtensionTok{{-}{-}batch} \KeywordTok{\textbackslash{}}
-            \ExtensionTok{restoredisk} \StringTok{"}\VariableTok{$image\_name}\StringTok{"}\NormalTok{ sda}
-
-        \BuiltInTok{echo} \StringTok{"Checking for error during clonezilla deployment..."}
-
-        \KeywordTok{if} \FunctionTok{grep} \StringTok{"Failed to restore partition image file"}\NormalTok{ /var/log/clonezilla.log}\KeywordTok{;} \KeywordTok{then}
-            \ExtensionTok{fatal\_error} \StringTok{"Error while deploying image with clonezilla."}
-        \KeywordTok{fi}
-
-        \BuiltInTok{echo} \StringTok{"Image deployed with clonezilla."}
-    \KeywordTok{\}}
-
-    \FunctionTok{print\_progress()} \KeywordTok{\{}
-        \ExtensionTok{pv}\NormalTok{ {-}ptebar {-}{-}size }\StringTok{"}\VariableTok{$image\_size}\StringTok{"} \OperatorTok{2\textgreater{}}\StringTok{"}\VariableTok{$tty}\StringTok{"}
-    \KeywordTok{\}}
-
-    \ExtensionTok{start\_step\_batch} \StringTok{"image deployment"}
-    \KeywordTok{if [[} \StringTok{"}\VariableTok{$deploy\_mode}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$DEPLOY\_MODE\_CACHED\_NOW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{echo} \StringTok{"Saving image to cache and deploying it..."}
-        \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-            \FunctionTok{cp} \StringTok{"}\VariableTok{$remote\_image\_md5\_file}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/"} \KeywordTok{||}
-                \ExtensionTok{fatal\_error} \StringTok{"Cannot copy hash of image to }\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-
-            \FunctionTok{tee} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"} \OperatorTok{\textless{}} \StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"} \KeywordTok{|}
-                \FunctionTok{gunzip}\NormalTok{ {-}c }\KeywordTok{|}
-                \ExtensionTok{print\_progress} \KeywordTok{|}
-                \FunctionTok{dd}\NormalTok{ bs=128k of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} \KeywordTok{||}
-                \ExtensionTok{fatal\_error} \StringTok{"Cannot copy image to cache and disk."}
-        \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-            \BuiltInTok{echo} \StringTok{"Starting copy of clonezilla image to cache..."}
-            \FunctionTok{rm}\NormalTok{ {-}rf }\StringTok{"}\VariableTok{$\{mounting\_point\_hidden:?\}}\StringTok{/}\VariableTok{$image\_name}\StringTok{"}
-            \FunctionTok{cp}\NormalTok{ {-}r }\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{"} \StringTok{"}\VariableTok{$\{mounting\_point\_hidden:?\}}\StringTok{/"} \KeywordTok{||}
-                \ExtensionTok{fatal\_error} \StringTok{"Error while copying remote image to cache."}
-            \BuiltInTok{echo} \StringTok{"Clonezilla image copied to cache."}
-            \BuiltInTok{echo} \StringTok{"Content of cache:"}
-            \FunctionTok{ls}\NormalTok{ {-}als }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-
-            \ExtensionTok{deploy\_image\_with\_clonezilla} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-        \KeywordTok{else}
-            \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"}
-        \KeywordTok{fi}
-
-        \BuiltInTok{echo} \StringTok{"Image deployed and cached."}
-    \KeywordTok{elif [[} \StringTok{"}\VariableTok{$deploy\_mode}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$DEPLOY\_MODE\_ALREADY\_CACHED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{echo} \StringTok{"Deploying image from cache..."}
-
-        \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-            \FunctionTok{gunzip}\NormalTok{ {-}c }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"} \KeywordTok{|}
-                \ExtensionTok{print\_progress} \KeywordTok{|}
-                \FunctionTok{dd}\NormalTok{ bs=1M of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} \KeywordTok{||}
-                \ExtensionTok{fatal\_error} \StringTok{"Cannot copy image from cache to disk."}
-        \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-            \ExtensionTok{deploy\_image\_with\_clonezilla} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-        \KeywordTok{else}
-            \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"}
-        \KeywordTok{fi}
-
-        \BuiltInTok{echo} \StringTok{"Image deployed from cache."}
-    \KeywordTok{elif [[} \StringTok{"}\VariableTok{$deploy\_mode}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$DEPLOY\_MODE\_NOT\_CACHED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{echo} \StringTok{"Deploying image without caching..."}
-
-        \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-            \FunctionTok{gunzip}\NormalTok{ {-}c }\StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"} \KeywordTok{|}
-                \ExtensionTok{print\_progress} \KeywordTok{|}
-                \FunctionTok{dd}\NormalTok{ of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ bs=128k }\KeywordTok{||}
-                \ExtensionTok{fatal\_error} \StringTok{"Cannot copy image without caching."}
-        \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-            \ExtensionTok{deploy\_image\_with\_clonezilla} \StringTok{"}\VariableTok{$remote\_images\_dir}\StringTok{"}
-        \KeywordTok{else}
-            \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"}
-        \KeywordTok{fi}
-
-        \BuiltInTok{echo} \StringTok{"Image deployed without caching."}
-    \KeywordTok{else}
-        \ExtensionTok{fatal\_error} \StringTok{"Unhandled deploy mode: }\VariableTok{$deploy\_mode}\StringTok{"}
-    \KeywordTok{fi}
-
-    \BuiltInTok{echo} \StringTok{"Deployment of image }\VariableTok{$image\_name}\StringTok{ (}\VariableTok{$image\_size}\StringTok{ B) done."}
-
-    \KeywordTok{if} \ExtensionTok{findmnt}\NormalTok{ {-}{-}mountpoint }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"}\KeywordTok{;} \KeywordTok{then}
-        \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition unmount"}
-        \BuiltInTok{echo} \StringTok{"Unmounting hidden partition from }\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-        \FunctionTok{umount} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"Cannot unmount hidden partition from }\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-        \BuiltInTok{echo} \StringTok{"Unmounted hidden partition from }\VariableTok{$mounting\_point\_hidden}\StringTok{"}
-
-        \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition check"}
-        \ExtensionTok{fsck}\NormalTok{ {-}y }\StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"}
-    \KeywordTok{fi}
-
-    \ExtensionTok{start\_step\_batch} \StringTok{"EFI entrypoint file creation"}
-
-    \BuiltInTok{readonly} \VariableTok{remote\_image\_efi\_entrypoint\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/efi\_entrypoint"}
-    \BuiltInTok{readonly} \VariableTok{remote\_image\_efi\_nvram\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/efi{-}nvram.dat"}
-    \BuiltInTok{readonly} \VariableTok{mounting\_point\_esp=}\StringTok{"/bootiful/esp"}
-    \BuiltInTok{readonly} \VariableTok{esp\_partition=}\StringTok{"}\VariableTok{$\{deployment\_disk\}}\StringTok{1"}
-
-    \FunctionTok{mount\_esp()} \KeywordTok{\{}
-        \BuiltInTok{echo} \StringTok{"Mounting ESP partition..."}
-        \ExtensionTok{ensure\_directory} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"}
-        \ExtensionTok{refresh\_partition\_table}
-        \FunctionTok{mount} \StringTok{"}\VariableTok{$esp\_partition}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"Cannot mount }\VariableTok{$esp\_partition}\StringTok{ on }\VariableTok{$mounting\_point\_esp}\StringTok{"}
-        \BuiltInTok{echo} \StringTok{"ESP partition mounted."}
-    \KeywordTok{\}}
-
-    \FunctionTok{write\_efi\_entrypoint\_file()} \KeywordTok{\{}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{efi\_entrypoint\_file\_content=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-        \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{target\_efi\_entrypoint\_file=}\StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{/efi\_entrypoint"}
-
-        \BuiltInTok{echo} \StringTok{"Writing efi entrypoint file \textquotesingle{}}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{\textquotesingle{}"}
-
-        \BuiltInTok{echo} \StringTok{"}\VariableTok{$efi\_entrypoint\_file\_content}\StringTok{"} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{"} \KeywordTok{||}
-            \ExtensionTok{fatal\_error} \StringTok{"Cannot write EFI entrypoint file \textquotesingle{}}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{\textquotesingle{}."}
-
-        \BuiltInTok{echo} \StringTok{"EFI entrypoint file \textquotesingle{}}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{\textquotesingle{} written."}
-
-        \FunctionTok{umount} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"}
-    \KeywordTok{\}}
-
-    \KeywordTok{if [[} \OtherTok{{-}e} \StringTok{"}\VariableTok{$remote\_image\_efi\_entrypoint\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{echo} \StringTok{"EFI entrypoint file detected. Copying it to ESP root..."}
-        \ExtensionTok{mount\_esp}
-        \ExtensionTok{write\_efi\_entrypoint\_file} \StringTok{"}\VariableTok{$(}\FunctionTok{cat} \StringTok{"}\VariableTok{$remote\_image\_efi\_entrypoint\_file}\StringTok{"}\VariableTok{)}\StringTok{"}
-    \KeywordTok{elif [[} \OtherTok{{-}e} \StringTok{"}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-        \BuiltInTok{echo} \StringTok{"Trying to find boot entry from efi nvram file }\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{..."}
-
-        \VariableTok{boot\_order\_entries=}\StringTok{"}\VariableTok{$(}\FunctionTok{sed}\NormalTok{ {-}nr }\StringTok{\textquotesingle{}s/\^{}BootOrder: ([0{-}9]+(,[0{-}9]+)*)$/\textbackslash{}1/p\textquotesingle{}} \StringTok{"}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{"} \KeywordTok{|}
-            \FunctionTok{head}\NormalTok{ {-}n 1 }\KeywordTok{|}
-            \FunctionTok{tr} \StringTok{\textquotesingle{},\textquotesingle{}} \StringTok{\textquotesingle{} \textquotesingle{}}\VariableTok{)}\StringTok{"}
-
-        \KeywordTok{if [[} \OtherTok{{-}n} \StringTok{"}\VariableTok{$boot\_order\_entries}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-            \BuiltInTok{echo} \StringTok{"Boot order entries found: }\VariableTok{$boot\_order\_entries}\StringTok{"}
-            \VariableTok{written\_boot\_order\_entry=}\StringTok{""}
-            \KeywordTok{for} \ExtensionTok{boot\_order\_entry}\NormalTok{ in }\VariableTok{$boot\_order\_entries}\KeywordTok{;} \KeywordTok{do}
-                \BuiltInTok{echo} \StringTok{"Trying to find boot file path for boot order entry }\VariableTok{$boot\_order\_entry}\StringTok{..."}
-                \VariableTok{boot\_file\_path=}\StringTok{"}\VariableTok{$(}\FunctionTok{sed}\NormalTok{ {-}nr }\StringTok{"s|\^{}Boot}\VariableTok{$boot\_order\_entry}\StringTok{.*\textbackslash{}tHD\textbackslash{}(1.*\textbackslash{})/File\textbackslash{}((.*)\textbackslash{}).*$|\textbackslash{}1|p"} \StringTok{"}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{"}\VariableTok{)}\StringTok{"}
-
-                \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                    \BuiltInTok{echo} \StringTok{"Boot file path not found for boot entry }\VariableTok{$boot\_order\_entry}\StringTok{"}
-                    \BuiltInTok{continue}
-                \KeywordTok{fi}
-
-                \BuiltInTok{echo} \StringTok{"Boot file path found for boot entry }\VariableTok{$boot\_order\_entry}\StringTok{: }\VariableTok{$boot\_file\_path}\StringTok{"}
-
-                \ExtensionTok{mount\_esp}
-
-                \KeywordTok{if [[} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"}\NormalTok{ =\textasciitilde{} \^{}}\DataTypeTok{\textbackslash{}\textbackslash{}}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                    \BuiltInTok{echo} \StringTok{"Boot file path looks like a windows{-}like path. Converting it to a unix{-}like path..."}
-                    \VariableTok{unix\_boot\_file\_path=}\StringTok{"}\VariableTok{$(}\BuiltInTok{echo} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"} \KeywordTok{|} \FunctionTok{tr} \DataTypeTok{\textbackslash{}\textbackslash{}\textbackslash{}\textbackslash{}}\NormalTok{ /}\VariableTok{)}\StringTok{"}
-                    \BuiltInTok{echo} \StringTok{"Windows{-}like path \textquotesingle{}}\VariableTok{$boot\_file\_path}\StringTok{\textquotesingle{} converted to unix{-}like path \textquotesingle{}}\VariableTok{$unix\_boot\_file\_path}\StringTok{\textquotesingle{}"}
-
-                    \BuiltInTok{echo} \StringTok{"Trying to find the case sensitive path for \textquotesingle{}}\VariableTok{$unix\_boot\_file\_path}\StringTok{\textquotesingle{} in EFI..."}
-                    \VariableTok{boot\_file\_path=}\StringTok{"}\VariableTok{$(}
-                        \FunctionTok{find} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"} \KeywordTok{\textbackslash{}}
-                            \ExtensionTok{{-}type}\NormalTok{ f }\KeywordTok{\textbackslash{}}
-                            \ExtensionTok{{-}ipath} \StringTok{"}\VariableTok{$mounting\_point\_esp$unix\_boot\_file\_path}\StringTok{"} \KeywordTok{\textbackslash{}}
-                            \ExtensionTok{{-}printf} \StringTok{\textquotesingle{}/\%P\textbackslash{}n\textquotesingle{}} \KeywordTok{|}
-                            \FunctionTok{head}\NormalTok{ {-}n 1}
-                    \VariableTok{)}\StringTok{"}
-
-                    \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                        \ExtensionTok{fatal\_error} \StringTok{"Cannot find a case insensitive match for efi boot file \textquotesingle{}}\VariableTok{$unix\_boot\_file\_path}\StringTok{\textquotesingle{}"}
-                    \KeywordTok{fi}
-
-                    \BuiltInTok{echo} \StringTok{"Case insensitive EFI boot file path found: \textquotesingle{}}\VariableTok{$boot\_file\_path}\StringTok{\textquotesingle{}."}
-                \KeywordTok{fi}
-
-                \ExtensionTok{write\_efi\_entrypoint\_file} \StringTok{"set efi\_entrypoint=}\VariableTok{$boot\_file\_path}\StringTok{"}
-                \VariableTok{written\_boot\_order\_entry=}\StringTok{"}\VariableTok{$boot\_order\_entry}\StringTok{"}
-                \BuiltInTok{break}
-            \KeywordTok{done}
-
-            \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$written\_boot\_order\_entry}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-                \ExtensionTok{fatal\_error} \StringTok{"No bootfile found in \textquotesingle{}}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{\textquotesingle{}."}
-            \KeywordTok{fi}
-        \KeywordTok{else}
-            \ExtensionTok{fatal\_error} \StringTok{"Boot order entries not found in \textquotesingle{}}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{\textquotesingle{}."}
-        \KeywordTok{fi}
-    \KeywordTok{else}
-        \BuiltInTok{echo} \StringTok{"No EFI entrypoint file or EFI nvram file found."}
-    \KeywordTok{fi}
-
-    \ExtensionTok{start\_step\_batch} \StringTok{"signature creation"}
-
-    \KeywordTok{((}\NormalTok{signature\_offset = total\_disk\_size {-} 200}\KeywordTok{))}
-    \VariableTok{signature=}\StringTok{"hepia2015"}
-
-    \BuiltInTok{echo} \StringTok{"Writing signature \textquotesingle{}}\VariableTok{$signature}\StringTok{\textquotesingle{} on offset }\VariableTok{$signature\_offset}\StringTok{ B..."}
-    \BuiltInTok{echo}\NormalTok{ {-}ne }\StringTok{"}\VariableTok{$signature}\StringTok{"} \KeywordTok{|} \FunctionTok{dd}\NormalTok{ of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ seek=}\StringTok{"}\VariableTok{$signature\_offset}\StringTok{"}\NormalTok{ bs=1 iflag=skip\_bytes }\KeywordTok{||}
-        \ExtensionTok{fatal\_error} \StringTok{"Cannot write signature at the end of the disk"}
-    \BuiltInTok{echo} \StringTok{"Signature written."}
-
-    \BuiltInTok{echo} \StringTok{"Image deployment process successful."}
-
-    \ExtensionTok{print\_step\_durations}
-
-\KeywordTok{\}} \OperatorTok{2\textgreater{}\&1} \KeywordTok{|} \FunctionTok{tee} \StringTok{"}\VariableTok{$log\_file}\StringTok{"}
-
-\BuiltInTok{exit} \StringTok{"}\VariableTok{$\{PIPESTATUS[0]\}}\StringTok{"}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerbootiful-save-image-script-utilitaire-de-cruxe9ation-dimage-raw}{%
-\section{\texorpdfstring{\texttt{deployer/bootiful-save-image}: script
-utilitaire de création d'image
-raw}{deployer/bootiful-save-image: script utilitaire de création d'image raw}}\label{deployerbootiful-save-image-script-utilitaire-de-cruxe9ation-dimage-raw}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#!/bin/bash}
-\BuiltInTok{readonly} \VariableTok{SCRIPT\_NAME=}\StringTok{"}\VariableTok{$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}
-\BuiltInTok{readonly} \VariableTok{SCRIPT\_DIR=}\StringTok{"}\VariableTok{$(}\FunctionTok{readlink}\NormalTok{ {-}m }\StringTok{"}\VariableTok{$(}\FunctionTok{dirname} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}\VariableTok{)}\StringTok{"}
-
-\FunctionTok{usage()} \KeywordTok{\{}
-    \FunctionTok{cat} \OperatorTok{\textless{}\textless{} EOF}
-\NormalTok{Usage:}
-  \VariableTok{$SCRIPT\_DIR}\NormalTok{ IMAGE\_NAME}
-  \VariableTok{$SCRIPT\_DIR}\NormalTok{ [{-}h | {-}{-}help]}
-
-\NormalTok{Description:}
-\NormalTok{  Saves a raw dd image of the /dev/sda device to the remote server shared images}
-\NormalTok{  folder.}
-
-\NormalTok{Parameters:}
-\NormalTok{  IMAGE\_NAME  Name of the image to create}
-
-\NormalTok{Options:}
-\NormalTok{  {-}h {-}{-}help  Shows this help}
-
-\NormalTok{Example:}
-\NormalTok{  ./}\VariableTok{$SCRIPT\_NAME}\NormalTok{ debian{-}buster{-}x86\_64{-}efi}
-\OperatorTok{EOF}
-\KeywordTok{\}}
-
-\KeywordTok{if [[} \StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}h"}\NormalTok{ || }\StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}{-}help"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \ExtensionTok{usage}
-    \BuiltInTok{exit}\NormalTok{ 0}
-\KeywordTok{fi}
-
-\BuiltInTok{readonly} \VariableTok{image\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"}
-\KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$image\_name}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \ExtensionTok{usage}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\CommentTok{\# Loads declarations from the \textquotesingle{}bootiful{-}common\textquotesingle{} script, which is a "library"}
-\CommentTok{\# of functions and constants shared by multiple bootiful{-}* scripts.}
-\BuiltInTok{readonly} \VariableTok{bootiful\_common\_script\_file=}\StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"}
-\KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \OperatorTok{\textgreater{}\&2} \BuiltInTok{echo} \StringTok{"Fatal error: cannot find required script file \textquotesingle{}}\VariableTok{$bootiful\_common\_script\_file}\StringTok{\textquotesingle{}."}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-\CommentTok{\# shellcheck source=./bootiful{-}common}
-\BuiltInTok{.} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}
-
-\ExtensionTok{ensure\_remote\_shared\_mounted}
-
-\BuiltInTok{echo} \StringTok{"Finding size of the image to create..."}
-\BuiltInTok{readonly} \VariableTok{parted\_unit=}\StringTok{"B"}
-
-\BuiltInTok{declare} \VariableTok{parted\_output}
-\VariableTok{parted\_output=$(}\ExtensionTok{parted}\NormalTok{ {-}{-}script }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ unit }\StringTok{"}\VariableTok{$parted\_unit}\StringTok{"}\NormalTok{ print}\VariableTok{)} \KeywordTok{||}
-    \ExtensionTok{fatal\_error} \StringTok{"failed to save parted output"}
-\BuiltInTok{readonly} \VariableTok{parted\_output}
-
-\BuiltInTok{declare} \VariableTok{image\_size}
-\VariableTok{image\_size=$(}\ExtensionTok{parse\_parted\_last\_partition\_end} \StringTok{"}\VariableTok{$parted\_output}\StringTok{"} \StringTok{"}\VariableTok{$parted\_unit}\StringTok{"}\VariableTok{)}
-\BuiltInTok{readonly} \VariableTok{image\_size}
-
-\BuiltInTok{echo} \StringTok{"Image size: }\VariableTok{$image\_size}\StringTok{"}
-
-\BuiltInTok{readonly} \VariableTok{image\_folder=}\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/images/}\VariableTok{$image\_name}\StringTok{"}
-
-\KeywordTok{if [[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$image\_folder}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \BuiltInTok{echo} \StringTok{"Image folder \textquotesingle{}}\VariableTok{$image\_folder}\StringTok{\textquotesingle{} already exists."}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\KeywordTok{if}\NormalTok{ ! }\FunctionTok{mkdir} \StringTok{"}\VariableTok{$image\_folder}\StringTok{"}\KeywordTok{;} \KeywordTok{then}
-    \BuiltInTok{echo} \StringTok{"Cannot create image folder \textquotesingle{}}\VariableTok{$image\_folder}\StringTok{\textquotesingle{}"}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\BuiltInTok{readonly} \VariableTok{image\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"}
-\KeywordTok{if}\NormalTok{ ! }\ExtensionTok{pv}\NormalTok{ {-}{-}size }\StringTok{"}\VariableTok{$image\_size}\StringTok{"}\NormalTok{ {-}{-}stop{-}at{-}size /dev/sda }\KeywordTok{|}
-        \ExtensionTok{pigz}\NormalTok{ {-}c }\OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$image\_file}\StringTok{"}
-\KeywordTok{then}
-    \BuiltInTok{echo} \StringTok{"Cannot create image file \textquotesingle{}}\VariableTok{$image\_file}\StringTok{\textquotesingle{}"}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\CommentTok{\# }\AlertTok{TODO}\CommentTok{: Rename md5 files to uuid because creating md5 hashes takes too much time}
-\BuiltInTok{readonly} \VariableTok{md5\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"}
-\KeywordTok{if}\NormalTok{ ! }\FunctionTok{cat}\NormalTok{ /proc/sys/kernel/random/uuid }\OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$md5\_file}\StringTok{"}\KeywordTok{;} \KeywordTok{then}
-    \BuiltInTok{echo} \StringTok{"Cannot create md5 file \textquotesingle{}}\VariableTok{$md5\_file}\StringTok{\textquotesingle{}"}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\BuiltInTok{readonly} \VariableTok{partition\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.partition"}
-\KeywordTok{if}\NormalTok{ ! }\ExtensionTok{fdisk}\NormalTok{ {-}l /dev/sda }\OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$partition\_file}\StringTok{"}\KeywordTok{;} \KeywordTok{then}
-    \BuiltInTok{echo} \StringTok{"Cannot create partition file }\VariableTok{$partition\_file}\StringTok{"}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\BuiltInTok{readonly} \VariableTok{size\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.size"}
-\KeywordTok{if}\NormalTok{ ! }\FunctionTok{du} \StringTok{"}\VariableTok{$image\_file}\StringTok{"} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$size\_file}\StringTok{"}\KeywordTok{;} \KeywordTok{then}
-    \BuiltInTok{echo} \StringTok{"Cannot create size file }\VariableTok{$size\_file}\StringTok{"}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-
-\BuiltInTok{echo} \StringTok{"Image creation successful."}
-\BuiltInTok{exit}\NormalTok{ 0}
-
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{deployerbootiful-reset-cache-script-utilitaire-de-ruxe9initialisation-du-cache}{%
-\section{\texorpdfstring{\texttt{deployer/bootiful-reset-cache}: script
-utilitaire de réinitialisation du
-cache}{deployer/bootiful-reset-cache: script utilitaire de réinitialisation du cache}}\label{deployerbootiful-reset-cache-script-utilitaire-de-ruxe9initialisation-du-cache}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#!/bin/bash}
-
-\BuiltInTok{readonly} \VariableTok{SCRIPT\_NAME=}\StringTok{"}\VariableTok{$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}
-\BuiltInTok{readonly} \VariableTok{SCRIPT\_DIR=}\StringTok{"}\VariableTok{$(}\FunctionTok{readlink}\NormalTok{ {-}m }\StringTok{"}\VariableTok{$(}\FunctionTok{dirname} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}\VariableTok{)}\StringTok{"}
-
-\FunctionTok{usage()} \KeywordTok{\{}
-    \FunctionTok{cat} \OperatorTok{\textless{}\textless{} EOF}
-\NormalTok{Usage:}
-  \VariableTok{$SCRIPT\_DIR}\NormalTok{ [{-}h | {-}{-}help]}
-
-\NormalTok{Description:}
-\NormalTok{  Clears the bootiful image cache by re{-}creating the hidden partition}
-
-\NormalTok{Options:}
-\NormalTok{  {-}h {-}{-}help  Shows this help}
-
-\NormalTok{Example:}
-\NormalTok{  ./}\VariableTok{$SCRIPT\_NAME}
-\OperatorTok{EOF}
-\KeywordTok{\}}
-
-\KeywordTok{if [[} \StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}h"}\NormalTok{ || }\StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}{-}help"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \ExtensionTok{usage}
-    \BuiltInTok{exit}\NormalTok{ 0}
-\KeywordTok{fi}
-
-\CommentTok{\# Loads declarations from the \textquotesingle{}bootiful{-}common\textquotesingle{} script, which is a "library"}
-\CommentTok{\# of functions and constants shared by multiple bootiful{-}* scripts.}
-\BuiltInTok{readonly} \VariableTok{bootiful\_common\_script\_file=}\StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"}
-\KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \OperatorTok{\textgreater{}\&2} \BuiltInTok{echo} \StringTok{"Fatal error: cannot find required script file \textquotesingle{}}\VariableTok{$bootiful\_common\_script\_file}\StringTok{\textquotesingle{}."}
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{fi}
-\CommentTok{\# shellcheck source=./bootiful{-}common}
-\BuiltInTok{.} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}
-
-\ExtensionTok{validate\_exists} \StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}
-\ExtensionTok{create\_hidden\_partition}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{dhcpdockerfile-configuration-docker-du-serveur-dhcp}{%
-\section{\texorpdfstring{\texttt{dhcp/Dockerfile}: configuration
-\emph{Docker} du serveur
-\protect\hyperlink{acronym__DHCP}{DHCP}}{dhcp/Dockerfile: configuration Docker du serveur DHCP}}\label{dhcpdockerfile-configuration-docker-du-serveur-dhcp}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{FROM}\NormalTok{ alpine:3.12}
-\KeywordTok{RUN}\NormalTok{ apk add dhcp{-}server{-}vanilla \&\& touch /var/lib/dhcp/dhcpd.leases}
-\KeywordTok{COPY}\NormalTok{ dhcpd.conf /etc/dhcp/dhcpd.conf}
-\KeywordTok{EXPOSE}\NormalTok{ 67}
-\KeywordTok{ENTRYPOINT}\NormalTok{ [}\StringTok{"dhcpd"}\NormalTok{, }\StringTok{"{-}f"}\NormalTok{]}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{dhcpdhcpd.conf-configuration-du-serveur-dhcp}{%
-\section{\texorpdfstring{\texttt{dhcp/dhcpd.conf}: configuration du
-serveur
-\protect\hyperlink{acronym__DHCP}{DHCP}}{dhcp/dhcpd.conf: configuration du serveur DHCP}}\label{dhcpdhcpd.conf-configuration-du-serveur-dhcp}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ExtensionTok{allow}\NormalTok{ bootp}\KeywordTok{;}
-
-\ExtensionTok{subnet}\NormalTok{ 192.168.56.0 netmask 255.255.255.0 \{}
-    \ExtensionTok{range}\NormalTok{ 192.168.56.10 192.168.56.80}\KeywordTok{;}
-    \ExtensionTok{default{-}lease{-}time}\NormalTok{ 600}\KeywordTok{;}
-    \ExtensionTok{max{-}lease{-}time}\NormalTok{ 7200}\KeywordTok{;}
-
-\CommentTok{\#   option domain{-}name{-}servers 10.136.132.100;}
-\CommentTok{\#   option routers  192.168.56.100;}
-
-    \ExtensionTok{class} \StringTok{"pxeclient"}\NormalTok{ \{}
-        \ExtensionTok{match}\NormalTok{ if substring (option vendor{-}class{-}identifier, 0, 9) = }\StringTok{"PXEClient"}\NormalTok{;}
-        \ExtensionTok{next{-}server}\NormalTok{ 192.168.56.100}\KeywordTok{;}
-        \ExtensionTok{option}\NormalTok{ tftp{-}server{-}name }\StringTok{"192.168.56.100"}\KeywordTok{;}
-
-        \KeywordTok{if} \ExtensionTok{substring}\NormalTok{ (option vendor{-}class{-}identifier, 15, 5) = }\StringTok{"00000"} \KeywordTok{\{}
-            \ExtensionTok{option}\NormalTok{ bootfile{-}name   }\StringTok{"/boot/grub/i386{-}pc/core.0"}\KeywordTok{;}
-        \KeywordTok{\}}
-        \ExtensionTok{elsif}\NormalTok{ substring (option vendor{-}class{-}identifier, 15, 5) = }\StringTok{"00006"} \KeywordTok{\{}
-            \ExtensionTok{option}\NormalTok{ bootfile{-}name }\StringTok{"/boot/grub/i386{-}efi/core.efi"}\KeywordTok{;}
-        \KeywordTok{\}}
-        \KeywordTok{else} \KeywordTok{\{}
-         \ExtensionTok{option}\NormalTok{ bootfile{-}name }\StringTok{"/boot/grub/x86\_64{-}efi/core.efi"}\KeywordTok{;} 
-        \KeywordTok{\}}
-\NormalTok{    \}}
-
-    \ExtensionTok{class} \StringTok{"normalclient"}\NormalTok{ \{}
-        \ExtensionTok{match}\NormalTok{ if substring (option vendor{-}class{-}identifier, 0, 9) != }\StringTok{"PXEClient"}\NormalTok{;}
-\NormalTok{    \}}
-\NormalTok{\}}
-
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{grubdockerfile-configuration-docker-pour-la-compilation-de-grub}{%
-\section{\texorpdfstring{\texttt{grub/Dockerfile}: configuration
-\emph{Docker} pour la compilation de
-\protect\hyperlink{acronym__GRUB}{GRUB}}{grub/Dockerfile: configuration Docker pour la compilation de GRUB}}\label{grubdockerfile-configuration-docker-pour-la-compilation-de-grub}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{FROM}\NormalTok{ debian:buster AS build{-}stage}
-\KeywordTok{RUN}\NormalTok{ apt{-}get update \&\& apt{-}get install {-}y {-}{-}no{-}install{-}recommends \textbackslash{}}
-\NormalTok{        gcc \textbackslash{}}
-\NormalTok{        make \textbackslash{}}
-\NormalTok{        bison \textbackslash{}}
-\NormalTok{        gettext \textbackslash{}}
-\NormalTok{        binutils \textbackslash{}}
-\NormalTok{        flex \textbackslash{}}
-\NormalTok{        pkg{-}config \textbackslash{}}
-\NormalTok{        libdevmapper{-}dev \textbackslash{}}
-\NormalTok{        libfreetype6{-}dev \textbackslash{}}
-\NormalTok{        unifont \textbackslash{}}
-\NormalTok{        python \textbackslash{}}
-\NormalTok{        automake \textbackslash{}}
-\NormalTok{        autoconf}
-
-\KeywordTok{WORKDIR}\NormalTok{ /bootiful{-}grub}
-\KeywordTok{ADD}\NormalTok{ ./bootiful{-}grub ./}
-
-\KeywordTok{ARG}\NormalTok{ PLATFORM}
-\KeywordTok{ARG}\NormalTok{ TARGET}
-\KeywordTok{RUN}\NormalTok{ ./configure {-}{-}with{-}platform=$\{PLATFORM\} {-}{-}target=$\{TARGET\}}
-\KeywordTok{RUN}\NormalTok{ make}
-\KeywordTok{RUN}\NormalTok{ make install}
-
-\KeywordTok{RUN}\NormalTok{ grub{-}mknetdir {-}{-}net{-}directory=./netdir {-}{-}subdir=./boot/grub}
-
-\KeywordTok{FROM}\NormalTok{ scratch AS export{-}stage}
-\KeywordTok{COPY}\NormalTok{ {-}{-}from=build{-}stage ./bootiful{-}grub/netdir /}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{nfsdockerfile-configuration-docker-du-serveur-nfs}{%
-\section{\texorpdfstring{\texttt{nfs/Dockerfile}: configuration
-\emph{Docker} du serveur
-\protect\hyperlink{acronym__NFS}{NFS}}{nfs/Dockerfile: configuration Docker du serveur NFS}}\label{nfsdockerfile-configuration-docker-du-serveur-nfs}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{FROM}\NormalTok{ erichough/nfs{-}server}
-\KeywordTok{ADD}\NormalTok{ nfsroot.tar.gz /nfsrootsrc/}
-\KeywordTok{COPY}\NormalTok{ exports /etc/exports}
-\KeywordTok{VOLUME}\NormalTok{ /nfsroot}
-\KeywordTok{VOLUME}\NormalTok{ /nfsshared}
-\KeywordTok{ENTRYPOINT}\NormalTok{ cp {-}a nfsrootsrc/rootfs/. /nfsroot/ \&\& entrypoint.sh}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{nfsexports-configuration-des-partages-du-serveur-nfs}{%
-\section{\texorpdfstring{\texttt{nfs/exports}: configuration des
-partages du serveur
-\protect\hyperlink{acronym__NFS}{NFS}}{nfs/exports: configuration des partages du serveur NFS}}\label{nfsexports-configuration-des-partages-du-serveur-nfs}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\# /etc/exports: the access control list for filesystems which may be exported}
-\CommentTok{\#       to NFS clients.  See exports(5).}
-\CommentTok{\#}
-\CommentTok{\# Example for NFSv2 and NFSv3:}
-\CommentTok{\# /srv/homes       hostname1(rw,sync,no\_subtree\_check) hostname2(ro,sync,no\_subtree\_check)}
-\CommentTok{\#}
-\CommentTok{\# Example for NFSv4:}
-\CommentTok{\# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no\_subtree\_check)}
-\CommentTok{\# /srv/nfs4/homes  gss/krb5i(rw,sync,no\_subtree\_check)}
-\CommentTok{\#}
-\ExtensionTok{/nfsroot}\NormalTok{         *(ro,fsid=0,no\_root\_squash,no\_subtree\_check,async,insecure)}
-\ExtensionTok{/nfsshared}\NormalTok{       *(rw,fsid=1,no\_root\_squash,no\_subtree\_check,async,insecure)}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tftpdockerfile-configuration-docker-du-serveur-tftp}{%
-\section{\texorpdfstring{\texttt{tftp/Dockerfile}: configuration
-\emph{Docker} du serveur
-\protect\hyperlink{acronym__TFTP}{TFTP}}{tftp/Dockerfile: configuration Docker du serveur TFTP}}\label{tftpdockerfile-configuration-docker-du-serveur-tftp}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{FROM}\NormalTok{ alpine:3.12}
-\KeywordTok{RUN}\NormalTok{ apk add tftp{-}hpa}
-\KeywordTok{VOLUME}\NormalTok{ /tftpboot}
-\KeywordTok{EXPOSE}\NormalTok{ 69/udp}
-\KeywordTok{ENTRYPOINT}\NormalTok{ [}\StringTok{"in.tftpd"}\NormalTok{, }\StringTok{"{-}{-}foreground"}\NormalTok{, }\StringTok{"{-}{-}address"}\NormalTok{, }\StringTok{":69"}\NormalTok{, }\StringTok{"{-}{-}secure"}\NormalTok{, }\StringTok{"{-}{-}verbose"}\NormalTok{, }\StringTok{"/tftpboot"}\NormalTok{]}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tftptftpd-hpa-configuration-du-serveur-tftp}{%
-\section{\texorpdfstring{\texttt{tftp/tftpd-hpa}: configuration du
-serveur
-\protect\hyperlink{acronym__TFTP}{TFTP}}{tftp/tftpd-hpa: configuration du serveur TFTP}}\label{tftptftpd-hpa-configuration-du-serveur-tftp}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\VariableTok{TFTP\_USERNAME=}\StringTok{"tftp"}
-\VariableTok{TFTP\_DIRECTORY=}\StringTok{"/tftpboot"}
-\VariableTok{TFTP\_ADDRESS=}\StringTok{":69"}
-\VariableTok{TFTP\_OPTIONS=}\StringTok{"{-}s {-}c"}
-\VariableTok{RUN\_DAEMON=}\StringTok{"yes"}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{tftptftpbootbootgrubgrub.cfg-configuration-de-grub-servie-par-tftp}{%
-\section{\texorpdfstring{\texttt{tftp/tftpboot/boot/grub/grub.cfg}:
-configuration de \protect\hyperlink{acronym__GRUB}{GRUB} servie par
-\protect\hyperlink{acronym__TFTP}{TFTP}}{tftp/tftpboot/boot/grub/grub.cfg: configuration de GRUB servie par TFTP}}\label{tftptftpbootbootgrubgrub.cfg-configuration-de-grub-servie-par-tftp}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{set} \VariableTok{timeout=}\NormalTok{3}
-
-\ExtensionTok{insmod}\NormalTok{ part\_msdos}
-\ExtensionTok{insmod}\NormalTok{ part\_gpt}
-\ExtensionTok{insmod}\NormalTok{ isign}
-\ExtensionTok{insmod}\NormalTok{ all\_video}
-
-\ExtensionTok{isign}\NormalTok{ {-}c hepia2015 (hd0)}
-\KeywordTok{set} \VariableTok{check1=$?}
-\KeywordTok{if}\BuiltInTok{ [} \VariableTok{$check1} \OtherTok{==}\NormalTok{ 101}\BuiltInTok{ ]}\NormalTok{; }\KeywordTok{then}
-    \ExtensionTok{isign}\NormalTok{ {-}w 000000000 (hd0)}
-
-    \ExtensionTok{menuentry} \StringTok{"Local HDD"}\NormalTok{ \{}
-        \KeywordTok{set} \VariableTok{root=(}\NormalTok{hd0,1}\VariableTok{)}
-
-        \KeywordTok{if}\BuiltInTok{ [} \OtherTok{{-}e}\NormalTok{ /efi\_entrypoint}\BuiltInTok{ ]}\NormalTok{; }\KeywordTok{then}
-            \BuiltInTok{echo} \StringTok{"Reading EFI entry point from (hd0,1)/efi\_entrypoint file..."}
-            \BuiltInTok{source}\NormalTok{ /efi\_entrypoint}
-
-            \BuiltInTok{echo} \StringTok{"Chainloading to }\VariableTok{$efi\_entrypoint}\StringTok{"}
-            \ExtensionTok{chainloader} \VariableTok{$efi\_entrypoint}
-        \KeywordTok{else}
-            \BuiltInTok{echo} \StringTok{"Legacy chainloading to (hd0,1)+1..."}
-            \ExtensionTok{chainloader}\NormalTok{ +1}
-        \KeywordTok{fi}
-\NormalTok{    \}}
-\KeywordTok{fi}
-
-\ExtensionTok{menuentry} \StringTok{"Bootiful deployer"}\NormalTok{ \{}
-    \BuiltInTok{echo} \StringTok{"Loading vmlinuz..."}
-    \ExtensionTok{linux}\NormalTok{ boot/deployer/vmlinuz root=/dev/nfs nfsroot=}\VariableTok{$net\_default\_server}\NormalTok{:/nfsroot ro}
-    \ExtensionTok{initrd}\NormalTok{ boot/deployer/initrd.img}
-\NormalTok{\}}
-
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{source_ansible_run}{%
-\section{\texorpdfstring{\texttt{postdeploy/bootiful-postdeploy}: script
-de post-déploiement qui exécute les playbooks \emph{Ansible} présents
-dans un
-dossier}{postdeploy/bootiful-postdeploy: script de post-déploiement qui exécute les playbooks Ansible présents dans un dossier}}\label{source_ansible_run}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\CommentTok{\#!/bin/bash}
-
-\KeywordTok{function}\FunctionTok{ log()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{log\_message=}\StringTok{"}\VariableTok{$0}\StringTok{"}
-    \OperatorTok{\textgreater{}\&2} \BuiltInTok{echo} \StringTok{"}\VariableTok{$log\_message}\StringTok{"}
-\KeywordTok{\}}
-
-\KeywordTok{function}\FunctionTok{ fatal\_error()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$0}\StringTok{"}
-    \ExtensionTok{log} \StringTok{"Fatal error: }\VariableTok{$error\_message}\StringTok{"}
-
-    \ExtensionTok{log} \StringTok{"Stack trace:"}
-    \BuiltInTok{local} \VariableTok{frame=}\NormalTok{0}
-    \KeywordTok{while} \OperatorTok{\textgreater{}\&2} \BuiltInTok{caller} \VariableTok{$frame}\KeywordTok{;} \KeywordTok{do}
-        \KeywordTok{((}\NormalTok{frame++}\KeywordTok{))}
-    \KeywordTok{done}
-
-    \BuiltInTok{exit}\NormalTok{ 1}
-\KeywordTok{\}}
-
-\ExtensionTok{log} \StringTok{"Starting bootiful post{-}deployment script..."}
-\BuiltInTok{readonly} \VariableTok{playbooks\_dir=}\StringTok{"/etc/bootiful/postdeploy{-}playbooks"}
-\KeywordTok{[[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$playbooks\_dir}\StringTok{"}\KeywordTok{ ]]} \KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"playbooks directory \textquotesingle{}}\VariableTok{$playbooks\_dir}\StringTok{\textquotesingle{} not found."}
-
-\BuiltInTok{readonly} \VariableTok{playbook\_files=}\StringTok{"}\VariableTok{$()}\StringTok{"}
-
-\KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$playbook\_files}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then}
-    \ExtensionTok{log} \StringTok{"no story found in directory \textquotesingle{}}\VariableTok{$playbooks\_dir}\StringTok{\textquotesingle{}. Exiting."}
-    \BuiltInTok{exit}\NormalTok{ 0}
-\KeywordTok{fi}
-
-\FunctionTok{run\_playbook()} \KeywordTok{\{}
-    \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{playbook\_file=}\StringTok{"}\VariableTok{$0}\StringTok{"}
-    \ExtensionTok{log} \StringTok{"Executing playbook file \textquotesingle{}}\VariableTok{$playbook\_file}\StringTok{\textquotesingle{}..."}
-\NormalTok{    [[ }\ExtensionTok{{-}f} \StringTok{"}\VariableTok{$playbook\_file}\StringTok{"}\NormalTok{ ]] }\KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"playbook file }\VariableTok{$playbook\_file}\StringTok{ not found."}
-
-    \ExtensionTok{ansible{-}playbook} \KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}{-}connection}\NormalTok{=local }\KeywordTok{\textbackslash{}}
-        \ExtensionTok{{-}{-}inventory}\NormalTok{=127.0.0.1, }\KeywordTok{\textbackslash{}}
-        \StringTok{"}\VariableTok{$playbook\_file}\StringTok{"} \KeywordTok{\textbackslash{}}
-        \KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"error while executing playbook file "}
-
-    \ExtensionTok{log} \StringTok{"Execution of playbook file \textquotesingle{}}\VariableTok{$playbook\_file}\StringTok{\textquotesingle{} successful."}
-\KeywordTok{\}}
-\BuiltInTok{export}\NormalTok{ {-}f }\VariableTok{run\_playbook}
-
-\CommentTok{\# shellcheck disable=SC2016 \# we do not want to expand $1 in bash command}
-\FunctionTok{find} \StringTok{"}\VariableTok{$playbooks\_dir}\StringTok{"}\NormalTok{ {-}maxdepth 1 {-}type f {-}name }\StringTok{\textquotesingle{}*.yml\textquotesingle{}}\NormalTok{ {-}print0 }\KeywordTok{|}
-    \FunctionTok{sort}\NormalTok{ {-}z }\KeywordTok{|}
-    \FunctionTok{xargs}\NormalTok{ {-}n1 {-}0 bash {-}c }\StringTok{$\textquotesingle{}trap }\DataTypeTok{\textbackslash{}\textquotesingle{}}\StringTok{[[ $? == 0 ]] || exit 255}\DataTypeTok{\textbackslash{}\textquotesingle{}}\StringTok{ EXIT; run\_playbook "$1"\textquotesingle{}}\NormalTok{ {-}{-}}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{source_ansible_init}{%
-\section{\texorpdfstring{\texttt{postdeploy/bootiful-postdeploy.service}:
-configuration de l'unité \emph{Systemd} pour exécuter des scripts de
-post-déploiement sur un
-client}{postdeploy/bootiful-postdeploy.service: configuration de l'unité Systemd pour exécuter des scripts de post-déploiement sur un client}}\label{source_ansible_init}}
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\KeywordTok{[Unit]}
-\DataTypeTok{Description}\OtherTok{=}\StringTok{Runs bootiful post{-}deployment script }\KeywordTok{on}\StringTok{ boot}
-\DataTypeTok{After}\OtherTok{=}\StringTok{network.target}
-
-\KeywordTok{[Service]}
-\DataTypeTok{ExecStart}\OtherTok{=}\StringTok{/usr/local/bin/bootiful{-}postdeploy}
-\DataTypeTok{Type}\OtherTok{=}\StringTok{oneshot}
-
-\KeywordTok{[Install]}
-\DataTypeTok{WantedBy}\OtherTok{=}\StringTok{multi{-}user.target}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{refs}{}
-\begin{cslreferences}
-\leavevmode\hypertarget{ref-venkatesh_remote_imaging}{}%
-\textbf{1}. VENKATESH, Abhilash. Remote imaging. GitLab. {[}en~ligne{]}.
-{[}Consulté~le~16~août~2020{]}. Disponible à l'adresse~:
-\url{https://githepia.hesge.ch/abhilash.venkates/remote-imaging}
-\end{cslreferences}
-
-\backmatter
-\end{document}
-- 
GitLab