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"/>  @@ -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 +  et la figure +  +2. Une image moyenne du système _Xubuntu_, comparée dans le tableau +  et la figure +  +3. Une grande image du système _Windows 10_, comparée dans le tableau +  et la figure +  + + + + + +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"/> + +<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"/> + +<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"/> + +<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: - - - -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`: - - - -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! - - - -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.svg) - - -## 2020-05-11 - -Finalize the diagram: - - -[](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.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: - - - - - - - -Here is the activity diagram that I have created: - -](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: - - - -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