diff --git a/doc/charts/chart_image_sizes_debian.png b/doc/charts/chart_image_sizes_debian.png
new file mode 100644
index 0000000000000000000000000000000000000000..a752974f7ca4dc3df505d990e964f05775d9742d
--- /dev/null
+++ b/doc/charts/chart_image_sizes_debian.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:873268fdaf7edbf7202273fa4803418d0b8b59820e33c99ed374b09c45a6ff1f
+size 12289
diff --git a/doc/charts/chart_image_sizes_debian.svg b/doc/charts/chart_image_sizes_debian.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bd57e5ef48d2a50c02031dbe0817ff788bb16567
--- /dev/null
+++ b/doc/charts/chart_image_sizes_debian.svg
@@ -0,0 +1,745 @@
+<?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="patch_3">
+    <path clip-path="url(#p60aa827e55)" d="M 73.832727 307.584 
+L 166.591169 307.584 
+L 166.591169 54.144 
+L 73.832727 54.144 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="patch_4">
+    <path clip-path="url(#p60aa827e55)" d="M 189.780779 307.584 
+L 282.539221 307.584 
+L 282.539221 268.486806 
+L 189.780779 268.486806 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="patch_5">
+    <path clip-path="url(#p60aa827e55)" d="M 305.728831 307.584 
+L 398.487273 307.584 
+L 398.487273 284.27565 
+L 305.728831 284.27565 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="matplotlib.axis_1">
+    <g id="xtick_1">
+     <g id="line2d_1">
+      <defs>
+       <path d="M 0 0 
+L 0 3.5 
+" id="maf3ac2b643" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="120.211948" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_1">
+      <!-- Déployé -->
+      <defs>
+       <path d="M 19.671875 64.796875 
+L 19.671875 8.109375 
+L 31.59375 8.109375 
+Q 46.6875 8.109375 53.6875 14.9375 
+Q 60.6875 21.78125 60.6875 36.53125 
+Q 60.6875 51.171875 53.6875 57.984375 
+Q 46.6875 64.796875 31.59375 64.796875 
+z
+M 9.8125 72.90625 
+L 30.078125 72.90625 
+Q 51.265625 72.90625 61.171875 64.09375 
+Q 71.09375 55.28125 71.09375 36.53125 
+Q 71.09375 17.671875 61.125 8.828125 
+Q 51.171875 0 30.078125 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-68"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+M 38.578125 79.984375 
+L 48.296875 79.984375 
+L 32.375 61.625 
+L 24.90625 61.625 
+z
+" id="DejaVuSans-233"/>
+       <path d="M 18.109375 8.203125 
+L 18.109375 -20.796875 
+L 9.078125 -20.796875 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.390625 
+Q 20.953125 51.265625 25.265625 53.625 
+Q 29.59375 56 35.59375 56 
+Q 45.5625 56 51.78125 48.09375 
+Q 58.015625 40.1875 58.015625 27.296875 
+Q 58.015625 14.40625 51.78125 6.484375 
+Q 45.5625 -1.421875 35.59375 -1.421875 
+Q 29.59375 -1.421875 25.265625 0.953125 
+Q 20.953125 3.328125 18.109375 8.203125 
+z
+M 48.6875 27.296875 
+Q 48.6875 37.203125 44.609375 42.84375 
+Q 40.53125 48.484375 33.40625 48.484375 
+Q 26.265625 48.484375 22.1875 42.84375 
+Q 18.109375 37.203125 18.109375 27.296875 
+Q 18.109375 17.390625 22.1875 11.75 
+Q 26.265625 6.109375 33.40625 6.109375 
+Q 40.53125 6.109375 44.609375 11.75 
+Q 48.6875 17.390625 48.6875 27.296875 
+z
+" id="DejaVuSans-112"/>
+       <path d="M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 0 
+L 9.421875 0 
+z
+" id="DejaVuSans-108"/>
+       <path d="M 30.609375 48.390625 
+Q 23.390625 48.390625 19.1875 42.75 
+Q 14.984375 37.109375 14.984375 27.296875 
+Q 14.984375 17.484375 19.15625 11.84375 
+Q 23.34375 6.203125 30.609375 6.203125 
+Q 37.796875 6.203125 41.984375 11.859375 
+Q 46.1875 17.53125 46.1875 27.296875 
+Q 46.1875 37.015625 41.984375 42.703125 
+Q 37.796875 48.390625 30.609375 48.390625 
+z
+M 30.609375 56 
+Q 42.328125 56 49.015625 48.375 
+Q 55.71875 40.765625 55.71875 27.296875 
+Q 55.71875 13.875 49.015625 6.21875 
+Q 42.328125 -1.421875 30.609375 -1.421875 
+Q 18.84375 -1.421875 12.171875 6.21875 
+Q 5.515625 13.875 5.515625 27.296875 
+Q 5.515625 40.765625 12.171875 48.375 
+Q 18.84375 56 30.609375 56 
+z
+" id="DejaVuSans-111"/>
+       <path d="M 32.171875 -5.078125 
+Q 28.375 -14.84375 24.75 -17.8125 
+Q 21.140625 -20.796875 15.09375 -20.796875 
+L 7.90625 -20.796875 
+L 7.90625 -13.28125 
+L 13.1875 -13.28125 
+Q 16.890625 -13.28125 18.9375 -11.515625 
+Q 21 -9.765625 23.484375 -3.21875 
+L 25.09375 0.875 
+L 2.984375 54.6875 
+L 12.5 54.6875 
+L 29.59375 11.921875 
+L 46.6875 54.6875 
+L 56.203125 54.6875 
+z
+" id="DejaVuSans-121"/>
+      </defs>
+      <g transform="translate(99.626792 322.582437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-68"/>
+       <use x="77.001953" xlink:href="#DejaVuSans-233"/>
+       <use x="138.525391" xlink:href="#DejaVuSans-112"/>
+       <use x="202.001953" xlink:href="#DejaVuSans-108"/>
+       <use x="229.785156" xlink:href="#DejaVuSans-111"/>
+       <use x="290.966797" xlink:href="#DejaVuSans-121"/>
+       <use x="350.146484" xlink:href="#DejaVuSans-233"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_2">
+     <g id="line2d_2">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="236.16" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- Gzip -->
+      <defs>
+       <path d="M 59.515625 10.40625 
+L 59.515625 29.984375 
+L 43.40625 29.984375 
+L 43.40625 38.09375 
+L 69.28125 38.09375 
+L 69.28125 6.78125 
+Q 63.578125 2.734375 56.6875 0.65625 
+Q 49.8125 -1.421875 42 -1.421875 
+Q 24.90625 -1.421875 15.25 8.5625 
+Q 5.609375 18.5625 5.609375 36.375 
+Q 5.609375 54.25 15.25 64.234375 
+Q 24.90625 74.21875 42 74.21875 
+Q 49.125 74.21875 55.546875 72.453125 
+Q 61.96875 70.703125 67.390625 67.28125 
+L 67.390625 56.78125 
+Q 61.921875 61.421875 55.765625 63.765625 
+Q 49.609375 66.109375 42.828125 66.109375 
+Q 29.4375 66.109375 22.71875 58.640625 
+Q 16.015625 51.171875 16.015625 36.375 
+Q 16.015625 21.625 22.71875 14.15625 
+Q 29.4375 6.6875 42.828125 6.6875 
+Q 48.046875 6.6875 52.140625 7.59375 
+Q 56.25 8.5 59.515625 10.40625 
+z
+" id="DejaVuSans-71"/>
+       <path d="M 5.515625 54.6875 
+L 48.1875 54.6875 
+L 48.1875 46.484375 
+L 14.40625 7.171875 
+L 48.1875 7.171875 
+L 48.1875 0 
+L 4.296875 0 
+L 4.296875 8.203125 
+L 38.09375 47.515625 
+L 5.515625 47.515625 
+z
+" id="DejaVuSans-122"/>
+       <path d="M 9.421875 54.6875 
+L 18.40625 54.6875 
+L 18.40625 0 
+L 9.421875 0 
+z
+M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 64.59375 
+L 9.421875 64.59375 
+z
+" id="DejaVuSans-105"/>
+      </defs>
+      <g transform="translate(225.098281 322.182437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-71"/>
+       <use x="77.490234" xlink:href="#DejaVuSans-122"/>
+       <use x="129.980469" xlink:href="#DejaVuSans-105"/>
+       <use x="157.763672" xlink:href="#DejaVuSans-112"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="352.108052" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- Clonezilla -->
+      <defs>
+       <path d="M 64.40625 67.28125 
+L 64.40625 56.890625 
+Q 59.421875 61.53125 53.78125 63.8125 
+Q 48.140625 66.109375 41.796875 66.109375 
+Q 29.296875 66.109375 22.65625 58.46875 
+Q 16.015625 50.828125 16.015625 36.375 
+Q 16.015625 21.96875 22.65625 14.328125 
+Q 29.296875 6.6875 41.796875 6.6875 
+Q 48.140625 6.6875 53.78125 8.984375 
+Q 59.421875 11.28125 64.40625 15.921875 
+L 64.40625 5.609375 
+Q 59.234375 2.09375 53.4375 0.328125 
+Q 47.65625 -1.421875 41.21875 -1.421875 
+Q 24.65625 -1.421875 15.125 8.703125 
+Q 5.609375 18.84375 5.609375 36.375 
+Q 5.609375 53.953125 15.125 64.078125 
+Q 24.65625 74.21875 41.21875 74.21875 
+Q 47.75 74.21875 53.53125 72.484375 
+Q 59.328125 70.75 64.40625 67.28125 
+z
+" id="DejaVuSans-67"/>
+       <path d="M 54.890625 33.015625 
+L 54.890625 0 
+L 45.90625 0 
+L 45.90625 32.71875 
+Q 45.90625 40.484375 42.875 44.328125 
+Q 39.84375 48.1875 33.796875 48.1875 
+Q 26.515625 48.1875 22.3125 43.546875 
+Q 18.109375 38.921875 18.109375 30.90625 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 21.34375 51.125 25.703125 53.5625 
+Q 30.078125 56 35.796875 56 
+Q 45.21875 56 50.046875 50.171875 
+Q 54.890625 44.34375 54.890625 33.015625 
+z
+" id="DejaVuSans-110"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+" id="DejaVuSans-101"/>
+       <path d="M 34.28125 27.484375 
+Q 23.390625 27.484375 19.1875 25 
+Q 14.984375 22.515625 14.984375 16.5 
+Q 14.984375 11.71875 18.140625 8.90625 
+Q 21.296875 6.109375 26.703125 6.109375 
+Q 34.1875 6.109375 38.703125 11.40625 
+Q 43.21875 16.703125 43.21875 25.484375 
+L 43.21875 27.484375 
+z
+M 52.203125 31.203125 
+L 52.203125 0 
+L 43.21875 0 
+L 43.21875 8.296875 
+Q 40.140625 3.328125 35.546875 0.953125 
+Q 30.953125 -1.421875 24.3125 -1.421875 
+Q 15.921875 -1.421875 10.953125 3.296875 
+Q 6 8.015625 6 15.921875 
+Q 6 25.140625 12.171875 29.828125 
+Q 18.359375 34.515625 30.609375 34.515625 
+L 43.21875 34.515625 
+L 43.21875 35.40625 
+Q 43.21875 41.609375 39.140625 45 
+Q 35.0625 48.390625 27.6875 48.390625 
+Q 23 48.390625 18.546875 47.265625 
+Q 14.109375 46.140625 10.015625 43.890625 
+L 10.015625 52.203125 
+Q 14.9375 54.109375 19.578125 55.046875 
+Q 24.21875 56 28.609375 56 
+Q 40.484375 56 46.34375 49.84375 
+Q 52.203125 43.703125 52.203125 31.203125 
+z
+" id="DejaVuSans-97"/>
+      </defs>
+      <g transform="translate(328.067427 322.182437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-67"/>
+       <use x="69.824219" xlink:href="#DejaVuSans-108"/>
+       <use x="97.607422" xlink:href="#DejaVuSans-111"/>
+       <use x="158.789062" xlink:href="#DejaVuSans-110"/>
+       <use x="222.167969" xlink:href="#DejaVuSans-101"/>
+       <use x="283.691406" xlink:href="#DejaVuSans-122"/>
+       <use x="336.181641" xlink:href="#DejaVuSans-105"/>
+       <use x="363.964844" xlink:href="#DejaVuSans-108"/>
+       <use x="391.748047" xlink:href="#DejaVuSans-108"/>
+       <use x="419.53125" xlink:href="#DejaVuSans-97"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_4">
+     <!-- Type -->
+     <defs>
+      <path d="M -0.296875 72.90625 
+L 61.375 72.90625 
+L 61.375 64.59375 
+L 35.5 64.59375 
+L 35.5 0 
+L 25.59375 0 
+L 25.59375 64.59375 
+L -0.296875 64.59375 
+z
+" id="DejaVuSans-84"/>
+     </defs>
+     <g transform="translate(224.677188 336.260562)scale(0.1 -0.1)">
+      <use xlink:href="#DejaVuSans-84"/>
+      <use x="45.458984" xlink:href="#DejaVuSans-121"/>
+      <use x="104.638672" xlink:href="#DejaVuSans-112"/>
+      <use x="168.115234" xlink:href="#DejaVuSans-101"/>
+     </g>
+    </g>
+   </g>
+   <g id="matplotlib.axis_2">
+    <g id="ytick_1">
+     <g id="line2d_4">
+      <defs>
+       <path d="M 0 0 
+L -3.5 0 
+" id="me710c41e18" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_5">
+      <!-- 0.0 -->
+      <defs>
+       <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"/>
+      </defs>
+      <g transform="translate(34.696875 311.383219)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"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_5">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="268.232118"/>
+      </g>
+     </g>
+     <g id="text_6">
+      <!-- 0.5 -->
+      <defs>
+       <path d="M 10.796875 72.90625 
+L 49.515625 72.90625 
+L 49.515625 64.59375 
+L 19.828125 64.59375 
+L 19.828125 46.734375 
+Q 21.96875 47.46875 24.109375 47.828125 
+Q 26.265625 48.1875 28.421875 48.1875 
+Q 40.625 48.1875 47.75 41.5 
+Q 54.890625 34.8125 54.890625 23.390625 
+Q 54.890625 11.625 47.5625 5.09375 
+Q 40.234375 -1.421875 26.90625 -1.421875 
+Q 22.3125 -1.421875 17.546875 -0.640625 
+Q 12.796875 0.140625 7.71875 1.703125 
+L 7.71875 11.625 
+Q 12.109375 9.234375 16.796875 8.0625 
+Q 21.484375 6.890625 26.703125 6.890625 
+Q 35.15625 6.890625 40.078125 11.328125 
+Q 45.015625 15.765625 45.015625 23.390625 
+Q 45.015625 31 40.078125 35.4375 
+Q 35.15625 39.890625 26.703125 39.890625 
+Q 22.75 39.890625 18.8125 39.015625 
+Q 14.890625 38.140625 10.796875 36.28125 
+z
+" id="DejaVuSans-53"/>
+      </defs>
+      <g transform="translate(34.696875 272.031337)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-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_6">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="228.880237"/>
+      </g>
+     </g>
+     <g id="text_7">
+      <!-- 1.0 -->
+      <defs>
+       <path d="M 12.40625 8.296875 
+L 28.515625 8.296875 
+L 28.515625 63.921875 
+L 10.984375 60.40625 
+L 10.984375 69.390625 
+L 28.421875 72.90625 
+L 38.28125 72.90625 
+L 38.28125 8.296875 
+L 54.390625 8.296875 
+L 54.390625 0 
+L 12.40625 0 
+z
+" id="DejaVuSans-49"/>
+      </defs>
+      <g transform="translate(34.696875 232.679455)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_4">
+     <g id="line2d_7">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="189.528355"/>
+      </g>
+     </g>
+     <g id="text_8">
+      <!-- 1.5 -->
+      <g transform="translate(34.696875 193.327574)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_5">
+     <g id="line2d_8">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="150.176473"/>
+      </g>
+     </g>
+     <g id="text_9">
+      <!-- 2.0 -->
+      <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(34.696875 153.975692)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-50"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_6">
+     <g id="line2d_9">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="110.824592"/>
+      </g>
+     </g>
+     <g id="text_10">
+      <!-- 2.5 -->
+      <g transform="translate(34.696875 114.62381)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-50"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_7">
+     <g id="line2d_10">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="71.47271"/>
+      </g>
+     </g>
+     <g id="text_11">
+      <!-- 3.0 -->
+      <defs>
+       <path d="M 40.578125 39.3125 
+Q 47.65625 37.796875 51.625 33 
+Q 55.609375 28.21875 55.609375 21.1875 
+Q 55.609375 10.40625 48.1875 4.484375 
+Q 40.765625 -1.421875 27.09375 -1.421875 
+Q 22.515625 -1.421875 17.65625 -0.515625 
+Q 12.796875 0.390625 7.625 2.203125 
+L 7.625 11.71875 
+Q 11.71875 9.328125 16.59375 8.109375 
+Q 21.484375 6.890625 26.8125 6.890625 
+Q 36.078125 6.890625 40.9375 10.546875 
+Q 45.796875 14.203125 45.796875 21.1875 
+Q 45.796875 27.640625 41.28125 31.265625 
+Q 36.765625 34.90625 28.71875 34.90625 
+L 20.21875 34.90625 
+L 20.21875 43.015625 
+L 29.109375 43.015625 
+Q 36.375 43.015625 40.234375 45.921875 
+Q 44.09375 48.828125 44.09375 54.296875 
+Q 44.09375 59.90625 40.109375 62.90625 
+Q 36.140625 65.921875 28.71875 65.921875 
+Q 24.65625 65.921875 20.015625 65.03125 
+Q 15.375 64.15625 9.8125 62.3125 
+L 9.8125 71.09375 
+Q 15.4375 72.65625 20.34375 73.4375 
+Q 25.25 74.21875 29.59375 74.21875 
+Q 40.828125 74.21875 47.359375 69.109375 
+Q 53.90625 64.015625 53.90625 55.328125 
+Q 53.90625 49.265625 50.4375 45.09375 
+Q 46.96875 40.921875 40.578125 39.3125 
+z
+" id="DejaVuSans-51"/>
+      </defs>
+      <g transform="translate(34.696875 75.271929)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-46"/>
+       <use x="95.410156" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_12">
+     <!-- Taille (GB) -->
+     <defs>
+      <path id="DejaVuSans-32"/>
+      <path d="M 31 75.875 
+Q 24.46875 64.65625 21.28125 53.65625 
+Q 18.109375 42.671875 18.109375 31.390625 
+Q 18.109375 20.125 21.3125 9.0625 
+Q 24.515625 -2 31 -13.1875 
+L 23.1875 -13.1875 
+Q 15.875 -1.703125 12.234375 9.375 
+Q 8.59375 20.453125 8.59375 31.390625 
+Q 8.59375 42.28125 12.203125 53.3125 
+Q 15.828125 64.359375 23.1875 75.875 
+z
+" id="DejaVuSans-40"/>
+      <path d="M 19.671875 34.8125 
+L 19.671875 8.109375 
+L 35.5 8.109375 
+Q 43.453125 8.109375 47.28125 11.40625 
+Q 51.125 14.703125 51.125 21.484375 
+Q 51.125 28.328125 47.28125 31.5625 
+Q 43.453125 34.8125 35.5 34.8125 
+z
+M 19.671875 64.796875 
+L 19.671875 42.828125 
+L 34.28125 42.828125 
+Q 41.5 42.828125 45.03125 45.53125 
+Q 48.578125 48.25 48.578125 53.8125 
+Q 48.578125 59.328125 45.03125 62.0625 
+Q 41.5 64.796875 34.28125 64.796875 
+z
+M 9.8125 72.90625 
+L 35.015625 72.90625 
+Q 46.296875 72.90625 52.390625 68.21875 
+Q 58.5 63.53125 58.5 54.890625 
+Q 58.5 48.1875 55.375 44.234375 
+Q 52.25 40.28125 46.1875 39.3125 
+Q 53.46875 37.75 57.5 32.78125 
+Q 61.53125 27.828125 61.53125 20.40625 
+Q 61.53125 10.640625 54.890625 5.3125 
+Q 48.25 0 35.984375 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-66"/>
+      <path d="M 8.015625 75.875 
+L 15.828125 75.875 
+Q 23.140625 64.359375 26.78125 53.3125 
+Q 30.421875 42.28125 30.421875 31.390625 
+Q 30.421875 20.453125 26.78125 9.375 
+Q 23.140625 -1.703125 15.828125 -13.1875 
+L 8.015625 -13.1875 
+Q 14.5 -2 17.703125 9.0625 
+Q 20.90625 20.125 20.90625 31.390625 
+Q 20.90625 42.671875 17.703125 53.65625 
+Q 14.5 64.65625 8.015625 75.875 
+z
+" id="DejaVuSans-41"/>
+     </defs>
+     <g transform="translate(28.617187 199.860031)rotate(-90)scale(0.1 -0.1)">
+      <use xlink:href="#DejaVuSans-84"/>
+      <use x="44.583984" xlink:href="#DejaVuSans-97"/>
+      <use x="105.863281" xlink:href="#DejaVuSans-105"/>
+      <use x="133.646484" xlink:href="#DejaVuSans-108"/>
+      <use x="161.429688" xlink:href="#DejaVuSans-108"/>
+      <use x="189.212891" xlink:href="#DejaVuSans-101"/>
+      <use x="250.736328" xlink:href="#DejaVuSans-32"/>
+      <use x="282.523438" xlink:href="#DejaVuSans-40"/>
+      <use x="321.537109" xlink:href="#DejaVuSans-71"/>
+      <use x="399.027344" xlink:href="#DejaVuSans-66"/>
+      <use x="467.630859" xlink:href="#DejaVuSans-41"/>
+     </g>
+    </g>
+   </g>
+   <g id="patch_6">
+    <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_7">
+    <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_8">
+    <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_9">
+    <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>
+ <defs>
+  <clipPath id="p60aa827e55">
+   <rect height="266.112" width="357.12" x="57.6" y="41.472"/>
+  </clipPath>
+ </defs>
+</svg>
diff --git a/doc/charts/chart_image_sizes_win10.png b/doc/charts/chart_image_sizes_win10.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f074188970106fb2fb1c1d98f3b6d3920ebdccd
--- /dev/null
+++ b/doc/charts/chart_image_sizes_win10.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd53ced4ed9a8ee40c11b5defd8ede6513ba3ae4cd20b160b4ce7302f8fbd2f7
+size 12582
diff --git a/doc/charts/chart_image_sizes_win10.svg b/doc/charts/chart_image_sizes_win10.svg
new file mode 100644
index 0000000000000000000000000000000000000000..60435a8927b71e72bd0dab523dca872e2e7b6ad0
--- /dev/null
+++ b/doc/charts/chart_image_sizes_win10.svg
@@ -0,0 +1,741 @@
+<?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="patch_3">
+    <path clip-path="url(#p60aa827e55)" d="M 73.832727 307.584 
+L 166.591169 307.584 
+L 166.591169 54.144 
+L 73.832727 54.144 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="patch_4">
+    <path clip-path="url(#p60aa827e55)" d="M 189.780779 307.584 
+L 282.539221 307.584 
+L 282.539221 291.768293 
+L 189.780779 291.768293 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="patch_5">
+    <path clip-path="url(#p60aa827e55)" d="M 305.728831 307.584 
+L 398.487273 307.584 
+L 398.487273 301.221947 
+L 305.728831 301.221947 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="matplotlib.axis_1">
+    <g id="xtick_1">
+     <g id="line2d_1">
+      <defs>
+       <path d="M 0 0 
+L 0 3.5 
+" id="maf3ac2b643" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="120.211948" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_1">
+      <!-- Déployé -->
+      <defs>
+       <path d="M 19.671875 64.796875 
+L 19.671875 8.109375 
+L 31.59375 8.109375 
+Q 46.6875 8.109375 53.6875 14.9375 
+Q 60.6875 21.78125 60.6875 36.53125 
+Q 60.6875 51.171875 53.6875 57.984375 
+Q 46.6875 64.796875 31.59375 64.796875 
+z
+M 9.8125 72.90625 
+L 30.078125 72.90625 
+Q 51.265625 72.90625 61.171875 64.09375 
+Q 71.09375 55.28125 71.09375 36.53125 
+Q 71.09375 17.671875 61.125 8.828125 
+Q 51.171875 0 30.078125 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-68"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+M 38.578125 79.984375 
+L 48.296875 79.984375 
+L 32.375 61.625 
+L 24.90625 61.625 
+z
+" id="DejaVuSans-233"/>
+       <path d="M 18.109375 8.203125 
+L 18.109375 -20.796875 
+L 9.078125 -20.796875 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.390625 
+Q 20.953125 51.265625 25.265625 53.625 
+Q 29.59375 56 35.59375 56 
+Q 45.5625 56 51.78125 48.09375 
+Q 58.015625 40.1875 58.015625 27.296875 
+Q 58.015625 14.40625 51.78125 6.484375 
+Q 45.5625 -1.421875 35.59375 -1.421875 
+Q 29.59375 -1.421875 25.265625 0.953125 
+Q 20.953125 3.328125 18.109375 8.203125 
+z
+M 48.6875 27.296875 
+Q 48.6875 37.203125 44.609375 42.84375 
+Q 40.53125 48.484375 33.40625 48.484375 
+Q 26.265625 48.484375 22.1875 42.84375 
+Q 18.109375 37.203125 18.109375 27.296875 
+Q 18.109375 17.390625 22.1875 11.75 
+Q 26.265625 6.109375 33.40625 6.109375 
+Q 40.53125 6.109375 44.609375 11.75 
+Q 48.6875 17.390625 48.6875 27.296875 
+z
+" id="DejaVuSans-112"/>
+       <path d="M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 0 
+L 9.421875 0 
+z
+" id="DejaVuSans-108"/>
+       <path d="M 30.609375 48.390625 
+Q 23.390625 48.390625 19.1875 42.75 
+Q 14.984375 37.109375 14.984375 27.296875 
+Q 14.984375 17.484375 19.15625 11.84375 
+Q 23.34375 6.203125 30.609375 6.203125 
+Q 37.796875 6.203125 41.984375 11.859375 
+Q 46.1875 17.53125 46.1875 27.296875 
+Q 46.1875 37.015625 41.984375 42.703125 
+Q 37.796875 48.390625 30.609375 48.390625 
+z
+M 30.609375 56 
+Q 42.328125 56 49.015625 48.375 
+Q 55.71875 40.765625 55.71875 27.296875 
+Q 55.71875 13.875 49.015625 6.21875 
+Q 42.328125 -1.421875 30.609375 -1.421875 
+Q 18.84375 -1.421875 12.171875 6.21875 
+Q 5.515625 13.875 5.515625 27.296875 
+Q 5.515625 40.765625 12.171875 48.375 
+Q 18.84375 56 30.609375 56 
+z
+" id="DejaVuSans-111"/>
+       <path d="M 32.171875 -5.078125 
+Q 28.375 -14.84375 24.75 -17.8125 
+Q 21.140625 -20.796875 15.09375 -20.796875 
+L 7.90625 -20.796875 
+L 7.90625 -13.28125 
+L 13.1875 -13.28125 
+Q 16.890625 -13.28125 18.9375 -11.515625 
+Q 21 -9.765625 23.484375 -3.21875 
+L 25.09375 0.875 
+L 2.984375 54.6875 
+L 12.5 54.6875 
+L 29.59375 11.921875 
+L 46.6875 54.6875 
+L 56.203125 54.6875 
+z
+" id="DejaVuSans-121"/>
+      </defs>
+      <g transform="translate(99.626792 322.582437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-68"/>
+       <use x="77.001953" xlink:href="#DejaVuSans-233"/>
+       <use x="138.525391" xlink:href="#DejaVuSans-112"/>
+       <use x="202.001953" xlink:href="#DejaVuSans-108"/>
+       <use x="229.785156" xlink:href="#DejaVuSans-111"/>
+       <use x="290.966797" xlink:href="#DejaVuSans-121"/>
+       <use x="350.146484" xlink:href="#DejaVuSans-233"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_2">
+     <g id="line2d_2">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="236.16" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- Gzip -->
+      <defs>
+       <path d="M 59.515625 10.40625 
+L 59.515625 29.984375 
+L 43.40625 29.984375 
+L 43.40625 38.09375 
+L 69.28125 38.09375 
+L 69.28125 6.78125 
+Q 63.578125 2.734375 56.6875 0.65625 
+Q 49.8125 -1.421875 42 -1.421875 
+Q 24.90625 -1.421875 15.25 8.5625 
+Q 5.609375 18.5625 5.609375 36.375 
+Q 5.609375 54.25 15.25 64.234375 
+Q 24.90625 74.21875 42 74.21875 
+Q 49.125 74.21875 55.546875 72.453125 
+Q 61.96875 70.703125 67.390625 67.28125 
+L 67.390625 56.78125 
+Q 61.921875 61.421875 55.765625 63.765625 
+Q 49.609375 66.109375 42.828125 66.109375 
+Q 29.4375 66.109375 22.71875 58.640625 
+Q 16.015625 51.171875 16.015625 36.375 
+Q 16.015625 21.625 22.71875 14.15625 
+Q 29.4375 6.6875 42.828125 6.6875 
+Q 48.046875 6.6875 52.140625 7.59375 
+Q 56.25 8.5 59.515625 10.40625 
+z
+" id="DejaVuSans-71"/>
+       <path d="M 5.515625 54.6875 
+L 48.1875 54.6875 
+L 48.1875 46.484375 
+L 14.40625 7.171875 
+L 48.1875 7.171875 
+L 48.1875 0 
+L 4.296875 0 
+L 4.296875 8.203125 
+L 38.09375 47.515625 
+L 5.515625 47.515625 
+z
+" id="DejaVuSans-122"/>
+       <path d="M 9.421875 54.6875 
+L 18.40625 54.6875 
+L 18.40625 0 
+L 9.421875 0 
+z
+M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 64.59375 
+L 9.421875 64.59375 
+z
+" id="DejaVuSans-105"/>
+      </defs>
+      <g transform="translate(225.098281 322.182437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-71"/>
+       <use x="77.490234" xlink:href="#DejaVuSans-122"/>
+       <use x="129.980469" xlink:href="#DejaVuSans-105"/>
+       <use x="157.763672" xlink:href="#DejaVuSans-112"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="352.108052" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- Clonezilla -->
+      <defs>
+       <path d="M 64.40625 67.28125 
+L 64.40625 56.890625 
+Q 59.421875 61.53125 53.78125 63.8125 
+Q 48.140625 66.109375 41.796875 66.109375 
+Q 29.296875 66.109375 22.65625 58.46875 
+Q 16.015625 50.828125 16.015625 36.375 
+Q 16.015625 21.96875 22.65625 14.328125 
+Q 29.296875 6.6875 41.796875 6.6875 
+Q 48.140625 6.6875 53.78125 8.984375 
+Q 59.421875 11.28125 64.40625 15.921875 
+L 64.40625 5.609375 
+Q 59.234375 2.09375 53.4375 0.328125 
+Q 47.65625 -1.421875 41.21875 -1.421875 
+Q 24.65625 -1.421875 15.125 8.703125 
+Q 5.609375 18.84375 5.609375 36.375 
+Q 5.609375 53.953125 15.125 64.078125 
+Q 24.65625 74.21875 41.21875 74.21875 
+Q 47.75 74.21875 53.53125 72.484375 
+Q 59.328125 70.75 64.40625 67.28125 
+z
+" id="DejaVuSans-67"/>
+       <path d="M 54.890625 33.015625 
+L 54.890625 0 
+L 45.90625 0 
+L 45.90625 32.71875 
+Q 45.90625 40.484375 42.875 44.328125 
+Q 39.84375 48.1875 33.796875 48.1875 
+Q 26.515625 48.1875 22.3125 43.546875 
+Q 18.109375 38.921875 18.109375 30.90625 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 21.34375 51.125 25.703125 53.5625 
+Q 30.078125 56 35.796875 56 
+Q 45.21875 56 50.046875 50.171875 
+Q 54.890625 44.34375 54.890625 33.015625 
+z
+" id="DejaVuSans-110"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+" id="DejaVuSans-101"/>
+       <path d="M 34.28125 27.484375 
+Q 23.390625 27.484375 19.1875 25 
+Q 14.984375 22.515625 14.984375 16.5 
+Q 14.984375 11.71875 18.140625 8.90625 
+Q 21.296875 6.109375 26.703125 6.109375 
+Q 34.1875 6.109375 38.703125 11.40625 
+Q 43.21875 16.703125 43.21875 25.484375 
+L 43.21875 27.484375 
+z
+M 52.203125 31.203125 
+L 52.203125 0 
+L 43.21875 0 
+L 43.21875 8.296875 
+Q 40.140625 3.328125 35.546875 0.953125 
+Q 30.953125 -1.421875 24.3125 -1.421875 
+Q 15.921875 -1.421875 10.953125 3.296875 
+Q 6 8.015625 6 15.921875 
+Q 6 25.140625 12.171875 29.828125 
+Q 18.359375 34.515625 30.609375 34.515625 
+L 43.21875 34.515625 
+L 43.21875 35.40625 
+Q 43.21875 41.609375 39.140625 45 
+Q 35.0625 48.390625 27.6875 48.390625 
+Q 23 48.390625 18.546875 47.265625 
+Q 14.109375 46.140625 10.015625 43.890625 
+L 10.015625 52.203125 
+Q 14.9375 54.109375 19.578125 55.046875 
+Q 24.21875 56 28.609375 56 
+Q 40.484375 56 46.34375 49.84375 
+Q 52.203125 43.703125 52.203125 31.203125 
+z
+" id="DejaVuSans-97"/>
+      </defs>
+      <g transform="translate(328.067427 322.182437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-67"/>
+       <use x="69.824219" xlink:href="#DejaVuSans-108"/>
+       <use x="97.607422" xlink:href="#DejaVuSans-111"/>
+       <use x="158.789062" xlink:href="#DejaVuSans-110"/>
+       <use x="222.167969" xlink:href="#DejaVuSans-101"/>
+       <use x="283.691406" xlink:href="#DejaVuSans-122"/>
+       <use x="336.181641" xlink:href="#DejaVuSans-105"/>
+       <use x="363.964844" xlink:href="#DejaVuSans-108"/>
+       <use x="391.748047" xlink:href="#DejaVuSans-108"/>
+       <use x="419.53125" xlink:href="#DejaVuSans-97"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_4">
+     <!-- Type -->
+     <defs>
+      <path d="M -0.296875 72.90625 
+L 61.375 72.90625 
+L 61.375 64.59375 
+L 35.5 64.59375 
+L 35.5 0 
+L 25.59375 0 
+L 25.59375 64.59375 
+L -0.296875 64.59375 
+z
+" id="DejaVuSans-84"/>
+     </defs>
+     <g transform="translate(224.677188 336.260562)scale(0.1 -0.1)">
+      <use xlink:href="#DejaVuSans-84"/>
+      <use x="45.458984" xlink:href="#DejaVuSans-121"/>
+      <use x="104.638672" xlink:href="#DejaVuSans-112"/>
+      <use x="168.115234" xlink:href="#DejaVuSans-101"/>
+     </g>
+    </g>
+   </g>
+   <g id="matplotlib.axis_2">
+    <g id="ytick_1">
+     <g id="line2d_4">
+      <defs>
+       <path d="M 0 0 
+L -3.5 0 
+" id="me710c41e18" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_5">
+      <!-- 0 -->
+      <defs>
+       <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"/>
+      </defs>
+      <g transform="translate(44.2375 311.383219)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_5">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="258.093198"/>
+      </g>
+     </g>
+     <g id="text_6">
+      <!-- 100 -->
+      <defs>
+       <path d="M 12.40625 8.296875 
+L 28.515625 8.296875 
+L 28.515625 63.921875 
+L 10.984375 60.40625 
+L 10.984375 69.390625 
+L 28.421875 72.90625 
+L 38.28125 72.90625 
+L 38.28125 8.296875 
+L 54.390625 8.296875 
+L 54.390625 0 
+L 12.40625 0 
+z
+" id="DejaVuSans-49"/>
+      </defs>
+      <g transform="translate(31.5125 261.892417)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_6">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="208.602396"/>
+      </g>
+     </g>
+     <g id="text_7">
+      <!-- 200 -->
+      <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(31.5125 212.401615)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-50"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_4">
+     <g id="line2d_7">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="159.111594"/>
+      </g>
+     </g>
+     <g id="text_8">
+      <!-- 300 -->
+      <defs>
+       <path d="M 40.578125 39.3125 
+Q 47.65625 37.796875 51.625 33 
+Q 55.609375 28.21875 55.609375 21.1875 
+Q 55.609375 10.40625 48.1875 4.484375 
+Q 40.765625 -1.421875 27.09375 -1.421875 
+Q 22.515625 -1.421875 17.65625 -0.515625 
+Q 12.796875 0.390625 7.625 2.203125 
+L 7.625 11.71875 
+Q 11.71875 9.328125 16.59375 8.109375 
+Q 21.484375 6.890625 26.8125 6.890625 
+Q 36.078125 6.890625 40.9375 10.546875 
+Q 45.796875 14.203125 45.796875 21.1875 
+Q 45.796875 27.640625 41.28125 31.265625 
+Q 36.765625 34.90625 28.71875 34.90625 
+L 20.21875 34.90625 
+L 20.21875 43.015625 
+L 29.109375 43.015625 
+Q 36.375 43.015625 40.234375 45.921875 
+Q 44.09375 48.828125 44.09375 54.296875 
+Q 44.09375 59.90625 40.109375 62.90625 
+Q 36.140625 65.921875 28.71875 65.921875 
+Q 24.65625 65.921875 20.015625 65.03125 
+Q 15.375 64.15625 9.8125 62.3125 
+L 9.8125 71.09375 
+Q 15.4375 72.65625 20.34375 73.4375 
+Q 25.25 74.21875 29.59375 74.21875 
+Q 40.828125 74.21875 47.359375 69.109375 
+Q 53.90625 64.015625 53.90625 55.328125 
+Q 53.90625 49.265625 50.4375 45.09375 
+Q 46.96875 40.921875 40.578125 39.3125 
+z
+" id="DejaVuSans-51"/>
+      </defs>
+      <g transform="translate(31.5125 162.910813)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-51"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_5">
+     <g id="line2d_8">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="109.620792"/>
+      </g>
+     </g>
+     <g id="text_9">
+      <!-- 400 -->
+      <defs>
+       <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(31.5125 113.420011)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-52"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_6">
+     <g id="line2d_9">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="60.129991"/>
+      </g>
+     </g>
+     <g id="text_10">
+      <!-- 500 -->
+      <defs>
+       <path d="M 10.796875 72.90625 
+L 49.515625 72.90625 
+L 49.515625 64.59375 
+L 19.828125 64.59375 
+L 19.828125 46.734375 
+Q 21.96875 47.46875 24.109375 47.828125 
+Q 26.265625 48.1875 28.421875 48.1875 
+Q 40.625 48.1875 47.75 41.5 
+Q 54.890625 34.8125 54.890625 23.390625 
+Q 54.890625 11.625 47.5625 5.09375 
+Q 40.234375 -1.421875 26.90625 -1.421875 
+Q 22.3125 -1.421875 17.546875 -0.640625 
+Q 12.796875 0.140625 7.71875 1.703125 
+L 7.71875 11.625 
+Q 12.109375 9.234375 16.796875 8.0625 
+Q 21.484375 6.890625 26.703125 6.890625 
+Q 35.15625 6.890625 40.078125 11.328125 
+Q 45.015625 15.765625 45.015625 23.390625 
+Q 45.015625 31 40.078125 35.4375 
+Q 35.15625 39.890625 26.703125 39.890625 
+Q 22.75 39.890625 18.8125 39.015625 
+Q 14.890625 38.140625 10.796875 36.28125 
+z
+" id="DejaVuSans-53"/>
+      </defs>
+      <g transform="translate(31.5125 63.929209)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_11">
+     <!-- Taille (GB) -->
+     <defs>
+      <path id="DejaVuSans-32"/>
+      <path d="M 31 75.875 
+Q 24.46875 64.65625 21.28125 53.65625 
+Q 18.109375 42.671875 18.109375 31.390625 
+Q 18.109375 20.125 21.3125 9.0625 
+Q 24.515625 -2 31 -13.1875 
+L 23.1875 -13.1875 
+Q 15.875 -1.703125 12.234375 9.375 
+Q 8.59375 20.453125 8.59375 31.390625 
+Q 8.59375 42.28125 12.203125 53.3125 
+Q 15.828125 64.359375 23.1875 75.875 
+z
+" id="DejaVuSans-40"/>
+      <path d="M 19.671875 34.8125 
+L 19.671875 8.109375 
+L 35.5 8.109375 
+Q 43.453125 8.109375 47.28125 11.40625 
+Q 51.125 14.703125 51.125 21.484375 
+Q 51.125 28.328125 47.28125 31.5625 
+Q 43.453125 34.8125 35.5 34.8125 
+z
+M 19.671875 64.796875 
+L 19.671875 42.828125 
+L 34.28125 42.828125 
+Q 41.5 42.828125 45.03125 45.53125 
+Q 48.578125 48.25 48.578125 53.8125 
+Q 48.578125 59.328125 45.03125 62.0625 
+Q 41.5 64.796875 34.28125 64.796875 
+z
+M 9.8125 72.90625 
+L 35.015625 72.90625 
+Q 46.296875 72.90625 52.390625 68.21875 
+Q 58.5 63.53125 58.5 54.890625 
+Q 58.5 48.1875 55.375 44.234375 
+Q 52.25 40.28125 46.1875 39.3125 
+Q 53.46875 37.75 57.5 32.78125 
+Q 61.53125 27.828125 61.53125 20.40625 
+Q 61.53125 10.640625 54.890625 5.3125 
+Q 48.25 0 35.984375 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-66"/>
+      <path d="M 8.015625 75.875 
+L 15.828125 75.875 
+Q 23.140625 64.359375 26.78125 53.3125 
+Q 30.421875 42.28125 30.421875 31.390625 
+Q 30.421875 20.453125 26.78125 9.375 
+Q 23.140625 -1.703125 15.828125 -13.1875 
+L 8.015625 -13.1875 
+Q 14.5 -2 17.703125 9.0625 
+Q 20.90625 20.125 20.90625 31.390625 
+Q 20.90625 42.671875 17.703125 53.65625 
+Q 14.5 64.65625 8.015625 75.875 
+z
+" id="DejaVuSans-41"/>
+     </defs>
+     <g transform="translate(25.432812 199.860031)rotate(-90)scale(0.1 -0.1)">
+      <use xlink:href="#DejaVuSans-84"/>
+      <use x="44.583984" xlink:href="#DejaVuSans-97"/>
+      <use x="105.863281" xlink:href="#DejaVuSans-105"/>
+      <use x="133.646484" xlink:href="#DejaVuSans-108"/>
+      <use x="161.429688" xlink:href="#DejaVuSans-108"/>
+      <use x="189.212891" xlink:href="#DejaVuSans-101"/>
+      <use x="250.736328" xlink:href="#DejaVuSans-32"/>
+      <use x="282.523438" xlink:href="#DejaVuSans-40"/>
+      <use x="321.537109" xlink:href="#DejaVuSans-71"/>
+      <use x="399.027344" xlink:href="#DejaVuSans-66"/>
+      <use x="467.630859" xlink:href="#DejaVuSans-41"/>
+     </g>
+    </g>
+   </g>
+   <g id="patch_6">
+    <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_7">
+    <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_8">
+    <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_9">
+    <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>
+ <defs>
+  <clipPath id="p60aa827e55">
+   <rect height="266.112" width="357.12" x="57.6" y="41.472"/>
+  </clipPath>
+ </defs>
+</svg>
diff --git a/doc/charts/chart_image_sizes_xubuntu.png b/doc/charts/chart_image_sizes_xubuntu.png
new file mode 100644
index 0000000000000000000000000000000000000000..09a1651ea9125335fb1f6e711dadef406411b2dd
--- /dev/null
+++ b/doc/charts/chart_image_sizes_xubuntu.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4683877f455e617e817a3e6ce9223e0c7f39dec19be50fb5d3ad7649661f8cb4
+size 13630
diff --git a/doc/charts/chart_image_sizes_xubuntu.svg b/doc/charts/chart_image_sizes_xubuntu.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4f2a1da63067d13c097699f4b18259848cd8770e
--- /dev/null
+++ b/doc/charts/chart_image_sizes_xubuntu.svg
@@ -0,0 +1,739 @@
+<?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="patch_3">
+    <path clip-path="url(#p60aa827e55)" d="M 73.832727 307.584 
+L 166.591169 307.584 
+L 166.591169 54.144 
+L 73.832727 54.144 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="patch_4">
+    <path clip-path="url(#p60aa827e55)" d="M 189.780779 307.584 
+L 282.539221 307.584 
+L 282.539221 305.016836 
+L 189.780779 305.016836 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="patch_5">
+    <path clip-path="url(#p60aa827e55)" d="M 305.728831 307.584 
+L 398.487273 307.584 
+L 398.487273 305.258222 
+L 305.728831 305.258222 
+z
+" style="fill:#1f77b4;"/>
+   </g>
+   <g id="matplotlib.axis_1">
+    <g id="xtick_1">
+     <g id="line2d_1">
+      <defs>
+       <path d="M 0 0 
+L 0 3.5 
+" id="maf3ac2b643" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="120.211948" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_1">
+      <!-- Déployé -->
+      <defs>
+       <path d="M 19.671875 64.796875 
+L 19.671875 8.109375 
+L 31.59375 8.109375 
+Q 46.6875 8.109375 53.6875 14.9375 
+Q 60.6875 21.78125 60.6875 36.53125 
+Q 60.6875 51.171875 53.6875 57.984375 
+Q 46.6875 64.796875 31.59375 64.796875 
+z
+M 9.8125 72.90625 
+L 30.078125 72.90625 
+Q 51.265625 72.90625 61.171875 64.09375 
+Q 71.09375 55.28125 71.09375 36.53125 
+Q 71.09375 17.671875 61.125 8.828125 
+Q 51.171875 0 30.078125 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-68"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+M 38.578125 79.984375 
+L 48.296875 79.984375 
+L 32.375 61.625 
+L 24.90625 61.625 
+z
+" id="DejaVuSans-233"/>
+       <path d="M 18.109375 8.203125 
+L 18.109375 -20.796875 
+L 9.078125 -20.796875 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.390625 
+Q 20.953125 51.265625 25.265625 53.625 
+Q 29.59375 56 35.59375 56 
+Q 45.5625 56 51.78125 48.09375 
+Q 58.015625 40.1875 58.015625 27.296875 
+Q 58.015625 14.40625 51.78125 6.484375 
+Q 45.5625 -1.421875 35.59375 -1.421875 
+Q 29.59375 -1.421875 25.265625 0.953125 
+Q 20.953125 3.328125 18.109375 8.203125 
+z
+M 48.6875 27.296875 
+Q 48.6875 37.203125 44.609375 42.84375 
+Q 40.53125 48.484375 33.40625 48.484375 
+Q 26.265625 48.484375 22.1875 42.84375 
+Q 18.109375 37.203125 18.109375 27.296875 
+Q 18.109375 17.390625 22.1875 11.75 
+Q 26.265625 6.109375 33.40625 6.109375 
+Q 40.53125 6.109375 44.609375 11.75 
+Q 48.6875 17.390625 48.6875 27.296875 
+z
+" id="DejaVuSans-112"/>
+       <path d="M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 0 
+L 9.421875 0 
+z
+" id="DejaVuSans-108"/>
+       <path d="M 30.609375 48.390625 
+Q 23.390625 48.390625 19.1875 42.75 
+Q 14.984375 37.109375 14.984375 27.296875 
+Q 14.984375 17.484375 19.15625 11.84375 
+Q 23.34375 6.203125 30.609375 6.203125 
+Q 37.796875 6.203125 41.984375 11.859375 
+Q 46.1875 17.53125 46.1875 27.296875 
+Q 46.1875 37.015625 41.984375 42.703125 
+Q 37.796875 48.390625 30.609375 48.390625 
+z
+M 30.609375 56 
+Q 42.328125 56 49.015625 48.375 
+Q 55.71875 40.765625 55.71875 27.296875 
+Q 55.71875 13.875 49.015625 6.21875 
+Q 42.328125 -1.421875 30.609375 -1.421875 
+Q 18.84375 -1.421875 12.171875 6.21875 
+Q 5.515625 13.875 5.515625 27.296875 
+Q 5.515625 40.765625 12.171875 48.375 
+Q 18.84375 56 30.609375 56 
+z
+" id="DejaVuSans-111"/>
+       <path d="M 32.171875 -5.078125 
+Q 28.375 -14.84375 24.75 -17.8125 
+Q 21.140625 -20.796875 15.09375 -20.796875 
+L 7.90625 -20.796875 
+L 7.90625 -13.28125 
+L 13.1875 -13.28125 
+Q 16.890625 -13.28125 18.9375 -11.515625 
+Q 21 -9.765625 23.484375 -3.21875 
+L 25.09375 0.875 
+L 2.984375 54.6875 
+L 12.5 54.6875 
+L 29.59375 11.921875 
+L 46.6875 54.6875 
+L 56.203125 54.6875 
+z
+" id="DejaVuSans-121"/>
+      </defs>
+      <g transform="translate(99.626792 322.582437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-68"/>
+       <use x="77.001953" xlink:href="#DejaVuSans-233"/>
+       <use x="138.525391" xlink:href="#DejaVuSans-112"/>
+       <use x="202.001953" xlink:href="#DejaVuSans-108"/>
+       <use x="229.785156" xlink:href="#DejaVuSans-111"/>
+       <use x="290.966797" xlink:href="#DejaVuSans-121"/>
+       <use x="350.146484" xlink:href="#DejaVuSans-233"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_2">
+     <g id="line2d_2">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="236.16" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_2">
+      <!-- Gzip -->
+      <defs>
+       <path d="M 59.515625 10.40625 
+L 59.515625 29.984375 
+L 43.40625 29.984375 
+L 43.40625 38.09375 
+L 69.28125 38.09375 
+L 69.28125 6.78125 
+Q 63.578125 2.734375 56.6875 0.65625 
+Q 49.8125 -1.421875 42 -1.421875 
+Q 24.90625 -1.421875 15.25 8.5625 
+Q 5.609375 18.5625 5.609375 36.375 
+Q 5.609375 54.25 15.25 64.234375 
+Q 24.90625 74.21875 42 74.21875 
+Q 49.125 74.21875 55.546875 72.453125 
+Q 61.96875 70.703125 67.390625 67.28125 
+L 67.390625 56.78125 
+Q 61.921875 61.421875 55.765625 63.765625 
+Q 49.609375 66.109375 42.828125 66.109375 
+Q 29.4375 66.109375 22.71875 58.640625 
+Q 16.015625 51.171875 16.015625 36.375 
+Q 16.015625 21.625 22.71875 14.15625 
+Q 29.4375 6.6875 42.828125 6.6875 
+Q 48.046875 6.6875 52.140625 7.59375 
+Q 56.25 8.5 59.515625 10.40625 
+z
+" id="DejaVuSans-71"/>
+       <path d="M 5.515625 54.6875 
+L 48.1875 54.6875 
+L 48.1875 46.484375 
+L 14.40625 7.171875 
+L 48.1875 7.171875 
+L 48.1875 0 
+L 4.296875 0 
+L 4.296875 8.203125 
+L 38.09375 47.515625 
+L 5.515625 47.515625 
+z
+" id="DejaVuSans-122"/>
+       <path d="M 9.421875 54.6875 
+L 18.40625 54.6875 
+L 18.40625 0 
+L 9.421875 0 
+z
+M 9.421875 75.984375 
+L 18.40625 75.984375 
+L 18.40625 64.59375 
+L 9.421875 64.59375 
+z
+" id="DejaVuSans-105"/>
+      </defs>
+      <g transform="translate(225.098281 322.182437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-71"/>
+       <use x="77.490234" xlink:href="#DejaVuSans-122"/>
+       <use x="129.980469" xlink:href="#DejaVuSans-105"/>
+       <use x="157.763672" xlink:href="#DejaVuSans-112"/>
+      </g>
+     </g>
+    </g>
+    <g id="xtick_3">
+     <g id="line2d_3">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="352.108052" xlink:href="#maf3ac2b643" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_3">
+      <!-- Clonezilla -->
+      <defs>
+       <path d="M 64.40625 67.28125 
+L 64.40625 56.890625 
+Q 59.421875 61.53125 53.78125 63.8125 
+Q 48.140625 66.109375 41.796875 66.109375 
+Q 29.296875 66.109375 22.65625 58.46875 
+Q 16.015625 50.828125 16.015625 36.375 
+Q 16.015625 21.96875 22.65625 14.328125 
+Q 29.296875 6.6875 41.796875 6.6875 
+Q 48.140625 6.6875 53.78125 8.984375 
+Q 59.421875 11.28125 64.40625 15.921875 
+L 64.40625 5.609375 
+Q 59.234375 2.09375 53.4375 0.328125 
+Q 47.65625 -1.421875 41.21875 -1.421875 
+Q 24.65625 -1.421875 15.125 8.703125 
+Q 5.609375 18.84375 5.609375 36.375 
+Q 5.609375 53.953125 15.125 64.078125 
+Q 24.65625 74.21875 41.21875 74.21875 
+Q 47.75 74.21875 53.53125 72.484375 
+Q 59.328125 70.75 64.40625 67.28125 
+z
+" id="DejaVuSans-67"/>
+       <path d="M 54.890625 33.015625 
+L 54.890625 0 
+L 45.90625 0 
+L 45.90625 32.71875 
+Q 45.90625 40.484375 42.875 44.328125 
+Q 39.84375 48.1875 33.796875 48.1875 
+Q 26.515625 48.1875 22.3125 43.546875 
+Q 18.109375 38.921875 18.109375 30.90625 
+L 18.109375 0 
+L 9.078125 0 
+L 9.078125 54.6875 
+L 18.109375 54.6875 
+L 18.109375 46.1875 
+Q 21.34375 51.125 25.703125 53.5625 
+Q 30.078125 56 35.796875 56 
+Q 45.21875 56 50.046875 50.171875 
+Q 54.890625 44.34375 54.890625 33.015625 
+z
+" id="DejaVuSans-110"/>
+       <path d="M 56.203125 29.59375 
+L 56.203125 25.203125 
+L 14.890625 25.203125 
+Q 15.484375 15.921875 20.484375 11.0625 
+Q 25.484375 6.203125 34.421875 6.203125 
+Q 39.59375 6.203125 44.453125 7.46875 
+Q 49.3125 8.734375 54.109375 11.28125 
+L 54.109375 2.78125 
+Q 49.265625 0.734375 44.1875 -0.34375 
+Q 39.109375 -1.421875 33.890625 -1.421875 
+Q 20.796875 -1.421875 13.15625 6.1875 
+Q 5.515625 13.8125 5.515625 26.8125 
+Q 5.515625 40.234375 12.765625 48.109375 
+Q 20.015625 56 32.328125 56 
+Q 43.359375 56 49.78125 48.890625 
+Q 56.203125 41.796875 56.203125 29.59375 
+z
+M 47.21875 32.234375 
+Q 47.125 39.59375 43.09375 43.984375 
+Q 39.0625 48.390625 32.421875 48.390625 
+Q 24.90625 48.390625 20.390625 44.140625 
+Q 15.875 39.890625 15.1875 32.171875 
+z
+" id="DejaVuSans-101"/>
+       <path d="M 34.28125 27.484375 
+Q 23.390625 27.484375 19.1875 25 
+Q 14.984375 22.515625 14.984375 16.5 
+Q 14.984375 11.71875 18.140625 8.90625 
+Q 21.296875 6.109375 26.703125 6.109375 
+Q 34.1875 6.109375 38.703125 11.40625 
+Q 43.21875 16.703125 43.21875 25.484375 
+L 43.21875 27.484375 
+z
+M 52.203125 31.203125 
+L 52.203125 0 
+L 43.21875 0 
+L 43.21875 8.296875 
+Q 40.140625 3.328125 35.546875 0.953125 
+Q 30.953125 -1.421875 24.3125 -1.421875 
+Q 15.921875 -1.421875 10.953125 3.296875 
+Q 6 8.015625 6 15.921875 
+Q 6 25.140625 12.171875 29.828125 
+Q 18.359375 34.515625 30.609375 34.515625 
+L 43.21875 34.515625 
+L 43.21875 35.40625 
+Q 43.21875 41.609375 39.140625 45 
+Q 35.0625 48.390625 27.6875 48.390625 
+Q 23 48.390625 18.546875 47.265625 
+Q 14.109375 46.140625 10.015625 43.890625 
+L 10.015625 52.203125 
+Q 14.9375 54.109375 19.578125 55.046875 
+Q 24.21875 56 28.609375 56 
+Q 40.484375 56 46.34375 49.84375 
+Q 52.203125 43.703125 52.203125 31.203125 
+z
+" id="DejaVuSans-97"/>
+      </defs>
+      <g transform="translate(328.067427 322.182437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-67"/>
+       <use x="69.824219" xlink:href="#DejaVuSans-108"/>
+       <use x="97.607422" xlink:href="#DejaVuSans-111"/>
+       <use x="158.789062" xlink:href="#DejaVuSans-110"/>
+       <use x="222.167969" xlink:href="#DejaVuSans-101"/>
+       <use x="283.691406" xlink:href="#DejaVuSans-122"/>
+       <use x="336.181641" xlink:href="#DejaVuSans-105"/>
+       <use x="363.964844" xlink:href="#DejaVuSans-108"/>
+       <use x="391.748047" xlink:href="#DejaVuSans-108"/>
+       <use x="419.53125" xlink:href="#DejaVuSans-97"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_4">
+     <!-- Type -->
+     <defs>
+      <path d="M -0.296875 72.90625 
+L 61.375 72.90625 
+L 61.375 64.59375 
+L 35.5 64.59375 
+L 35.5 0 
+L 25.59375 0 
+L 25.59375 64.59375 
+L -0.296875 64.59375 
+z
+" id="DejaVuSans-84"/>
+     </defs>
+     <g transform="translate(224.677188 336.260562)scale(0.1 -0.1)">
+      <use xlink:href="#DejaVuSans-84"/>
+      <use x="45.458984" xlink:href="#DejaVuSans-121"/>
+      <use x="104.638672" xlink:href="#DejaVuSans-112"/>
+      <use x="168.115234" xlink:href="#DejaVuSans-101"/>
+     </g>
+    </g>
+   </g>
+   <g id="matplotlib.axis_2">
+    <g id="ytick_1">
+     <g id="line2d_4">
+      <defs>
+       <path d="M 0 0 
+L -3.5 0 
+" id="me710c41e18" style="stroke:#000000;stroke-width:0.8;"/>
+      </defs>
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="307.584"/>
+      </g>
+     </g>
+     <g id="text_5">
+      <!-- 0 -->
+      <defs>
+       <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"/>
+      </defs>
+      <g transform="translate(44.2375 311.383219)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_2">
+     <g id="line2d_5">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="275.98487"/>
+      </g>
+     </g>
+     <g id="text_6">
+      <!-- 25 -->
+      <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"/>
+       <path d="M 10.796875 72.90625 
+L 49.515625 72.90625 
+L 49.515625 64.59375 
+L 19.828125 64.59375 
+L 19.828125 46.734375 
+Q 21.96875 47.46875 24.109375 47.828125 
+Q 26.265625 48.1875 28.421875 48.1875 
+Q 40.625 48.1875 47.75 41.5 
+Q 54.890625 34.8125 54.890625 23.390625 
+Q 54.890625 11.625 47.5625 5.09375 
+Q 40.234375 -1.421875 26.90625 -1.421875 
+Q 22.3125 -1.421875 17.546875 -0.640625 
+Q 12.796875 0.140625 7.71875 1.703125 
+L 7.71875 11.625 
+Q 12.109375 9.234375 16.796875 8.0625 
+Q 21.484375 6.890625 26.703125 6.890625 
+Q 35.15625 6.890625 40.078125 11.328125 
+Q 45.015625 15.765625 45.015625 23.390625 
+Q 45.015625 31 40.078125 35.4375 
+Q 35.15625 39.890625 26.703125 39.890625 
+Q 22.75 39.890625 18.8125 39.015625 
+Q 14.890625 38.140625 10.796875 36.28125 
+z
+" id="DejaVuSans-53"/>
+      </defs>
+      <g transform="translate(37.875 279.784088)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-50"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_3">
+     <g id="line2d_6">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="244.385739"/>
+      </g>
+     </g>
+     <g id="text_7">
+      <!-- 50 -->
+      <g transform="translate(37.875 248.184958)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-53"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_4">
+     <g id="line2d_7">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="212.786609"/>
+      </g>
+     </g>
+     <g id="text_8">
+      <!-- 75 -->
+      <defs>
+       <path d="M 8.203125 72.90625 
+L 55.078125 72.90625 
+L 55.078125 68.703125 
+L 28.609375 0 
+L 18.3125 0 
+L 43.21875 64.59375 
+L 8.203125 64.59375 
+z
+" id="DejaVuSans-55"/>
+      </defs>
+      <g transform="translate(37.875 216.585828)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-55"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_5">
+     <g id="line2d_8">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="181.187479"/>
+      </g>
+     </g>
+     <g id="text_9">
+      <!-- 100 -->
+      <defs>
+       <path d="M 12.40625 8.296875 
+L 28.515625 8.296875 
+L 28.515625 63.921875 
+L 10.984375 60.40625 
+L 10.984375 69.390625 
+L 28.421875 72.90625 
+L 38.28125 72.90625 
+L 38.28125 8.296875 
+L 54.390625 8.296875 
+L 54.390625 0 
+L 12.40625 0 
+z
+" id="DejaVuSans-49"/>
+      </defs>
+      <g transform="translate(31.5125 184.986698)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_6">
+     <g id="line2d_9">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="149.588349"/>
+      </g>
+     </g>
+     <g id="text_10">
+      <!-- 125 -->
+      <g transform="translate(31.5125 153.387567)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-50"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_7">
+     <g id="line2d_10">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="117.989218"/>
+      </g>
+     </g>
+     <g id="text_11">
+      <!-- 150 -->
+      <g transform="translate(31.5125 121.788437)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-53"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_8">
+     <g id="line2d_11">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="86.390088"/>
+      </g>
+     </g>
+     <g id="text_12">
+      <!-- 175 -->
+      <g transform="translate(31.5125 90.189307)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-49"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-55"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-53"/>
+      </g>
+     </g>
+    </g>
+    <g id="ytick_9">
+     <g id="line2d_12">
+      <g>
+       <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#me710c41e18" y="54.790958"/>
+      </g>
+     </g>
+     <g id="text_13">
+      <!-- 200 -->
+      <g transform="translate(31.5125 58.590177)scale(0.1 -0.1)">
+       <use xlink:href="#DejaVuSans-50"/>
+       <use x="63.623047" xlink:href="#DejaVuSans-48"/>
+       <use x="127.246094" xlink:href="#DejaVuSans-48"/>
+      </g>
+     </g>
+    </g>
+    <g id="text_14">
+     <!-- Taille (GB) -->
+     <defs>
+      <path id="DejaVuSans-32"/>
+      <path d="M 31 75.875 
+Q 24.46875 64.65625 21.28125 53.65625 
+Q 18.109375 42.671875 18.109375 31.390625 
+Q 18.109375 20.125 21.3125 9.0625 
+Q 24.515625 -2 31 -13.1875 
+L 23.1875 -13.1875 
+Q 15.875 -1.703125 12.234375 9.375 
+Q 8.59375 20.453125 8.59375 31.390625 
+Q 8.59375 42.28125 12.203125 53.3125 
+Q 15.828125 64.359375 23.1875 75.875 
+z
+" id="DejaVuSans-40"/>
+      <path d="M 19.671875 34.8125 
+L 19.671875 8.109375 
+L 35.5 8.109375 
+Q 43.453125 8.109375 47.28125 11.40625 
+Q 51.125 14.703125 51.125 21.484375 
+Q 51.125 28.328125 47.28125 31.5625 
+Q 43.453125 34.8125 35.5 34.8125 
+z
+M 19.671875 64.796875 
+L 19.671875 42.828125 
+L 34.28125 42.828125 
+Q 41.5 42.828125 45.03125 45.53125 
+Q 48.578125 48.25 48.578125 53.8125 
+Q 48.578125 59.328125 45.03125 62.0625 
+Q 41.5 64.796875 34.28125 64.796875 
+z
+M 9.8125 72.90625 
+L 35.015625 72.90625 
+Q 46.296875 72.90625 52.390625 68.21875 
+Q 58.5 63.53125 58.5 54.890625 
+Q 58.5 48.1875 55.375 44.234375 
+Q 52.25 40.28125 46.1875 39.3125 
+Q 53.46875 37.75 57.5 32.78125 
+Q 61.53125 27.828125 61.53125 20.40625 
+Q 61.53125 10.640625 54.890625 5.3125 
+Q 48.25 0 35.984375 0 
+L 9.8125 0 
+z
+" id="DejaVuSans-66"/>
+      <path d="M 8.015625 75.875 
+L 15.828125 75.875 
+Q 23.140625 64.359375 26.78125 53.3125 
+Q 30.421875 42.28125 30.421875 31.390625 
+Q 30.421875 20.453125 26.78125 9.375 
+Q 23.140625 -1.703125 15.828125 -13.1875 
+L 8.015625 -13.1875 
+Q 14.5 -2 17.703125 9.0625 
+Q 20.90625 20.125 20.90625 31.390625 
+Q 20.90625 42.671875 17.703125 53.65625 
+Q 14.5 64.65625 8.015625 75.875 
+z
+" id="DejaVuSans-41"/>
+     </defs>
+     <g transform="translate(25.432812 199.860031)rotate(-90)scale(0.1 -0.1)">
+      <use xlink:href="#DejaVuSans-84"/>
+      <use x="44.583984" xlink:href="#DejaVuSans-97"/>
+      <use x="105.863281" xlink:href="#DejaVuSans-105"/>
+      <use x="133.646484" xlink:href="#DejaVuSans-108"/>
+      <use x="161.429688" xlink:href="#DejaVuSans-108"/>
+      <use x="189.212891" xlink:href="#DejaVuSans-101"/>
+      <use x="250.736328" xlink:href="#DejaVuSans-32"/>
+      <use x="282.523438" xlink:href="#DejaVuSans-40"/>
+      <use x="321.537109" xlink:href="#DejaVuSans-71"/>
+      <use x="399.027344" xlink:href="#DejaVuSans-66"/>
+      <use x="467.630859" xlink:href="#DejaVuSans-41"/>
+     </g>
+    </g>
+   </g>
+   <g id="patch_6">
+    <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_7">
+    <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_8">
+    <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_9">
+    <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>
+ <defs>
+  <clipPath id="p60aa827e55">
+   <rect height="266.112" width="357.12" x="57.6" y="41.472"/>
+  </clipPath>
+ </defs>
+</svg>
diff --git a/doc/gitlab-markdown.gpp b/doc/gitlab-markdown.gpp
index 5dc6a3c40738c04b838633c87bddf1a098d0c22b..4ef53491937e99ed1d23e42b0b27624ded27071c 100644
--- a/doc/gitlab-markdown.gpp
+++ b/doc/gitlab-markdown.gpp
@@ -25,6 +25,9 @@
 !!define{!!newpage}{
 }
 
+!!define{!!clearpage}{
+}
+
 !!define{!!chapterwithoutnumber{name}}{# !!name}
 
 !!define{!!acronymdefinition{short}{description}}{
diff --git a/doc/markdown.gpp b/doc/markdown.gpp
index 8ebb8cca4af40b1917addd2b5e61b8752aebe2d6..ce233aa4bcb0e2916c571f1e70e493297c79e354 100644
--- a/doc/markdown.gpp
+++ b/doc/markdown.gpp
@@ -28,6 +28,8 @@ EOF-DEFACRONYM-GPP-MACRO
 !!exec{./csv2barchart.py "charts/!!chart_ref_id.png" "charts/!!chart_ref_id.svg" << 'EOF_BARCHART_MACRO'!!chart_data
 EOF_BARCHART_MACRO}
 
-!!svgref{!!chart_ref_id}{Graphique des !!description}{charts/!!chart_ref_id}}
+
+!!svgref{!!chart_ref_id}{Graphique des !!description}{charts/!!chart_ref_id}
+}
 
 !!endif
\ No newline at end of file
diff --git a/doc/pandoc-pdf-markdown.gpp b/doc/pandoc-pdf-markdown.gpp
index 36ae9a782090fc0a4c4b81047e2f381d6c4528e5..aec4476dda2697ec73b2756a6fe9efb95eab2982 100644
--- a/doc/pandoc-pdf-markdown.gpp
+++ b/doc/pandoc-pdf-markdown.gpp
@@ -14,6 +14,8 @@
 
 !!define{!!newpage}{\newpage}
 
+!!define{!!clearpage}{\clearpage}
+
 !!define{!!chapterwithoutnumber{name}}{
 \chapter*{!!name}
 \addcontentsline{toc}{chapter}{!!name}}
diff --git a/doc/rapport.gpp.md b/doc/rapport.gpp.md
index 621c4b8a78419f1f413df89699b35c9fc583792e..75ad000fad6cced3a4b6f1f24d1030c1a18b1e11 100644
--- a/doc/rapport.gpp.md
+++ b/doc/rapport.gpp.md
@@ -86,7 +86,7 @@ abstract: |
 !!defacronym{SSH}{_Secure SHell_: protocole de terminal à distance securisé}
 !!defacronym{TFTP}{_Trivial File Transfer Protocol_: protocole simplifié de transfert de fichiers}
 !!defacronym{UEFI}{_Unified Extensible Firmware Interface_: interface micrologicielle extensible unifiée}
-!!defacronym{WWW}{_World Wide Web_: toile mondiale / réseau mondial }
+!!defacronym{WWW}{_World Wide Web_: toile mondiale / réseau mondial}
 
 
 !!tableofcontents
@@ -1015,6 +1015,8 @@ On peut donc conclure que le choix du protocole !!acronym{NFS} est
 approprié car les autres protocole n'accélèrent pas considérablement la
 vitesse de transfert d'une image.
 
+!!clearpage
+
 !!barchart{chart_protocols}{table_protocols}{mesures de la durée de la copie d'un fichier avec différents protocoles}{
 "Protocole";"Durée (secondes)";"Écart entre les mesures (± secondes)";"Nombre de mesures"
 "SCP";119.8094;0.0182;4
@@ -1024,11 +1026,79 @@ vitesse de transfert d'une image.
 "SMB";122.565;0.215;4
 "IPFS";447;0;1}
 
+!!clearpage
+
 ## Réduction de la taille des images
 
-**TODO: expliquer, détailler et comparer (tableaux, diagrammes) les
-différentes mesures qui ont conduit à utiliser clonezilla pour des
-images plus petites.**
+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
+`dd`, qui est ensuite compressée avec `gzip`. Cette taille massive a
+plusieurs impacts négatifs:
+
+1. 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.
+2. Réduction du nombre d'images pouvant être mise en cache en même
+   temps.
+3. Réduction du nombre d'images pouvant être stockées sur le serveur.
+
+L'outil _Clonezilla_ a été considéré pour créer des images de taille
+plus réduites. Les images clonezilla sont créées avec l'outil
+_Partclone_. Cet outil utilise une approche différente de `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
+`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
+`gzip`, avec trois images:
+
+1. Une petite image du système _Debian_, comparée dans le tableau
+   !!ref{table_image_sizes_debian} et la figure
+   !!ref{chart_image_sizes_debian}
+2. Une image moyenne du système _Xubuntu_, comparée dans le tableau
+   !!ref{table_image_sizes_xubuntu} et la figure
+   !!ref{chart_image_sizes_xubuntu}
+3. Une grande image du système _Windows 10_, comparée dans le tableau
+   !!ref{table_image_sizes_win10} et la figure
+   !!ref{chart_image_sizes_win10}
+
+!!clearpage
+!!barchart{chart_image_sizes_debian}{table_image_sizes_debian}{tailles d'une petite image _Debian_ dans plusieurs formats}{
+"Type";"Taille (GB)"
+"Déployé";3.220176384
+"Gzip";0.496763976
+"Clonezilla";0.296152930}
+
+!!clearpage
+!!barchart{chart_image_sizes_xubuntu}{table_image_sizes_xubuntu}{tailles d'une image _Xubuntu_ moyenne dans plusieurs formats}{
+"Type";"Taille (GB)"
+"Déployé";200.511847936
+"Gzip";2.031040094
+"Clonezilla";1.840064982}
+
+!!clearpage
+!!barchart{chart_image_sizes_win10}{table_image_sizes_win10}{tailles d'une grande image _Windows 10_ dans plusieurs formats}{
+"Type";"Taille (GB)"
+"Déployé";512.095157760
+"Gzip";31.9568621077
+"Clonezilla";12.855020882}
+
+
+On peut voir que les images créées avec _Clonezilla_ prennent environ la
+moitié de la taille des images simplement compressées avec `gzip`. Les
+résultats de ces mesures de tailles ont donc motivé la modification du
+système de déploiement pour que des images _Clonezilla_ puissent être
+utilisées.
+
+## Amélioration de l'OS de déploiement
+
+**TODO: expliquer pourquoi le passage d'une image buildroot chargée d'un
+coup en mémoire à Debian avec un système de fichiers racine sur NFS
+apporte plus de flexibilité pour des temps de boot similaires. Expliquer
+la problématique de la gestion des paquets et de leur mise à jour avec
+buildroot. Parler aussi de l'impact du passage à systemd avec debian.**
 
 ## Réduction du temps de déploiement total
 
@@ -1045,14 +1115,6 @@ 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
-coup en mémoire à Debian avec un système de fichiers racine sur NFS
-apporte plus de flexibilité pour des temps de boot similaires. Expliquer
-la problématique de la gestion des paquets et de leur mise à jour avec
-buildroot. Parler aussi de l'impact du passage à systemd avec debian.**
-
 ## Amélioration des scripts de déploiement
 
 **TODO: Expliquer les problèmes rencontrés avec les scripts de
@@ -1147,7 +1209,3 @@ de personnalisation, avec un exemple type simple.**
 ### Points d'amélioration
 
 ### Retour personnel sur la manière dont le travail s'est effectué
-
-# Annexe A: journal de bord
-
-!!includemd{logbook.gpp.md}
diff --git a/doc/rapport.md b/doc/rapport.md
index 805942ddb466074e6de554c37a99c138982937cc..613fe99aec535b4b3941264217cdfcc9bce74632 100644
--- a/doc/rapport.md
+++ b/doc/rapport.md
@@ -52,7 +52,7 @@
 
 - **UEFI**: _Unified Extensible Firmware Interface_: interface micrologicielle extensible unifiée
 
-- **WWW**: _World Wide Web_: toile mondiale / réseau mondial 
+- **WWW**: _World Wide Web_: toile mondiale / réseau mondial
 
 
 
@@ -1009,6 +1009,9 @@ vitesse de transfert d'une image.
 
 
 
+
+
+
 Table des mesures de la durée de la copie d'un fichier avec différents protocoles: <a name="table_protocols"/>
 
 |Protocole|Durée (secondes)|Écart entre les mesures (± secondes)|Nombre de mesures|
@@ -1022,6 +1025,7 @@ Table des mesures de la durée de la copie d'un fichier avec différents protoco
 
 
 
+
 <figure>
 <a name="chart_protocols"/>
 ![Graphique des mesures de la durée de la copie d'un fichier avec différents protocoles](charts/chart_protocols.png)
@@ -1029,11 +1033,129 @@ Table des mesures de la durée de la copie d'un fichier avec différents protoco
 </figure>
 
 
+
+
+
+
 ## Réduction de la taille des images
 
-**TODO: expliquer, détailler et comparer (tableaux, diagrammes) les
-différentes mesures qui ont conduit à utiliser clonezilla pour des
-images plus petites.**
+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
+`dd`, qui est ensuite compressée avec `gzip`. Cette taille massive a
+plusieurs impacts négatifs:
+
+1. 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.
+2. Réduction du nombre d'images pouvant être mise en cache en même
+   temps.
+3. Réduction du nombre d'images pouvant être stockées sur le serveur.
+
+L'outil _Clonezilla_ a été considéré pour créer des images de taille
+plus réduites. Les images clonezilla sont créées avec l'outil
+_Partclone_. Cet outil utilise une approche différente de `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
+`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
+`gzip`, avec trois images:
+
+1. Une petite image du système _Debian_, comparée dans le tableau
+   ![ci-dessous](#table_image_sizes_debian) et la figure
+   ![ci-dessous](#chart_image_sizes_debian)
+2. Une image moyenne du système _Xubuntu_, comparée dans le tableau
+   ![ci-dessous](#table_image_sizes_xubuntu) et la figure
+   ![ci-dessous](#chart_image_sizes_xubuntu)
+3. Une grande image du système _Windows 10_, comparée dans le tableau
+   ![ci-dessous](#table_image_sizes_win10) et la figure
+   ![ci-dessous](#chart_image_sizes_win10)
+
+
+
+
+
+Table des tailles d'une petite image _Debian_ dans plusieurs formats: <a name="table_image_sizes_debian"/>
+
+|Type|Taille (GB)|
+|--|--|
+|Déployé|3.220176384|
+|Gzip|0.496763976|
+|Clonezilla|0.29615293|
+
+
+
+
+<figure>
+<a name="chart_image_sizes_debian"/>
+![Graphique des tailles d'une petite image _Debian_ dans plusieurs formats](charts/chart_image_sizes_debian.png)
+<figcaption>Graphique des tailles d'une petite image _Debian_ dans plusieurs formats</figcaption>
+</figure>
+
+
+
+
+
+
+
+Table des tailles d'une image _Xubuntu_ moyenne dans plusieurs formats: <a name="table_image_sizes_xubuntu"/>
+
+|Type|Taille (GB)|
+|--|--|
+|Déployé|200.511847936|
+|Gzip|2.031040094|
+|Clonezilla|1.840064982|
+
+
+
+
+<figure>
+<a name="chart_image_sizes_xubuntu"/>
+![Graphique des tailles d'une image _Xubuntu_ moyenne dans plusieurs formats](charts/chart_image_sizes_xubuntu.png)
+<figcaption>Graphique des tailles d'une image _Xubuntu_ moyenne dans plusieurs formats</figcaption>
+</figure>
+
+
+
+
+
+
+
+Table des tailles d'une grande image _Windows 10_ dans plusieurs formats: <a name="table_image_sizes_win10"/>
+
+|Type|Taille (GB)|
+|--|--|
+|Déployé|512.09515776|
+|Gzip|31.9568621077|
+|Clonezilla|12.855020882|
+
+
+
+
+<figure>
+<a name="chart_image_sizes_win10"/>
+![Graphique des tailles d'une grande image _Windows 10_ dans plusieurs formats](charts/chart_image_sizes_win10.png)
+<figcaption>Graphique des tailles d'une grande image _Windows 10_ dans plusieurs formats</figcaption>
+</figure>
+
+
+
+
+On peut voir que les images créées avec _Clonezilla_ prennent environ la
+moitié de la taille des images simplement compressées avec `gzip`. Les
+résultats de ces mesures de tailles ont donc motivé la modification du
+système de déploiement pour que des images _Clonezilla_ puissent être
+utilisées.
+
+## Amélioration de l'OS de déploiement
+
+**TODO: expliquer pourquoi le passage d'une image buildroot chargée d'un
+coup en mémoire à Debian avec un système de fichiers racine sur NFS
+apporte plus de flexibilité pour des temps de boot similaires. Expliquer
+la problématique de la gestion des paquets et de leur mise à jour avec
+buildroot. Parler aussi de l'impact du passage à systemd avec debian.**
 
 ## Réduction du temps de déploiement total
 
@@ -1050,14 +1172,6 @@ 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
-coup en mémoire à Debian avec un système de fichiers racine sur NFS
-apporte plus de flexibilité pour des temps de boot similaires. Expliquer
-la problématique de la gestion des paquets et de leur mise à jour avec
-buildroot. Parler aussi de l'impact du passage à systemd avec debian.**
-
 ## Amélioration des scripts de déploiement
 
 **TODO: Expliquer les problèmes rencontrés avec les scripts de
@@ -1152,3420 +1266,3 @@ de personnalisation, avec un exemple type simple.**
 ### Points d'amélioration
 
 ### Retour personnel sur la manière dont le travail s'est effectué
-
-# Annexe A: journal de bord
-
-
-
-## 2020-04-22
-
-Created the git repository on
-<https://githepia.hesge.ch/dimitri.lizzi/bootiful>.
-
-Start to study the previous project made by Abilash Venkatesh on
-<https://githepia.hesge.ch/abhilash.venkates/remote-imaging>. The first
-step will be to reproduce the infrastructure and make it work.
-
-I will set up the following infrastructure:
-- A DHCP server
-- A TFTP server
-- A NFS server
-- A client
-
-I will try to use Vagrant to set-up a reproducible VM based on debian
-buster that contains all the servers. It will be created in
-[`remote_imaging/pxe_server`](../remote_imaging/pxe_server).
-
-A [Vagrantfile](../remote_imaging/pxe_server/Vagrantfile) has been
-created using the following command:
-
-```bash
-vagrant init debian/buster64
-```
-
-I defined a basic configuration inspired by a similar project on GitHub:
-<https://github.com/eoli3n/vagrant-pxe>. For the moment, I just try to
-install the packages `isc-dhcp-server`, `tftpd-hpa` and
-`nfs-kernel-server`. I will do a script that copies the configuration
-files later.
-
-The virtual machine can be created and started by running the following
-command:
-
-```bash
-vagrant up
-```
-
-It's then possible to SSH into the VM using:
-
-```bash
-vagrant ssh
-```
-
-The VM can be removed using:
-
-```bash
-vagrant destroy
-```
-
-Now let's configure the different services. I'll start by copying the
-[configuration files from the remote-imaging repository](https://githepia.hesge.ch/abhilash.venkates/remote-imaging/tree/master/server-config)
-into the [`config`](../remote_imaging/pxe_server/config) folder.
-
-These files should be copied after the installation of the packages, but
-before, let's modify them to match our server configuration.
-
-- `/etc/defaults/isc-dhcp-server`
-  - use interface `eth1` instead of `vboxnet0`
-- `/etc/dhcp/dhcpd.conf`
-  - subnet 192.168.56.0/24
-  - use same address as the dhcp server for tftp server: 192.168.56.254
-  - comment options for domain name servers and routers for now as we
-    will not use a network open to the outside right now
-- `/etc/default/tftpd-hda`
-  - remove comment not useful
-
-It look like it works!
-
-I have created manually a VM with VirtualBox that connects to the same
-network as the server, but unfortunately, the PXE boot fails with the
-following error messages:
-
-```
-Intel UNDI, PXE-2.1
-PXE Software Copyright (C) 1997-2000 Intel Corporation
-Copyright (C) 2010-2017 Oracle Corporation
-
-CLIENT MAC ADDR: 08 00 27 CE 6D 4A GUID: 077C2310-C4DC-DC49-A6C5-2AAC35FDO22D
-CLIENT IP: 192.168.56.10 MASK: 255.255.255.0 DHCP IP: 192.168.56.254
-TFTP.
-PXE-TO1: File not found
-PXE-E3B: TFTP Error - File Not found
-PXE-MOF : Exiting Intel PXE ROM
-FATAL: No bootable medium found! System halted.
-```
-
-
-### Meeting with F. Gluck
-- Faire un planning d'ici la semaine prochaine
-- Reproduire le projet et automatiser
-- Investiguer les sparse files
-- Investiguer sur le multicast, l'optimisation du traffic réseau
-- Cache de l'image sur le disque: étudier le mécanisme mis en place
-- Vérifier que le boot fonctionne sur des OS différents
-- Système d'extension d'une image _template_, scripts de démarrage
-- Integration à un LDAP de manière "élégante", gestion des comptes
-- Faciliter la création d'images
-- Système de gestion simple à utiliser pour la gestion du serveur et des
-  images
-- Système d'overlay/différenciation d'images
-- Rapport:
-  - montrer les différences entre Bootiful, Tivoli, CloneZilla
-  - documenter les besoins de l'école
-- Prochain RDV: mercredi 10h
-
-Projet rainbow: racheté par IBM et intégré à Tivoli
-
-## 2020-04-25
-
-Let's find out why the tftp server doesn't work. [This guide guide from
-Oracle](https://docs.oracle.com/cd/E19045-01/b100x.blade/817-5625-10/Linux_Troubleshooting.html)
-explains some steps for troubleshooting that I'm going to follow.
-
-First, let's check on the server if the TFTP server is running.
-
-On the server, the package `net-tools`, which provides, among others,
-the `netstat` program, has been installed.
-
-```bash
-sudo apt install net-tools
-```
-
-The service seems to be running on port 67:
-
-```
-$ netstat -an | grep -w 67
-udp        0      0 0.0.0.0:67              0.0.0.0:*
-```
-
-From the error message seen previously, `PXE-TO1: File not found`, it
-seems that the connection to the server is successful but that a file is
-missing.
-
-We can see that the folder `tftpboot` exists and seems to be readable
-for all users:
-```
-$ ls -als /tftpboot/
-total 12
-4 drwxr-xr-x  3 vagrant vagrant 4096 Apr 22 06:35 .
-4 drwxr-xr-x 21 root    root    4096 Apr 25 18:55 ..
-4 drwxr-xr-x  6 vagrant vagrant 4096 Apr 22 06:35 boot
-```
-
-The boot file specified in `dhcpd.conf` seems to exist as well:
-
-```bash
-$ ls
--l /tftpboot/boot/grub/i386-pc/core.0 -rw-r--r-- 1 vagrant vagrant 54394
-Apr 22 06:35 /tftpboot/boot/grub/i386-pc/core.0
-```
-
-Let's install tftp on the server.
-
-```bash
-sudo apt install tftp
-```
-
-Now, let's check if we can access to the file on localhost.
-
-```bash
-$ tftp 127.0.0.1
-tftp> get /boot/grub/i386-pc/core.0
-Error code 1: File not found
-```
-
-We can reproduce the error. There is probably something wrong in `tftpd`
-configuration. Let's check:
-
-```bash
-$ cat /etc/default/tftpd-hpa
-# /etc/default/tftpd-hpa
-
-TFTP_USERNAME="tftp"
-TFTP_DIRECTORY="/srv/tftp"
-TFTP_ADDRESS="0.0.0.0:69"
-TFTP_OPTIONS="--secure"
-```
-
-The configuration is not the correct one and seems to be the default.
-After a quick check in the `Vagrantfile`, I found the error on this
-line:
-
-```bash
-cp /vagrant/config/tftp/tftpd-hpa /etc/default/tftpd-hda
-```
-
-There is a typo, the target file should be:
-
-```bash
-cp /vagrant/config/tftp/tftpd-hpa /etc/default/tftpd-hpa
-```
-
-After fixing the `Vagrantfile`, let's rebuild the server:
-
-```
-vagrant destroy -f && vagrant up
-```
-
-Now it works!.. Kind of. The client gets the grub image but there's an
-error after GRUB has started:
-
-```
-Welcome to GRUB!
-
-error: no server is specified.
-Entering rescue mode...
-grub rescue> 
-```
-
-I think this happens because the server address is hard-coded somewhere,
-or something like that.
-
-In the `grub.cfg` file, there are some lines that catch my attention:
-
-```
-#GRUB_ISIGN_MATCH 101
-#GRUB_ISIGN_MISMATCH 100
-#GRUB_ISIGN_WRITE 102
-
-isign -c hepia2015 (hd0)
-set check1=$?
-if [ $check1 == 101 ]; then
-isign -w 000000000 (hd0)
-```
-
-It looks like `isign` is a custom module for GRUB. I have to find out
-what it does and what is the correct configuration to make it work. The
-parameter `hepia2015` looks suspicious: is it as password? A host name?
-A partition name?
-
-## 2020-04-26
-
-Let's find out what is this `isign` module and how it works. I started
-by adding some indentation to the grub.cfg file. It looks like the the
-`isign` is checking something on hd0, and the menu that appears changes
-depending on this check.
-
-My guess is that it checks if an OS is already deployed with the image
-deployment OS. If so, the image can be booted. Otherwise, only the
-deployment OS is available in the menu.
-
-The behavior of this command is defined in the
-[`isign.c` file](https://githepia.hesge.ch/abhilash.venkates/remote-imaging/blob/master/grub_build/grub-2.02/grub-core/commands/isign.c).
-
-After playing a bit in the `grub rescue>` prompt on the client, I have
-been able to manually set the server ip and show the boot menu with the
-following commands:
-
-```
-grub rescue> set net_default_server=192.168.56.254
-grub rescue> insmod normal
-grub rescue> normal
-```
-
-Now, the menu shows up with only the `IDOS-Image Deployment OS` option.
-It seems that the OS is hard-coded to connect to an NFS server on
-192.168.56.100 and it fails. I will try to change my server IP to this
-address and maybe even GRUB will work. If it does, I have to find a way
-to make this IP address easily configurable.
-
-After recreating the server with the new address, GRUB still does not
-connect to the server as expected. The NFS mount still does not work as
-well but for another reason: `Permission denied`.
-
-After checking the server configuration, I found out that the issue was
-that the nfs server did not load the configuration file after copying
-it. It was fixed by adding the following line in the server
-configuration script:
-
-```bash
-systemctl restart nfs-server
-```
-
-Now, the `IDOS-Image Deployment OS` starts without error. The GRUB
-default server should still be entered manually but at least the OS
-boots afterwards. Once the OS has booted, nothing happens. I am root in
-a command-line prompt. I expected to see a menu or something.
-
-This a menu script exists, though, and can be launched with:
-
-```bash
-/root/menu.sh
-```
-
-It shows a `ncurses` menu where all options are items of the root file
-system. When I chose an item, a string `chosen image is <CHOSEN_ITEM>`
-is echoed to stdout and nothing happens.
-
-After reading the _readme_ files, it seems that the correct _main_
-script is:
-
- ```bash
- /root/ideploy.sh
- ```
-
-Running this script shows a menu with only one option: `os1`. When this
-option is chosen, an error message appears:
-
-```
-chosen image is os1
-total_size of image=2147483648 bytes
-Isufficient disk space for imaging, need size of 2147483648 B but has -4096 bytes
-umount: cant unmount /mnt: Invalid argument
-
-######################################Sun Apr 26 17:19:32 UTC 2020######################################
-
-#
-```
-
-This is maybe because of a wrong configuration on the client virtual
-machine. `2147483648 B = 2,147483648 GB` but the machine has 10 GB
-available. However, the scripts says that `-4096 bytes` are available.
-This is a sign that the script does not try to use the correct disk.
-
-The script determines the size of the `sda` disk by using this command:
-
-```
-fdisk -l | grep "Disk /dev/sda" | head -n 1 | cut -d ',' -f 2 | cut -d ' ' -f 2
-```
-
-However, on my virtual machine where the disk is has no partition, this
-command returns this:
-
-```
-$ fdisk -l | grep "Disk /dev/sda" | head -n 1 | cut -d ',' -f 2 | cut -d ' ' -f 2
-10737418240
-/dev/sda
-```
-
-The second line happens because `fdisk -l` outputs this line at the end
-when there is no partition table:
-
-```
-Disk /dev/sda1 doesn't contain a valid partition table
-```
-
-I believe the miscalculation of the disk size happens because of this
-line. I will modify the script to use only the first matching line of
-fdisk using `head -n 1` after `grep`. The modified command looks like
-this:
-
-```
-fdisk -l | grep "Disk /dev/sda" | head -n 1 | cut -d ',' -f 2 | cut -d ' ' -f 2
-```
-
-Now it seems to go further. There is still a warning but it seems to
-continue copying the image after it:
-
-```
-ls : /mnt/*.md5: No such file or directory
-```
-
-At the end, the script says `rebooting` but the VM does not reboot. I
-rebooted manually and can now see a `local hdd` option in GRUB, after
-setting the remote server manually. However, booting on `local hdd` does
-nothing. The screen stays black with a blinking cursor.
-
-On another subject: I have fixed the GRUB problem by adding the
-following line to `dhcpd.conf`:
-
-```
-next-server 192.168.56.100;
-```
-
-Now it's not necessary to enter the server by hand in GRUB.
-
-## 2020-04-28
-
-I discovered that the `grub.cfg` is configured to boot on `manual_os`.
-This explains why the deployment is not automatic.
-
-I've added an entry in the menu for the `auto_os`. I have also corrected
-a typo `vimlinuz` that should be `vmlinuz`, simplified the `if`
-condition and improved the strings.
-
-When running the auto OS, the only thing I see is a blinking cursor...
-It does not seem to do anything.
-
-I found out that the deploy log is saved on the server if I use
-`/root/deploy_log.sh` for the deployment.
-
-Here is the log:
-
-```
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/deploy_log.sh: line 32: .: ideploy.sh: file not found
-/root/ideploy.sh: line 12: l: command not found
-
-######################################Tue Apr 28 16:53:20 UTC 2020##############################################
-
-Total size of disk=10737418240 bytes
-size of hidden partition=2147483648 bytes
-size of disk for imaging=8589930496 bytes
-End byte=10737414144 bytes
-512+0 records in
-512+0 records out
-262144 bytes (256.0KB) copied, 0.043130 seconds, 5.8MB/s
-Warning: The resulting partition is not properly aligned for best performance.
-partition created
-dd: can't open '/root/boot/mbr/08:00:27:ce:6d:4a.img': No such file or directory
-mke2fs 1.44.5 (15-Dec-2018)
-Creating filesystem with 524288 4k blocks and 131072 inodes
-Filesystem UUID: ab3cf206-1689-4155-9c18-6ef31c2796db
-Superblock backups stored on blocks: 
-        32768, 98304, 163840, 229376, 294912
-
-Allocating group tables: done                            
-Writing inode tables: done                            
-Creating journal (16384 blocks): done
-Writing superblocks and filesystem accounting information: done 
-
-hidden partition created and available
-mounted
-chosen image is os1 
-total_size of image=2147483648 bytes
-sufficient space for imaging
-ls: /mnt/*.md5: No such file or directory
-not cached, so caching 
-size cache available=1871288 KB
-size of image to download=259720 KB
-8+65425 records in
-8+65425 records out
-2147483648 bytes (2.0GB) copied, 15.177776 seconds, 134.9MB/s
-Caching and deployment  of 259720 KB done in 16 s 
-md5sum checked
-location of signature at  10737418040 B
- signature is hepia2015
-9+0 records in
-9+0 records out
-9 bytes (9B) copied, 0.005788 seconds, 1.5KB/s
-rebooting..
-
-######################################Tue Apr 28 16:53:45 UTC 2020##############################################
-```
-
-It looks like there is an error in the last line of the script:
-
-```
-. ideploy.sh &>> $log_file
-```
-
-I will change it to:
-
-```
-/root/ideploy.sh 2>&1 | tee output
-```
-
-Also, it looks like the `reboot` command has been commented out in
-`ideploy.sh`. I will uncomment it. It seem to install the image and
-reboot as expected.
-
-I tried to boot manually from grub:
-
-```
-set root=(hd0,1)
-linux /boot/vmlinuz-vanilla root=/dev/sda3
-initrd /boot/initramfs-vanilla
-boot
-```
-
-But it seems there is a problem with `initramfs`.
-
-## 2020-04-29
-
-Creation of [a planning](planning.fods).
-
-Meeting with F. Gluck and S. Chassot. We discussed the current stage of
-the reproduction of the infrastructure and the planning. We agreed that
-I should investigate how the OS images are created and maybe create a
-new one.
-
-F. Gluck mentioned some ways of investigating why the `initrd` does not
-work. This is a `cpio` archive, so it can be extracted with a command
-like this:
-
-```
-cpio -idv < /boot/initrd.img-4.15.0-91-generic
-```
-
-F. Gluck also said that I should modify the planning to start working
-earlier on the creation and customization of images, and that the
-network optimization can be moved to the end of the work, if there's
-some time left.
-
-I cleaned up the `ideploy.sh` script (removed some whitespace, removed
-command `l` at the start of the file).
-
-I removed the logs and added a readme file so git doesn't delete the
-folder.
-
-## 2020-05-03
-
-After reading Abhilash's report, I found out that he created some docker
-images published on dockerhub:
-
-- [osimaging/dhcp-nfs](https://hub.docker.com/r/osimaging/dhcp-nfs)
-- [osimaging/grub-tftp](https://hub.docker.com/r/osimaging/grub-tftp)
-- [osimaging/buildroot](https://hub.docker.com/r/osimaging/buildroot)
-
-Unfortunately, there are no sources for these images. I will try to
-dissect the second image to find out if the grub configuration is the
-same, as I suspect there is something wrong in the one I got from the
-repository.
-
-First, lets download the dcocker image:
-
-```bash
-docker pull osimaging/grub-tftp
-```
-
-Now that I have the image, I can inspect see the commands that have been
-used to create its layers:
-
-```bash
-$ docker history osimaging/grub-tftp --no-trunc
-IMAGE                                                                     CREATED             CREATED BY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 SIZE                COMMENT
-sha256:48023277a40cf403b0cfafecc453f16f94856eed7a8b64e2d7e8c5e44f5f3ab4   6 months ago                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   925B                
-<missing>                                                                 7 months ago                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   5.49kB              
-<missing>                                                                 7 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["/bin/sh" "-c" "service tftpd-hpa start && /bin/bash"]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      0B                  
-<missing>                                                                 7 months ago        /bin/bash                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  8.54MB              
-<missing>                                                                 7 months ago        /bin/bash                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  571MB               grub with tftp server
-<missing>                                                                 7 months ago        /bin/bash                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  962MB               
-<missing>                                                                 7 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       0B                  
-<missing>                                                                 7 months ago        /bin/sh -c mkdir -p /run/systemd && echo 'docker' > /run/systemd/container                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 7B                  
-<missing>                                                                 7 months ago        /bin/sh -c set -xe   && echo '#!/bin/sh' > /usr/sbin/policy-rc.d  && echo 'exit 101' >> /usr/sbin/policy-rc.d  && chmod +x /usr/sbin/policy-rc.d   && dpkg-divert --local --rename --add /sbin/initctl  && cp -a /usr/sbin/policy-rc.d /sbin/initctl  && sed -i 's/^exit.*/exit 0/' /sbin/initctl   && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup   && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean  && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean  && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean   && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages   && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes   && echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests   745B                
-<missing>                                                                 7 months ago        /bin/sh -c [ -z "$(apt-get indextargets)" ]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                987kB               
-<missing>                                                                 7 months ago        /bin/sh -c #(nop) ADD file:288ac0434f65264f3c50cf3e2766c5dbf3fa953c89995dd9445063fd565aac81 in /                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           63.2MB              
-```
-
-It looks like files have been added in the last layer. I don't know how
-to find the id for this layer so I used `find` to search for `grub.cfg`
-in the docker images. As this is the only docker image installed on my
-computer, there is no risk that it's from another image.
-
-```
-$ sudo find /var/lib/docker/overlay2 -name grub.cfg
-/var/lib/docker/overlay2/2ee611d9b284dbac637be7f08b778d00f20af9c48610e2f7e7ab9e8de536fe01/diff/tftpboot/boot/grub/grub.cfg
-/var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/tftpboot/boot/grub/grub.cfg
-/var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/tftpboot/boot/grub/i386-pc/grub.cfg
-/var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/home/grub_build/grub-2.02/docs/grub.cfg
-/var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/home/grub_build/grub-2.02_source/docs/grub.cfg
-/var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/home/grub_build/server-config/tftp/tftpboot/boot/grub/i386-efi/grub.cfg
-/var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/home/grub_build/server-config/tftp/tftpboot/boot/grub/i386-pc/grub.cfg
-```
-
-It looks like it should be the first or the second image. Let's inspect
-them:
-
-```
-$ sudo cat /var/lib/docker/overlay2/2ee611d9b284dbac637be7f08b778d00f20af9c48610e2f7e7ab9e8de536fe01/diff/tftpboot/boot/grub/grub.cfg
-
-#tr --set=MAC ":" "-" "${net_default_mac}"
-#configfile /boot/grub/${MAC}
-
-#GRUB_ISIGN_MATCH 101
-#GRUB_ISIGN_MISMATCH 100
-#GRUB_ISIGN_WRITE 102
-
-isign -c hepia2015 (hd0)
-set check1=$?
-if [ $check1 == 101 ]; then
-isign -w 000000000 (hd0)
-
-menuentry local_hdd { 
-linux16 //boot/ipxe/ipxe.lkrn 
-initrd16 //boot/ipxe/boot_hdd.ipxe 
-}    
-
-menuentry IDOS-Image\ Deployment\ OS {
-echo "loading vimlinuz"
-
-        linux   boot/manual_os/bzImage    ro ip=dhcp  splash quiet 
-
-        
-}
-
-
-
-else
-menuentry IDOS-Image\ Deployment\ OS {
-echo "loading vimlinuz"
-
-        linux   boot/manual_os/bzImage    ro ip=dhcp  splash quiet 
-        
-        
-}
-
-       
-fi
-
-
-$ sudo cat /var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/tftpboot/boot/grub/grub.cfg
-
-#tr --set=MAC ":" "-" "${net_default_mac}"
-#configfile /boot/grub/${MAC}
-
-#GRUB_ISIGN_MATCH 101
-#GRUB_ISIGN_MISMATCH 100
-#GRUB_ISIGN_WRITE 102
-
-isign -c hepia2015 (hd0)
-set check1=$?
-if [ $check1 == 101 ]; then
-isign -w 000000000 (hd0)
-
-menuentry local_hdd { 
-linux16 //boot/ipxe/ipxe.lkrn 
-initrd16 //boot/ipxe/boot_hdd.ipxe 
-}    
-
-menuentry tiny_OS {
-echo "loading vimlinuz"
-
-        linux   boot/manual_os/bzImage    ro ip=dhcp  splash quiet 
-
-        
-}
-
-
-
-else
-menuentry tiny_OS {
-echo "loading vimlinuz"
-
-        linux   boot/manual_os/bzImage    ro ip=dhcp  splash quiet 
-        
-        
-}
-
-       
-fi
-
-
-```
-
-Both look very similar. Let's look at the differences between them:
-
-```
-$ sudo diff /var/lib/docker/overlay2/2ee611d9b284dbac637be7f08b778d00f20af9c48610e2f7e7ab9e8de536fe01/diff/tftpboot/boot/grub/grub.cfg /var/lib/docker/overlay2/22b272204d56ddbf324fdaacded0883a7026c424e6fe89ac35d112db2a1ed6ac/diff/tftpboot/boot/grub/grub.cfg 
-19c19
-< menuentry IDOS-Image\ Deployment\ OS {
----
-> menuentry tiny_OS {
-30c30
-< menuentry IDOS-Image\ Deployment\ OS {
----
-> menuentry tiny_OS {
-
-```
-
-It looks like the only difference between them is the name of the menu
-entry. Apart from that, we can (unfortunately) see that the local hdd
-boot is similar to what I have:
-
-```
-menuentry local_hdd { 
-linux16 //boot/ipxe/ipxe.lkrn 
-initrd16 //boot/ipxe/boot_hdd.ipxe 
-}    
-```
-
-This has taught me nothing apart from the fact that the entry `tiny_OS`
-has been renamed to `IDOS-Image Deployment OS`.
-
-I need to find out why this `ipxe.kern` does nothing when booted. Let's
-inspect the `initrd` file named `boot_hdd.ipxe`.
-
-```
-$ cpio -idv < config/nfs/nfsroot/boot/ipxe/boot_hdd.ipxe 
-cpio: premature end of archive
-```
-  
-It looks like the file is truncated. Let's look at its size:
-
-```
-$ ls -lh config/nfs/nfsroot/boot/ipxe/boot_hdd.ipxe 
--rwxr-xr-x 1 araxor araxor 17 22 avr 08:35 config/nfs/nfsroot/boot/ipxe/boot_hdd.ipxe
-```
-
-Only 17 bytes: it's suspicious. Let's look at the content of the file:
-
-```
-$ cat config/nfs/nfsroot/boot/ipxe/boot_hdd.ipxe
-#!ipxe
-
-sanboot
-```
-
-Some documentation on the `sanboot` exists
-[on ipxe documentation](https://ipxe.org/cmd/sanboot). It looks like it
-will boot on the default disk if no argument is provided. I don't
-understand why the grub command `chainloader (hd0)+1` has not been used
-for this purpose, which seems to do the same thing without involving
-`ipxe`.
-
-When I try to run the command manually, the same thing happens: the
-cursor is blinking and nothing happens.
-
-I will create a new image with alpine linux to see if this works. I will
-just transform the `iso` file to a disk image and see if it boots. It's
-not a _real_ image, because it will boot the installer and not the real
-os, but this is ok to just see if booting on it works.
-
-```bash
-mkdir remote_imaging/pxe_server/config/nfs/nfsroot/images/alpine
-cd remote_imaging/pxe_server/config/nfs/nfsroot/images/alpine
-wget http://dl-cdn.alpinelinux.org/alpine/v3.11/releases/x86_64/alpine-standard-3.11.6-x86_64.iso
-fdisk -l alpine-standard-3.11.6-x86_64.iso > alpine.partition
-gzip alpine-standard-3.11.6-x86_64.iso > alpine.img.gz
-md5sum alpine.img.gz > alpine.md5
-du alpine.img.gz > alpine.size
-rm alpine-standard-3.11.6-x86_64.iso
-```
-
-Now lets recreate the server with the new image:
-
-```bash
-vagrant destroy -f && vagrant up
-```
-
-Unfortunately, it does not work:
-
-![Unsucessful Alpine boot](videos/unsuccessful_alpine_boot.webm)
-
-Something catches my attention during the deployment (at 0:21 in the
-video above):
-
-```
-size of image to download=0 KB
-gunzip: invalid magic
-```
-
-It looks like something goes wrong. Let's look at the image size:
-
-```
-$ ls -lh alpine.img.gz 
--rw-r--r-- 1 araxor araxor 0  3 mai 03:38 alpine.img.gz
-```
-
-In fact, the image is empty. Something must have gone wrong when
-creating the archive.
-
-```
-gzip alpine-standard-3.11.6-x86_64.iso > alpine.img.gz
-```
-
-It looks like this command is wrong. I have fixed it and placed the
-image creation process
-[in a shell script](../remote_imaging/pxe_server/config/nfs/nfsroot/images/alpine/create_image.sh).
-
-I tried to boot on this image... It does not work either, although the
-gunzip error has disappeared.
-
-## 2020-05-04
-
-I will inspect the file system of the client virtual machine by booting
-on a gparted live cd iso. In the GParted GUI, the file system is
-`iso9660`:
-
-![GParted showing the partition in iso9660](images/pxe_client_alpine_gparted_iso9660.png)
-
-This is maybe a problem. I will create a _real_ alpine linux image to
-confirm this and also have a real image to play with. Here is how I plan
-to do it:
-
-1. Install alpine on the `vdi` disk image file
-   - Change the VM network to `NAT` because the installer requires an
-     internet connection to retrieve packages
-   - Login with username `root` and no password
-   - Disable swap to make the image smaller
-     ```
-     export SWAP_SIZE=0
-     ```
-   - Start the installer
-     ```bash
-     export SWAP_SIZE=0
-     setup-alpine
-     ```
-   - Install with default options except:
-     - hostname: `alpine`
-     - root password: `alpine`
-     - disk: `sda`
-     - how to use the drive: `sys` (traditional disk install with
-       `/boot`, `/` and `swap` partitions)
-   - Reboot the machine with `reboot`
-   - Boot on hard drive to check that the install is successful: it
-     works!
-   - Shut down the virtual machine
-2. Convert the `vdi` image to a `raw` image
-   ```bash
-   VBoxManage clonehd pxe_client.vdi alpine.img --format raw
-   ```
-3. Shrink the second partition of the disk image to a smaller size. A
-   procedure described in a
-   [Stack overflow answer](https://superuser.com/a/1373296) has been
-   used to do this step. Another way to do this would be to use
-   `gparted` but I wanted to do it from the command line so it can be
-   automated later.
-   - Set up loopback devices for the partitions in the image:
-
-     ```bash
-     sudo losetup --find --partscan alpine.img
-     ```
-
-     The image is now accessible as a disk on `/dev/loop0` and the
-     second partition is accessible on `/dev/loop0p2`
-   - Find out the estimated minimum size (in blocks) for the second
-     partition:
-
-     ```
-     $ sudo resize2fs -P /dev/loop0p2
-     resize2fs 1.45.6 (20-Mar-2020)
-     Estimated minimum size of the filesystem: 397098
-     ```
-   - Resize the file system to a size of 400000 blocks for safety. The
-     minimum size of the filesystem is just an estimation and we also
-     need some space to do some tests.
-
-     ```
-     $ sudo e2fsck -f /dev/loop0p2
-     e2fsck 1.45.6 (20-Mar-2020)
-     Pass 1: Checking inodes, blocks, and sizes
-     Pass 2: Checking directory structure
-     Pass 3: Checking directory connectivity
-     Pass 4: Checking reference counts
-     Pass 5: Checking group summary information
-     /dev/loop0p2: 7478/648960 files (0.1% non-contiguous), 262974/2595584 blocks
-     
-     $ sudo resize2fs -p /dev/loop0p2 400000
-     resize2fs 1.45.6 (20-Mar-2020)
-     Resizing the filesystem on /dev/loop0p2 to 400000 (4k) blocks.
-     Begin pass 2 (max = 28340)
-     Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     Begin pass 3 (max = 80)
-     Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     Begin pass 4 (max = 1148)
-     Updating inode references     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     The filesystem on /dev/loop0p2 is now 400000 (4k) blocks long.
-     ```
-
-     - TODO: Resize the partition to 400000 blocks.
-4. TODO: Shrink the raw disk image file to the size of the partition
-5. TODO: Add the raw image to the nfs root folder in the server
-   configuration folder
-6. TODO: Check that the disk image works
-7. TODO: Push the image in the repository using
-   [git LFS](https://githepia.hesge.ch/help/workflow/lfs/manage_large_binaries_with_git_lfs)
-
-
-## 2020-05-06
-
-I will shrink the partition later but first I'll recreate a smaller
-image with the same procedure but on a smaller disk of 2GB.
-
-Let's create the image files for the tiny os:
-
-```bash
-fdisk -l alpine.img > alpine.partition
-gzip alpine.img
-md5sum alpine.img.gz > alpine.md5
-du alpine.img.gz > alpine.size
-```
-
-Unfortunately, the boot still does not work with this image... However,
-I can boot from command line using these commands:
-
-```
-set root=(hd0,1)
-chainloader +1
-boot
-```
-
-I have modified grub.cfg to use `chainloader +1` instead of calling
-`pxe`. Now it works!
-
-![Successful alpine boot](videos/successful_alpine_boot.webm)
-
-The other image works as well, but I'll keep the new one for testing
-purposes.
-
-Now I have large image files in the repository as well as some video
-files. I will try to convert the repository to Git LFS so the repository
-performance does not suffer from the large files.
-
-I will follow
-[a guide from GitLab's documentation](https://docs.gitlab.com/ee/topics/git/lfs/migrate_to_git_lfs.html)
-to do it.
-
-1. Backup the repository
-   - A new empty repository has been created for the backup:
-     <https://githepia.hesge.ch/dimitri.lizzi/bootiful-pre-lfs-backup>
-   - A local copy of the repository has been created
-     ```bash
-     cp -r bootiful bootiful-pre-lfs-backup
-     ```
-
-   - The unmodified logbook has been restored so the working tree is
-     clean
-     ```bash
-     $ cd bootiful-pre-lfs-backup
-     $ git restore doc/logbook.md 
-     $ git status
-     On branch master
-     Your branch is up to date with 'origin/master'.
-     
-     nothing to commit, working tree clean
-     ```
-
-   - The remote `origin` of the copied repository has been changed to
-     the url of the backup repository
-     ```bash
-     git remote rename origin old-origin
-     git remote add origin ssh://gitssh.hesge.ch:10572/dimitri.lizzi/bootiful-pre-lfs-backup.git
-     ```
-
-   - The history and tags have been pushed to the new repository
-     ```bash
-     git push -u origin --all
-     git push -u origin --tags
-     ```
-
-
-
-2. Delete all binary files in git. This is necessary because `bfg` will
-   not remove files that are present in the HEAD commit. These files
-   will be restored after converting the repository to LFS.
-
-   ```bash
-   cd bootiful
-   find . -type f -regextype posix-extended -regex '^.*\/(bzImage|partimage|partimaged|core\.0|.*\.(ext2|mod|pf2|png|mo|img|gz|vdi|webm|cpio|lkrn|mp4))$' -delete
-   git add .
-   git commit -m "git lfs: remove binary files from HEAD"
-   git push
-   ```
-
-3. Clone the bare repository in folder `bootiful.git`
-   ```bash
-   cd ..
-   git clone --mirror ssh://gitssh.hesge.ch:10572/dimitri.lizzi/bootiful.git
-   ```
-
-4. Convert the binary files in git history to lfs
-   ```bash
-   bfg --convert-to-git-lfs "{bzImage,partimage,partimaged,core.0,*.ext2,*.mod,*.pf2,*.png,*.mo,*.img,*.gz,*.vdi,*.webm,*.cpio,*.lkrn,*.mp4}" bootiful.git
-   ```
-
-5. Clean up the repository
-   ```bash
-   cd bootiful.git
-   git reflog expire --expire=now --all && git gc --prune=now --aggressive
-   ```
-
-6. Install git lfs on repository
-   ```bash
-   git lfs install
-   ```
-
-7. Unprotect the default branch, so that we can force-push the rewritten
-   repository:
-   - Navigate to your project’s Settings > Repository and expand
-     Protected Branches.
-   - Scroll down to locate the protected branches
-     and click Unprotect the default branch.
-
-8. Force push to the server:
-   ```bash
-   git push --force
-   git pull
-   git push --force
-   ```
-
-9. Re-clone the repository to get the new one that we have force pushed
-   ```bash
-   cd ..
-   mv bootiful bootiful.pre-lfs.backup
-   git clone ssh://gitssh.hesge.ch:10572/dimitri.lizzi/bootiful.git
-   cd bootiful
-   ```
-
-8. Track the file patterns in LFS
-   ```bash
-   git lfs track "bzImage" "partimage" "partimaged" "core.0" "*.ext2" "*.mod" "*.pf2" "*.png" "*.mo" "*.img" "*.gz" "*.vdi" "*.webm" "*.cpio" "*.lkrn" "*.mp4"
-   git add .
-   git commit -m "add lfs patterns"
-   git push
-   ```
-9. Revert deletion of files
-   ```bash
-   git revert ecb9120676d265368bf4e628f606e94c2c2271cc
-   git push
-   ```
-
-10. Re-protect the default branch:
-   - Navigate to your project’s Settings > Repository and expand Protected Branches.
-   - Select the default branch from the Branch dropdown menu, and set up the Allowed to push and Allowed to merge rules.
-   - Click Protect.
-
-## 2020-05-09
-
-Started to make a diagram of the deployment process:
-
-[![](images/diagram_deployment_v1.png)](images/diagram_deployment_v1.svg)
-
-
-## 2020-05-11
-
-Finalize the diagram:
-
-
-[![](images/diagram_deployment.png)](images/diagram_deployment.svg)
-
-## 2020-05-12
-
-The diagram above is not ideal: there is too much information on one diagram and it's
- hard to understand what is executed where. I will decompose it to 3 diagrams:
-
-1. A component diagram that shows the different entities
-2. An activity diagram (flow chart) that shows the different
-    possibilities for a deployment and the conditions
-3. A sequence diagram that shows how a "path" in diagram 2 (nominal case) is
-   going and what are the entities from diagram 1 involved in each step.
-
-I'll start with the first that is a modification of the previous diagram:
-
-[![](images/diagram_components.png)](images/diagram_components.svg)
-
-## 2020-05-13
-
-### Creation of activity diagram
-
-Now let's create the activity diagram. Abhilash has already created two diagrams
-that I will merge into one:
-
-
-![](images/abhilash_remote_os_deployment_flowchart.png)
-
-
-![](images/abhilash_imaging_flowchart.png)
-
-Here is the activity diagram that I have created:
-
-![[](images/diagram_activity_deployment.svg)](images/diagram_activity_deployment.png)
-
-
-### Meeting notes:
- - add a step to recreate partition if we can't mount it.
- - benchmark file transfer methods (ftp, sftp, stp, nfs, tftp, samba, http)
- - benchmark compression protocols
- - do it on real machines
- - see what others do: partimage and clonezilla
- - I can go to school tomorrow at 16h45 to get a computer to make some real test
- - tool `dstat`: gives info on disk, io in real time
- - study sparse files on android
- - creation of images: maybe reuse clonezilla?
- - windows: just create an image and show that it works but do not focus on how to create images
- - pcs deployed at school: xubuntu 18.04
-
-### Creation of a windows image
-
-## 2020-05-16
-
-I modified the documentation files to use GPP preprocessor. With this, I can make
-macros, for instance to add SVG images for gitlab and for pandoc with a different
-syntax.
-
-## 2020-05-18
-
-I received two small computers to make some tests. These are [DELL Optiplex 7060 micro](https://www.dell.com/en-us/work/shop/cty/pdp/spd/optiplex-7060-micro). A windows
-operating sytem is installed on them. I will try to make an image of one of the OS.
-
-I went through the "first start" wizard and created an user with name "hepia" and
-password "hepia.
-
-## 2020-05-19
-
-I created a bootable usb disk of [Clonezilla Live](https://clonezilla.org/clonezilla-live.php) by downloading the iso [here](https://osdn.net/projects/clonezilla/downloads/72850/clonezilla-live-2.6.6-15-amd64.iso/) and dding it to my disk:
-
-```bash
-sudo dd if=clonezilla-live-2.6.6-15-amd64.iso of=/dev/sdd
-```
-
-I plugged it on the small computer and made the boot menu appear by pressing 
-`F12` on start. I selected the `UEFI: USB DISK 3.0 PMAP` option.
-
-I created an image that was copied to my main computer using SSH.
-
-Clonezilla tells me that the command that will be used is:
-
-```bash
-/usr/sbin/ocs-sr -q2 -c -j2 -zip -i 99999999999999999 -sfsck -senc -p choose savedisk win10-disk-2020-05-19-20-07
-```
-
-The cloning process was using partclone. It creates 12GB of partition images for a disk of 476GB.
-
-I will create another image using uncompressed dd this time to compare the size of the images. This time, the command is:
-
-```bash
-/usr/sbin/ocs-sr -q1 -c -j2 -z0 -i 999999999999999999 -sfsck -senc -p choose savedisk win10-disk-2020-05-19-22-24y
-```
-
-It's very long. Approximately 80 minutes. The previous image took less than 10
-min.
-
-The resulting image files take 476GB, which is the size of the disk. After putting all these files in a `tar.gz` archive, they take 12.8 GB.
-
-## 2020-05-20
-
-Let's test the speed for different protocols:
-
-- ftp
-- sftp
-- stp
-- nfs
-- tftp
-- samba
-- http
-
-I will install Debian 10.4.0 on both computers and try to
-exchange the windows image with various protocols.
-
-The first machine has hostname `debian1`, the second has `debian2`.
-
-Both have a default user called `debian`.
-
-I will use `perf stat` to do the benchmarks. It should be installed:
-
-```bash
-apt install linux-perf
-```
-
-To make it work without being root, let's make it less paranoid:
-
-```
-# echo 1 > /proc/sys/kernel/perf_event_paranoid 
-```
-
-### SCP
-
-First let's create some keys so no need for password auth:
-
-```bash
-ssh-keygen
-```
-
-Now exchange the keys on both computers. 
-
-On `debian1`:
-
-```bash
-ssh-copy-id debian2.home
-```
-
-On `debian2`:
-
-```bash
-ssh-copy-id debian1.home
-```
-
-Now let's do a first test before benchmarking:
-
-```
-scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz
-```
-
-Now there's something weird: the speed is 11.0MB/s. When I copied the 
-file on the `debian1` from my main computer, it was 109.5MB/s. I suspect
-the ethernet cable to be bad.
-
-Let's check the ethernet speed on `debian2`:
-
-```
-$ cat /sys/class/net/eno1/speed 
-100
-```
-
-It should be 1000. Something is going wrong.
-
-On `debian1`:
-
-```
-$ cat /sys/class/net/eno1/speed
-1000
-```
-
-On this one it's okay.
-
-Let's change the ethernet cable and try again:
-
-```
-$ cat /sys/class/net/eno1/speed 
-1000
-```
-
-Now it's better!
-
-Let's try to `scp` another time:
-
-```
-$ scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz
-win10.tar.gz                                                                       100%   13GB 109.5MB/s   01:59
-```
-
-It looks okay.
-
-Let's do it 4 times with `perf stat`:
-
-```log
-$ 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% )
-```
-
-### HTTP
-
-I'll use apache on the server:
-
-```bash
-apt install apache2
-cp win10.tar.gz /var/www/html/
-```
-
-Now on the client, let's download it 4 times:
-
-```log
-$ 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% )
-```
-
-### FTP
-
-Let's install `vsftpd` on `debian1`:
-
-```bash
-apt install vsftpd
-```
-
-Let's install `lftp` client on `debian2`:
-
-```bash
-apt install ftp
-```
-
-Now let's execute it 4 times:
-
-```log
-$ 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% )
-```
-
-### NFS
-
-Let's install and mount NFS exactly as in the tftp server and client we have already.
-
-On `debian1` (as root):
-
-```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
-```
-
-On `debian2`:
-
-```bash
-su
-apt install nfs-common
-mkdir /nfsroot
-mount -t nfs debian1.home:/nfsroot /nfsroot
-exit
-```
-
-Now, let's execute it 4 times:
-
-```log
-$ 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% )
-```
-
-### Local copy
-
-All the previous attempts take 120 seconds to copy. I'm suspecting that the 
-disk is slower than the network. I will try to do a local copy to see if it's
-faster:
-
-```
-$ perf stat -r 4 -d cp -f ~/win10.tar.gz ~/win10.copy.tar.gz
-
- Performance counter stats for 'cp -f /home/debian/win10.tar.gz /home/debian/win10.copy.tar.gz' (4 runs):
-
-         18,643.60 msec task-clock                #    0.321 CPUs utilized            ( +-  2.27% )
-            46,796      context-switches          #    0.003 M/sec                    ( +-  1.21% )
-                10      cpu-migrations            #    0.001 K/sec                    ( +- 30.74% )
-               136      page-faults               #    0.007 K/sec                    ( +-  0.71% )
-    28,738,701,249      cycles                    #    1.541 GHz                      ( +-  1.74% )  (49.67%)
-    37,087,993,629      instructions              #    1.29  insn per cycle           ( +-  1.97% )  (62.15%)
-     7,045,885,995      branches                  #  377.925 M/sec                    ( +-  1.95% )  (62.13%)
-        73,390,256      branch-misses             #    1.04% of all branches          ( +-  1.96% )  (62.52%)
-     9,984,175,472      L1-dcache-loads           #  535.528 M/sec                    ( +-  1.76% )  (62.66%)
-     1,105,907,329      L1-dcache-load-misses     #   11.08% of all L1-dcache hits    ( +-  0.23% )  (62.86%)
-       235,805,494      LLC-loads                 #   12.648 M/sec                    ( +-  2.42% )  (50.18%)
-        67,536,952      LLC-load-misses           #   28.64% of all LL-cache hits     ( +-  0.81% )  (49.99%)
-
-            58.025 +- 0.647 seconds time elapsed  ( +-  1.12% )
-```
-
-No, it's more than 2 times faster.
-
-### Samba
-
-Installation and configuration on server (as root):
-
-```bash
-apt install samba
-smbpasswd -a debian 
-systemctl restart smbd
-```
-
-On client (as root):
-
-```bash
-apt install samba-client
-```
-
-Now let's download the file 4 times:
-
-```log
-$ 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% )
-```
-
-This is 2 seconds worse than the others...
-
-### Tentative to find the bottleneck with `dstat`
-
-I think we can conclude that the bottleneck is the network. Let's verify it with `dstat`.
-
-On one terminal let's copy the file with `lftp`:
-
-```log
-$ lftp -u debian,debian -e "get -e win10.tar.gz;quit" debian1
-13743592907 bytes transferred in 120 seconds (109.66 MiB/s)
-```
-
-On another, monitor the resources with `dstat`:
-
-```log
-# dstat --noheaders
-You did not select any stats, using -cdngy by default.
---total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
-usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
-  0   0  99   0   0|3361k   21M|   0     0 |   6B 2809B| 784  1604 
-  0   0 100   0   0|   0     0 |  90B  830B|   0     0 |  34    26 
-  0   0 100   0   0|   0     0 |  90B  366B|   0     0 |  16    16 
-  1   3  96   0   0|   0     0 |  81M  233k|   0     0 |2771  5063 
-  1   5  94   0   0|   0     0 | 116M  333k|   0     0 |3873  7205 
-  1   5  94   0   0|   0     0 | 116M  334k|   0     0 |3894  7222 
-  1   6  94   0   0|   0     0 | 116M  333k|   0     0 |3881  7197 
-  1   5  94   0   0|   0     0 | 117M  333k|   0     0 |3887  7205 
-  1   5  92   2   0|   0   196M| 117M  342k|   0     0 |4290  7447 
-  1   5  94   0   0|   0     0 | 117M  332k|   0     0 |3885  7199 
-  1   6  94   0   0|   0     0 | 117M  333k|   0     0 |3878  7202 
-  1   5  93   1   0|   0   103M| 117M  337k|   0     0 |4106  7369 
-  1   5  93   1   0|   0    93M| 117M  337k|   0     0 |4079  7327 
-  1   6  91   2   0|   0   208M| 117M  342k|   0     0 |4297  7465 
-  2   6  87   6   0|4096B  495M| 117M  353k|   0     0 |4809  7706 
-  1   5  93   1   0|   0   113M| 117M  338k|   0     0 |4084  7321 
-  1   6  93   0   0|   0     0 | 117M  335k|   0     0 |3901  7244 
-  1   5  94   0   0|   0     0 | 117M  335k|   0     0 |3891  7238 
-  1   5  94   0   0|   0    56k| 117M  334k|   0     0 |3921  7254 
-  1   5  94   0   0|   0     0 | 117M  335k|   0     0 |3900  7236 
-  1   5  90   4   0|   0   321M| 117M  352k|   0     0 |4595  7726 
-  2   5  89   5   0|   0   419M| 117M  354k|   0     0 |4737  7764 
-  1   5  94   0   0|   0     0 | 117M  337k|   0     0 |3898  7233 
-  2   4  94   0   0|   0    48k| 116M  306k|   0     0 |3719  6195 
-  2   3  95   0   0|   0     0 | 116M  292k|   0     0 |3615  5612 
-  1   4  95   0   0|   0     0 | 117M  328k|   0     0 |3847  7151 
-  1   5  94   0   0|   0  6144k| 117M  336k|   0     0 |3908  7242 
-  1   3  95   1   0|   0   478M| 116M  300k|   0     0 |4243  6969 
-  3   3  94   0   0|   0   248M| 114M  570k|   0     0 |  17k 7324 
-  3   3  94   0   0|   0     0 | 117M  699k|   0     0 |  22k 7318 
-  3   3  94   0   0|   0     0 | 117M  702k|   0     0 |  22k 7296 
-  3   2  94   0   0|   0     0 | 117M  697k|   0     0 |  22k 6933 
-  4   3  94   0   0|   0     0 | 117M  687k|   0     0 |  22k 6506 
-  3   3  93   0   0|   0   170M| 117M  734k|   0     0 |  22k 7143 
-  1   4  94   0   0|4096B  487M| 115M  372k|   0     0 |7589  7125 
-  0   3  97   0   0|   0    71M| 117M  308k|   0     0 |3848  6996 
-  0   2  98   0   0|   0     0 | 117M  305k|   0     0 |3751  6941 
-  0   2  97   0   0|   0     0 | 117M  306k|   0     0 |3741  6926 
-  0   2  97   0   0|   0    52k| 117M  305k|   0     0 |3749  6943 
-  0   2  98   0   0|   0     0 | 117M  305k|   0     0 |3741  6932 
-  1   3  95   1   0|   0   331M| 117M  313k|   0     0 |4277  7280 
-  3   2  95   1   0|   0   397M| 117M  314k|   0     0 |4376  7315 
-  1   2  97   0   0|   0     0 | 117M  305k|   0     0 |3735  6908 
-  0   2  97   0   0|   0    48k| 117M  305k|   0     0 |3754  6935 
-  0   2  97   0   0|   0     0 | 117M  307k|   0     0 |3757  6961 
-  0   2  98   0   0|   0     0 | 117M  306k|   0     0 |3745  6933 
-  0   2  97   0   0|   0    22M| 117M  306k|   0     0 |3763  6946 
-  1   3  96   1   0|   0   475M| 117M  316k|   0     0 |4384  7257 
-  1   4  95   1   0|   0   231M| 116M  331k|   0     0 |4189  7669 
-  1   5  94   0   0|   0     0 | 117M  339k|   0     0 |3898  7231 
-  1   5  94   0   0|   0     0 | 117M  340k|   0     0 |3928  7287 
-  1   5  94   0   0|   0     0 | 117M  341k|   0     0 |3907  7266 
-  1   5  94   0   0|   0     0 | 117M  343k|   0     0 |3931  7316 
-  1   5  94   0   0|4096B  179M| 117M  331k|   0     0 |4091  7281 
-  0   2  98   0   0|   0   486M| 117M  317k|   0     0 |4376  7277 
-  0   3  97   0   0|   0    67M| 117M  307k|   0     0 |3858  6986 
-  0   2  98   0   0|   0     0 | 117M  306k|   0     0 |3783  6980 
-  1   2  97   0   0|   0     0 | 117M  306k|   0     0 |3746  6931 
-  2   1  96   0   0|   0    44k| 117M  293k|   0     0 |3650  6640 
-  1   4  95   0   0|   0     0 | 117M  326k|   0     0 |3802  7092 
-  1   5  94   1   0|   0   348M| 117M  331k|   0     0 |4337  7215 
-  1   4  95   1   0|   0   384M| 117M  328k|   0     0 |4303  7297 
-  1   3  96   0   0|   0     0 | 117M  319k|   0     0 |3790  7017 
-  1   3  96   0   0|   0    48k| 117M  321k|   0     0 |3806  7039 
-  1   3  97   0   0|   0     0 | 117M  319k|   0     0 |3812  7041 
-  0   3  97   0   0|   0     0 | 117M  319k|   0     0 |3820  7047 
-  1   3  96   0   0|   0    37M| 117M  320k|   0     0 |3859  7079 
-  0   4  95   1   0|4096B  479M| 117M  329k|   0     0 |4461  7343 
-  1   6  93   1   0|   0   212M| 117M  345k|   0     0 |4318  7716 
-  1   5  94   0   0|   0     0 | 117M  340k|   0     0 |3930  7299 
-  1   5  94   0   0|   0     0 | 117M  339k|   0     0 |3922  7287 
-  1   6  94   0   0|   0     0 | 117M  340k|   0     0 |3929  7317 
-  1   6  93   0   0|   0     0 | 117M  340k|   0     0 |3961  7384 
-  0   4  95   0   0|   0   199M| 117M  336k|   0     0 |4166  7348 
-  1   5  89   5   0|   0   491M| 117M  350k|   0     0 |4594  7557 
-  1   6  93   0   0|   0    42M| 117M  339k|   0     0 |3994  7317 
-  1   5  94   0   0|   0     0 | 117M  338k|   0     0 |3941  7330 
-  1   5  94   0   0|   0     0 | 117M  338k|   0     0 |3925  7300 
-  1   5  94   0   0|   0    44k| 117M  340k|   0     0 |3958  7345 
-  1   5  94   0   0|   0     0 | 117M  336k|   0     0 |3928  7290 
-  1   5  89   5   0|   0   367M| 117M  345k|   0     0 |4509  7579 
-  1   5  90   5   0|   0   361M| 117M  342k|   0  4096B|4488  7543 
-  1   5  95   0   0|   0     0 | 117M  330k|   0     0 |3878  7192 
-  1   5  94   0   0|   0    48k| 117M  336k|   0     0 |3925  7291 
-  1   5  94   0   0|   0     0 | 117M  335k|   0     0 |3933  7317 
-  1   5  94   0   0|   0     0 | 117M  337k|   0     0 |3909  7267 
-  1   5  93   1   0|   0    53M| 117M  337k|   0     0 |4018  7362 
-  1   5  88   6   0|4096B  483M| 117M  342k|   0     0 |4611  7539 
-  1   5  91   3   0|   0   196M| 117M  339k|   0     0 |4250  7594 
-  1   5  94   0   0|   0     0 | 117M  335k|   0     0 |3912  7282 
-  1   5  95   0   0|   0  4096B| 117M  329k|   0  4096B|3857  7163 
-  1   5  94   0   0|   0     0 | 117M  336k|   0     0 |3918  7282 
-  1   6  93   0   0|   0     0 | 117M  334k|   0     0 |3925  7291 
-  1   6  91   3   0|   0   214M| 117M  335k|   0     0 |4211  7390 
-  1   5  88   6   0|   0   491M| 117M  340k|   0     0 |4589  7550 
-  1   6  93   0   0|   0    27M| 117M  334k|   0     0 |3960  7260 
-  1   6  93   0   0|   0     0 | 117M  334k|   0     0 |3918  7288 
-  1   5  94   0   0|   0     0 | 117M  331k|   0     0 |3904  7239 
-  1   5  94   0   0|   0    44k| 117M  333k|   0     0 |3924  7269 
-  1   5  95   0   0|   0     0 | 117M  321k|   0     0 |3815  7072 
-  2   5  89   5   0|   0   386M| 117M  350k|   0  8192B|4678  7773 
-  1   4  91   4   0|4096B  342M| 116M  335k|   0     0 |4500  7432 
-  1   5  94   0   0|   0     0 | 117M  332k|   0     0 |3922  7262 
-  1   5  94   0   0|   0    52k| 117M  332k|   0     0 |3921  7261 
-  1   5  94   0   0|   0     0 | 117M  331k|   0     0 |3941  7271 
-  1   5  94   0   0|   0     0 | 117M  332k|   0     0 |3904  7227 
-  1   4  94   1   0|   0    70M| 117M  323k|   0  4096B|3928  7121 
-  0   3  89   7   0|   0   479M| 117M  324k|   0     0 |4432  7340 
-  1   5  92   2   0|   0   183M| 117M  322k|   0     0 |4127  7498 
-  2   4  94   0   0|   0     0 | 117M  315k|   0     0 |3791  6624 
-  2   3  95   0   0|   0     0 | 117M  297k|   0     0 |3658  6217 
-  2   3  95   0   0|   0     0 | 117M  297k|   0     0 |3670  6178 
-  3   2  95   0   0|   0     0 | 117M  294k|   0     0 |3646  5868 
-  2   4  94   0   0|   0   228M| 117M  297k|   0     0 |3930  6180 
-  2   4  94   0   0|   0   489M| 117M  306k|   0     0 |4303  6738 
-  2   4  94   0   0|   0    11M| 117M  322k|   0     0 |3843  6893 
-  1   5  94   0   0|   0     0 | 117M  333k|   0     0 |3932  7304 
-  1   6  94   0   0|   0     0 | 117M  333k|   0     0 |3917  7296 
-  1   6  93   0   0|   0    48k| 117M  333k|   0     0 |3904  7287 
-  1   5  94   0   0|   0     0 | 117M  334k|   0     0 |3915  7317 
-  1   5  93   1   0|4096B  396M| 117M  323k|   0     0 |4439  7103 
-  1   5  93   1   0|   0   336M| 116M  338k|   0     0 |4382  7522 
-  1   4  95   0   0|4096B    0 |  93M  268k|   0     0 |3184  5915 
-  0   0 100   0   0|   0     0 |  90B  366B|   0     0 |  18    21 
-  0   0 100   0   0|   0    44k| 224B  366B|   0     0 |  39    53 
-  0   0 100   0   0|   0     0 |  90B  366B|   0     0 |  18    25 
-  0   0 100   0   0|   0    83M|  90B  366B|   0     0 | 111    54 
-  0   0  99   0   0|   0   124M|  90B  366B|   0     0 | 160    44 
-  0   0 100   0   0|   0     0 |  90B  366B|   0     0 |  27    42 
-  0   0 100   0   0|   0     0 | 224B  366B|   0     0 |  17    20 
-```
-
-It looks like the bottleneck is effectively the network.
-
-If 13743592907 bytes were transferred in 120 seconds, we are close to the theorical
- bitrate of $1 [Gbps]$, because:
-
-
-```math
-\frac{13743592907 [b]}{120 [s]} = 114529940.892 [bps] = 0.916239528 [Gbps]
-```
-
-
-In practice, the bottleneck will be the network interface of the
-server.
-
-
-## 2020-05-21
-
-### IPFS
-
-A way to distribute a file in a network using P2P could be to use 
-[IPFS](https://ipfs.io/). Let's check if it's as fast as the other
-methods.
-
-First, we need to install the [Go] language on each computers (as root):
-
-```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
-```
-
-Now let's install the latest version of IPFS, 0.5.1 :
-
-```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
-```
-
-Then let's initialize the IPFS node on both computers (with user debian):
-
-```bash
-IPFS_PATH=~/.ipfs ipfs init
-```
-
-To have a private IPFS network, generate a swarm key shared between
-both computers. The key will be generated on `debian1` and copied
-to `debian2`:
-
-```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
-```
-
-Now let's setup a _bootstrap_ node on `debian1`. It will be used
-by `debian2` to connect on our private network, separate from
-the public network that uses other bootstrap nodes.
-
-First, we need to remove the default bootstrap nodes on both
-computers:
-
-```bash
-IPFS_PATH=~/.ipfs ipfs bootstrap rm --all
-```
-
-Then, we need to know the `PeerID` of `debian1` to configure it 
-as a bootstrap node in `debian2`. Let's find it on `debian1`:
-
-```log
-$ IPFS_PATH=~/.ipfs ipfs config show | grep "PeerID"
-    "PeerID": "QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei"
-```
-
-Now add it as a bootstrap node on both computers:
-
-```
-IPFS_PATH=~/.ipfs ipfs bootstrap add /dnsaddr/debian1.home/p2p/QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei
-```
-
-Now let's run IPFS daemon on both nodes.
-We will also force using the private network on both hosts.
-This is not strictly necessary but it will prevent to connect
-on public nodes if something was not configured correctly:
-
-```bash
-export LIBP2P_FORCE_PNET=1
-IPFS_PATH=~/.ipfs ipfs daemon
-```
-
-We'll keep the daemons visible in a terminal an run new SSH sessions
-on both computers, so the logs are visible.
-
-
-Now let's share the image file on `debian1`:
-
-```log
-$ IPFS_PATH=~/.ipfs ipfs add win10.tar.gz 
-added QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv win10.tar.gz
- 12.80 GiB / 12.80 GiB [====================================================================================] 100.00%
-```
-
-It took more than 3 minutes... Not sure what's going on here. We can see
-that the _ref_ of the file is `QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv`.
-
-We can now try to get it from `debian2`:
-
-```log
-$ IPFS_PATH=~/.ipfs ipfs get QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv
-Saving file(s) to QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv
- 12.80 GiB / 12.80 GiB [==============================================================================] 100.00% 7m27s
-```
-
-$ 7m27s = 447s $ : too slow for what we need unfortunately.
-
-## 2020-05-23
-
-Let's try to make our pxe server work with the small DELL computers.
-
-
-I modified the vagrant server configuration to use a bridged network by replacing
-the network configuration by this:
-
-```ruby
-  config.vm.network "public_network", 
-    bridge: "enp4s0",
-    ip: "192.168.56.100"
-```
-
-Here is a small diagram that shows how the network is set up:
-
-![Diagram of the home network](images/diagram_home_network.png)
-
-Now let's try to boot on a small PC.
-
-In the _BIOS setup_ options, I had to disable _Secure boot_ in order to be able to 
-enable _Legacy Option ROMs_. Then, in the _Boot sequence_ menu, I switched to the 
-_Legacy External Devices_  and activate _Onboard NIC_ as the only boot device.
-
-After restarting the computer, _GRUB_ booted but there is an issue:
-
-```log
-Intel(R) Boot Agent CL v0.1.13
-Copyright (C) 1997-2013, Intel Corporation
-
-Intel(R) Boot Agent PXE Base Code (PXE-2.1 build 092)
-Copyright (C) 1997-2010, Intel Corporation
-
-CLIENT MAC ADDR: E4 B9 7A ED E0 0E  GUID:  4C4C4544 0054 3110 8050 CAC04F425832
-CLIENT IP: 192.168.56.12  MASK: 255.255.255.0   DHCP IP: 192.168.56.100
-Welcome to GRUB!
-
-error: File not found.
-Entering rescue mode...
-grub rescue> 
-```
-
-I tried to boot my test VM also on a bridged network... I get the same error.
-
-I guess something is wrong in the configuration.
-
-
-## 2020-05-24
-
-I tried to set the server manually in `grub rescue` but it does not work:
-
-```log
-grub rescue> set net_default_server=192.168.56.100
-grub rescue> insmod normal
-error: File not found
-```
-
-I checked if the IP of the server is not correct but it seems ok:
-
-```log
-$ ip a
-1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
-    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
-    inet 127.0.0.1/8 scope host lo
-       valid_lft forever preferred_lft forever
-    inet6 ::1/128 scope host 
-       valid_lft forever preferred_lft forever
-2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
-    link/ether 08:00:27:8d:c0:4d brd ff:ff:ff:ff:ff:ff
-    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
-       valid_lft 85307sec preferred_lft 85307sec
-    inet6 fe80::a00:27ff:fe8d:c04d/64 scope link 
-       valid_lft forever preferred_lft forever
-3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
-    link/ether 08:00:27:cf:0c:cc brd ff:ff:ff:ff:ff:ff
-    inet 192.168.56.100/24 brd 192.168.56.255 scope global eth1
-       valid_lft forever preferred_lft forever
-    inet6 fe80::a00:27ff:fecf:ccc/64 scope link 
-       valid_lft forever preferred_lft forever
-```
-
-I think I finally found out what was wrong: the grub files were not added back correctly after the
-transition to lfs. All the mod files are missing because there was a `*.mod*` entry in 
-[`.gitignore`](../.gitignore).
-
-I added back the files and removed the ignore entry. After restarting the virtual machine, it worked!
-
-Now let's try on the small PC... Unfortunately, booting the OS does not seem to work.
-
-Here is what displays when I try to boot the `auto_os` or `manual_os` entry:
-
-```log
-Loading vmlinuz...
-```
-
-I tried multiple times, once I got this:
-
-```log
-Loading vmlinuz...
-fü>─☼α☻uLá╚☼%☼☼%☼
-```
-
-I tried to activate _Enable Attempt Legacy Boot_ in the BIOS... But it still does not work.
-
-
-## 2020-05-25
-
-I will try to boot the tiny OS on my Lenovo U530 laptop, which also has UEFI. I pressed
-the `F12` key on startup to reach the boot menu and selected _EFI PXE Network_ but it did
-not work.
-
-I restarted the computer and accessed the BIOS with the `F2` key. Unfortunately, it seems 
-that there is only _EFI PXE Network_ available for boot options, even with _Legacy support_
-option enabled and _Secure boot_ option disabled.
-
-I will try to configure the server to make it work with UEFI, so I can see if it works
-with my laptop and if it fixes the issue on the mini computers.
-
-## 2020-05-26
-
-Let's build GRUB for UEFI. I used the grub sourve from [Abhilash repository](https://githepia.hesge.ch/abhilash.venkates/remote-imaging).
-
-Then I started to build GRUB:
-
-```bash
-./configure
-make
-```
-
-I have some issues because the autotools version that I have (1.16) do not correspond to the 
-required version (1.15).
-
-I will try to use `grub-mkimage` from my linux distribution (manjaro linux) and copy the 
-already compiled `isign.mod` into its folder.
-
-## 2020-05-26
-
-### Configure GRUB and DHCP for EFI
-
-I tried to generate a GRUB image for `x86_64-efi`:
-
-```bash
-grub-mkimage --prefix='(pxe)/boot/grub' --output=grub_x86_64-efi.pxe --format=x86_64-efi tftp part_msdos ext2
-```
-
-Then I discovered that there is another command that creates the whole directory: `grub-mknetdir`.
-
-I will try to use it and then copy the already compiled `isign.mod` inside the modules folder.
-I am not sure it will work, as the module is compiled for i386.
-
-```bash
-cd remote_imaging/pxe_server/config/tftp/tftpboot/
-cp boot/grub/i386-pc/isign.mod ./
-grub-mknetdir --net-directory=. --subdir=/boot/grub
-cp isign.mod boot/grub/i386-pc/
-cp isign.mod boot/grub/i386-efi/
-cp isign.mod boot/grub/x86_64-efi/
-```
-
-Then I have to modify the `grub.cfg` file to insert the `isign` module by adding this line
-at the beginning:
-
-```
-insmod isign
-```
-
-Now the `dhcpd.conf` file must be modified to serve the correct boot file based on the 
-option `vendor-class-identifier`. According to [a wiki page from fog project](https://wiki.fogproject.org/wiki/index.php/BIOS_and_UEFI_Co-Existence),
-which gets its information from [RFC4578: Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE)](https://tools.ietf.org/html/rfc4578),
-the first 20 characters of this option can have different values based on the requested
-architecture. Here are the ones we're interested on:
-
-- `PXEClient:Arch:00000`: Intel x86 PC
-- `PXEClient:Arch:00002`: EFI Itanium
-- `PXEClient:Arch:00006`: EFI IA32
-- `PXEClient:Arch:00007`: EFI BC
-- `PXEClient:Arch:00008`: EFI Xscale
-- `PXEClient:Arch:00009`: EFI x86-64
-
-Let's modify `dhcp.conf` to set the `bootfile` option based on this parameter:
-
-```conf
-allow bootp;
-
-subnet 192.168.56.0 netmask 255.255.255.0 {
-    range 192.168.56.10 192.168.56.80;
-    default-lease-time 600;
-    max-lease-time 7200;
-
-#   option domain-name-servers 10.136.132.100;
-#   option routers  192.168.56.100;
-
-    class "pxeclient" {
-        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
-        next-server 192.168.56.100;
-        option tftp-server-name "192.168.56.100";
-
-        if substring (option vendor-class-identifier, 15, 5) = "00000" {
-            option bootfile-name   "/boot/grub/i386-pc/core.0";
-        }
-        if substring (option vendor-class-identifier, 15, 5) = "00002" {
-            option bootfile-name "/boot/grub/i386-efi/core.efi";
-        }
-        if substring (option vendor-class-identifier, 15, 5) = "00006" {
-            option bootfile-name "/boot/grub/i386-efi/core.efi";
-        }
-        else {
-         option bootfile-name "/boot/grub/x86_64-efi/core.efi"; 
-        }
-    }
-
-    class "normalclient" {
-        match if substring (option vendor-class-identifier, 0, 9) != "PXEClient";
-    }
-}
-```
-
-### Meeting notes
-
-- Le centre informatique est aussi surpris par les résultats du transfert réseau
-- Se renseigner sur grub 64/32
-- Rendre la compilation du module ou de GRUB reproductible
-- Pouvoir booter sur des images dd ou partimage et comparer les 
-  performances
-
-
-### Issues with imaging on UEFI PXE
-
-Surprisingly, the OS boots with the changes specified above and activating
-UEFI PXE network stack in the BIOS. Unfortunately, the image deployment does 
-not work: no menu entry for the local disk appears after reboot and there are 
-no logs saved on nfs.
-
-### Issue with legacy PXE
-
-On the virtual machine, which uses a legacy BIOS, it does not work anymore. 
-The client receives an IP but does not boot. I think there is an issue with
-the conditions in `dhcpd.conf`. In `/var/log/syslog`, I can see the following lines:
-
-```log
-May 27 14:45:48 buster dhcpd[2098]: reuse_lease: lease age 51 (secs) under 25% threshold, reply with unaltered, existing lease for 192.168.56.11
-May 27 14:45:48 buster dhcpd[2098]: DHCPDISCOVER from 08:00:27:ce:6d:4a via eth1
-May 27 14:45:48 buster dhcpd[2098]: DHCPOFFER on 192.168.56.11 to 08:00:27:ce:6d:4a via eth1
-May 27 14:45:49 buster dhcpd[2098]: reuse_lease: lease age 52 (secs) under 25% threshold, reply with unaltered, existing lease for 192.168.56.11
-May 27 14:45:49 buster dhcpd[2098]: DHCPREQUEST for 192.168.56.11 (192.168.56.100) from 08:00:27:ce:6d:4a via eth1
-May 27 14:45:49 buster dhcpd[2098]: DHCPACK on 192.168.56.11 to 08:00:27:ce:6d:4a via eth1
-May 27 14:45:49 buster in.tftpd[3339]: tftp: client does not accept options
-```
-
-With `tcpdump`, I analyzed what was contained in the DHCP packets:
-
-```log
-$ sudo tcpdump -n -i eth1 port bootps or port bootpc -vv
-tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
-14:57:41.877726 IP (tos 0x0, ttl 20, id 0, offset 0, flags [none], proto UDP (17), length 576)
-    0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:ce:6d:4a, length 548, xid 0x28ce6d4a, secs 4, Flags [Broadcast] (0x8000)
-          Client-Ethernet-Address 08:00:27:ce:6d:4a
-          Vendor-rfc1048 Extensions
-            Magic Cookie 0x63825363
-            DHCP-Message Option 53, length 1: Discover
-            Parameter-Request Option 55, length 36: 
-              Subnet-Mask, Time-Zone, Default-Gateway, Time-Server
-              IEN-Name-Server, Domain-Name-Server, RL, Hostname
-              BS, Domain-Name, SS, RP
-              EP, RSZ, TTL, BR
-              YD, YS, NTP, Vendor-Option
-              Requested-IP, Lease-Time, Server-ID, RN
-              RB, Vendor-Class, TFTP, BF
-              Option 128, Option 129, Option 130, Option 131
-              Option 132, Option 133, Option 134, Option 135
-            MSZ Option 57, length 2: 1260
-            GUID Option 97, length 17: 0.7.124.35.16.196.220.220.73.166.197.42.172.53.253.2.45
-            ARCH Option 93, length 2: 0
-            NDI Option 94, length 3: 1.2.1
-            Vendor-Class Option 60, length 32: "PXEClient:Arch:00000:UNDI:002001"
-14:57:41.877845 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 338)
-    192.168.56.100.67 > 255.255.255.255.68: [udp sum ok] BOOTP/DHCP, Reply, length 310, xid 0x28ce6d4a, secs 4, Flags [Broadcast] (0x8000)
-          Your-IP 192.168.56.11
-          Server-IP 192.168.56.100
-          Client-Ethernet-Address 08:00:27:ce:6d:4a
-          Vendor-rfc1048 Extensions
-            Magic Cookie 0x63825363
-            DHCP-Message Option 53, length 1: Offer
-            Server-ID Option 54, length 4: 192.168.56.100
-            Lease-Time Option 51, length 4: 568
-            Subnet-Mask Option 1, length 4: 255.255.255.0
-            TFTP Option 66, length 14: "192.168.56.100"
-            BF Option 67, length 30: "/boot/grub/x86_64-efi/core.efi"
-14:57:43.420443 IP (tos 0x0, ttl 20, id 1, offset 0, flags [none], proto UDP (17), length 576)
-    0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:ce:6d:4a, length 548, xid 0x28ce6d4a, secs 4, Flags [Broadcast] (0x8000)
-          Client-Ethernet-Address 08:00:27:ce:6d:4a
-          Vendor-rfc1048 Extensions
-            Magic Cookie 0x63825363
-            DHCP-Message Option 53, length 1: Request
-            Requested-IP Option 50, length 4: 192.168.56.11
-            Parameter-Request Option 55, length 36: 
-              Subnet-Mask, Time-Zone, Default-Gateway, Time-Server
-              IEN-Name-Server, Domain-Name-Server, RL, Hostname
-              BS, Domain-Name, SS, RP
-              EP, RSZ, TTL, BR
-              YD, YS, NTP, Vendor-Option
-              Requested-IP, Lease-Time, Server-ID, RN
-              RB, Vendor-Class, TFTP, BF
-              Option 128, Option 129, Option 130, Option 131
-              Option 132, Option 133, Option 134, Option 135
-            MSZ Option 57, length 2: 1260
-            Server-ID Option 54, length 4: 192.168.56.100
-            GUID Option 97, length 17: 0.7.124.35.16.196.220.220.73.166.197.42.172.53.253.2.45
-            ARCH Option 93, length 2: 0
-            NDI Option 94, length 3: 1.2.1
-            Vendor-Class Option 60, length 32: "PXEClient:Arch:00000:UNDI:002001"
-14:57:43.420564 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 338)
-    192.168.56.100.67 > 255.255.255.255.68: [udp sum ok] BOOTP/DHCP, Reply, length 310, xid 0x28ce6d4a, secs 4, Flags [Broadcast] (0x8000)
-          Your-IP 192.168.56.11
-          Server-IP 192.168.56.100
-          Client-Ethernet-Address 08:00:27:ce:6d:4a
-          Vendor-rfc1048 Extensions
-            Magic Cookie 0x63825363
-            DHCP-Message Option 53, length 1: ACK
-            Server-ID Option 54, length 4: 192.168.56.100
-            Lease-Time Option 51, length 4: 566
-            Subnet-Mask Option 1, length 4: 255.255.255.0
-            TFTP Option 66, length 14: "192.168.56.100"
-            BF Option 67, length 30: "/boot/grub/x86_64-efi/core.efi"
-^C
-4 packets captured
-4 packets received by filter
-0 packets dropped by kernel
-```
-
-We can see that the client sends `Vendor-Class Option 60, length 32: "PXEClient:Arch:00000:UNDI:002001"` 
-but he receives the option `BF Option 67, length 30: "/boot/grub/x86_64-efi/core.efi"`. This is not
-correct. After rechecking the dhcpd configuration, I found an error: `if` was used instead of 
-`elif`.
-
-The corrected file looks like this:
-
-```conf
-allow bootp;
-
-subnet 192.168.56.0 netmask 255.255.255.0 {
-    range 192.168.56.10 192.168.56.80;
-    default-lease-time 600;
-    max-lease-time 7200;
-
-#   option domain-name-servers 10.136.132.100;
-#   option routers  192.168.56.100;
-
-    class "pxeclient" {
-        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
-        next-server 192.168.56.100;
-        option tftp-server-name "192.168.56.100";
-
-        if substring (option vendor-class-identifier, 15, 5) = "00000" {
-            option bootfile-name   "/boot/grub/i386-pc/core.0";
-        }
-        elsif substring (option vendor-class-identifier, 15, 5) = "00002" {
-            option bootfile-name "/boot/grub/i386-efi/core.efi";
-        }
-        elsif substring (option vendor-class-identifier, 15, 5) = "00006" {
-            option bootfile-name "/boot/grub/i386-efi/core.efi";
-        }
-        else {
-         option bootfile-name "/boot/grub/x86_64-efi/core.efi"; 
-        }
-    }
-
-    class "normalclient" {
-        match if substring (option vendor-class-identifier, 0, 9) != "PXEClient";
-    }
-}
-```
-
-Now it works again! 
-
-## 2020-05-29
-
-Let's find out why some issues occur with the small computer. I found out that my 
-modification to the script file to log with `tee` cannot work. I modified it to:
-
-```bash
-/root/ideploy.sh 2>&1 | tee $log_file
-```
-
-Now there is a log file appearing in the server:
-`/nfsroot/log/e4-b9-7a-ed-e0-0e/e4-b9-7a-ed-e0-0e.log`
-
-Here is its content:
-
-```log
-######################################Fri May 29 16:54:23 UTC 2020##############################################
-
-Total size of disk=512110190592 bytes
-size of hidden partition=102422038118 bytes
-size of disk for imaging=409688148378 bytes
-End byte=512110186496 bytes
-512+0 records in
-512+0 records out
-262144 bytes (256.0KB) copied, 0.006564 seconds, 38.1MB/s
-Warning: The resulting partition is not properly aligned for best performance.
-partition created
-dd: can't open '/root/boot/mbr/e4:b9:7a:ed:e0:0e.img': No such file or directory
-mke2fs 1.44.5 (15-Dec-2018)
-/dev/sda1 alignment is offset by 2048 bytes.
-This may result in very poor performance, (re)-partitioning suggested.
-Discarding device blocks: done                            
-Creating filesystem with 25005380 4k blocks and 6258688 inodes
-Filesystem UUID: c367c1cd-427b-4bba-bfca-1cd987e022bc
-Superblock backups stored on blocks: 
-        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
-        4096000, 7962624, 11239424, 20480000, 23887872
-
-Allocating group tables: done                            
-Writing inode tables: done                            
-Creating journal (131072 blocks): done
-Writing superblocks and filesystem accounting information: done   
-
-hidden partition created and available
-mounted
-chosen image is alpine 
-total_size of image=2147483648 bytes
-sufficient space for imaging
-ls: /mnt/*.md5: No such file or directory
-not cached, so caching 
-size cache available=92846744 KB
-size of image to download=300408 KB
-0+65536 records in
-0+65536 records out
-2147483648 bytes (2.0GB) copied, 9.963799 seconds, 205.5MB/s
-Caching and deployment  of 300408 KB done in 10 s 
-md5sum checked
-location of signature at  512110190392 B
- signature is hepia2015
-9+0 records in
-9+0 records out
-9 bytes (9B) copied, 0.000517 seconds, 17.0KB/s
-rebooting..
-
-######################################Fri May 29 16:54:59 UTC 2020##############################################
-```
-
-There is maybe an issue because the folder `/root/boot/mbr` does not exist. I created it
-and added a readme.md file in it so it will not be ignored by git.
-
-Still, it does not work:
-
-```log
-######################################Fri May 29 17:12:47 UTC 2020##############################################
-
-Total size of disk=512110190592 bytes
-size of hidden partition=102422038118 bytes
-size of disk for imaging=409688148378 bytes
-End byte=512110186496 bytes
-512+0 records in
-512+0 records out
-262144 bytes (256.0KB) copied, 0.006658 seconds, 37.5MB/s
-Warning: The resulting partition is not properly aligned for best performance.
-partition created
-512+0 records in
-512+0 records out
-262144 bytes (256.0KB) copied, 0.010438 seconds, 24.0MB/s
-mke2fs 1.44.5 (15-Dec-2018)
-/dev/sda1 alignment is offset by 2048 bytes.
-This may result in very poor performance, (re)-partitioning suggested.
-Discarding device blocks: done                            
-Creating filesystem with 25005380 4k blocks and 6258688 inodes
-Filesystem UUID: 1f90b58b-df18-4f4e-9794-d53c2e54eb8d
-Superblock backups stored on blocks: 
-        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
-        4096000, 7962624, 11239424, 20480000, 23887872
-
-Allocating group tables: done                            
-Writing inode tables: done                            
-Creating journal (131072 blocks): done
-Writing superblocks and filesystem accounting information: done   
-
-hidden partition created and available
-mounted
-chosen image is alpine 
-total_size of image=2147483648 bytes
-sufficient space for imaging
-ls: /mnt/*.md5: No such file or directory
-not cached, so caching 
-size cache available=92846744 KB
-size of image to download=300408 KB
-0+65536 records in
-0+65536 records out
-2147483648 bytes (2.0GB) copied, 9.902516 seconds, 206.8MB/s
-Caching and deployment  of 300408 KB done in 10 s 
-md5sum checked
-location of signature at  512110190392 B
- signature is hepia2015
-9+0 records in
-9+0 records out
-9 bytes (9B) copied, 0.000660 seconds, 13.3KB/s
-rebooting..
-
-######################################Fri May 29 17:13:10 UTC 2020##############################################
-```
-
-After all, I think that the `isign.mod` does not work.
-
-If I try to load it from GRUB's command prompt, here is what I get:
-
-```log
-grub> insmod isign
-error: invalid arch-dependent ELF magic.
-```
-
-## 2020-05-31
-
-I decided to port the `isign` module to the latest version of GRUB. In order to easily port it
-to newer versions in the future, I decided to create 
-(a fork of the repository)[https://gitedu.hesge.ch/dimitri.lizzi/bootiful-grub] where I will 
-add the `isign` module.
-
-To build GRUB, I used the following commands:
-
-```bash
-git clone ssh://gitssh.hesge.ch:10572/dimitri.lizzi/bootiful-grub.git
-cd bootiful-grub
-./bootstrap
-
-./configure --with-platform=efi --target=x86_64
-make
-./grub-mknetdir --net-directory=../bootiful/remote_imaging/pxe_server/config/tftp/tftpboot --subdir=/boot/grub --directory=./grub-core
-make clean
-
-./configure --with-platform=efi --target=i386
-make
-./grub-mknetdir --net-directory=../bootiful/remote_imaging/pxe_server/config/tftp/tftpboot --subdir=/boot/grub --directory=./grub-core
-make clean
-
-./configure --with-platform=pc --target=i386
-make
-./grub-mknetdir --net-directory=../bootiful/remote_imaging/pxe_server/config/tftp/tftpboot --subdir=/boot/grub --directory=./grub-core
-make clean
-```
-
-I tried to boot the `alpine` image on the small computer. After reboot, the `Local HDD` option is shown!
-However, there is an error when selecting it:
-
-```log
-error: disk `hd0,1' not found.
-
-Press any key to continue...
-```
-
-I also tried with the `os1` image, but the same error appears.
-
-It seems I need to load the `part_msdos` module to acces the `MBR` partition.
-I tried to load it and chainload on first partition of the disk but now another
-error appears:
-
-```log
-grub> insmod part_msdos
-grub> set root=(hd0,1)
-grub> chainloader +1
-error: invalid EFI file path
-```
-
-I will create a Debian image for EFI. The user name, password, root password and
-hostname are all `debian-efi` and the disk. There is an ESP (EFI system partition)
-of 512 MB and a root ext4 partition of 3GB. The only software package I installed 
-from the installer is _standard system utilities_.
-
-After the installation of debian, the boot order has changed and I had to put back
-`Onboard NIC(IPV4)` as the first boot option in the BIOS settings.
-
-To create the image, I started the `manual os` from PXE on the small PC, and I
-wanted to run these commands:
-
-```bash
-mkdir /root/images/debian-efi
-cd /root/image/debian-efi
-fdisk -l /dev/sda > debian-efi.partition
-dd if=/dev/sda | gzip > debian-efi.img.gz
-md5sum debian-efi.img.gz
-```
-
-However, there was a problem with dd:
-
-```log
-# dd if=/dev/sda | gzip > debian-efi.img.gz
-gzip: write error: No space left on device
-```
-
-The problem is that although the debian partition is small, the full disk is still
-copied and the server only has 19.8 GB of storage. With Clonezilla, only the partition
-would be saved and the image could be saved in the server. I think it's a good 
-opportunity to start using it.
-
-Usually, it is used from a live CD or on a server with a custom OS that contains
-all the tools. However, the [separate tools are available](https://free.nchc.org.tw/drbl-core/src/stable/).
-Let's download them all. First, we'll try to put them all on the _Image Deployment Operating System_
-with _Buildroot_.
-
-## 2020-06-04
-
-Before adding clonezilla, let's clean up this repository a bit: I have put the content
-of `remote_imaging/pxe_server` at the root of the repository and removed `remote_imaging`
-completely.
-
-Then I have also moved the `config` directly at the root.
-
-I have added [the bootiful-grub repository](https://gitedu.hesge.ch/dimitri.lizzi/bootiful-grub)
-as a submodule and have created a `Dockerfile` that builds it.
-
-The Dockerfile takes 2 arguments, PLATFORM and TARGET, that allow to build for all architectures.
-Here's an example on how to build for `efi-x86_64`:
-
-```bash
-DOCKER_BUILDKIT=1 docker build ./grub \
-    --output ./tftp/tftpboot \
-    --build-arg PLATFORM=efi \
-    --build-arg TARGET=x86_64
-```
-
-Finally, I have created a `Makefile` on the root project, that has multiple targets:
-
-```log
-$ make help
-Usage:  make <target>
-
-Targets:
-  all            Builds everything
-  doc            Builds PDF and markdown documents
-  grub           Builds GRUB for all platforms
-  start-server   Starts (or restarts) a Bootiful server in a virtual machine
-  clean          Removes all generated files
-  help           Show this help.
-```
-
-## 2020-06-03
-
-Let's create a Debian image from Virtual Box to just check if the system is working.
-
-```bash
-qemu-img convert -f vdi -O raw ~/VirtualBox\ VMs/debian-x86_64-efi/debian-x86_64-efi.vdi debian-x86_64-efi.img
-fdisk -l debian-x86_64-efi.img > debian-x86_64-efi.partition
-gzip debian-x86_64-efi.img
-md5sum debian-x86_64-efi.img.gz > debian-x86_64-efi.md5
-du debian-x86_64-efi.img.gz > debian-x86_64-efi.size
-```
-
-It still dit not work, but I think this is because the GPT partition table does is
-not recognized. I added this to `grub.cfg`:
-
-```cfg
-insmod part_gpt 
-```
-
-Now it gets further but I am still getting an error:
-
-```
-error: invalid EFI path.
-```
-
-From the command line, I found out that I can boot the correct EFI file manually:
-
-```
-chainloader (hd0,1)/efi/debian/grubx64.efi
-boot
-```
-
-Meeting notes:
-
-- Add a metadata file to images that groups:
-  - MD5
-  - fdisk
-  - efi boot file
-- Write the efi boot file at the end of the disk and read it on boot 
-- Use arch linux instead of build root for an easier integration of clonezilla
-
-## 2020-06-06
-
-I started to refactor the shell scripts. In a first time, I reunited them in 
-two scripts:
-
-- `deploy_log.sh`: starts the deployment and make a log file of its output
-- `ideploy.sh`: deploys the image. All the other scripts have been deleted and
-                added inside this one.
-
-I have cleaned up the scripts by fixing most warnings found with 
-[`shellcheck`](https://www.shellcheck.net/) on the old scripts.
-
-Here's some things that I changed:
-- Improve logging by adding/modifying a lot of `echo` statements
-- Replace occurences of `cat something | command` by `command something` or `command < something` where applicable
-- Use lower-case variables everywhere
-- Fix indentation
-- Find the network interface that connects to the NFS server dynamically
-  instead of hard-coded `eth0`
-- Quote variables everywhere
-- Replace `dd bs=1 count=512` by `dd bs=512 count=1`
-- Simplify `if` conditions
-- Replace command substitutions with backticks by substitution with `$(...)`
-- Replace `for i in $(ls ./*)` by `for i in ./*`
-- Added a function `print_boundary` instead of repeated code
-- Simplify menu code and add more explicit window title and name
-- Rename function `check_md5` to `is_image_cached` and improve
-  arguments and return codes
-
-## 2020-06-07
-
-I have modified the `ideploy.sh` script so it saves a file in the _EFI System Partition_
-that contains a GRUB script that sets a variable to the name of the boot file. 
-
-However this does not work. Even if I try to boot manually it does not work either.
-
-I think something is going wrong with the image.
-
-## 2020-06-08
-
-I have added error management in the script to find out what goes wrong.
-On most commands, if an error happens, an error message will be shown and the
-user can select if he wants to continue, switch to command line shell or reboot.
-
-## 2020-06-09
-
-I added a makefile target `reprovision-server` that allows to update the server
-with changes in configuration without re-creating the whole server. This makes
-the development process faster.
-
-I fixed the makefile of `doc` so the rapport is not rebuilt each time.
-
-I fixed the make targets of `grub` so it's not rebuilt each time.
-
-I fixed the menu to select reboot/continue/command-line in `ideploy.sh`.
-
-There is an error when retrieving the total disk space. I think
-the command is wrong. I tried to use 
-`parted /dev/sda unit B print | grep 'Disk /dev/sda' | sed -n 's/.*\([0-9]+\)B.*/\1/p'` 
-but the patern seems wrong.
-
-I have finaly found out a command that works, and it seems to fix deployment:
-
-```bash
-parted --script /dev/sda unit B print | sed -En 's#^Disk\s*/dev/sda:\s*([0-9]+)B$#\1#p'
-```
-
-However, the boot still does not work from grub. I think this is because the root is not set.
-I have added a `set root=(hd0,1)` aaaand it works !!!
-
-## 2020-06-10
-
-Let's try manjaro-architect to create an image deployment os with a package manager, so it's
-easier to use `clonezilla`.
-
-I used [manjaro architect 20.0.3-200607](https://dotsrc.dl.osdn.net/osdn/storage/g/m/ma/manjaro/architect/20.0.3/manjaro-architect-20.0.3-200607-linux56.iso) under virtualbox.
-
-I used the default partition scheme, with a boot and a root partition, so the kernel file is separated and I can
-
-I only configured the `root` user with the password `bootiful`.
-
-The `hostname` is `bootiful`.
-
-I installed the package `clonezilla` from the architect.
-
-After booting on the image, I can see that there are 2.3G used in the root partition, this is a lot.
-
-I tried to clean the package cache to see if I can reduce this size with the command:
-
-```log
-# paccache -r -vuk0
-==> no candidate packages found for pruning
-```
-
-I tried another method:
-
-```bash
-rm -rf /var/cache/pacman/pkg/*
-pacman -Sc 
-```
-
-But there are still 2.3G used. This is still too much.
-
-While looking for alternatives, I found [Debian Multistrap](https://wiki.debian.org/Multistrap).
-It can automate the creation of bootable root file systems. It seems ideal for what we need.
-
-I will try to setup a docker image that will build the system using debian multistrap.
-
-Meeting notes:
-
-- Dans un premier temps, choix d'une image
-- Ensuite, choix d'une customization, par exemple ansible
-- Le choix de debian multistrap a l'air prometteur
-
-I tried to make a Dockerfile that creates the deployment OS with `multistrap`
-but I found out that this tool only created a root file system and it's not bootable "as-is".
-I still have to install a kernel generate an initrd.
-
-## 2020-06-10
-
-I created a script to configure debian packages and clean up the file system in chroot.
-
-## 2020-06-24
-
-I spent the past two week tinkering and configuring the debian-based deployer. Since this
-morning, it's working! I can deploy my debian image on the small computer.
-
-The hardest things to do were:
-
-- Create an initrd that mounts the root file system from NFS
-- Automate the creation of the OS and the configuration of the server
-- Start the script before TTY login using a systemd service
-
-Now we need to modify the script to be able to use an image from clonezilla. I
-will try to keep it retro-compatible with the ancient method, so the "raw" images
-will still be compatible and it will be easier to benchmark both.
-
-I have added a way to start a shell before bootiful starts: press `s` or `S` in the
-first 2 seconds of the script. This allows me to try commands before 
-
-I removed the old tiny os binaries and their entries from the grub menu because they
-are now deprecated.
-
-## 2020-06-27
-
-I have added a timeout to GRUB, so it selects the first entry automatically after
-3 seconds.
-
-I will create an image of the deployed debian system with clonezilla live.
-
-The command to clone the image is:
-
-```bash
-/usr/sbin/ocs-sr -q2 -c -j2 -z9p -i 4096 -sfsck -senc -p choose savedisk debian-x86-efi sda
-```
-
-The image was copied with SSH on my PC.
-
-I added it to the images folder and will now try to restore it manually from the command line
-on the small PC.
-
-I tried the following command:
-
-```bash
-ocs-sr -g auto -or /bootiful/shared/images restoredisk debian-x86_64-efi-clonezilla sda
-```
-
-It did not work. The output is:
-
-```log
-Setting the TERM as linux
-Starting /usr/sbin/ocs-sr at 2020-06-27 22:18:10 UTC...
-*****************************************************.
-Clonezilla image dir: /bootiful/shared/images
-*****************************************************.
-Failed to stop mkswapfile.service: Unit mkswapfile.service not loaded.
-*****************************************************.
-mkdir: cannot create directory ‘/var/lib/clonezilla/’: Read-only file system
-/usr/share/drbl/sbin/ocs-functions: line 13026: /var/lib/clonezilla/ocs-vars: No such file or directory
-/usr/share/drbl/sbin/ocs-functions: line 13027: /var/lib/clonezilla/ocs-vars: No such file or directory
-/usr/share/drbl/sbin/ocs-functions: line 13028: /var/lib/clonezilla/ocs-vars: No such file or directory
-/usr/share/drbl/sbin/ocs-functions: line 13029: /var/lib/clonezilla/ocs-vars: No such file or directory
-/usr/share/drbl/sbin/ocs-functions: line 13030: /var/lib/clonezilla/ocs-vars: No such file or directory
-Start checking the saved image debian-x86_64-efi-clonezilla if restorable...
-Setting the TERM as linux
-The image to be checked: debian-x86_64-efi-clonezilla
-This is a whole disk image, saved from harddrive: sda
-The partition to be checked: sda1 sda2
-*****************************************************.
-Checking the partition table in the image "debian-x86_64-efi-clonezilla"...
-GPT 1st partition table file found!
-GPT 2nd partition table file found!
-GPT partition table file for this disk saved by gdisk was found: sda
-*****************************************************.
-Checking the swap partition info in the image "debian-x86_64-efi-clonezilla"...
-Finding swap partition(s) in GPT table /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda-pt.parted...
-*****************************************************.
-Checking the MBR in the image "debian-x86_64-efi-clonezilla"...
-MBR file for this disk was found: sda
-*****************************************************.
-Checking the partition sda1 in the image "debian-x86_64-efi-clonezilla"...
-sda1.vfat-ptcl-img.zst.aa not found.
-Program terminated!.
-Program terminated!!
-```
-
-Here are some things that seem to fail:
-
-1. The service unit `mkswapfile.service` is not loaded.
-2. The directory `/var/lib/clonezilla` cannot be created because the root file system is readonly.
-3. The file `sda1.vfat-ptcl-img.zst.aa` is not found. However, it exists in the image folder.
-
-Maybe error 3 is related to the previous error.
-
-The easiest error to fix is the second one: we need to create `/var/clonezilla` and mount it as 
-`tmpfs` in `/etc/fstab`. It seems to work but the third error is still showing up.
-
-I think that the parameter `-or /bootiful/shared/images` is not taken into account correctly for
-some reason, and that the file is searched into `/home/partimag` which is the default. 
-To check this, I installed the package `strace` in the rootfs, so I can see if there is a system
-call that goes into the wrong folder. Unfortunately, I did not find any mention of 
-`sda1.vfat-pctl-img.zst.aa` in the `strace` output, excepted in the error message.
-
-I'll try to bind mount `/bootiful/shared/images` to `/home/partimag` to see if it works better. 
-I will use the following commands:
-
-```bash
-mount --bind /bootiful/shared/images /home/partimag
-ocs-sr -g auto restoredisk debian-x86_64-efi-clonezilla sda
-```
-
-Unfortunately, this does not work either. The same error appears.
-
-I will try to run `clonezilla` interactively to restore the disk and see if this works and
-what is the command that it uses.
-
-After going through the wizard, the command is shown:
-
-```bash
-/usr/sbin/ocr-sr -g auto -e1 auto -e2 -c -r -j2 -p true restoredisk debian-x86_64-efi-clonezilla-2020-06-28-00-15
-```
-
-Unfortunately, the same error still appears... 
-
-I tried to skip the checking of image files wih the `-scr` parameter. It goes a bit further but
-still shows the same error message at the end.
-
-After re-running this with `strace`, I found out that there was a tentative to read the file
-`sda1.vfat-ptcl-img.zst.vfat`. I tried to `cd` into the folder before running the command
-and now the error message changes a bit:
-
-```log
-Unknown format for sda1.vfat-ptcl-img.zst.aa.
-```
-
-I guess this happens because I used the Zstandard compression algorithm when creating the image
-and that the debian package to decompress this, `zstd` is not available. I will add it to the 
-packages in the multistrap config and hope that it solves the problem... But it does not.
-
-I found out that the clonezilla version used in `bootiful-deployer` is `3.27.16-3` but the
-version used to create the image is `3.35.2`. Maybe this compression algorithm is not recognized
-on the version used by `bootiful-deployer`. This is because I use debian _buster_ (stable), which
-has an outdated version of the package. The next versions, _bullseye_ (testing) and _sid_ (unstable)
-have the version `3.35.2-2` of clonezilla.
-
-I will try to migrate the rootfs to _Debian bullseye_, which should be stable enough for our needs.
-To migrate to _bullseye_, I should just need to modify `suite=buster` in the multistrap configuration 
-file `multistrap.config` and set it to `suite=bullseye`. Let's hope that there won't be some
-incompatibilities due to the change of version and that the transition will be smooth...
-
-I tried to start the new rootfs based on debian buster to deploy an image. There is an error that
-did not appear before: 
-
-```log
-Error: Could not stat device /dev/sda - No such file or directory.
-Fatal error: Cannot get total size of disk.
-
-Press 'c' to continue deployment
-Press 's' to switch to command-line shell
-Press 'r' to reboot
-
-```
-
-It seems the `/dev/sda` device is not recognized during boot, like it was on debian buster.
-I will modify the rootfs configuration script to set the password `bootiful` to the `root`
-user and disable the `bootiful-deploy-log.service` systemd unit, so I can login on the 
-system as root and see if the block devices are mounted there.
-
-The password for root is set using this command:
-
-```bash
-echo "root:bootiful" | chpasswd
-```
-
-It seems /dev/sda is not available after boot. It maybe happens because of the `/dev/` folder
-being in the rootfs. I have added `/dev` to `fstab` as a `tmpfs` to see if this fixes this...
-And it seems it does!
-
-I tried to run `bootiful-deploy-log` manually after logging in as `root` and it worked as
-expected: I was able to run the deployed debian image after reboot.
-
-I think I should modify the `bootiful-deployer` OS to login automatically on TTY 1 and then
-run the script, even if it works as a systemd service. This would be a cleaner way to execute
-it because it's not really a daemon but an interactive script. Let's put this idea on hold
-for the time being but keep it in mind, as there is a more important issue to solve right now:
-make clonezilla images restoring work.
-
-Let's try to restore a clonezilla image using this new debian bullseye rootfs which has the
-latest clonezilla package installed.
-
-Unfortunately, there's still an error message when running the command:
-
-```log
-/usr/sbin/ocs-chkimg: line 112: partclone.chkimg: command not found
-The image of this partition is broken: sda1
-```
-
-I will try to explicitly install `partclone` in the debian rootfs, as it seem not available.
-I have added it to the packages list in the multistrap configuration file `multistrap.config` 
-and will try again.
-
-I ran the following commands after boot:
-
-
-```bash
-mkdir /bootiful/shared
-mount -t nfs -o nolock 192.168.56.100:/nfsshared /bootiful/shared
-ocs-sr -g auto -or /bootiful/shared/images restoredisk debian-x86_64-efi-clonezilla sda
-```
-
-Now the restoring process seems to run further but there are other errors... Let's diagnose
-it tomorrow.
-
-## 2020-06-28
-
-I tried to rerun the last command from yesterday. It seems partclone is able to check the 
-partition images successfully but fails to restore it.
-
-Here is the log that clonezilla created in `/var/log/clonezilla.log`:
-
-```log
-Starting /usr/sbin/ocs-sr at 2020-06-28 10:45:05 UTC...
-*****************************************************.
-Clonezilla image dir: /bootiful/shared/images
-GPT 1st partition table file found!
-GPT 2nd partition table file found!
-GPT partition table file for this disk saved by gdisk was found: sda
-MBR file for this disk was found: sda
-The image of this partition is restorable: sda1
-The image of this partition is restorable: sda2
-All the images of partition or LV devices in this image were checked and they are restorable: debian-x86_64-efi-clonezilla
-Running: task_restoreparts "debian-x86_64-efi-clonezilla" "sda1 sda2" ""
-This program is not started by clonezilla server.
-Creating partition in /dev/sda...
-Trying to clean the MBR and GPT partition table on the destination disk first: /dev/sda
-Informing the OS of partition table changes... done!
-Running: dd if=/dev/zero of=/dev/sda bs=512 count=1
-1+0 records in
-1+0 records out
-512 bytes copied, 0.000564731 s, 907 kB/s
-Running: LC_ALL=C sfdisk --wipe always --force /dev/sda < /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda-pt.sf 2>&1
-Checking that no-one is using this disk right now ... OK
-
-Disk /dev/sda: 476.96 GiB, 512110190592 bytes, 1000215216 sectors
-Disk model: TOSHIBA KSG60ZMV
-Units: sectors of 1 * 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 4096 bytes
-I/O size (minimum/optimal): 4096 bytes / 4096 bytes
-
->>> Script header accepted.
->>> Script header accepted.
->>> Script header accepted.
->>> Script header accepted.
->>> Script header accepted.
->>> Script header accepted.
->>> Created a new GPT disklabel (GUID: 57C2476D-04C9-4CE2-921A-E44DA9C9B36D).
-/dev/sda1: Created a new partition 1 of type 'EFI System' and of size 512 MiB.
-/dev/sda2: Created a new partition 2 of type 'Linux filesystem' and of size 2.5 GiB.
-/dev/sda3: Done.
-
-New situation:
-Disklabel type: gpt
-Disk identifier: 57C2476D-04C9-4CE2-921A-E44DA9C9B36D
-
-Device       Start     End Sectors  Size Type
-/dev/sda1     2048 1050623 1048576  512M EFI System
-/dev/sda2  1050624 6289407 5238784  2.5G Linux filesystem
-
-The partition table has been altered.
-Calling ioctl() to re-read partition table.
-Syncing disks.
-This was done by: LC_ALL=C sfdisk --wipe always --force /dev/sda < /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda-pt.sf 2>&1
-Informing the OS of partition table changes.... done!
-The disk and partitions in this system now:
-*****************************************************.
-Model: ATA TOSHIBA KSG60ZMV (scsi)
-Disk /dev/sda: 512GB
-Sector size (logical/physical): 512B/4096B
-Partition Table: gpt
-Disk Flags: 
-
-Number  Start   End     Size    File system  Name  Flags
- 1      1049kB  538MB   537MB                      boot, esp
- 2      538MB   3220MB  2682MB
-
-*****************************************************.
-Restoring partition /dev/sda1...
-*****************************************************.
-Starting unicast restoring image debian-x86_64-efi-clonezilla to /dev/sda1...
-If this action fails or hangs, check:
-* Is the saved image /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda1.vfat-ptcl-img.zst.* corrupted ?
-*****************************************************.
-  ( for img in /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda1.vfat-ptcl-img.zst.*; do
-      cat 
-    done
-  )   | pzstd -dc 2> /tmp/unzip_stdin_cmd_error.k0bK2v   | LC_ALL=C partclone.vfat -z 10485760 -N -L /var/log/partclone.log -s - -r -o /dev/sda1
-Partclone v0.3.13 http://partclone.org
-Starting to restore image (-) to device (/dev/sda1)
-device (/dev/sda1) is mounted at 
-error exit
-Failed to use partclone program to save or restore an image!
->>> Time elapsed: 6.07 secs (~ .101 mins)
-Finished unicast restoring image debian-x86_64-efi-clonezilla to /dev/sda1.
-Informing the OS of partition table changes.... done!
-*****************************************************.
-Failed to restore partition image file /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda1* to /dev/sda1! Maybe this image is corrupt or there is no /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda1*! If you are restoring the image of partition to different partition, check the FAQ on Clonezilla website for how to make it.
-Press "Enter" to continue......
-*****************************************************.
-Restoring partition /dev/sda2...
-*****************************************************.
-Starting unicast restoring image debian-x86_64-efi-clonezilla to /dev/sda2...
-If this action fails or hangs, check:
-* Is the saved image /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda2.ext4-ptcl-img.zst.* corrupted ?
-*****************************************************.
-  ( for img in /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda2.ext4-ptcl-img.zst.*; do
-      cat 
-    done
-  )   | pzstd -dc 2> /tmp/unzip_stdin_cmd_error.QitYx2   | LC_ALL=C partclone.ext4 -z 10485760 -N -L /var/log/partclone.log -s - -r -o /dev/sda2
-Partclone v0.3.13 http://partclone.org
-Starting to restore image (-) to device (/dev/sda2)
-device (/dev/sda2) is mounted at 
-error exit
-Failed to use partclone program to save or restore an image!
-Connection to 127.0.0.1 closed.
-```
-
-I was able to reproduce the same error by running only the partclone command:
-
-```bash
-cat /bootiful/shared/images/debian-x86_64-efi-clonezilla/sda1.vfat-ptcl-img.zst.aa | pzstd -dc | partclone.vfat -z 10485760 -N -L /var/log/partclone.log -s - -r -o /dev/sda1
-```
-
-I think that `partclone` is trying to mount /dev/sda1 somewhere but fails because the file system is read-only. 
-I will try to mount `/mnt` as `tmpfs` in `fstab`, because this is probably here that partclone tries to mount
-`/dev/sda`. Unfortunately, for an unknown reason, doing this makes the system fail to detect `/dev/sda1`. I tried 
-to mount `/mnt` as `tmpfs` manually after boot. There, the partitions are detected but partclone still fails.
-
-After checking [in the partclone source](https://github.com/Thomas-Tsai/partclone/blob/d84fcc163fce524320724822868f29fbd01762cc/src/partclone.c#L1616), 
-it seems that `/dev/sda` is falsely recognized as mounted and partclone refuses to continue.
-
-I found out that I can override this check by using the `--restore_raw_file` or `-W` option combined with the
-`--overwrite FILE` or `-O` option instead of `--output FILE` or `-o FILE`. 
-A workaround for the restore process to work would be to override these parameters in the clonezilla script 
-that calls partclone.
-
-I manually modified lines 5402 and 5405 of `/usr/share/drbl/sbin/ocs-functions` so the lines look like this:
-
-```bash
-  if [ "$fs_" != "dd" ]; then
-    cmd_partclone_rest="partclone.${fs_} $PARTCLONE_RESTORE_OPT -L $partclone_img_info_tmp -s - -r -W -O $part"
-  else
-    # Some parameters for partclone.dd are not required. Here "-r" is not provided by partclone.dd when restoring
-    cmd_partclone_rest="partclone.${fs_} $PARTCLONE_RESTORE_OPT -L $partclone_img_info_tmp -s - -W -O $part"
-  fi
-```
-
-With this _hack_, the manual deployement works using these commands: 
-
-```bash
-ocs-sr -g auto -or /bootiful/shared/images restoredisk debian-x86_64-efi-clonezilla sda
-mount -t vfat /dev/sda1 /mnt
-cp /bootiful/shared/images/debian-x86_64-efi/efi_entrypoint /mnt/efi_entrypoint
-umount /mnt
-```
-
-And then, in the grub command-line, I runned these commands manually, as the signature was not set:
-
-```bash
-set root=(hd0,1)
-source /efi_entrypoint
-chainloader $ efi_entrypoint
-boot
-```
-
-And it worked! Finally!
-
-Here are the next steps that I need to follow to make the whole system work with clonezilla and
-partclone:
-
-1. Create a patch file for the clonezilla script that needs to be modified as a workaround
-2. Apply this patch to the script in the docker build after the root file-system has been created
-3. Modify the script `bootiful-deploy` to:
-   1. Detect clonezilla images and their hashes and show them in the image selection menu
-   2. When the chosen image is a clonezilla image that is not cached, copy it in the hidden partition
-      if it's not present
-   3. Deploy the image with clonezilla from the copy in the hidden partition
-   
-Unfortunately, using clonezilla prevents us to copy the image from the nfs server and deploy it 
-at the same time using `tee` as we can do for the raw images, because clonezilla works on an 
-image folder and it does not seem that we can pipe a tar archive to clonezilla. However, it's 
-probable that on large images, the reduction of the image size will make the change worth it.
-I need to benchmark these deployment times on multiple images to find out if this hypothesis 
-is true. 
-
-I created a diff by extracting the with the following commands:
-
-```bash
-diff -u ocs-functions.original ocs-functions.modified > ocs-functions.patch
-```
-
-## 2020-07-01
-
-I have done modifications to the deployment script so it can use clonezilla images for deployment.
-For now, there is no caching mechanism because I encountered a problem that I did not expect: 
-clonezilla needs all the partitions on `/dev/sda` to be unmounted to be able to create
-the partition table, so we can't keep the hidden partition. I'm not sure on how to work around this
-issue.
-
-### Meeting
-
-Suggestions of workarounds:
-- Use kpartx
-- Mount directly from the offset in the disk instead of the partition table
-- Use `mknod` to replicate a device
-
-## 2020-07-07
-
-I have spent most of the week making the clonezilla images useable with cache. This is now working.
-
-At first, the hidden partition was mounted in a The hidden partition is mounted from a second node made 
-with `mknod` that replicates the `/dev/sda1` device, using it's major and minor numbers. This allows to
-bypass clonezilla's check that `/dev/sda1` is mounted.
-
-I encountered some issues:
-
-1. Clonezilla was causing some "interferences" on the hidden partition when deploying to `/dev/sda1`,
-   which made the deployment fail. I worked around this issue by `mount`ing the hidden partition
-   directly from a `mknod` clone of `/dev/sda` and using the `-o $offset` parameter of `mount`.
-   
-2. Mounting with an offset did not work at first. The partition did not start at the calculated
-   offset but at the next disk sector after it. I solved this problem by rounding the calculated
-   offset to the nearest disk's sector.
-   
-3. The hidden partition does not update the inode table correctly before unmounting, which caused
-   an error when trying to remount it after rebooting: `mount: /mnt: mount(2) system call failed: Structure needs cleaning`.
-   I worked around this issue by running `fsck -y /dev/sda` before mounting the hidden partition.
-   The output of this command is the following:
-   
-   ```log
-   fsck from util-linux 2.35.2
-   e2fsck 1.45.6 (20-Mar-2020)
-   ext2fs_check_desc: Corrupt group descriptor: bad block for block bitmap
-   fsck.ext2: Group descriptors look bad... trying backup blocks...
-   /dev/sda1 was not cleanly unmounted, check forced.
-   Resize inode not valid.  Recreate? yes
-   Pass 1: Checking inodes, blocks, and sizes
-   Pass 2: Checking directory structure
-   Pass 3: Checking directory connectivity
-   Pass 4: Checking reference counts
-   Pass 5: Checking group summary information
-   Free blocks count wrong for group #0 (31222, counted=2190).
-   Fix? yes
-   Free blocks count wrong for group  (31229, counted=509).
-   Fix? yes
-   Free blocks count wrong for group  (32254, counted=19763).
-   Fix? yes
-   Free blocks count wrong for group 30 (32254, counted=32103).
-   Fix? yes
-   Free blocks count wrong (24597302, counted=24524908).
-   Fix? yes
-   Free inodes count wrong for group 30 (8192, counted=8166).
-   Fix? yes
-   Directories count wrong for group 30 (0, counted=1).
-   Fix? yes
-   Free inodes count wrong (6258677, counted=6258651).
-   Fix? yes
-   
-   /dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****
-   /dev/sda1: 37/6258688 files (2.7% non-contiguous), 480472/25005380 blocks
-   ```
-
-4. The clonezilla script used for deployment, `ocs-sr`, asks the user to press
-   enter when an error occurs during the restore process of a partition. Furthermore,
-   it does not return an error code. I worked around this issue by automating the press
-   of the enter key with the command `yes` and by parsing the log of clonezilla to
-   find out if an error has occured.
-
-Deployment with clonezilla was causing some "interferences" with the h
-
-Here are some measures of the deployement time of `debian_x86_efi` with different methods:
-
-| Image           | raw size     | raw (non cached) | raw (cached) | Clonezilla (non cached) | Clonezilla (cached) |
-|-----------------|--------------|------------------|--------------|-------------------------|---------------------| 
-| `debian_x86_efi`| 3221225472 B | 13 s             | 14 s         | 39 s                    | 39 s                |
-
-I need to test with larger images to see if `clonezilla` becomes faster than `dd` with larger images.
-Unfortunately, the vagrant server disk image and my main SSD size are limited. I think migrating the server
-to a system using docker and bind mounts would make this easier to manage.
-
-I started to make a Dockerfile for this and tried to start it like this:
-
-```bash
-docker build -t bootiful-server . && docker run -d -it --name bootiful-server -v "$(pwd)"/tftp/tftpboot:/tftpboot -v "$(pwd)"/nfs/images:/nfsshared/images bootiful-server
-```
-
-Unfortunately, there is an error:
-
-```log
-/bin/sh: 1: systemctl: not found
-```
-
-## 2020-07-08
-
-Let's make this docker container work. I have created a `docker-compose.yml` file to put
-the configuration so I do not have to type it each time.
-
-I tried to use systemd with docker to start multiple services but it does not look like it works.
-
-I will try a cleaner approach and separate each service in it's own docker container. 
-
-After 8 hours of struggling with NFS in docker, I finally managed to replace vagrang by docker.
-The hardest part was to make the NFS root share to work, because NFS did not want to share
-a folder that is mounted as `overlay2`. I worked around this issue by creating a `tmpfs` mount
-in docker where I extracted the content of the archive and it worked.
-
-I tried to restore the windows image, but the last partition does not restore correctly because 
-it overlaps the hidden partition. However, this is the "rescue" partition so we should be
-able to deploy the system without it. I removed it from the "parts" file of the clonezilla image to
-ignore it. I also added an `efi_entrypoint` file that specified that the entry point for EFI
-should be `/EFI/Microsoft/Boot/bootmgtw.efi`. I found out that clonezilla dumps the EFI data
-in a file named `efi-nvram.dat`. This could be a good idea to parse this file and get the 
-entry point from here. For a windows image, there is a quirk: `\` characters are used instead
-of `/` characters. Also, the path `/EFI` is specified but the real path is `/efi` and grub is
-case-sensitive. If I want to parse the file, I need to convert these.
-
-When the image is deploying, I can see that copying the image to cache is much longer than
-with the small debian image. Unfortunately, deployment still does not work: sda3 is too big 
-and overlaps the hidden partition, which causes errors in the deployement. The windows 
-boot loader shows a blue "Recovery" screen that says that a device is not accessible and
-the system cannot boot. 
-
-I see 2 ways to solve this problem:
-
-1. If the image is too big to keep the hidden partition but small enough for the disk,
-   deploy it directly from the server and erase the hidden partition.
-2. Resize the image so it's smaller.
-
-## 2020-07-13
-
-I have done a big refactoring of the script to make it possible to ask the user when
-the hidden partition will be destroyed by the image.
-
-This was necessary because the choice of the image was done after the creation of the 
-hidden partition. Now the hidden partition is created/loaded after the choice of the
-image and only with images that are small enough.
-
-## 2020-07-14
-
-I did some cleanup in the shell scripts: changed the syntax to use functions and
-renamed the startup script `bootiful-deploy-init`.
-
-## 2020-07-15
-
-I refactoried the shell scripts. I created functions that validate things and
-make the script fail if not validated. This allows to remove a lot of repeated 
-code and make the logic easier to understand. I did this beacause it was 
-becoming harder and harder to read the bash script.
-
-I also fixed an error in the regex that validates a mac address.
-
-I added a colorful logo at the startup of the script. This allows to know when
-I can press 's' to start the manual mode.
-
-
-## 2020-07-21
-
-I fixed errors in error handling in the deployment script. Errors were not 
-handled as expected and the menu to ask what to do next did not show up
-
-
-## 2020-07-24
-
-There were errors with the big windows 10 image: because of a bug in partclone
-that detected the disk as mounted when it was not, I had to modify the way it's 
-called by clonezilla, so it acts as `/dev/sda` is a file and do not check if it's
-mounted. 
-
-The problem with this approach is that partclone checks the available space on the
-partition and this fails with larger images.
-
-I decided to recompile partclone with a small modification that bypasses the mounted
-partition check to make it work. 
-
-I created a docker container that makes a `deb` file which is installed on the deployer
-OS.
-
-I found out that the clonezilla image folder contains a dump of the EFI boot variables
-when the image was taken and I added some code that parses this file to find the EFI
-boot file automatically from this variable. A problem I encountered is that the windows
-image has the path to the file saved in case insensitive with backslashes instead of
-slashes so I had to convert it to a case sensitive unix path to make it work in grub.
-
-Now the deployment of big images work and I was finally able to deploy and boot my big
-windows 10 image.
-
-## 2020-07-26
-
-Now I need to compare how the deployment of the big windows 10 image performs with
-a raw dd image to compare the timings with clonezilla.
-
-I modified the script to take timings on each step and print all the timings at the
-end. Each step can be marked as "batch" or "interactive", so I can do a sum of the
-timings only on the non-interactive parts.
-
-## 2020-07-27
-
-I created a new script `bootiful-save-image` that allows to create a raw dd image 
-from the current disk state and save it on the remote server.
-
-I used this script to create a raw image of the windows image. Now I finally can
-compare how the clonezilla images perform against a raw dd image on large images:
-
-| Image type | Size      | Duration |
-|------------|-----------|----------|
-| raw        | 297.6 GiB | 3433 s   |
-| clonezilla | 12 GiB    | 371s     |
-
-We can see that on large images, clonezilla is really worth it.
-
-## 2020-07-29
-
-I found out that the whole trick of rebuilding partclone was not necessary. Partclone
-failed to find if `/dev/sda` is mounted because `/etc/mtab`  was not initalized.
-
-I've added this initialization last week, so I tried and now partclone from debian
-works correctly so I'll remove all the code for building partclone as a submodule.
-
-## 2020-08-05
-
-### Benchmarks
-
-Deployment of `xubuntu-20.04-raw` (200511847936 B) without cache:
-
-```log
-Steps duration summary:
-1 - remote shared data mount initialization took 0 seconds (batch)
-2 - log file initialization took 0 seconds (batch)
-3 - hardware log files creation took 0 seconds (batch)
-4 - remote images search took 0 seconds (batch)
-5 - image selection took 10 seconds (interactive)
-6 - image size verification took 0 seconds (batch)
-7 - image cache partition mount tentative took 1 seconds (batch)
-8 - image cache partition creation took 4 seconds (batch)
-9 - image cache partition mount tentative took 0 seconds (batch)
-10 - cached image search took 0 seconds (batch)
-11 - image cache space availability check took 0 seconds (batch)
-12 - image deployment took 615 seconds (batch)
-13 - image cache partition unmount took 2 seconds (batch)
-14 - EFI entrypoint file creation took 1 seconds (batch)
-15 - signature creation took 0 seconds (batch)
-
-Total batch duration: 623s
-Total interactive duration: 10s
-Total duration: 633s
-```
-
-Deployment of `xubuntu-20.04-raw` (2943352831 B) with cache:
-
-```log
-Steps duration summary:
-1 - remote shared data mount initialization took 1 seconds (batch)
-2 - log file initialization took 0 seconds (batch)
-3 - hardware log files creation took 1 seconds (batch)
-4 - remote images search took 0 seconds (batch)
-5 - image selection took 8 seconds (interactive)
-6 - image size verification took 0 seconds (batch)
-7 - image cache partition mount tentative took 0 seconds (batch)
-8 - cached image search took 0 seconds (batch)
-9 - image deployment took 625 seconds (batch)
-10 - image cache partition unmount took 2 seconds (batch)
-11 - EFI entrypoint file creation took 1 seconds (batch)
-12 - signature creation took 0 seconds (batch)
-
-Total batch duration: 630s
-Total interactive duration: 8s
-Total duration: 638s
-```
-
-Deployment of `xubuntu-20.04-clonezilla` (200511847936 B) without cache:
-
-```log
-Steps duration summary:
-1 - remote shared data mount initialization took 1 seconds (batch)
-2 - log file initialization took 0 seconds (batch)
-3 - hardware log files creation took 0 seconds (batch)
-4 - remote images search took 0 seconds (batch)
-5 - image selection took 22 seconds (interactive)
-6 - image size verification took 0 seconds (batch)
-7 - image cache partition mount tentative took 0 seconds (batch)
-8 - image cache partition creation took 4 seconds (batch)
-9 - image cache partition mount tentative took 0 seconds (batch)
-10 - cached image search took 0 seconds (batch)
-11 - image cache space availability check took 0 seconds (batch)
-12 - image deployment took 98 seconds (batch)
-13 - image cache partition unmount took 1 seconds (batch)
-14 - image cache partition check took 5 seconds (batch)
-15 - EFI entrypoint file creation took 0 seconds (batch)
-16 - signature creation took 0 seconds (batch)
-
-Total batch duration: 109s
-Total interactive duration: 22s
-Total duration: 131s
-```
-
-Deployment of `xubuntu-20.04-raw` (200511847936 B) with cache:
-
-```log
-Steps duration summary:
-1 - remote shared data mount initialization took 1 seconds (batch)
-2 - log file initialization took 0 seconds (batch)
-3 - hardware log files creation took 0 seconds (batch)
-4 - remote images search took 0 seconds (batch)
-5 - image selection took 3 seconds (interactive)
-6 - image size verification took 0 seconds (batch)
-7 - image cache partition mount tentative took 0 seconds (batch)
-8 - cached image search took 0 seconds (batch)
-9 - image deployment took 84 seconds (batch)
-10 - image cache partition unmount took 0 seconds (batch)
-11 - image cache partition check took 0 seconds (batch)
-12 - EFI entrypoint file creation took 0 seconds (batch)
-13 - signature creation took 0 seconds (batch)
-
-Total batch duration: 85s
-Total interactive duration: 3s
-Total duration: 88s
-```
-
-### Ansible installation
-
-Installation on xubuntu 20.04 before imaging:
-
-```bash
-sudo apt update
-sudo apt install ansible
-
-cp bootiful-postdeploy /usr/local/bin/bootiful-postdeploy
-chmod 0755 /usr/local/bin/bootiful-postdeploy
-
-cp bootiful-postdeploy.service /etc/systemd/system/bootiful-postdeploy.service
-chmod 0644 /etc/systemd/system/bootiful-postdeploy.service
-
-systemctl daemon-reload
-systemctl enable bootiful-postdeploy.service
-
-mkdir -p 
-```
diff --git a/doc/rapport.pdf b/doc/rapport.pdf
index 09e84f82d9ee216e3a0b12e1acbebc6d1d1183e4..505b8f93c3744065248e94e3252497fbdd635700 100644
Binary files a/doc/rapport.pdf and b/doc/rapport.pdf differ