diff --git a/doc/charts/chart_protocols.png b/doc/charts/chart_protocols.png
new file mode 100644
index 0000000000000000000000000000000000000000..d108de15820ea1103558812f7142244a981e754c
--- /dev/null
+++ b/doc/charts/chart_protocols.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6562672f98e6fa7ce49b2c3bddc6109e26de7ce653b87143d5b92363cd402446
+size 6780
diff --git a/doc/charts/chart_protocols.svg b/doc/charts/chart_protocols.svg
new file mode 100644
index 0000000000000000000000000000000000000000..602f1856d090de25ed0bf86e2c3a1bedb78aba55
--- /dev/null
+++ b/doc/charts/chart_protocols.svg
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Created with matplotlib (https://matplotlib.org/) -->
+<svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+  <style type="text/css">
+*{stroke-linecap:butt;stroke-linejoin:round;}
+  </style>
+ </defs>
+ <g id="figure_1">
+  <g id="patch_1">
+   <path d="M 0 345.6 
+L 460.8 345.6 
+L 460.8 0 
+L 0 0 
+z
+" style="fill:#ffffff;"/>
+  </g>
+  <g id="axes_1">
+   <g id="patch_2">
+    <path d="M 57.6 307.584 
+L 414.72 307.584 
+L 414.72 41.472 
+L 57.6 41.472 
+z
+" style="fill:#ffffff;"/>
+   </g>
+   <g id="matplotlib.axis_1"/>
+   <g id="matplotlib.axis_2">
+    <g id="ytick_1">
+     <g id="line2d_1">
+      <defs>
+       <path d="M 0 0 
+L -3.5 0 
+" id="mbf7378a3ce" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#mbf7378a3ce" y="271.296"/>
+      </g>
+     </g>
+     <g id="text_1">
+      <!-- −0.04 -->
+      <defs>
+       <path d="M 10.59375 35.5 
+L 73.1875 35.5 
+L 73.1875 27.203125 
+L 10.59375 27.203125 
+z
+" id="DejaVuSans-8722"/>
+       <path d="M 31.78125 66.40625 
+Q 24.171875 66.40625 20.328125 58.90625 
+Q 16.5 51.421875 16.5 36.375 
+Q 16.5 21.390625 20.328125 13.890625 
+Q 24.171875 6.390625 31.78125 6.390625 
+Q 39.453125 6.390625 43.28125 13.890625 
+Q 47.125 21.390625 47.125 36.375 
+Q 47.125 51.421875 43.28125 58.90625 
+Q 39.453125 66.40625 31.78125 66.40625 
+z
+M 31.78125 74.21875 
+Q 44.046875 74.21875 50.515625 64.515625 
+Q 56.984375 54.828125 56.984375 36.375 
+Q 56.984375 17.96875 50.515625 8.265625 
+Q 44.046875 -1.421875 31.78125 -1.421875 
+Q 19.53125 -1.421875 13.0625 8.265625 
+Q 6.59375 17.96875 6.59375 36.375 
+Q 6.59375 54.828125 13.0625 64.515625 
+Q 19.53125 74.21875 31.78125 74.21875 
+z
+" id="DejaVuSans-48"/>
+       <path d="M 10.6875 12.40625 
+L 21 12.40625 
+L 21 0 
+L 10.6875 0 
+z
+" id="DejaVuSans-46"/>
+       <path d="M 37.796875 64.3125 
+L 12.890625 25.390625 
+L 37.796875 25.390625 
+z
+M 35.203125 72.90625 
+L 47.609375 72.90625 
+L 47.609375 25.390625 
+L 58.015625 25.390625 
+L 58.015625 17.1875 
+L 47.609375 17.1875 
+L 47.609375 0 
+L 37.796875 0 
+L 37.796875 17.1875 
+L 4.890625 17.1875 
+L 4.890625 26.703125 
+z
+" id="DejaVuSans-52"/>
+      </defs>
+      <g transform="translate(19.954687 275.095219)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-8722"/>
+       <use x="83.789062" xlink:href="#DejaVuSans-48"/>
+       <use x="147.412109" xlink:href="#DejaVuSans-46"/>
+       <use x="179.199219" xlink:href="#DejaVuSans-48"/>
+       <use x="242.822266" xlink:href="#DejaVuSans-52"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_2">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#mbf7378a3ce" y="222.912"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- −0.02 -->
+      <defs>
+       <path d="M 19.1875 8.296875 
+L 53.609375 8.296875 
+L 53.609375 0 
+L 7.328125 0 
+L 7.328125 8.296875 
+Q 12.9375 14.109375 22.625 23.890625 
+Q 32.328125 33.6875 34.8125 36.53125 
+Q 39.546875 41.84375 41.421875 45.53125 
+Q 43.3125 49.21875 43.3125 52.78125 
+Q 43.3125 58.59375 39.234375 62.25 
+Q 35.15625 65.921875 28.609375 65.921875 
+Q 23.96875 65.921875 18.8125 64.3125 
+Q 13.671875 62.703125 7.8125 59.421875 
+L 7.8125 69.390625 
+Q 13.765625 71.78125 18.9375 73 
+Q 24.125 74.21875 28.421875 74.21875 
+Q 39.75 74.21875 46.484375 68.546875 
+Q 53.21875 62.890625 53.21875 53.421875 
+Q 53.21875 48.921875 51.53125 44.890625 
+Q 49.859375 40.875 45.40625 35.40625 
+Q 44.1875 33.984375 37.640625 27.21875 
+Q 31.109375 20.453125 19.1875 8.296875 
+z
+" id="DejaVuSans-50"/>
+      </defs>
+      <g transform="translate(19.954687 226.711219)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-8722"/>
+       <use x="83.789062" xlink:href="#DejaVuSans-48"/>
+       <use x="147.412109" xlink:href="#DejaVuSans-46"/>
+       <use x="179.199219" xlink:href="#DejaVuSans-48"/>
+       <use x="242.822266" xlink:href="#DejaVuSans-50"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#mbf7378a3ce" y="174.528"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- 0.00 -->
+      <g transform="translate(28.334375 178.327219)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-48"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-48"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_4">
+     <g id="line2d_4">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#mbf7378a3ce" y="126.144"/>
+      </g>
+     </g>
+     <g id="text_4">
+      <!-- 0.02 -->
+      <g transform="translate(28.334375 129.943219)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-48"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-48"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-50"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_5">
+     <g id="line2d_5">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#mbf7378a3ce" y="77.76"/>
+      </g>
+     </g>
+     <g id="text_5">
+      <!-- 0.04 -->
+      <g transform="translate(28.334375 81.559219)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-48"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-48"/>
+       <use x="159.033203" xlink:href="#DejaVuSans-52"/>
+      </g>
+     </g>
+    </g>
+   </g>
+   <g id="patch_3">
+    <path d="M 57.6 307.584 
+L 57.6 41.472 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_4">
+    <path d="M 414.72 307.584 
+L 414.72 41.472 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_5">
+    <path d="M 57.6 307.584 
+L 414.72 307.584 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+   <g id="patch_6">
+    <path d="M 57.6 41.472 
+L 414.72 41.472 
+" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
+   </g>
+  </g>
+ </g>
+</svg>
diff --git a/doc/csv2barchart.py b/doc/csv2barchart.py
new file mode 100755
index 0000000000000000000000000000000000000000..43a2db3f8c4347243df51bf2ba12a0a2e2d855f0
--- /dev/null
+++ b/doc/csv2barchart.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+import csv
+from sys import stdin, argv
+from typing import TextIO
+
+import matplotlib.pyplot as plt
+
+
+def csv_to_barchart(file: TextIO) -> plt.Figure:
+    next(file) # skip header
+    csv_reader = csv.reader(file, delimiter=';', quoting=csv.QUOTE_NONNUMERIC)
+    xs=[]
+    xticks=[]
+    ys=[]
+    for (x, (xtick, y)) in enumerate(csv_reader):
+        xs.append(x)
+        xticks.append(xtick)
+        ys.append(y)
+
+    fig = plt.figure()
+    plt.bar(xs, ys)
+    plt.xticks(xs, xticks)
+
+    return fig
+
+if __name__ == '__main__':
+    filenames = argv[1:]
+    fig = csv_to_barchart(stdin)
+
+    for filename in filenames:
+        fig.savefig(filename)
\ No newline at end of file
diff --git a/doc/gitlab-markdown.gpp b/doc/gitlab-markdown.gpp
index 1af2eef4f4c6d0f477e91c8746673c4b5a6102d8..dbe433393e27417e0f58f9682b5b4756abde84ac 100644
--- a/doc/gitlab-markdown.gpp
+++ b/doc/gitlab-markdown.gpp
@@ -34,3 +34,11 @@
 !!define{!!acronymdescription{short}}{!!exec{cat acronyms.md | sed -n 's/^- \*\*!!short\*\*\: //p' | pandoc --from=markdown --to=plain | tr '\n' ' '}}
 
 !!define{!!acronym{short}}{!!defeval{tmp_acronymdescription}{!!acronymdescription{!!short}}!!ifeq{!!tmp_acronymdescription}{}!!warning{No definition found for acronym '!!short'}!!endif<abbr title="!!tmp_acronymdescription">!!short</abbr>}
+
+!!define{!!inlinemath{content}}{$`!!content`$}
+
+!!define{!!displaymath{content}}{
+```math
+!!content
+```
+}
\ No newline at end of file
diff --git a/doc/markdown.gpp b/doc/markdown.gpp
index cc72c61dfd3958ac90fbb82c52f73f16d69ff2e7..1807d5f94ef02b9418f3a1ed5a15d24348acb11a 100644
--- a/doc/markdown.gpp
+++ b/doc/markdown.gpp
@@ -23,4 +23,8 @@ EOF-DEFACRONYM-GPP-MACRO
 
 !!define{!!comment}{}
 
+!!define{!!barchart{ref_id}{description}{chartdata}}{!!exec{>/dev/null ./csv2barchart.py "charts/!!ref_id.png" "charts/!!ref_id.svg" << 'EOF_BARCHART_MACRO'
+!!chart_data
+EOF_BARCHART_MACRO}!!svgref{!!ref_id}{!!description}{charts/!!ref_id}}
+
 !!endif
\ No newline at end of file
diff --git a/doc/pandoc-pdf-markdown.gpp b/doc/pandoc-pdf-markdown.gpp
index 9304201f0c365cdac442381ffad153e45120b02a..b1786b1d38b2efbea419a47182ec850a12b54804 100644
--- a/doc/pandoc-pdf-markdown.gpp
+++ b/doc/pandoc-pdf-markdown.gpp
@@ -25,3 +25,7 @@
 }
 
 !!define{!!acronym{short}}{[!!short](#acronym__!!short)}
+
+!!define{!!inlinemath{content}}{$!!content$}
+
+!!define{!!displaymath{content}}{$$ !!content $$}
\ No newline at end of file
diff --git a/doc/rapport.gpp.md b/doc/rapport.gpp.md
index 3bcc609e66d544387b9a7ef1025056f613afbed7..4ff8c524f6211d30f566396e66ee1ebaf0a099bb 100644
--- a/doc/rapport.gpp.md
+++ b/doc/rapport.gpp.md
@@ -70,13 +70,22 @@ abstract: |
 !!defacronym{PC}{_Personal Computer_: ordinateur personnel}
 !!defacronym{PXE}{_Pre-boot eXecution Environment_: environnement d'exécution pré-démarrage}
 !!defacronym{MBR}{_Master Boot Record_: enregistrement d'amorcage maître}
-!!defacronym{GRUB}{_GRand Unified Bootloader}
-!!defacronym{BIOS}{_Basic Input Output System_}
+!!defacronym{GRUB}{_GRand Unified Bootloader_}
+!!defacronym{BIOS}{_Basic Input Output System_: système de base d'entrée sortie}
 !!defacronym{UEFI}{_Unified Extensible Firmware Interface_: interface micrologicielle extensible unifiée}
 !!defacronym{DHCP}{_Dynamic Host Configuration Protocol_: protocole de configuration dynamique des hôtes }
 !!defacronym{TFTP}{_Trivial File Transfer Protocol_: protocole simplifié de transfert de fichiers}
 !!defacronym{NFS}{_Network File System_: système de fichiers en réseau}
 !!defacronym{NAT}{_Network Address Translation_: traduction d'adresse réseau}
+!!defacronym{SCP}{_Secure CoPy_: protocole de copie sécurisée sur le réseau}
+!!defacronym{SSH}{_Secure SHell_: protocole de terminal à distance securisé}
+!!defacronym{HTTP}{_HyperText Transfer Protocol_:  protocole de transfert hypertexte}
+!!defacronym{WWW}{_World Wide Web_: toile mondiale / réseau mondial }
+!!defacronym{HTTPS}{_HyperText Transfer Protocol Secure_: protocole de transfert hypertexte sécurisé}
+!!defacronym{FTP}{_File Transfer Protocol_: protocole de transfert de fichier}
+!!defacronym{IPFS}{_InterPlanetary File System_: système de fichier inter-planétaire}
+!!defacronym{SMB}{_Server Message Block_}
+
 
 !!tableofcontents
 !!newpage
@@ -486,8 +495,9 @@ il comporte de nombreuses limitations auxquelles il faudrait palier:
   commande, ce n'est pas très facile à utiliser.
 - Les scripts de déploiement sont fragiles et gèrent mal les erreurs.
 - 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 !!acronym{OS}, il
-  faut faire $n$ images: une pour chaque personnalisation.
+  !!inlinemath{n} personnalisation partant sur la base du même
+  !!acronym{OS}, il faut faire !!inlinemath{n} images: une pour chaque
+  personnalisation.
 - L'installation de nouveaux outils sur le système d'exploitation de
   l'!!acronym{OS} de déploiement créé avec _Buildroot_ peut être
   compliqué si l'outil a beaucoup de dépendances.
@@ -511,11 +521,495 @@ il comporte de nombreuses limitations auxquelles il faudrait palier:
 
 ## Amélioration de la vitesse de transfert des images
 
-**TODO: expliquer, détailler et comparer (tableaux, diagrammes) les
-différentes mesures qui ont conduit à garder NFS pour le transfert des
-images. Aussi expliquer les limites probables de NFS avec beaucoup de
-postes simultanés et donner des pistes d'amélioration (multicast,
-bittorrent+http, optimisations NFS).**
+Le protocole !!acronym{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.
+
+### Protocoles considérés
+Les différents protocoles qui ont été mesurés sont:
+
+- !!acronym{SCP}: ce protocole, utilisable avec le programme éponyme
+  `scp`, permet le transfert de fichiers sécurisé entre un client et un
+  serveur utilisant le protocole d'accès à distance sécurisé
+  !!acronym{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.
+- !!acronym{HTTP}: c'est le protocole client-serveur utilisé sur le
+  World Wide Web (!!acronym{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, !!acronym{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.
+- !!acronym{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.
+- !!acronym{NFS}: le protocole standard pour monter à distance des
+  dossiers partagés entre des !!acronym{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.
+- !!acronym{SMB}: le protocole standard pour monter à distance des
+  dossier partagés entre des !!acronym{OS} Windows. Une implémentation
+  existe sous linux, _Samba_, et elle est courremment utilisée pour une
+  meilleure compatiblité avec les systèmes Windows que sont équivalent
+  !!acronym{NFS}.
+- !!acronym{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.
+
+### 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:
+
+- Processeur: Intel® Core™ i7-8700 CPU cadencé à 3.20GHz,
+- Mémoire vive: 8 GiB (2 barettes 4GiB SODIMM DDR4 Synchronous 2666 MHz
+  (0.4 ns))
+- Disque: TOSHIBA KSG60ZMV SSD 476GiB (512GB)
+- Réseau: Intel e1000e Gigabit Ethernet
+
+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
+_buster_) AMD64 a été installé sur deux machines de test,
+sans interface graphique. La première machine est nommée `debian1` et la seconde
+`debian2`. Les noms `debian1.home` et `debian2.home` permettent aux deux
+machines de communiquer entre elles en faisant abstraction de leur
+adresse !!acronym{IP}. L'utilisateur `debian` avec le mot de passe
+`debian` est utilisé sur chacune des deux machines.
+
+Le fichier à copier, `win10.tar.gz` est une image brute de windows 10
+compressée avec `gzip`, qui fait une taille totale de
+13743592907 B (12.8 GiB). Il est présent dans le dossier `/home/debian`
+de la machine `debian1`.
+
+La commande `perf` est utilisée pour tester 4 exécutions d'une commande
+de copie lancée depuis la machine `debian2`. Elle est installée à l'aide
+de la commande suivante:
+
+```bash
+apt install linux-perf
+```
+
+Pour faire fonctionner la commande sans être root, le kernel doit être
+configuré avec la commande suivante:
+
+```bash
+echo 1 > /proc/sys/kernel/perf_event_paranoid
+```
+
+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.
+
+### Tests de performance du protocole de transfert de fichiers !!acronym{SCP}
+
+Tout d'abord, des clés SSH ont été générées sur chaque machine avec la
+commande suivante:
+
+```bash
+ssh-keygen
+```
+
+Ensuite, les clés ont été échangées. Sur `debian1`, la commande suivante
+a été utilisée:
+
+```bash
+ssh-copy-id debian2.home
+```
+
+Sur `debian2`, la commande suivante a été utilisée:
+
+```bash
+ssh-copy-id debian1.home
+```
+
+Finalement, le benchmark de la copie a été lancé sur `debian2`:
+
+```console
+$ perf stat -r 4 -d scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz
+win10.tar.gz                                                                       100%   13GB 109.6MB/s   01:59    
+win10.tar.gz                                                                       100%   13GB 109.6MB/s   01:59    
+win10.tar.gz                                                                       100%   13GB 109.7MB/s   01:59    
+win10.tar.gz                                                                       100%   13GB 109.6MB/s   01:59    
+
+ Performance counter stats for 'scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz' (4 runs):
+
+         60,349.20 msec task-clock                #    0.504 CPUs utilized            ( +-  3.61% )
+           808,243      context-switches          #    0.013 M/sec                    ( +-  0.26% )
+                16      cpu-migrations            #    0.000 K/sec                    ( +- 14.73% )
+            16,862      page-faults               #    0.279 K/sec                    ( +- 18.95% )
+   191,612,352,176      cycles                    #    3.175 GHz                      ( +-  0.33% )  (50.09%)
+   406,400,076,305      instructions              #    2.12  insn per cycle           ( +-  0.25% )  (62.64%)
+    13,334,327,547      branches                  #  220.953 M/sec                    ( +-  1.42% )  (62.43%)
+       246,499,018      branch-misses             #    1.85% of all branches          ( +-  3.10% )  (62.36%)
+    64,653,696,732      L1-dcache-loads           # 1071.326 M/sec                    ( +-  0.44% )  (62.40%)
+     4,559,992,550      L1-dcache-load-misses     #    7.05% of all L1-dcache hits    ( +-  0.41% )  (62.43%)
+       784,218,339      LLC-loads                 #   12.995 M/sec                    ( +-  0.64% )  (50.01%)
+       121,317,304      LLC-load-misses           #   15.47% of all LL-cache hits     ( +-  0.52% )  (50.29%)
+
+          119.8094 +- 0.0182 seconds time elapsed  ( +-  0.02% )
+```
+
+### Tests de performance du protocole de transfert de fichiers !!acronym{HTTP}
+
+Le serveur !!acronym{HTTP} _Apache_ a été installé sur la machine
+`debian1` et le fichier a été mis à disposition sur ce serveur avec les
+commandes suivantes:
+
+```bash
+apt install apache2
+cp win10.tar.gz /var/www/html/
+```
+
+Finalement, le benchmark du téléchargement du fichier avec la commande
+`wget` a été lancé sur `debian2`:
+
+```console
+$ perf stat -r 4 -d wget http://debian1.home/win10.tar.gz
+--2020-05-20 09:53:53--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.2’
+
+win10.tar.gz.2                100%[==============================================>]  12.80G   110MB/s    in 2m 0s   
+
+2020-05-20 09:55:53 (110 MB/s) - ‘win10.tar.gz.2’ saved [13743592907/13743592907]
+
+--2020-05-20 09:55:53--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.3’
+
+win10.tar.gz.3                100%[==============================================>]  12.80G   108MB/s    in 2m 0s   
+
+2020-05-20 09:57:52 (109 MB/s) - ‘win10.tar.gz.3’ saved [13743592907/13743592907]
+
+--2020-05-20 09:57:52--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.4’
+
+win10.tar.gz.4                100%[==============================================>]  12.80G   108MB/s    in 2m 1s   
+
+2020-05-20 09:59:53 (109 MB/s) - ‘win10.tar.gz.4’ saved [13743592907/13743592907]
+
+--2020-05-20 09:59:53--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.5’
+
+win10.tar.gz.5                100%[==============================================>]  12.80G   110MB/s    in 2m 0s   
+
+2020-05-20 10:01:52 (110 MB/s) - ‘win10.tar.gz.5’ saved [13743592907/13743592907]
+
+
+ Performance counter stats for 'wget http://debian1.home/win10.tar.gz' (4 runs):
+
+         46,792.73 msec task-clock                #    0.390 CPUs utilized            ( +-  0.64% )
+           417,641      context-switches          #    0.009 M/sec                    ( +-  0.31% )
+                18      cpu-migrations            #    0.000 K/sec                    ( +-  8.25% )
+               292      page-faults               #    0.006 K/sec                    ( +-  0.30% )
+    61,311,321,905      cycles                    #    1.310 GHz                      ( +-  0.25% )  (49.71%)
+    55,652,602,418      instructions              #    0.91  insn per cycle           ( +-  0.20% )  (61.93%)
+    10,835,524,321      branches                  #  231.564 M/sec                    ( +-  0.14% )  (62.04%)
+       229,073,690      branch-misses             #    2.11% of all branches          ( +-  1.03% )  (62.77%)
+    16,218,621,768      L1-dcache-loads           #  346.606 M/sec                    ( +-  0.16% )  (62.94%)
+     1,767,713,664      L1-dcache-load-misses     #   10.90% of all L1-dcache hits    ( +-  0.17% )  (62.78%)
+       392,258,789      LLC-loads                 #    8.383 M/sec                    ( +-  1.79% )  (50.19%)
+       113,116,138      LLC-load-misses           #   28.84% of all LL-cache hits     ( +-  0.25% )  (49.57%)
+
+           119.871 +- 0.235 seconds time elapsed  ( +-  0.20% )
+```
+
+### Tests de performance du protocole de transfert de fichiers !!acronym{FTP}
+
+Le serveur !!acronym{FTP} `vsftpd` a été installé sur la machine
+`debian1` avec la commande suivante:
+
+```bash
+apt install vsftpd
+```
+
+Le client !!acronym{FTP} `ftp` a été installé sur la machine `debian2`
+avec la commande suivante:
+
+```bash
+apt install ftp
+```
+
+Par défaut, un utilisateur se connecte sur son dossier `home` sur le
+serveur, donc il n'y a pas besoin de créer de configuration spéciale car
+le fichier à `win10.tar.gz` est déjà présent dans le dossier
+`/home/debian`. La commande suivante est lancée pour mesurer le temps de
+transfert:
+
+```console
+$ perf stat -r 4 -d lftp -u debian,debian -e "get -e win10.tar.gz;quit" debian1.home
+13743592907 bytes transferred in 120 seconds (109.61 MiB/s)             
+13743592907 bytes transferred in 120 seconds (109.11 MiB/s)             
+13743592907 bytes transferred in 120 seconds (108.81 MiB/s)             
+13743592907 bytes transferred in 120 seconds (109.01 MiB/s)             
+
+ Performance counter stats for 'lftp -u debian,debian -e get -e win10.tar.gz;quit debian1.home' (4 runs):
+
+         43,760.05 msec task-clock                #    0.364 CPUs utilized            ( +-  3.19% )
+           416,480      context-switches          #    0.010 M/sec                    ( +-  0.21% )
+                20      cpu-migrations            #    0.000 K/sec                    ( +- 17.44% )
+               768      page-faults               #    0.018 K/sec                    ( +-  1.76% )
+    50,319,107,200      cycles                    #    1.150 GHz                      ( +-  1.87% )  (49.42%)
+    41,925,907,326      instructions              #    0.83  insn per cycle           ( +-  2.58% )  (61.97%)
+     8,345,354,967      branches                  #  190.707 M/sec                    ( +-  2.51% )  (62.63%)
+       192,939,322      branch-misses             #    2.31% of all branches          ( +-  3.57% )  (62.66%)
+    12,148,795,763      L1-dcache-loads           #  277.623 M/sec                    ( +-  2.11% )  (63.06%)
+     1,646,404,955      L1-dcache-load-misses     #   13.55% of all L1-dcache hits    ( +-  0.76% )  (62.79%)
+       516,891,020      LLC-loads                 #   11.812 M/sec                    ( +-  0.79% )  (49.87%)
+       112,961,435      LLC-load-misses           #   21.85% of all LL-cache hits     ( +-  0.29% )  (49.56%)
+
+           120.151 +- 0.213 seconds time elapsed  ( +-  0.18% )
+```
+
+### Tests de performance du protocole de transfert de fichiers !!acronym{NFS}
+
+Le serveur !!acronym{NFS} est installé et configuré avec les commandes
+suivantes sur `debian1`:
+
+```bash
+apt install nfs-kernel-server
+mkdir /nfsroot
+cp win10.tar.gz /nfsroot/
+echo '/nfsroot/         *(rw,fsid=0,no_root_squash,no_subtree_check,async,insecure)' >> /etc/exports
+systemctl restart nfs-server
+```
+
+Le client partage est monté sur le client `debian2` avec les commandes
+suivantes:
+
+```bash
+su
+apt install nfs-common
+mkdir /nfsroot
+mount -t nfs debian1.home:/nfsroot /nfsroot
+exit
+```
+
+Finalement, le benchmark de la copie a été lancé sur `debian2`:
+
+```console
+$ perf stat -r 4 -d cp -f /nfsroot/win10.tar.gz ~/win10.tar.gz
+
+ Performance counter stats for 'cp -f /nfsroot/win10.tar.gz /home/debian/win10.tar.gz' (4 runs):
+
+         17,076.43 msec task-clock                #    0.142 CPUs utilized            ( +-  7.26% )
+            13,716      context-switches          #    0.803 K/sec                    ( +-  3.93% )
+                 3      cpu-migrations            #    0.000 K/sec                    ( +- 22.88% )
+               360      page-faults               #    0.021 K/sec                    ( +-  0.24% )
+    29,329,681,962      cycles                    #    1.718 GHz                      ( +-  0.84% )  (50.10%)
+    39,303,308,222      instructions              #    1.34  insn per cycle           ( +-  0.27% )  (62.64%)
+     7,592,336,916      branches                  #  444.609 M/sec                    ( +-  0.28% )  (62.68%)
+        79,751,186      branch-misses             #    1.05% of all branches          ( +-  0.28% )  (62.46%)
+    10,749,309,904      L1-dcache-loads           #  629.482 M/sec                    ( +-  0.40% )  (62.54%)
+     1,097,825,933      L1-dcache-load-misses     #   10.21% of all L1-dcache hits    ( +-  1.45% )  (62.44%)
+       230,105,352      LLC-loads                 #   13.475 M/sec                    ( +-  1.25% )  (49.92%)
+        13,665,720      LLC-load-misses           #    5.94% of all LL-cache hits     ( +-  8.55% )  (49.87%)
+
+           120.417 +- 0.119 seconds time elapsed  ( +-  0.10% )
+```
+
+### Tests de performance du protocole de transfert de fichiers !!acronym{SMB}
+
+Le serveur !!acronym{SMB} `samba` est installé et configuré avec les
+commandes suivantes sur `debian1`:
+
+```bash
+apt install samba
+smbpasswd -a debian 
+cat '[debian]
+path = /home/debian
+valid users = debian
+read only = no' >> /etc/samba/smb.conf
+systemctl restart smbd
+```
+
+Le client !!acronym{SMB} `samba` est installé sur le client avec la
+commande suivante:
+
+```bash
+apt install samba-client
+```
+
+Finalement, le benchmark de la copie est lancé sur `debian2`:
+
+```command
+$ perf stat -r 4 -d smbclient -U debian%debian //debian1.home/debian -c 'get win10.tar.gz'
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (109684.9 KiloBytes/sec) (average 109684.9 KiloBytes/sec)
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (109443.4 KiloBytes/sec) (average 109443.4 KiloBytes/sec)
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (110095.1 KiloBytes/sec) (average 110095.1 KiloBytes/sec)
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (109244.7 KiloBytes/sec) (average 109244.7 KiloBytes/sec)
+
+ Performance counter stats for 'smbclient -U debian%debian //debian1.home/debian -c get win10.tar.gz' (4 runs):
+
+         35,488.67 msec task-clock                #    0.290 CPUs utilized            ( +-  0.49% )
+           352,535      context-switches          #    0.010 M/sec                    ( +-  0.24% )
+                14      cpu-migrations            #    0.000 K/sec                    ( +- 19.12% )
+             3,915      page-faults               #    0.110 K/sec                    ( +-  3.20% )
+    35,420,663,303      cycles                    #    0.998 GHz                      ( +-  0.45% )  (50.50%)
+    35,124,728,140      instructions              #    0.99  insn per cycle           ( +-  2.40% )  (62.99%)
+     6,843,251,403      branches                  #  192.829 M/sec                    ( +-  2.43% )  (62.60%)
+       115,346,267      branch-misses             #    1.69% of all branches          ( +-  1.05% )  (62.27%)
+     9,922,177,546      L1-dcache-loads           #  279.587 M/sec                    ( +-  1.82% )  (61.98%)
+     1,307,137,276      L1-dcache-load-misses     #   13.17% of all L1-dcache hits    ( +-  0.23% )  (62.22%)
+       437,456,998      LLC-loads                 #   12.327 M/sec                    ( +-  4.03% )  (50.00%)
+       159,643,085      LLC-load-misses           #   36.49% of all LL-cache hits     ( +-  8.69% )  (50.44%)
+
+           122.565 +- 0.215 seconds time elapsed  ( +-  0.18% )
+```
+
+### Tests de performance du protocole de transfert de fichiers !!acronym{IPFS}
+
+Sur chacune des machines, le langage _Go_ doit être installé avec les
+commandes suivantes:
+
+```bash
+wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz
+tar -C /usr/local -xzf go1.14.3.linux-amd64.tar.gz
+echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
+export PATH=$PATH:/usr/local/go/bin
+```
+
+Ensuite, !!acronym{IPFS} est installé sur chacune des machines:
+
+```bash
+wget https://dist.ipfs.io/go-ipfs/v0.5.1/go-ipfs_v0.5.1_linux-amd64.tar.gz
+tar xvzf go-ipfs_v0.5.1_linux-amd64.tar.gz
+mv go-ipfs/ipfs /usr/local/bin/ipfs
+```
+
+Un noeud !!acronym{IPFS} est ensuite initialisé sur chacune des
+machines:
+
+```bash
+IPFS_PATH=~/.ipfs ipfs init
+```
+
+Pour avoir un réseau IPFS privé, on génère une clé de _swarm_ sur
+`debian1` et on la copie sur `debian2`, en lançant les commandes
+suivantes sur la machine `debian1`:
+
+```bash
+echo -e "/key/swarm/psk/1.0.0/\n/base16/\n`tr -dc 'a-f0-9' < /dev/urandom | head -c64`" > ~/.ipfs/swarm.key
+scp /home/debian/.ipfs/swarm.key debian2.home:/home/debian/.ipfs/swarm.key
+```
+
+Maintenant, il faut configurer un noeud d'amorçage (_bootstrap node_)
+sur `debian1`, qui sera utilisé par `debian2` pour se connecter au
+réseau !!acronym{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:
+
+```bash
+IPFS_PATH=~/.ipfs ipfs bootstrap rm --all
+```
+
+Ensuite, il faut récupérer l'identifiant unique `PeerID` de `debian1`
+pour pouvoir le configurer comme un noeud d'amorçage dans `debian2`. La
+commande suivante est lancée sur `debian1`:
+
+```console
+$ IPFS_PATH=~/.ipfs ipfs config show | grep "PeerID"
+    "PeerID": "QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei"
+```
+
+L'identitfiant unique `PeerID` de `debian1` retourné par la commande
+est: `QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei`. On peut
+maintenant le rajouter dans la configuration des noeuds d'amorçage des
+deux machines en lançant la commande suivante sur chacune d'entre elle:
+
+```bash
+IPFS_PATH=~/.ipfs ipfs bootstrap add /dnsaddr/debian1.home/p2p/QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei
+```
+
+Maintenant, le _daemon_ !!acronym{IPFS} peut être lancé sur chacune des
+machines. La variable d'environnement `LIBP2P_FORCE_PNET=1` est définie
+pour forcer les échanges à se faire sur un réseau privé.
+
+```bash
+export LIBP2P_FORCE_PNET=1
+IPFS_PATH=~/.ipfs ipfs daemon
+```
+
+Dans ce cas, le _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 `debian1`:
+
+```console
+$ IPFS_PATH=~/.ipfs ipfs add win10.tar.gz 
+added QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv win10.tar.gz
+ 12.80 GiB / 12.80 GiB [====================================================================================] 100.00%
+```
+
+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: `QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv`.
+
+On peut maintenant tenter de récupérer le fichier depuis `debian2`:
+
+```console
+$ IPFS_PATH=~/.ipfs ipfs get QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv
+Saving file(s) to QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv
+ 12.80 GiB / 12.80 GiB [==============================================================================] 100.00% 7m27s
+```
+
+Le transfert a pris !!inlinemath{7m27s = 447s}. C'est beaucoup trop long
+pour nos besoins. Le benchmark avec `perf` n'a même pas été effectué au
+vu de ce résultat.
+
+### Comparaison des résultats des tests de protocoles de transfert de fichiers
+
+!!barchart{chart_protocols}{Graphique comparant la durée de la copie d'un fichier avec différents protocoles}{  
+"Protocole";"Durée (secondes)"
+"FTP";123
+"HTTP";456
+"tutu";123
+}
+
+### Protocole choisi pour le transfert d'image
+
+ **TODO: expliquer, détailler et
+comparer (tableaux, diagrammes) les différentes mesures qui ont conduit
+à garder NFS pour le transfert des images. Aussi expliquer les limites
+probables de NFS avec beaucoup de postes simultanés et donner des pistes
+d'amélioration (multicast, bittorrent+http, optimisations NFS).**
 
 ## Réduction de la taille des images
 
@@ -536,6 +1030,8 @@ images.**
 récentes, des modifications nécessaires pour supporter ce nouveau
 système et des limitations que cela apporte.**
 
+## Déploiement d'image Windows
+
 ## Amélioration de l'OS de déploiement
 
 **TODO: expliquer pourquoi le passage d'une image buildroot chargée d'un
diff --git a/doc/rapport.md b/doc/rapport.md
index 7e736c85b87a16d0fed29a69e02f05f602cff9d0..ce82cd2b5c3a13df63d4f1ac45efa11cde2ed65f 100644
--- a/doc/rapport.md
+++ b/doc/rapport.md
@@ -24,9 +24,9 @@
 
 - **MBR**: _Master Boot Record_: enregistrement d'amorcage maître
 
-- **GRUB**: _GRand Unified Bootloader
+- **GRUB**: _GRand Unified Bootloader_
 
-- **BIOS**: _Basic Input Output System_
+- **BIOS**: _Basic Input Output System_: système de base d'entrée sortie
 
 - **UEFI**: _Unified Extensible Firmware Interface_: interface micrologicielle extensible unifiée
 
@@ -38,6 +38,22 @@
 
 - **NAT**: _Network Address Translation_: traduction d'adresse réseau
 
+- **SCP**: _Secure CoPy_: protocole de copie sécurisée sur le réseau
+
+- **SSH**: _Secure SHell_: protocole de terminal à distance securisé
+
+- **HTTP**: _HyperText Transfer Protocol_:  protocole de transfert hypertexte
+
+- **WWW**: _World Wide Web_: toile mondiale / réseau mondial 
+
+- **HTTPS**: _HyperText Transfer Protocol Secure_: protocole de transfert hypertexte sécurisé
+
+- **FTP**: _File Transfer Protocol_: protocole de transfert de fichier
+
+- **IPFS**: _InterPlanetary File System_: système de fichier inter-planétaire
+
+- **SMB**: _Server Message Block_
+
 
 
 
@@ -193,7 +209,7 @@ Les postes clients supportés par le système sont des ordinateurs
 compatibles <abbr title="Personal Computer: ordinateur personnel ">PC</abbr> x86.
 
 Ils doivent nécessairement être équipés d'une carte réseau et d'un
-micrologiciel <abbr title="Basic Input Output System ">BIOS</abbr> ou <abbr title="Unified Extensible Firmware Interface: interface micrologicielle extensible unifiée ">UEFI</abbr> capables et configurés
+micrologiciel <abbr title="Basic Input Output System: système de base d’entrée sortie ">BIOS</abbr> ou <abbr title="Unified Extensible Firmware Interface: interface micrologicielle extensible unifiée ">UEFI</abbr> capables et configurés
 pour amorcer un système d'exploitation à partir du réseau à chaque
 démarrage en utilisant le standard <abbr title="Pre-boot eXecution Environment: environnement d’exécution pré-démarrage ">PXE</abbr>.
 
@@ -273,10 +289,10 @@ avec les postes clients pour leur permettre d'effectuer plusieurs
 actions:
 
 1. Recevoir une configuration IP et un chargeur d'amorcage
-   <abbr title="_GRand Unified Bootloader ">GRUB</abbr> à exécuter pour démarrer sur le réseau en utilisant
+   <abbr title="GRand Unified Bootloader ">GRUB</abbr> à exécuter pour démarrer sur le réseau en utilisant
    le standard PXE.
 2. Analyser la signature présente sur le disque dur depuis le chargeur
-   d'amorçage chargeur d'amorcage <abbr title="_GRand Unified Bootloader ">GRUB</abbr>.
+   d'amorçage chargeur d'amorcage <abbr title="GRand Unified Bootloader ">GRUB</abbr>.
    - 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.
@@ -415,10 +431,10 @@ La configuration du serveur <abbr title="Dynamic Host Configuration Protocol: pr
 qu'en plus du `option tftp-server-name "192.168.56.100"`, le paramètre
 `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, <abbr title="_GRand Unified Bootloader ">GRUB</abbr>) doit être téléchargé.
-Cependant, une fois <abbr title="_GRand Unified Bootloader ">GRUB</abbr> démarré, il n'était pas capable de
+d'amorçage (dans ce cas, <abbr title="GRand Unified Bootloader ">GRUB</abbr>) doit être téléchargé.
+Cependant, une fois <abbr title="GRand Unified Bootloader ">GRUB</abbr> démarré, il n'était pas capable de
 trouver l'image du système linux de déploiement. L'option `next-server`
-a permis de renseigner <abbr title="_GRand Unified Bootloader ">GRUB</abbr> sur le fait qu'il doit par défaut
+a permis de renseigner <abbr title="GRand Unified Bootloader ">GRUB</abbr> sur le fait qu'il doit par défaut
 rechercher les fichiers mentionnés dans la configuration dans le serveur
 <abbr title="Trivial File Transfer Protocol: protocole simplifié de transfert de fichiers ">TFTP</abbr> accessible par l'adresse IP mentionnée.
 
@@ -427,12 +443,12 @@ 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,
-<abbr title="_GRand Unified Bootloader ">GRUB</abbr> était configuré pour lancer le programme `ipxe` depuis
+<abbr title="GRand Unified Bootloader ">GRUB</abbr> était configuré pour lancer le programme `ipxe` depuis
 le serveur <abbr title="Trivial File Transfer Protocol: protocole simplifié de transfert de fichiers ">TFTP</abbr>, qui lui même initie le démarrage depuis le
 premier disque. Ce système ne fonctionnait pas: `ipxe` ne se lançait
 même pas à cause d'un chemin invalide. De plus ce système rajoutait une
-étape inutile: <abbr title="_GRand Unified Bootloader ">GRUB</abbr> est tout à fait capable de démarrer sur
-le premier disque. Le fichier de configuration de <abbr title="_GRand Unified Bootloader ">GRUB</abbr> a donc
+étape inutile: <abbr title="GRand Unified Bootloader ">GRUB</abbr> est tout à fait capable de démarrer sur
+le premier disque. Le fichier de configuration de <abbr title="GRand Unified Bootloader ">GRUB</abbr> 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.
 
@@ -469,8 +485,9 @@ il comporte de nombreuses limitations auxquelles il faudrait palier:
   commande, ce n'est pas très facile à utiliser.
 - Les scripts de déploiement sont fragiles et gèrent mal les erreurs.
 - 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 <abbr title="Operating System: système d’exploitation ">OS</abbr>, il
-  faut faire $n$ images: une pour chaque personnalisation.
+  $`n`$ personnalisation partant sur la base du même
+  <abbr title="Operating System: système d’exploitation ">OS</abbr>, il faut faire $`n`$ images: une pour chaque
+  personnalisation.
 - L'installation de nouveaux outils sur le système d'exploitation de
   l'<abbr title="Operating System: système d’exploitation ">OS</abbr> de déploiement créé avec _Buildroot_ peut être
   compliqué si l'outil a beaucoup de dépendances.
@@ -494,11 +511,496 @@ il comporte de nombreuses limitations auxquelles il faudrait palier:
 
 ## Amélioration de la vitesse de transfert des images
 
-**TODO: expliquer, détailler et comparer (tableaux, diagrammes) les
-différentes mesures qui ont conduit à garder NFS pour le transfert des
-images. Aussi expliquer les limites probables de NFS avec beaucoup de
-postes simultanés et donner des pistes d'amélioration (multicast,
-bittorrent+http, optimisations NFS).**
+Le protocole <abbr title="Network File System: système de fichiers en réseau ">NFS</abbr> 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.
+
+### Protocoles considérés
+Les différents protocoles qui ont été mesurés sont:
+
+- <abbr title="Secure CoPy: protocole de copie sécurisée sur le réseau ">SCP</abbr>: ce protocole, utilisable avec le programme éponyme
+  `scp`, permet le transfert de fichiers sécurisé entre un client et un
+  serveur utilisant le protocole d'accès à distance sécurisé
+  <abbr title="Secure SHell: protocole de terminal à distance securisé ">SSH</abbr>. 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.
+- <abbr title="HyperText Transfer Protocol: protocole de transfert hypertexte ">HTTP</abbr>: c'est le protocole client-serveur utilisé sur le
+  World Wide Web (<abbr title="World Wide Web: toile mondiale / réseau mondial ">WWW</abbr>) 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, <abbr title="HyperText Transfer Protocol Secure: protocole de transfert hypertexte sécurisé ">HTTPS</abbr>, 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.
+- <abbr title="File Transfer Protocol: protocole de transfert de fichier ">FTP</abbr>: 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.
+- <abbr title="Network File System: système de fichiers en réseau ">NFS</abbr>: le protocole standard pour monter à distance des
+  dossiers partagés entre des <abbr title="Operating System: système d’exploitation ">OS</abbr> 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.
+- <abbr title="Server Message Block ">SMB</abbr>: le protocole standard pour monter à distance des
+  dossier partagés entre des <abbr title="Operating System: système d’exploitation ">OS</abbr> Windows. Une implémentation
+  existe sous linux, _Samba_, et elle est courremment utilisée pour une
+  meilleure compatiblité avec les systèmes Windows que sont équivalent
+  <abbr title="Network File System: système de fichiers en réseau ">NFS</abbr>.
+- <abbr title="InterPlanetary File System: système de fichier inter-planétaire ">IPFS</abbr>: 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.
+
+### 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:
+
+- Processeur: Intel® Core™ i7-8700 CPU cadencé à 3.20GHz,
+- Mémoire vive: 8 GiB (2 barettes 4GiB SODIMM DDR4 Synchronous 2666 MHz
+  (0.4 ns))
+- Disque: TOSHIBA KSG60ZMV SSD 476GiB (512GB)
+- Réseau: Intel e1000e Gigabit Ethernet
+
+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
+_buster_) AMD64 a été installé sur deux machines de test,
+sans interface graphique. La première machine est nommée `debian1` et la seconde
+`debian2`. Les noms `debian1.home` et `debian2.home` permettent aux deux
+machines de communiquer entre elles en faisant abstraction de leur
+adresse <abbr title="Internet Protocol: protocole internet ">IP</abbr>. L'utilisateur `debian` avec le mot de passe
+`debian` est utilisé sur chacune des deux machines.
+
+Le fichier à copier, `win10.tar.gz` est une image brute de windows 10
+compressée avec `gzip`, qui fait une taille totale de
+13743592907 B (12.8 GiB). Il est présent dans le dossier `/home/debian`
+de la machine `debian1`.
+
+La commande `perf` est utilisée pour tester 4 exécutions d'une commande
+de copie lancée depuis la machine `debian2`. Elle est installée à l'aide
+de la commande suivante:
+
+```bash
+apt install linux-perf
+```
+
+Pour faire fonctionner la commande sans être root, le kernel doit être
+configuré avec la commande suivante:
+
+```bash
+echo 1 > /proc/sys/kernel/perf_event_paranoid
+```
+
+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.
+
+### Tests de performance du protocole de transfert de fichiers <abbr title="Secure CoPy: protocole de copie sécurisée sur le réseau ">SCP</abbr>
+
+Tout d'abord, des clés SSH ont été générées sur chaque machine avec la
+commande suivante:
+
+```bash
+ssh-keygen
+```
+
+Ensuite, les clés ont été échangées. Sur `debian1`, la commande suivante
+a été utilisée:
+
+```bash
+ssh-copy-id debian2.home
+```
+
+Sur `debian2`, la commande suivante a été utilisée:
+
+```bash
+ssh-copy-id debian1.home
+```
+
+Finalement, le benchmark de la copie a été lancé sur `debian2`:
+
+```console
+$ perf stat -r 4 -d scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz
+win10.tar.gz                                                                       100%   13GB 109.6MB/s   01:59    
+win10.tar.gz                                                                       100%   13GB 109.6MB/s   01:59    
+win10.tar.gz                                                                       100%   13GB 109.7MB/s   01:59    
+win10.tar.gz                                                                       100%   13GB 109.6MB/s   01:59    
+
+ Performance counter stats for 'scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz' (4 runs):
+
+         60,349.20 msec task-clock                #    0.504 CPUs utilized            ( +-  3.61% )
+           808,243      context-switches          #    0.013 M/sec                    ( +-  0.26% )
+                16      cpu-migrations            #    0.000 K/sec                    ( +- 14.73% )
+            16,862      page-faults               #    0.279 K/sec                    ( +- 18.95% )
+   191,612,352,176      cycles                    #    3.175 GHz                      ( +-  0.33% )  (50.09%)
+   406,400,076,305      instructions              #    2.12  insn per cycle           ( +-  0.25% )  (62.64%)
+    13,334,327,547      branches                  #  220.953 M/sec                    ( +-  1.42% )  (62.43%)
+       246,499,018      branch-misses             #    1.85% of all branches          ( +-  3.10% )  (62.36%)
+    64,653,696,732      L1-dcache-loads           # 1071.326 M/sec                    ( +-  0.44% )  (62.40%)
+     4,559,992,550      L1-dcache-load-misses     #    7.05% of all L1-dcache hits    ( +-  0.41% )  (62.43%)
+       784,218,339      LLC-loads                 #   12.995 M/sec                    ( +-  0.64% )  (50.01%)
+       121,317,304      LLC-load-misses           #   15.47% of all LL-cache hits     ( +-  0.52% )  (50.29%)
+
+          119.8094 +- 0.0182 seconds time elapsed  ( +-  0.02% )
+```
+
+### Tests de performance du protocole de transfert de fichiers <abbr title="HyperText Transfer Protocol: protocole de transfert hypertexte ">HTTP</abbr>
+
+Le serveur <abbr title="HyperText Transfer Protocol: protocole de transfert hypertexte ">HTTP</abbr> _Apache_ a été installé sur la machine
+`debian1` et le fichier a été mis à disposition sur ce serveur avec les
+commandes suivantes:
+
+```bash
+apt install apache2
+cp win10.tar.gz /var/www/html/
+```
+
+Finalement, le benchmark du téléchargement du fichier avec la commande
+`wget` a été lancé sur `debian2`:
+
+```console
+$ perf stat -r 4 -d wget http://debian1.home/win10.tar.gz
+--2020-05-20 09:53:53--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.2’
+
+win10.tar.gz.2                100%[==============================================>]  12.80G   110MB/s    in 2m 0s   
+
+2020-05-20 09:55:53 (110 MB/s) - ‘win10.tar.gz.2’ saved [13743592907/13743592907]
+
+--2020-05-20 09:55:53--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.3’
+
+win10.tar.gz.3                100%[==============================================>]  12.80G   108MB/s    in 2m 0s   
+
+2020-05-20 09:57:52 (109 MB/s) - ‘win10.tar.gz.3’ saved [13743592907/13743592907]
+
+--2020-05-20 09:57:52--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.4’
+
+win10.tar.gz.4                100%[==============================================>]  12.80G   108MB/s    in 2m 1s   
+
+2020-05-20 09:59:53 (109 MB/s) - ‘win10.tar.gz.4’ saved [13743592907/13743592907]
+
+--2020-05-20 09:59:53--  http://debian1.home/win10.tar.gz
+Resolving debian1.home (debian1.home)... 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29
+Connecting to debian1.home (debian1.home)|2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 13743592907 (13G) [application/x-gzip]
+Saving to: ‘win10.tar.gz.5’
+
+win10.tar.gz.5                100%[==============================================>]  12.80G   110MB/s    in 2m 0s   
+
+2020-05-20 10:01:52 (110 MB/s) - ‘win10.tar.gz.5’ saved [13743592907/13743592907]
+
+
+ Performance counter stats for 'wget http://debian1.home/win10.tar.gz' (4 runs):
+
+         46,792.73 msec task-clock                #    0.390 CPUs utilized            ( +-  0.64% )
+           417,641      context-switches          #    0.009 M/sec                    ( +-  0.31% )
+                18      cpu-migrations            #    0.000 K/sec                    ( +-  8.25% )
+               292      page-faults               #    0.006 K/sec                    ( +-  0.30% )
+    61,311,321,905      cycles                    #    1.310 GHz                      ( +-  0.25% )  (49.71%)
+    55,652,602,418      instructions              #    0.91  insn per cycle           ( +-  0.20% )  (61.93%)
+    10,835,524,321      branches                  #  231.564 M/sec                    ( +-  0.14% )  (62.04%)
+       229,073,690      branch-misses             #    2.11% of all branches          ( +-  1.03% )  (62.77%)
+    16,218,621,768      L1-dcache-loads           #  346.606 M/sec                    ( +-  0.16% )  (62.94%)
+     1,767,713,664      L1-dcache-load-misses     #   10.90% of all L1-dcache hits    ( +-  0.17% )  (62.78%)
+       392,258,789      LLC-loads                 #    8.383 M/sec                    ( +-  1.79% )  (50.19%)
+       113,116,138      LLC-load-misses           #   28.84% of all LL-cache hits     ( +-  0.25% )  (49.57%)
+
+           119.871 +- 0.235 seconds time elapsed  ( +-  0.20% )
+```
+
+### Tests de performance du protocole de transfert de fichiers <abbr title="File Transfer Protocol: protocole de transfert de fichier ">FTP</abbr>
+
+Le serveur <abbr title="File Transfer Protocol: protocole de transfert de fichier ">FTP</abbr> `vsftpd` a été installé sur la machine
+`debian1` avec la commande suivante:
+
+```bash
+apt install vsftpd
+```
+
+Le client <abbr title="File Transfer Protocol: protocole de transfert de fichier ">FTP</abbr> `ftp` a été installé sur la machine `debian2`
+avec la commande suivante:
+
+```bash
+apt install ftp
+```
+
+Par défaut, un utilisateur se connecte sur son dossier `home` sur le
+serveur, donc il n'y a pas besoin de créer de configuration spéciale car
+le fichier à `win10.tar.gz` est déjà présent dans le dossier
+`/home/debian`. La commande suivante est lancée pour mesurer le temps de
+transfert:
+
+```console
+$ perf stat -r 4 -d lftp -u debian,debian -e "get -e win10.tar.gz;quit" debian1.home
+13743592907 bytes transferred in 120 seconds (109.61 MiB/s)             
+13743592907 bytes transferred in 120 seconds (109.11 MiB/s)             
+13743592907 bytes transferred in 120 seconds (108.81 MiB/s)             
+13743592907 bytes transferred in 120 seconds (109.01 MiB/s)             
+
+ Performance counter stats for 'lftp -u debian,debian -e get -e win10.tar.gz;quit debian1.home' (4 runs):
+
+         43,760.05 msec task-clock                #    0.364 CPUs utilized            ( +-  3.19% )
+           416,480      context-switches          #    0.010 M/sec                    ( +-  0.21% )
+                20      cpu-migrations            #    0.000 K/sec                    ( +- 17.44% )
+               768      page-faults               #    0.018 K/sec                    ( +-  1.76% )
+    50,319,107,200      cycles                    #    1.150 GHz                      ( +-  1.87% )  (49.42%)
+    41,925,907,326      instructions              #    0.83  insn per cycle           ( +-  2.58% )  (61.97%)
+     8,345,354,967      branches                  #  190.707 M/sec                    ( +-  2.51% )  (62.63%)
+       192,939,322      branch-misses             #    2.31% of all branches          ( +-  3.57% )  (62.66%)
+    12,148,795,763      L1-dcache-loads           #  277.623 M/sec                    ( +-  2.11% )  (63.06%)
+     1,646,404,955      L1-dcache-load-misses     #   13.55% of all L1-dcache hits    ( +-  0.76% )  (62.79%)
+       516,891,020      LLC-loads                 #   11.812 M/sec                    ( +-  0.79% )  (49.87%)
+       112,961,435      LLC-load-misses           #   21.85% of all LL-cache hits     ( +-  0.29% )  (49.56%)
+
+           120.151 +- 0.213 seconds time elapsed  ( +-  0.18% )
+```
+
+### Tests de performance du protocole de transfert de fichiers <abbr title="Network File System: système de fichiers en réseau ">NFS</abbr>
+
+Le serveur <abbr title="Network File System: système de fichiers en réseau ">NFS</abbr> est installé et configuré avec les commandes
+suivantes sur `debian1`:
+
+```bash
+apt install nfs-kernel-server
+mkdir /nfsroot
+cp win10.tar.gz /nfsroot/
+echo '/nfsroot/         *(rw,fsid=0,no_root_squash,no_subtree_check,async,insecure)' >> /etc/exports
+systemctl restart nfs-server
+```
+
+Le client partage est monté sur le client `debian2` avec les commandes
+suivantes:
+
+```bash
+su
+apt install nfs-common
+mkdir /nfsroot
+mount -t nfs debian1.home:/nfsroot /nfsroot
+exit
+```
+
+Finalement, le benchmark de la copie a été lancé sur `debian2`:
+
+```console
+$ perf stat -r 4 -d cp -f /nfsroot/win10.tar.gz ~/win10.tar.gz
+
+ Performance counter stats for 'cp -f /nfsroot/win10.tar.gz /home/debian/win10.tar.gz' (4 runs):
+
+         17,076.43 msec task-clock                #    0.142 CPUs utilized            ( +-  7.26% )
+            13,716      context-switches          #    0.803 K/sec                    ( +-  3.93% )
+                 3      cpu-migrations            #    0.000 K/sec                    ( +- 22.88% )
+               360      page-faults               #    0.021 K/sec                    ( +-  0.24% )
+    29,329,681,962      cycles                    #    1.718 GHz                      ( +-  0.84% )  (50.10%)
+    39,303,308,222      instructions              #    1.34  insn per cycle           ( +-  0.27% )  (62.64%)
+     7,592,336,916      branches                  #  444.609 M/sec                    ( +-  0.28% )  (62.68%)
+        79,751,186      branch-misses             #    1.05% of all branches          ( +-  0.28% )  (62.46%)
+    10,749,309,904      L1-dcache-loads           #  629.482 M/sec                    ( +-  0.40% )  (62.54%)
+     1,097,825,933      L1-dcache-load-misses     #   10.21% of all L1-dcache hits    ( +-  1.45% )  (62.44%)
+       230,105,352      LLC-loads                 #   13.475 M/sec                    ( +-  1.25% )  (49.92%)
+        13,665,720      LLC-load-misses           #    5.94% of all LL-cache hits     ( +-  8.55% )  (49.87%)
+
+           120.417 +- 0.119 seconds time elapsed  ( +-  0.10% )
+```
+
+### Tests de performance du protocole de transfert de fichiers <abbr title="Server Message Block ">SMB</abbr>
+
+Le serveur <abbr title="Server Message Block ">SMB</abbr> `samba` est installé et configuré avec les
+commandes suivantes sur `debian1`:
+
+```bash
+apt install samba
+smbpasswd -a debian 
+cat '[debian]
+path = /home/debian
+valid users = debian
+read only = no' >> /etc/samba/smb.conf
+systemctl restart smbd
+```
+
+Le client <abbr title="Server Message Block ">SMB</abbr> `samba` est installé sur le client avec la
+commande suivante:
+
+```bash
+apt install samba-client
+```
+
+Finalement, le benchmark de la copie est lancé sur `debian2`:
+
+```command
+$ perf stat -r 4 -d smbclient -U debian%debian //debian1.home/debian -c 'get win10.tar.gz'
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (109684.9 KiloBytes/sec) (average 109684.9 KiloBytes/sec)
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (109443.4 KiloBytes/sec) (average 109443.4 KiloBytes/sec)
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (110095.1 KiloBytes/sec) (average 110095.1 KiloBytes/sec)
+Unable to initialize messaging context
+getting file \win10.tar.gz of size 13743592907 as win10.tar.gz (109244.7 KiloBytes/sec) (average 109244.7 KiloBytes/sec)
+
+ Performance counter stats for 'smbclient -U debian%debian //debian1.home/debian -c get win10.tar.gz' (4 runs):
+
+         35,488.67 msec task-clock                #    0.290 CPUs utilized            ( +-  0.49% )
+           352,535      context-switches          #    0.010 M/sec                    ( +-  0.24% )
+                14      cpu-migrations            #    0.000 K/sec                    ( +- 19.12% )
+             3,915      page-faults               #    0.110 K/sec                    ( +-  3.20% )
+    35,420,663,303      cycles                    #    0.998 GHz                      ( +-  0.45% )  (50.50%)
+    35,124,728,140      instructions              #    0.99  insn per cycle           ( +-  2.40% )  (62.99%)
+     6,843,251,403      branches                  #  192.829 M/sec                    ( +-  2.43% )  (62.60%)
+       115,346,267      branch-misses             #    1.69% of all branches          ( +-  1.05% )  (62.27%)
+     9,922,177,546      L1-dcache-loads           #  279.587 M/sec                    ( +-  1.82% )  (61.98%)
+     1,307,137,276      L1-dcache-load-misses     #   13.17% of all L1-dcache hits    ( +-  0.23% )  (62.22%)
+       437,456,998      LLC-loads                 #   12.327 M/sec                    ( +-  4.03% )  (50.00%)
+       159,643,085      LLC-load-misses           #   36.49% of all LL-cache hits     ( +-  8.69% )  (50.44%)
+
+           122.565 +- 0.215 seconds time elapsed  ( +-  0.18% )
+```
+
+### Tests de performance du protocole de transfert de fichiers <abbr title="InterPlanetary File System: système de fichier inter-planétaire ">IPFS</abbr>
+
+Sur chacune des machines, le langage _Go_ doit être installé avec les
+commandes suivantes:
+
+```bash
+wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz
+tar -C /usr/local -xzf go1.14.3.linux-amd64.tar.gz
+echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
+export PATH=$PATH:/usr/local/go/bin
+```
+
+Ensuite, <abbr title="InterPlanetary File System: système de fichier inter-planétaire ">IPFS</abbr> est installé sur chacune des machines:
+
+```bash
+wget https://dist.ipfs.io/go-ipfs/v0.5.1/go-ipfs_v0.5.1_linux-amd64.tar.gz
+tar xvzf go-ipfs_v0.5.1_linux-amd64.tar.gz
+mv go-ipfs/ipfs /usr/local/bin/ipfs
+```
+
+Un noeud <abbr title="InterPlanetary File System: système de fichier inter-planétaire ">IPFS</abbr> est ensuite initialisé sur chacune des
+machines:
+
+```bash
+IPFS_PATH=~/.ipfs ipfs init
+```
+
+Pour avoir un réseau IPFS privé, on génère une clé de _swarm_ sur
+`debian1` et on la copie sur `debian2`, en lançant les commandes
+suivantes sur la machine `debian1`:
+
+```bash
+echo -e "/key/swarm/psk/1.0.0/\n/base16/\n`tr -dc 'a-f0-9' < /dev/urandom | head -c64`" > ~/.ipfs/swarm.key
+scp /home/debian/.ipfs/swarm.key debian2.home:/home/debian/.ipfs/swarm.key
+```
+
+Maintenant, il faut configurer un noeud d'amorçage (_bootstrap node_)
+sur `debian1`, qui sera utilisé par `debian2` pour se connecter au
+réseau <abbr title="InterPlanetary File System: système de fichier inter-planétaire ">IPFS</abbr> 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:
+
+```bash
+IPFS_PATH=~/.ipfs ipfs bootstrap rm --all
+```
+
+Ensuite, il faut récupérer l'identifiant unique `PeerID` de `debian1`
+pour pouvoir le configurer comme un noeud d'amorçage dans `debian2`. La
+commande suivante est lancée sur `debian1`:
+
+```console
+$ IPFS_PATH=~/.ipfs ipfs config show | grep "PeerID"
+    "PeerID": "QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei"
+```
+
+L'identitfiant unique `PeerID` de `debian1` retourné par la commande
+est: `QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei`. On peut
+maintenant le rajouter dans la configuration des noeuds d'amorçage des
+deux machines en lançant la commande suivante sur chacune d'entre elle:
+
+```bash
+IPFS_PATH=~/.ipfs ipfs bootstrap add /dnsaddr/debian1.home/p2p/QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei
+```
+
+Maintenant, le _daemon_ <abbr title="InterPlanetary File System: système de fichier inter-planétaire ">IPFS</abbr> peut être lancé sur chacune des
+machines. La variable d'environnement `LIBP2P_FORCE_PNET=1` est définie
+pour forcer les échanges à se faire sur un réseau privé.
+
+```bash
+export LIBP2P_FORCE_PNET=1
+IPFS_PATH=~/.ipfs ipfs daemon
+```
+
+Dans ce cas, le _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 `debian1`:
+
+```console
+$ IPFS_PATH=~/.ipfs ipfs add win10.tar.gz 
+added QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv win10.tar.gz
+ 12.80 GiB / 12.80 GiB [====================================================================================] 100.00%
+```
+
+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: `QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv`.
+
+On peut maintenant tenter de récupérer le fichier depuis `debian2`:
+
+```console
+$ IPFS_PATH=~/.ipfs ipfs get QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv
+Saving file(s) to QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv
+ 12.80 GiB / 12.80 GiB [==============================================================================] 100.00% 7m27s
+```
+
+Le transfert a pris $`7m27s = 447s`$. C'est beaucoup trop long
+pour nos besoins. Le benchmark avec `perf` n'a même pas été effectué au
+vu de ce résultat.
+
+### Comparaison des résultats des tests de protocoles de transfert de fichiers
+
+
+<figure>
+<a name="chart_protocols"/>
+![Graphique comparant la durée de la copie d'un fichier avec différents protocoles](charts/chart_protocols.png)
+<figcaption>Graphique comparant la durée de la copie d'un fichier avec différents protocoles</figcaption>
+</figure>
+
+
+### Protocole choisi pour le transfert d'image
+
+ **TODO: expliquer, détailler et
+comparer (tableaux, diagrammes) les différentes mesures qui ont conduit
+à garder NFS pour le transfert des images. Aussi expliquer les limites
+probables de NFS avec beaucoup de postes simultanés et donner des pistes
+d'amélioration (multicast, bittorrent+http, optimisations NFS).**
 
 ## Réduction de la taille des images
 
@@ -519,6 +1021,8 @@ images.**
 récentes, des modifications nécessaires pour supporter ce nouveau
 système et des limitations que cela apporte.**
 
+## Déploiement d'image Windows
+
 ## Amélioration de l'OS de déploiement
 
 **TODO: expliquer pourquoi le passage d'une image buildroot chargée d'un
diff --git a/doc/rapport.pdf b/doc/rapport.pdf
index 77337a17e2b50b7c3daacdcdeb9e514b7ee36997..0f0b1fb38f0345bdfe13c95c2567fe5f3dcf0ccd 100644
Binary files a/doc/rapport.pdf and b/doc/rapport.pdf differ