diff --git a/doc/Makefile b/doc/Makefile index 84fe24e0c2ff208fe926a35671c85013a3d3411b..10f58a25f2213ce39433f765b72b877b6dc3d0da 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -16,11 +16,11 @@ logbook.md: logbook.gpp.md markdown.gpp gitlab-markdown.gpp $(PLANTUML_DIAGRAMS_ rapport.md: rapport.gpp.md logbook.gpp.md markdown.gpp gitlab-markdown.gpp csv2barchart.py $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) $(GPP) -DGITLAB_MARKDOWN $< | ./trimstart.py > $@ -rapport.tex: rapport.gpp.md diagrams markdown.gpp pandoc-pdf-markdown.gpp logbook.gpp.md csv2barchart.py $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) - $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --standalone --pdf-engine=xelatex -o $@ +rapport.tex: rapport.gpp.md diagrams markdown.gpp pandoc-pdf-markdown.gpp logbook.gpp.md csv2barchart.py templates/default.latex $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) + $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --standalone --pdf-engine=xelatex --template=templates/default.latex -o $@ -rapport.pdf: rapport.gpp.md markdown.gpp pandoc-pdf-markdown.gpp logbook.gpp.md csv2barchart.py $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) - $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --pdf-engine=xelatex -o $@ +rapport.pdf: rapport.gpp.md markdown.gpp pandoc-pdf-markdown.gpp logbook.gpp.md csv2barchart.py templates/default.latex $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) + $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --pdf-engine=xelatex --template=templates/default.latex -o $@ diagrams: $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) diff --git a/doc/images/hepia.png b/doc/images/hepia.png new file mode 100644 index 0000000000000000000000000000000000000000..02a91196f62eee65b1ed98d76d7f9bf9f5d93ff5 --- /dev/null +++ b/doc/images/hepia.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56bca839d547a83190b8eb043db88e9aa04606f18c0c54aa69239fefbec72b37 +size 16183 diff --git a/doc/images/hes.png b/doc/images/hes.png new file mode 100644 index 0000000000000000000000000000000000000000..80865538b4df1548539d319a185ad3936f0b8572 --- /dev/null +++ b/doc/images/hes.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b35a3077cd5077deb0020a0797732b23b072a606e2d8b586fc301847ce1b5d70 +size 16564 diff --git a/doc/images/logo-hesso-geneve.pdf b/doc/images/logo-hesso-geneve.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e980ef567dec08a573b18952173aa498e25cd64f Binary files /dev/null and b/doc/images/logo-hesso-geneve.pdf differ diff --git a/doc/images/logo-hesso-geneve.pdf_tex b/doc/images/logo-hesso-geneve.pdf_tex new file mode 100644 index 0000000000000000000000000000000000000000..9804b83bf194c4c8083c3411c89ec8bd27b551df --- /dev/null +++ b/doc/images/logo-hesso-geneve.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.0 (4035a4fb49, 2020-05-01), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'logo-hesso-geneve.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{<filename>.pdf_tex} +%% instead of +%% \includegraphics{<filename>.pdf} +%% To scale the image, write +%% \def\svgwidth{<desired width>} +%% \input{<filename>.pdf_tex} +%% instead of +%% \includegraphics[width=<desired width>]{<filename>.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{<path to file>}{<filename>.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{<path to file>/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{2769bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.27139762)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{logo-hesso-geneve.pdf}}% + \end{picture}% +\endgroup% diff --git a/doc/images/logo-hesso-geneve.svg b/doc/images/logo-hesso-geneve.svg new file mode 100644 index 0000000000000000000000000000000000000000..050a0259eb38e3923609ebe135afda2a6b17d6a1 --- /dev/null +++ b/doc/images/logo-hesso-geneve.svg @@ -0,0 +1,222 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 373.7 104.3" width="3737" height="1043" style="enable-background:new 0 0 373.7 104.3;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#AAAAA9;} + .st1{fill:#006EAB;} +</style> +<g> + <path class="st0" d="M38.1,83.6c-0.9,0-0.9,0-1.8,0l-0.1-0.1c0-1.7,0.1-3.5,0.1-5.1c-0.4,0-0.8,0-1.5,0c-1.3,0-2.6,0-3.8,0 + c0,2.9,0,3.9,0.1,5L31,83.6c-0.9,0-0.9,0-1.8,0l-0.1-0.1c0.1-1.5,0.1-2.3,0.1-6.9c0-2,0-2.8-0.1-3.7l0.1-0.1c0.8,0,1,0,1.8,0 + l0.1,0.1c0,0.9,0,2.1,0,4.2c0.8,0,1.3,0,2.3,0c1.5,0,2.2,0,2.9,0c0-2.9,0-3.2-0.1-4.2l0.1-0.1c0.9,0,1,0,1.8,0l0.1,0.1 + c0,1.5-0.1,2.4-0.1,5.1c0,2.9,0.1,4.1,0.2,5.5L38.1,83.6z"/> + <path class="st0" d="M45.7,79.4v2.5c-0.2,0.2-0.8,0.7-1.8,0.7c-1.5,0-1.5-1.3-1.5-1.4c0-1.4,1.5-1.6,3.1-1.8L45.7,79.4z M47.4,79 + c0-0.6,0-1.5-0.1-1.9c-0.3-1.2-1.5-1.6-2.7-1.6c-1,0-1.9,0.2-2.8,0.5l-0.1,0.1c0,0.3,0,0.4,0,1.1l0.1,0.1c0.7-0.3,1.4-0.6,2.5-0.6 + c0.8,0,1.2,0.3,1.3,0.6c0.1,0.2,0.1,0.5,0.1,0.9l-0.3,0c-2.9,0.3-4.7,1-4.7,3c0,1.5,1.1,2.5,2.7,2.5c1.2,0,2-0.5,2.3-0.8l0,0.6 + l0.1,0.1c0.7,0,0.9,0,1.6-0.1l0.1-0.1c-0.1-1-0.1-1.2-0.1-3V79z"/> + <path class="st0" d="M57.4,75.8c0,1.2,0,2.2,0,3.5c0,1.9,0,3,0.1,3.6c0,0.2,0,0.4,0,0.6l-0.1,0.1c-0.8,0-0.9,0-1.6,0.1l-0.1-0.1 + l0-0.6c-0.4,0.2-1.2,0.9-2.5,0.9c-0.6,0-1.3-0.1-1.8-0.5c-1-0.8-1-2.1-1-3.3v-0.9c0-2.2,0-2.4-0.1-3.2l0.1-0.1c0.8,0,0.9,0,1.7-0.1 + l0.1,0.1L52,79.1c0,0.4,0,0.7,0,1.4c0,0.6,0.1,2,1.7,2c0.9,0,1.6-0.5,2-0.8c0-0.8,0-1.5,0-2.4c0-2.1,0-2.5-0.1-3.5l0.1-0.1 + c0.7,0,0.9,0,1.7-0.1L57.4,75.8z"/> + <path class="st0" d="M64.1,82.4c0,0.5,0,0.6-0.1,1.1L64,83.6c-0.3,0.1-0.6,0.1-1.2,0.1c-0.4,0-1.4,0-1.9-0.8 + c-0.3-0.4-0.3-0.8-0.3-2.6l0-3.3c-0.6,0-0.6,0-1.2,0l-0.1-0.1c0-0.5,0-0.6,0-1.1l0.1-0.1c0.4,0,0.6,0,1.1,0c0-0.3,0-0.6,0-1 + c0-0.3,0-0.6,0-0.9l0.1-0.1c0.7-0.2,0.9-0.2,1.6-0.4l0.1,0.1c0,1-0.1,1.2-0.1,2.3c0.7,0,0.9,0,1.8,0l0.1,0.1c0,0.4-0.1,0.6-0.1,1.1 + l-0.1,0.1c-0.8,0-0.9,0-1.8,0l0,2.8c0,0.2,0,1.1,0,1.3c0,1.1,0.1,1.5,0.9,1.5c0.3,0,0.6-0.1,0.8-0.1L64.1,82.4z"/> + <path class="st0" d="M71.6,78.7c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.3,1.8,1.2C71.5,78.1,71.6,78.5,71.6,78.7z + M72.8,81.7c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.2-0.9,0.2-1.4,0.2c-0.5,0-1.4-0.1-2.1-0.8c-0.5-0.6-0.6-1.4-0.6-1.9 + c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1c-2.1,0-3.9,1.4-3.9,4.2c0,2.6,1.7,4.1,4.3,4.1 + c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L72.8,81.7z"/> + <path class="st0" d="M88.2,82.4c0,0.5,0,0.6-0.1,1.1L88,83.6c-3.1,0-3.6,0-6.7,0l-0.1-0.1c0.1-1.2,0.1-2,0.1-4.8c0-2.6,0-4-0.1-5.8 + l0.1-0.1c3.2,0,3.8,0,6.8,0l0.1,0.1c0,0.5-0.1,0.6-0.1,1.2l-0.1,0.1c-2.1-0.1-2.8-0.1-4.8-0.1c-0.1,1.4-0.1,1.8-0.1,3.2 + c2,0,2.6,0,4.6,0l0.1,0.1c-0.1,0.5-0.1,0.7-0.1,1.2l-0.1,0.1c-1.9,0-2.3,0-4.5,0c0,1.8,0,2.2,0,3.6c2.4,0,2.9,0,5-0.1L88.2,82.4z" + /> + <path class="st0" d="M96.6,81.8c-0.1,0.6-0.1,0.7-0.1,1.4l-0.1,0.1c-0.5,0.2-1.1,0.5-2.2,0.5c-2.4,0-4-1.7-4-4c0-2.4,1.5-4.2,4-4.2 + c1,0,1.8,0.3,2.2,0.5l0.1,0.1c-0.1,0.5-0.1,0.7-0.1,1.2l-0.1,0.1c-0.5-0.4-1.1-0.6-1.8-0.6c-1.3,0-2.5,1-2.5,2.9 + c0,2.1,1.2,2.8,2.5,2.8c1.1,0,1.8-0.5,2.1-0.8L96.6,81.8z"/> + <path class="st0" d="M104.5,79.6c0,0.3,0,1.3-0.4,2c-0.5,0.8-1.2,1-1.8,1c-0.3,0-0.7-0.1-1-0.2c-1.3-0.6-1.3-2.1-1.3-2.8 + c0-0.6,0-1.5,0.5-2.1c0.6-0.8,1.5-0.9,1.8-0.9c0.9,0,1.4,0.4,1.7,0.9C104.4,78.2,104.5,79.2,104.5,79.6z M106.3,79.5 + c0-1.1-0.2-2.1-1-2.9c-0.7-0.8-1.8-1.1-2.9-1.1c-1.6,0-2.5,0.6-3,1.1c-1.1,1-1.1,2.5-1.1,3.1c0,0.5,0,2,1.1,3.1 + c0.5,0.5,1.4,1,2.9,1c1.1,0,2.1-0.3,2.8-0.9c0.5-0.5,0.9-1.1,1-1.8C106.2,80.6,106.3,80.1,106.3,79.5z"/> + <path class="st0" d="M110.6,83.6c-0.8,0-0.9,0-1.7,0.1l-0.1-0.1c0-1.1,0.1-2.4,0.1-5.4c0-2.1,0-4.3-0.2-6.3l0.1-0.1 + c0.8-0.1,1-0.2,1.8-0.3l0.1,0.1c-0.1,2-0.1,4-0.1,6C110.5,80.9,110.6,82.1,110.6,83.6L110.6,83.6z"/> + <path class="st0" d="M118.9,78.7c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.3,1.8,1.2 + C118.9,78.1,118.9,78.5,118.9,78.7z M120.1,81.7c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.2-0.9,0.2-1.4,0.2c-0.5,0-1.4-0.1-2.1-0.8 + c-0.5-0.6-0.6-1.4-0.6-1.9c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1c-2.1,0-3.9,1.4-3.9,4.2 + c0,2.6,1.7,4.1,4.3,4.1c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0.1-0.7,0.1-1.4L120.1,81.7z"/> + <path class="st0" d="M132.7,77.5c1.2,0.5,2.7,1.1,2.7,3.1c0,1.7-1.3,3.2-4.1,3.2c-1.7,0-2.8-0.5-3.2-0.7l-0.1-0.1 + c0.1-0.5,0.1-0.8,0.1-1.4l0.2-0.1c0.4,0.3,1.3,0.9,2.8,0.9c1.7,0,2.4-0.8,2.4-1.7c0-1.1-0.9-1.5-2-1.9l-0.8-0.3 + c-1.1-0.5-2.7-1.2-2.7-3c0-0.6,0.2-1.1,0.5-1.6c0.7-1,2.1-1.3,3.4-1.3c1.3,0,2,0.2,2.9,0.5l0.1,0.1c-0.1,0.6-0.1,0.8-0.1,1.3 + l-0.1,0.1c-0.7-0.3-1.5-0.7-2.7-0.7c-1.3,0-2.2,0.6-2.2,1.5c0,0.7,0.5,1,0.8,1.2c0.2,0.1,0.3,0.2,1.2,0.6L132.7,77.5z"/> + <path class="st0" d="M139.7,82.4c0-0.9,0-1.8,0-2.7c0-0.8,0-1.5,0-2.3c0.4-0.2,1-0.6,1.9-0.6c1.3,0,2.2,1,2.2,2.6 + c0,1.9-1.2,3.1-3.4,3.1C140.1,82.5,139.9,82.5,139.7,82.4z M139.7,75.7l-0.1-0.1c-0.7,0.1-0.9,0.2-1.7,0.3l-0.1,0.1 + c0.2,1.7,0.2,2.8,0.2,5.1c0,0.9,0,1.8,0,2.7c0,1.6,0,2.5-0.1,3.4l0.1,0.1c0.6,0,1.1,0,1.7,0l0.1-0.1c-0.1-1.4-0.1-1.8-0.1-3.6 + c0.2,0,0.4,0,0.7,0c3.4,0,5.1-2,5.1-4.4c0-2.1-1.4-3.7-3.5-3.7c-1.3,0-2,0.6-2.4,0.8L139.7,75.7z"/> + <path class="st0" d="M153.4,78.7c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.3,1.8,1.2 + C153.4,78.1,153.4,78.5,153.4,78.7z M153.3,72.3c-0.3,0-0.6,0-0.9,0s-0.6,0-1,0l-0.1,0.1c-0.4,1-0.8,2-1,2.3l0.1,0.1 + c0.6,0,0.7,0,1.2,0l0.1-0.1c0.7-1.1,0.9-1.3,1.7-2.3L153.3,72.3z M154.6,81.7c-0.2,0.2-0.6,0.4-1.2,0.7c-0.4,0.2-0.9,0.2-1.4,0.2 + c-0.5,0-1.4-0.1-2.1-0.8c-0.6-0.6-0.6-1.4-0.6-1.9c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1 + c-2.1,0-3.9,1.4-3.9,4.2c0,2.6,1.7,4.1,4.3,4.1c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L154.6,81.7z"/> + <path class="st0" d="M163.6,81.8c-0.1,0.6-0.1,0.7-0.1,1.4l-0.1,0.1c-0.5,0.2-1.1,0.5-2.2,0.5c-2.4,0-4-1.7-4-4 + c0-2.4,1.5-4.2,4-4.2c1,0,1.8,0.3,2.2,0.5l0.1,0.1c-0.1,0.5-0.1,0.7-0.1,1.2l-0.1,0.1c-0.5-0.4-1.1-0.6-1.8-0.6 + c-1.3,0-2.5,1-2.5,2.9c0,2.1,1.2,2.8,2.5,2.8c1.1,0,1.8-0.5,2.1-0.8L163.6,81.8z"/> + <path class="st0" d="M167.4,83.6c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.8,0.1-1.5,0.1-3.2c0-2.9-0.1-3.4-0.2-4.3l0.1-0.1 + c0.7-0.1,0.9-0.1,1.7-0.3l0.2,0.1c0,0.8-0.1,1.6-0.1,3.6C167.4,82.1,167.4,82.5,167.4,83.6L167.4,83.6z M167.4,73.5 + c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.2,0-0.4,0-0.6c0-0.3,0-0.5,0-0.8l0.1-0.1c0.8-0.1,1-0.1,1.8-0.2l0.1,0.1c0,0.6,0,0.8,0,1.4 + L167.4,73.5z"/> + <path class="st0" d="M174.9,79.4v2.5c-0.2,0.2-0.8,0.7-1.8,0.7c-1.5,0-1.5-1.3-1.5-1.4c0-1.4,1.5-1.6,3.1-1.8L174.9,79.4z + M176.6,79c0-0.6,0-1.5-0.1-1.9c-0.3-1.2-1.5-1.6-2.7-1.6c-1,0-1.9,0.2-2.8,0.5l-0.1,0.1c0,0.3,0,0.4,0,1.1l0.1,0.1 + c0.7-0.3,1.4-0.6,2.5-0.6c0.8,0,1.2,0.3,1.3,0.6c0.1,0.2,0.1,0.5,0.1,0.9l-0.3,0c-2.9,0.3-4.7,1-4.7,3c0,1.5,1.1,2.5,2.7,2.5 + c1.2,0,2-0.5,2.3-0.8l0,0.6l0.1,0.1c0.7,0,0.9,0,1.6-0.1l0.1-0.1c-0.1-1-0.1-1.2-0.1-3V79z"/> + <path class="st0" d="M181.3,83.6c-0.8,0-0.9,0-1.7,0.1l-0.1-0.1c0-1.1,0.1-2.4,0.1-5.4c0-2.1,0-4.3-0.2-6.3l0.1-0.1 + c0.8-0.1,1-0.2,1.8-0.3l0.1,0.1c-0.1,2-0.1,4-0.1,6C181.2,80.9,181.3,82.1,181.3,83.6L181.3,83.6z"/> + <path class="st0" d="M186.1,83.6c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.8,0.1-1.5,0.1-3.2c0-2.9,0-3.4-0.2-4.3l0.1-0.1 + c0.7-0.1,0.9-0.1,1.7-0.3l0.2,0.1c0,0.8-0.1,1.6-0.1,3.6C186,82.1,186.1,82.5,186.1,83.6L186.1,83.6z M186.1,73.5 + c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.2,0-0.4,0-0.6c0-0.3,0-0.5,0-0.8l0.1-0.1c0.8-0.1,1-0.1,1.8-0.2l0.1,0.1c0,0.6,0,0.8,0,1.4 + L186.1,73.5z"/> + <path class="st0" d="M192.4,79c0.6,0.2,2.1,0.7,2.1,2.3c0,0.6-0.2,1.3-0.9,1.8c-0.9,0.7-2,0.7-2.6,0.7c-0.9,0-1.6-0.2-2.2-0.4 + c-0.1,0-0.2-0.1-0.2-0.1l-0.1-0.1c0.1-0.6,0.1-0.7,0.1-1.3l0.2,0c0.3,0.2,1,0.7,2.2,0.7c1.3,0,1.7-0.7,1.7-1.1 + c0-0.7-0.7-0.9-1.7-1.2l-0.5-0.2c-0.7-0.2-2.1-0.6-2.1-2.2c0-1.6,1.5-2.3,3.3-2.3c1.2,0,2,0.3,2.3,0.4l0.1,0.1 + c-0.1,0.6-0.1,0.6-0.1,1.2l-0.1,0.1c-0.4-0.2-1-0.6-2.1-0.6c-0.2,0-0.5,0-0.7,0.1c-0.5,0.1-0.9,0.4-0.9,0.9c0,0.7,0.7,0.9,1.7,1.1 + L192.4,79z"/> + <path class="st0" d="M202.2,78.7c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.3,1.8,1.2 + C202.1,78.1,202.1,78.5,202.2,78.7z M202.1,72.3c-0.3,0-0.6,0-0.9,0c-0.3,0-0.6,0-0.9,0l-0.1,0.1c-0.4,1-0.8,2-1,2.3l0.1,0.1 + c0.6,0,0.7,0,1.2,0l0.1-0.1c0.7-1.1,0.9-1.3,1.7-2.3L202.1,72.3z M203.4,81.7c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.2-0.9,0.2-1.4,0.2 + c-0.5,0-1.4-0.1-2.1-0.8c-0.5-0.6-0.6-1.4-0.6-1.9c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0.1-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1 + c-2.1,0-3.9,1.4-3.9,4.2c0,2.6,1.7,4.1,4.3,4.1c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L203.4,81.7z"/> + <path class="st0" d="M211.6,78.7c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.3,1.8,1.2 + C211.6,78.1,211.6,78.5,211.6,78.7z M212.8,81.7c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.2-0.9,0.2-1.4,0.2c-0.5,0-1.4-0.1-2.1-0.8 + c-0.5-0.6-0.6-1.4-0.6-1.9c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1c-2.1,0-3.9,1.4-3.9,4.2 + c0,2.6,1.7,4.1,4.3,4.1c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L212.8,81.7z"/> + <path class="st0" d="M51.4,99.9c-0.2,0.2-0.8,0.7-1.8,0.7c-0.8,0-1.4-0.4-1.7-0.7c-0.3-0.4-0.6-1-0.6-1.9c0-1.4,0.6-2.1,0.9-2.4 + c0.8-0.7,1.8-0.7,2.3-0.7c0.3,0,0.5,0,0.8,0C51.4,97.4,51.4,97.9,51.4,99.9z M51.3,90c0.1,0.9,0.2,1.8,0.1,3.7c-0.4,0-0.6,0-0.9,0 + c-0.8,0-2.4,0-3.5,1c-0.7,0.6-1.4,1.6-1.4,3.3c0,2.3,1.5,3.9,3.6,3.9c1.2,0,1.8-0.5,2.2-0.8l0,0.6l0.1,0.1c0.7,0,0.9,0,1.6,0 + l0.1-0.1c-0.1-1-0.1-2.2-0.1-4.5c0-1.5,0-5.3,0.1-7.4l-0.1-0.1C52.4,89.8,52.2,89.8,51.3,90L51.3,90z"/> + <path class="st0" d="M61.5,96.8c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.4,1.8,1.2C61.4,96.3,61.4,96.6,61.5,96.8z + M62.7,99.8c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.1-0.9,0.2-1.4,0.2c-0.5,0-1.4-0.1-2.1-0.8c-0.5-0.6-0.6-1.4-0.6-1.9 + c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1c-2.1,0-3.9,1.4-3.9,4.2c0,2.6,1.7,4.1,4.3,4.1 + c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L62.7,99.8z"/> + <path class="st0" d="M75.2,95.7c1.2,0.5,2.7,1.1,2.7,3.1c0,1.7-1.3,3.2-4.1,3.2c-1.7,0-2.8-0.5-3.2-0.7l-0.1-0.1 + c0.1-0.5,0.1-0.8,0.1-1.4l0.2-0.1c0.4,0.3,1.3,0.9,2.8,0.9c1.7,0,2.4-0.8,2.4-1.7c0-1.1-0.9-1.5-2-1.9l-0.8-0.3 + c-1.1-0.5-2.7-1.2-2.7-3c0-0.6,0.2-1.1,0.5-1.6c0.7-1,2.1-1.3,3.4-1.3c1.3,0,2,0.2,2.9,0.5l0.1,0.1c-0.1,0.6-0.1,0.8-0.1,1.3 + l-0.1,0.1c-0.7-0.3-1.5-0.7-2.7-0.7c-1.3,0-2.2,0.6-2.2,1.5c0,0.7,0.5,1,0.8,1.2c0.2,0.1,0.3,0.1,1.2,0.5L75.2,95.7z"/> + <path class="st0" d="M87.6,93.9c0,1.2,0,2.2,0,3.5c0,1.9,0,3,0.1,3.6c0,0.2,0,0.4,0,0.6l-0.1,0.1c-0.8,0-0.9,0-1.6,0.1l-0.1-0.1 + l0-0.6c-0.4,0.2-1.2,0.9-2.5,0.9c-0.6,0-1.3-0.1-1.8-0.5c-1-0.8-1-2.1-1-3.3v-0.9c0-2.2,0-2.4-0.1-3.2l0.1-0.1c0.8,0,0.9,0,1.7-0.1 + l0.1,0.1l-0.1,3.3c0,0.4,0,0.7,0,1.4c0,0.6,0,2,1.7,2c1,0,1.6-0.5,2-0.8c0-0.8,0-1.5,0-2.4c0-2.1,0-2.5-0.1-3.5l0.1-0.1 + c0.7,0,0.9,0,1.7-0.1L87.6,93.9z"/> + <path class="st0" d="M92.4,101.7c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.8,0.1-1.5,0.1-3.2c0-2.9,0-3.4-0.2-4.3l0.1-0.1 + c0.7-0.1,0.9-0.1,1.7-0.3l0.2,0.1c-0.1,0.8-0.1,1.6-0.1,3.6C92.4,100.2,92.4,100.6,92.4,101.7L92.4,101.7z M92.4,91.6 + c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.2,0-0.4,0-0.6c0-0.3,0-0.5,0-0.8l0.1-0.1c0.8-0.1,1-0.1,1.8-0.1l0.1,0.1c0,0.6,0,0.8,0,1.4 + L92.4,91.6z"/> + <path class="st0" d="M98.8,97.1c0.6,0.2,2.1,0.7,2.1,2.3c0,0.6-0.2,1.3-0.9,1.8c-0.9,0.7-2,0.7-2.6,0.7c-0.9,0-1.6-0.2-2.2-0.4 + c-0.1,0-0.2-0.1-0.2-0.1l-0.1-0.1c0.1-0.6,0.1-0.7,0.1-1.3l0.2,0c0.3,0.2,1,0.7,2.2,0.7c1.3,0,1.7-0.7,1.7-1.1 + c0-0.7-0.7-0.9-1.7-1.2l-0.5-0.2c-0.7-0.2-2.1-0.6-2.1-2.2c0-1.6,1.5-2.3,3.3-2.3c1.2,0,2,0.3,2.3,0.4l0.1,0.1 + c-0.1,0.6-0.1,0.6-0.1,1.2l-0.1,0.1c-0.4-0.2-1-0.6-2.1-0.6c-0.2,0-0.5,0-0.7,0.1c-0.5,0.1-0.9,0.4-0.9,0.9c0,0.6,0.7,0.9,1.7,1.1 + L98.8,97.1z"/> + <path class="st0" d="M106.5,97.1c0.6,0.2,2.1,0.7,2.1,2.3c0,0.6-0.2,1.3-0.9,1.8c-0.9,0.7-2,0.7-2.6,0.7c-0.9,0-1.6-0.2-2.2-0.4 + c-0.1,0-0.2-0.1-0.2-0.1l-0.1-0.1c0.1-0.6,0.1-0.7,0.1-1.3l0.2,0c0.3,0.2,1,0.7,2.2,0.7c1.3,0,1.7-0.7,1.7-1.1 + c0-0.7-0.7-0.9-1.7-1.2l-0.5-0.2c-0.7-0.2-2.1-0.6-2.1-2.2c0-1.6,1.4-2.3,3.3-2.3c1.2,0,2,0.3,2.3,0.4l0.1,0.1 + c-0.1,0.6-0.1,0.6-0.1,1.2l-0.1,0.1c-0.4-0.2-1-0.6-2.1-0.6c-0.2,0-0.5,0-0.7,0.1c-0.5,0.1-0.9,0.4-0.9,0.9c0,0.6,0.7,0.9,1.7,1.1 + L106.5,97.1z"/> + <path class="st0" d="M116.3,96.8c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.4,1.8,1.2 + C116.2,96.3,116.2,96.6,116.3,96.8z M117.5,99.8c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.1-0.9,0.2-1.4,0.2c-0.5,0-1.4-0.1-2.1-0.8 + c-0.5-0.6-0.6-1.4-0.6-1.9c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1c-2.1,0-3.9,1.4-3.9,4.2 + c0,2.6,1.7,4.1,4.3,4.1c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L117.5,99.8z"/> + <path class="st0" d="M131.6,97.7c0,0.3,0,1.3-0.4,2c-0.5,0.8-1.2,1-1.8,1c-0.3,0-0.7-0.1-0.9-0.2c-1.3-0.6-1.3-2.1-1.3-2.7 + c0-0.6,0.1-1.5,0.5-2.1c0.6-0.8,1.5-0.9,1.8-0.9c0.9,0,1.4,0.4,1.7,0.9C131.5,96.4,131.6,97.4,131.6,97.7z M133.4,97.7 + c0-1.1-0.2-2.1-1-2.9c-0.7-0.8-1.8-1.1-2.9-1.1c-1.6,0-2.5,0.6-3,1.1c-1.1,1-1.1,2.5-1.1,3.1c0,0.5,0,2,1.1,3.1 + c0.5,0.5,1.4,1,2.9,1c1.1,0,2.1-0.3,2.8-0.9c0.5-0.5,0.9-1.1,1-1.8C133.3,98.7,133.4,98.2,133.4,97.7z"/> + <path class="st0" d="M142,99.9c-0.1,0.7-0.1,0.7-0.1,1.4l-0.1,0.1c-0.5,0.2-1.1,0.5-2.2,0.5c-2.4,0-4-1.7-4-4c0-2.4,1.5-4.2,4-4.2 + c1,0,1.8,0.3,2.2,0.5l0.1,0.1c-0.1,0.5-0.1,0.7-0.1,1.2l-0.1,0.1c-0.5-0.4-1.1-0.6-1.8-0.6c-1.3,0-2.5,1-2.5,2.9 + c0,2.1,1.2,2.8,2.5,2.8c1.1,0,1.8-0.5,2.1-0.8L142,99.9z"/> + <path class="st0" d="M150.1,99.9c-0.1,0.7-0.1,0.7-0.1,1.4l-0.1,0.1c-0.5,0.2-1.1,0.5-2.2,0.5c-2.4,0-4-1.7-4-4 + c0-2.4,1.5-4.2,4-4.2c1,0,1.8,0.3,2.2,0.5l0.1,0.1c-0.1,0.5-0.1,0.7-0.1,1.2l-0.1,0.1c-0.5-0.4-1.1-0.6-1.8-0.6 + c-1.3,0-2.5,1-2.5,2.9c0,2.1,1.2,2.8,2.5,2.8c1.1,0,1.8-0.5,2.1-0.8L150.1,99.9z"/> + <path class="st0" d="M153.9,101.7c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.8,0.1-1.5,0.1-3.2c0-2.9,0-3.4-0.2-4.3l0.1-0.1 + c0.7-0.1,0.9-0.1,1.7-0.3l0.2,0.1c0,0.8-0.1,1.6-0.1,3.6C153.9,100.2,153.9,100.6,153.9,101.7L153.9,101.7z M153.9,91.6 + c-0.8,0-1,0-1.8,0.1l-0.1-0.1c0-0.2,0-0.4,0-0.6c0-0.3,0-0.5,0-0.8l0.1-0.1c0.8-0.1,1-0.1,1.8-0.1l0.1,0.1c0,0.6,0,0.8,0,1.4 + L153.9,91.6z"/> + <path class="st0" d="M162.3,99.9c-0.2,0.2-0.8,0.7-1.8,0.7c-0.8,0-1.4-0.4-1.7-0.7c-0.3-0.4-0.6-1-0.6-1.9c0-1.4,0.6-2.1,0.9-2.4 + c0.8-0.7,1.8-0.7,2.3-0.7c0.3,0,0.5,0,0.8,0C162.3,97.4,162.3,97.9,162.3,99.9z M162.2,90c0.1,0.9,0.2,1.8,0.1,3.7 + c-0.4,0-0.6,0-0.9,0c-0.8,0-2.4,0-3.5,1c-0.7,0.6-1.4,1.6-1.4,3.3c0,2.3,1.5,3.9,3.6,3.9c1.2,0,1.8-0.5,2.2-0.8l0,0.6l0.1,0.1 + c0.7,0,0.9,0,1.6,0l0.1-0.1c-0.1-1-0.1-2.2-0.1-4.5c0-1.5,0-5.3,0.1-7.4l-0.1-0.1C163.3,89.8,163.1,89.8,162.2,90L162.2,90z"/> + <path class="st0" d="M172.4,96.8c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.4,1.8,1.2 + C172.3,96.3,172.4,96.6,172.4,96.8z M173.6,99.8c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.1-0.9,0.2-1.4,0.2c-0.5,0-1.4-0.1-2.1-0.8 + c-0.6-0.6-0.6-1.4-0.6-1.9c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0.1-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1c-2.1,0-3.9,1.4-3.9,4.2 + c0,2.6,1.7,4.1,4.3,4.1c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L173.6,99.8z"/> + <path class="st0" d="M183.6,101.7c-0.8,0-0.9,0-1.6,0.1l-0.1-0.1c0-0.2,0-0.3,0-0.5c0-0.7,0-1.5,0-2.2c0-2.3,0-2.5-0.1-2.8 + c-0.3-1.2-1.2-1.2-1.5-1.2c-1,0-1.7,0.5-2.1,0.8c0,2.6,0,4,0.1,5.8l-0.1,0.1c-0.8,0-0.9,0-1.7,0.1l-0.1-0.1c0-0.8,0-1.7,0-2.8 + c0-2.4-0.1-3.7-0.2-4.7l0.1-0.1c0.8-0.1,1-0.2,1.7-0.3l0.1,0.1l0,0.8c0.4-0.3,1.4-0.9,2.8-0.9c0.4,0,0.9,0.1,1.3,0.3 + c0.4,0.2,0.8,0.6,0.9,1c0.2,0.5,0.2,0.9,0.2,1.8v1.8C183.7,100.4,183.7,101.1,183.6,101.7L183.6,101.7z"/> + <path class="st0" d="M190.3,100.6c0,0.5,0,0.6-0.1,1.1l-0.1,0.1c-0.3,0.1-0.6,0.1-1.2,0.1c-0.4,0-1.4,0-1.9-0.8 + c-0.3-0.4-0.3-0.8-0.3-2.6l0-3.3c-0.6,0-0.6,0-1.2,0l-0.1-0.1c0-0.5,0-0.6,0-1.1l0.1-0.1c0.4,0,0.6,0,1.1,0c0-0.3,0-0.6,0-1 + c0-0.3,0-0.6,0-0.9l0.1-0.1c0.7-0.2,0.9-0.2,1.6-0.4l0.1,0.1c0,1-0.1,1.2-0.1,2.3c0.7,0,0.9,0,1.8,0l0.1,0.1c0,0.4,0,0.6,0,1.1 + l-0.1,0.1c-0.8,0-0.9,0-1.8,0l0,2.8c0,0.2,0,1.1,0,1.3c0,1.1,0.1,1.5,1,1.5c0.3,0,0.6-0.1,0.8-0.1L190.3,100.6z"/> + <path class="st0" d="M196.9,97.5v2.5c-0.2,0.1-0.8,0.7-1.8,0.7c-1.5,0-1.5-1.3-1.5-1.4c0-1.4,1.5-1.6,3.1-1.8L196.9,97.5z + M198.5,97.1c0-0.6,0-1.5-0.1-1.9c-0.3-1.2-1.5-1.6-2.7-1.6c-1,0-1.9,0.2-2.8,0.5l-0.1,0.1c0,0.3,0,0.4,0,1.1l0.1,0.1 + c0.7-0.3,1.4-0.6,2.4-0.6c0.8,0,1.2,0.3,1.3,0.6c0.1,0.2,0.1,0.5,0.1,0.9l-0.3,0c-2.9,0.3-4.7,1-4.7,3c0,1.5,1.1,2.5,2.7,2.5 + c1.2,0,1.9-0.5,2.3-0.8l0,0.5l0.1,0.1c0.7,0,0.9,0,1.6-0.1l0.1-0.1c-0.1-1-0.1-1.2-0.1-3V97.1z"/> + <path class="st0" d="M203.3,101.7c-0.8,0-0.9,0-1.7,0.1l-0.1-0.1c0-1.1,0.1-2.4,0.1-5.4c0-2.1,0-4.3-0.2-6.3l0.1-0.1 + c0.8-0.1,1-0.1,1.8-0.3l0.1,0.1c-0.1,2-0.1,4-0.1,6C203.2,99.1,203.3,100.2,203.3,101.7L203.3,101.7z"/> + <path class="st0" d="M211.6,96.8c-1.5,0-2.1,0-4,0c0.2-1.5,1.2-2.1,2.1-2.1c0.7,0,1.4,0.4,1.8,1.2 + C211.6,96.3,211.6,96.6,211.6,96.8z M212.8,99.8c-0.2,0.2-0.6,0.4-1.2,0.7c-0.5,0.1-0.9,0.2-1.4,0.2c-0.5,0-1.4-0.1-2.1-0.8 + c-0.5-0.6-0.6-1.4-0.6-1.9c2.6,0,3.1,0,5.6,0l0.1-0.1c0-0.7,0-2.2-0.9-3.2c-0.5-0.5-1.4-1-2.6-1c-2.1,0-3.9,1.4-3.9,4.2 + c0,2.6,1.7,4.1,4.3,4.1c1.4,0,2.3-0.4,2.6-0.6l0.1-0.1c0-0.6,0-0.7,0.1-1.4L212.8,99.8z"/> + <path class="st0" d="M166.1,36.4c2.8,0.9,9.2,2.9,9.2,9.9c0,2.6-1.1,5.6-3.9,7.8c-3.7,3-8.7,3.2-11.2,3.2c-3.8,0-6.9-0.7-9.6-1.7 + c-0.4-0.1-0.7-0.3-1.1-0.4l-0.3-0.6c0.3-2.6,0.3-2.9,0.4-5.5l0.7-0.2c1.3,0.9,4.3,3.2,9.7,3.2c5.5,0,7.6-2.9,7.6-4.9 + c0-3-3-4-7.3-5.3l-2.2-0.7c-2.9-0.9-9.2-2.8-9.2-9.6c0-6.8,6.3-10.2,14.1-10.2c5.2,0,8.8,1.4,10.1,1.8l0.3,0.5 + c-0.3,2.4-0.3,2.7-0.6,5.2l-0.6,0.3c-1.8-1.1-4.5-2.6-9-2.6c-1,0-2,0.1-3,0.3c-2.1,0.5-3.8,1.9-3.8,4c0,2.8,2.9,3.7,7.2,4.9 + L166.1,36.4z"/> + <path class="st0" d="M208.2,39.1c0.1,1.4,0,5.8-1.6,8.8c-2,3.6-5.4,4.4-8,4.4c-1.4,0-2.9-0.3-4.1-0.9c-5.5-2.6-5.6-9.3-5.6-11.9 + c0-2.8,0.2-6.6,2.1-9.3c2.5-3.7,6.4-3.8,7.7-3.8c3.9,0,6.2,1.7,7.5,3.8C207.9,33,208.2,37.4,208.2,39.1z M215.8,38.8 + c-0.1-4.6-1-9.2-4.3-12.7c-3.1-3.3-7.8-4.7-12.5-4.7c-7,0-11.1,2.7-13,4.6c-4.7,4.4-4.8,10.9-4.8,13.4c0,2.2,0.1,8.9,4.8,13.5 + c2.2,2.2,6.2,4.4,12.5,4.4c4.9,0,9-1.1,12.1-4c2.3-2.2,3.8-4.7,4.6-8C215.7,43.2,215.8,41.1,215.8,38.8z"/> + <circle class="st0" cx="136.7" cy="39.4" r="4.2"/> +</g> +<g> + <path class="st1" d="M45,10.4c-0.1,5.1-0.1,8.2-0.1,12.8c0,11.1,0.2,22.1,0.8,33.2l-0.3,0.4c-5.9-0.1-7.3,0-12.6,0.2l-0.4-0.4 + c0.4-9.3,0.4-11.5,0.2-20.4c-2.8-0.1-5.6-0.1-8.4-0.1c-2.7,0-5.3,0.1-8.4,0.2c0.1,9.6,0.1,11.9,0.6,20.1L16,56.7 + c-6.2-0.1-7.4,0-12.5,0.2l-0.4-0.4c0.1-5.5,0.3-8.8,0.3-14.7c0-16.4-0.4-24.5-0.8-31.3L3,10.2c6.1,0,7.1,0,12.5-0.2l0.3,0.4 + l-0.1,17.4c2.4,0,5,0.1,7.4,0.1c3.1,0,6.2-0.1,9.3-0.1c-0.1-7.8-0.1-9.7-0.6-17.1l0.4-0.4c5.9,0,6.8,0,12.4-0.2L45,10.4z"/> + <path class="st1" d="M64.4,35.2c0.2-2,0.7-4.8,3.4-6.4c0.8-0.5,1.8-0.7,2.8-0.7c2.3,0,3.7,1.1,4.5,2.3c1,1.5,1,3,1,4.5L64.4,35.2z + M85.6,47c-2.7,1.3-5.8,2.8-10.9,2.8c-4.2,0-7.1-1.3-8.7-3.6c-1.1-1.4-1.3-2.7-1.5-4L87,41.8l0.4-0.5c-0.1-3.2-0.1-6.5-1.1-9.8 + c-2.5-7.8-7.8-9.4-10.2-9.9c-1.7-0.5-3.4-0.6-5-0.6c-11,0-18.3,6.8-18.3,18.2c0,3.1,0.6,6.3,1.7,8.6c4.1,8.9,13.6,9.7,18.6,9.7 + c5.8,0,8.3-1,12-2.4l0.4-0.5l0.5-7.4L85.6,47z"/> + <path class="st1" d="M115.1,35.2c3.9,1.4,9.2,3.3,9.2,10.5c0,0.5,0,0.9-0.1,1.5c-1.3,9.4-11.8,10.3-17.1,10.3 + c-5.1,0-8-1.1-11.5-2.2l-0.3-0.6c0.3-3.3,0.3-4,0.5-7.4l0.6-0.3c1,0.8,1.6,1.3,2.8,1.8c2.6,1.3,5.5,1.8,7.4,1.8 + c3.9,0,5.5-1.8,5.5-3.4c0-2.4-3.1-3.4-5-4l-2.7-0.9c-3.3-1.2-9.1-3.3-9.1-10.4c0-2.6,1-4.6,1.9-5.8c3.6-4.9,10.5-5.2,13.9-5.2 + c4.6,0,7.4,0.8,10.7,1.6l0.3,0.4l-0.7,7.2l-0.6,0.2c-1.7-1.1-4.5-2.8-8.7-2.8c-4.3,0-4.9,2.2-4.9,3c0,1.8,1.9,2.6,4.3,3.4 + L115.1,35.2z"/> +</g> +<path class="st0" d="M239.7,8.6c-0.1,0.3-20.4,43.4-20.4,43.4c-1.1,2.3-1.6,3.3-1.6,5.2c0,4,3,7.1,6.8,7.1c4.5,0,6.2-3.5,7.5-6 + l21.2-44.9c0.6-1.3,1.2-2.7,1.2-4.6c0-3.9-3-6.9-6.9-6.9C242.9,1.9,241.1,5.8,239.7,8.6z M220.1,57.3c0-1.4,0.3-2,1.3-4.1 + c0.1-0.2,20.4-43.3,20.4-43.3c1.4-2.9,2.7-5.6,5.8-5.6c2.6,0,4.5,2,4.5,4.6c0,1.4-0.4,2.5-1,3.6c0,0-21.2,44.9-21.2,44.9 + c-1.2,2.3-2.4,4.7-5.4,4.7C222,62,220.1,59.9,220.1,57.3z"/> +<path class="st0" d="M259.1,8.6c-0.1,0.2-20.4,43.4-20.4,43.4c-1.1,2.3-1.6,3.3-1.6,5.2c0,4,3,7.1,6.8,7.1c4.5,0,6.2-3.5,7.5-6.1 + l21.2-44.9c0.6-1.3,1.2-2.7,1.2-4.6c0-3.9-3-6.9-6.9-6.9C262.4,1.9,260.5,5.8,259.1,8.6z M239.5,57.3c0-1.4,0.3-2,1.3-4.1 + c0.1-0.1,20.3-43.3,20.3-43.3c1.4-2.9,2.7-5.6,5.8-5.6c2.6,0,4.5,2,4.5,4.6c0,1.4-0.4,2.5-1,3.6c0,0-21.1,44.7-21.2,44.9 + c-1.4,2.8-2.6,4.7-5.4,4.7C241.4,62,239.5,59.9,239.5,57.3z"/> +<g> + <g> + <path class="st0" d="M286.6,43.6c1.9,0,2.7,1,2.7,3c0,6-3.9,10.4-10.1,10.4c-6.3,0-10.6-5-10.6-11.4c0-6.4,4.3-11.4,10.6-11.4 + c4.7,0,8.5,2.2,8.5,4.4c0,1.3-0.8,2.2-1.9,2.2c-2.1,0-2.5-2.3-6.6-2.3c-3.9,0-5.8,3.4-5.8,7.1c0,3.8,1.9,7.1,5.8,7.1 + c2.4,0,5.3-1.4,5.3-4.9h-3.1c-1.3,0-2.2-0.9-2.2-2.2c0-1.3,1-2.1,2.2-2.1H286.6z"/> + <path class="st0" d="M291,37.3c0-1.5,0.8-2.7,2.4-2.7h7.7c1.5,0,2.2,1,2.2,2.1c0,1.1-0.7,2.1-2.2,2.1h-5.4v4.5h5.1 + c1.5,0,2.3,1.1,2.3,2.1c0,1-0.8,2.1-2.3,2.1h-5.1v4.7h5.7c1.5,0,2.2,1,2.2,2.1c0,1.1-0.7,2.1-2.2,2.1h-8c-1.4,0-2.4-0.9-2.4-2.3 + V37.3z"/> + <path class="st0" d="M305.1,36.9c0-1.5,1-2.4,2.3-2.4c0.6,0,1.5,0.5,1.9,1l9.8,13.1h0.1V36.9c0-1.5,1-2.4,2.3-2.4 + c1.3,0,2.3,0.9,2.3,2.4v17.5c0,1.5-1,2.4-2.3,2.4c-0.6,0-1.5-0.5-1.9-1l-9.8-12.9h-0.1v11.5c0,1.5-1,2.4-2.3,2.4s-2.3-0.9-2.3-2.4 + V36.9z"/> + <path class="st0" d="M326.4,37.3c0-1.5,0.8-2.7,2.4-2.7h7.7c1.5,0,2.2,1,2.2,2.1c0,1.1-0.7,2.1-2.2,2.1h-5.4v4.5h5.1 + c1.5,0,2.3,1.1,2.3,2.1c0,1-0.8,2.1-2.3,2.1h-5.1v4.7h5.7c1.5,0,2.2,1,2.2,2.1c0,1.1-0.7,2.1-2.2,2.1h-8c-1.4,0-2.4-0.9-2.4-2.3 + V37.3z M334.9,29.5l0.2,0.1c0.5,0.3,0.9,0.8,0.9,1.2c0,1.1-0.7,2.3-1.6,2.3c-0.6,0-0.3,0-1.2-0.3l-3.5-1.4 + c-0.9-0.3-1.3-0.9-1.3-1.8c0-0.8,0.7-1.9,1.7-1.9c0.3,0,0.7,0.1,1.2,0.3L334.9,29.5z"/> + <path class="st0" d="M339.6,37.8c-0.2-0.4-0.2-0.7-0.2-1.1c0-1.3,1.1-2.2,2.4-2.2c1,0,1.7,0.7,2.1,1.5l4.8,12.8l4.8-12.8 + c0.4-0.8,1.1-1.5,2.1-1.5c1.2,0,2.4,0.9,2.4,2.2c0,0.4-0.1,0.7-0.2,1.1L351,55c-0.4,1-0.9,1.8-2.3,1.8c-1.4,0-1.9-0.8-2.3-1.8 + L339.6,37.8z"/> + <path class="st0" d="M359.2,37.3c0-1.5,0.8-2.7,2.4-2.7h7.7c1.5,0,2.2,1,2.2,2.1c0,1.1-0.7,2.1-2.2,2.1h-5.4v4.5h5.1 + c1.5,0,2.3,1.1,2.3,2.1c0,1-0.8,2.1-2.3,2.1h-5.1v4.7h5.7c1.5,0,2.2,1,2.2,2.1c0,1.1-0.7,2.1-2.2,2.1h-8c-1.4,0-2.4-0.9-2.4-2.3 + V37.3z"/> + </g> +</g> +</svg> diff --git a/doc/images/logo_hepia.pdf b/doc/images/logo_hepia.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7fa20963c763a6c41dfb3a462196e4d3e850200a Binary files /dev/null and b/doc/images/logo_hepia.pdf differ diff --git a/doc/images/logo_hepia.pdf_tex b/doc/images/logo_hepia.pdf_tex new file mode 100644 index 0000000000000000000000000000000000000000..c531956871d067f49e69126dd5aa95659607de47 --- /dev/null +++ b/doc/images/logo_hepia.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.0 (4035a4fb49, 2020-05-01), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'logo_hepia.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{<filename>.pdf_tex} +%% instead of +%% \includegraphics{<filename>.pdf} +%% To scale the image, write +%% \def\svgwidth{<desired width>} +%% \input{<filename>.pdf_tex} +%% instead of +%% \includegraphics[width=<desired width>]{<filename>.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{<path to file>}{<filename>.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{<path to file>/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{209.145bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.2545015)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{logo_hepia.pdf}}% + \end{picture}% +\endgroup% diff --git a/doc/images/logo_hepia.svg b/doc/images/logo_hepia.svg new file mode 100644 index 0000000000000000000000000000000000000000..f42885519fa444621e0ab171c235de96cfdd2ae1 --- /dev/null +++ b/doc/images/logo_hepia.svg @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg version="1.1" viewBox="0 0 278.9 70.92" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <metadata> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title>logo_hepia</dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs> + <style>.cls-1{isolation:isolate;}.cls-2{fill:#e2001a;}.cls-3{mix-blend-mode:lighten;}</style> + </defs> + <title>logo_hepia</title> + <g class="cls-1"> + <g data-name="Calque 1"> + <rect class="cls-2" y="26.59" width="66.01" height="4.35"/> + <path transform="translate(-239.85 -265.76)" d="M303.58,318.65h-1.39v-5.45h-3.88v5.45h-1.39v-11.3h1.39V312h3.88v-4.62h1.39Z"/> + <path transform="translate(-239.85 -265.76)" d="M305.59,312.73c0-1.93.82-2.79,2.85-2.79,2.58,0,2.58,1.55,2.58,2.44v4.73c0,.35,0,.68.41.68a.48.48,0,0,0,.32-.08v1a4.88,4.88,0,0,1-.78.08c-.51,0-1.14,0-1.2-1.09h0a2.4,2.4,0,0,1-2,1.22c-1.58,0-2.31-.95-2.31-2.47a2.2,2.2,0,0,1,1.6-2.34l1.79-.54c1-.3,1-.57,1-1.28s-.48-1.25-1.36-1.25a1.45,1.45,0,0,0-1.46,1.66v.08Zm4.1,1.3c-.49.52-1.66.63-2.26,1a1.35,1.35,0,0,0-.65,1.35c0,.86.3,1.46,1.2,1.46a1.73,1.73,0,0,0,1.71-1.62Z"/> + <path transform="translate(-239.85 -265.76)" d="m318.68 318.65h-1.27v-1a2.27 2.27 0 0 1-2.06 1.22c-2.23 0-2.23-1.69-2.23-2.69v-6h1.33v5.82c0 0.65 0 1.71 1.25 1.71a1.64 1.64 0 0 0 1.68-1.71v-5.86h1.33z"/> + <path transform="translate(-239.85 -265.76)" d="M321.16,307.7h1.33v2.47H324v1h-1.47v5.45c0,.68.17,1,.87,1a4.08,4.08,0,0,0,.59,0v1.09a5.46,5.46,0,0,1-1.08.1c-1.38,0-1.71-.57-1.71-1.68v-5.86h-1.23v-1h1.23Z"/> + <path transform="translate(-239.85 -265.76)" d="M326.08,314.57c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.58,3-4.58s2.83,2.27,2.83,4.09v.54Zm3.07-1v-.46c0-.95-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.32Z"/> + <path transform="translate(-239.85 -265.76)" d="M337.6,314.57c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2H342a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.58,3-4.58s2.83,2.27,2.83,4.09v.54Zm3.07-1v-.46c0-.95-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.32Zm-1.22-6.78H341L339.29,309h-1Z"/> + <path transform="translate(-239.85 -265.76)" d="M347.82,312.75c0-.82-.33-1.76-1.35-1.76-.82,0-1.66.41-1.66,3.52,0,1.11,0,3.32,1.61,3.32,1.14,0,1.39-1.2,1.39-2.12h1.33c0,1.35-.66,3.17-2.79,3.17s-2.94-1.44-2.94-4.35c0-2.12.41-4.58,3-4.58a2.56,2.56,0,0,1,2.71,2.8Z"/> + <path transform="translate(-239.85 -265.76)" d="m353.52 309.95c2.45 0 3.06 2.07 3.06 4.46s-0.62 4.46-3.06 4.46-3.06-2.07-3.06-4.46 0.62-4.46 3.06-4.46zm1.66 4.46c0-1.84-0.27-3.42-1.69-3.42s-1.63 1.58-1.63 3.42 0.27 3.42 1.63 3.42 1.69-1.58 1.69-3.42z"/> + <path transform="translate(-239.85 -265.76)" d="m358.17 307.35h1.33v11.3h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="M362.52,314.57c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.58,3-4.58S367,312.21,367,314v.54Zm3.07-1v-.46c0-.95-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.32Z"/> + <path transform="translate(-239.85 -265.76)" d="m378.53 318.65h-1.27v-1a1.92 1.92 0 0 1-1.84 1.27c-2 0-2.77-1.79-2.77-4.46 0-1.77 0.29-4.46 2.68-4.46a2.06 2.06 0 0 1 1.87 1.19v-3.78h1.33zm-3-0.92c1.47 0 1.71-1.39 1.71-3.33 0-1.65-0.29-3.32-1.71-3.32-1.23 0-1.55 1.3-1.55 3.32s0.36 3.34 1.59 3.34z"/> + <path transform="translate(-239.85 -265.76)" d="m385.71 318.65h-1.27v-1a2.27 2.27 0 0 1-2.06 1.22c-2.23 0-2.23-1.69-2.23-2.69v-6h1.33v5.82c0 0.65 0 1.71 1.25 1.71a1.64 1.64 0 0 0 1.68-1.71v-5.86h1.33z"/> + <path transform="translate(-239.85 -265.76)" d="m391.94 310.17h1.27v1a1.92 1.92 0 0 1 1.84-1.27c2 0 2.77 1.79 2.77 4.31 0 1.93-0.57 4.62-2.77 4.62a1.92 1.92 0 0 1-1.77-1.19v3.75h-1.33zm3 7.57c1.23 0 1.55-1.3 1.55-3.48 0-1.87-0.32-3.17-1.55-3.17-1.47 0-1.71 1.39-1.71 3.32-0.03 1.65 0.25 3.33 1.68 3.33z"/> + <path transform="translate(-239.85 -265.76)" d="M399.42,312.73c0-1.93.82-2.79,2.85-2.79,2.58,0,2.58,1.55,2.58,2.44v4.73c0,.35,0,.68.41.68a.48.48,0,0,0,.32-.08v1a4.89,4.89,0,0,1-.78.08c-.51,0-1.14,0-1.2-1.09h0a2.4,2.4,0,0,1-2,1.22c-1.58,0-2.31-.95-2.31-2.47a2.2,2.2,0,0,1,1.6-2.34l1.79-.54c1-.3,1-.57,1-1.28s-.47-1.25-1.36-1.25a1.45,1.45,0,0,0-1.46,1.66v.08Zm4.1,1.3c-.49.52-1.66.63-2.26,1a1.35,1.35,0,0,0-.65,1.35c0,.86.3,1.46,1.2,1.46a1.73,1.73,0,0,0,1.71-1.62Z"/> + <path transform="translate(-239.85 -265.76)" d="m406.2 310.17h1.46l1.68 6.81 1.49-6.81h1.46l-2.45 9.05c-0.32 1.17-0.67 2.22-2.26 2.22h-1v-1a5 5 0 0 0 0.78 0 1 1 0 0 0 1-0.82l0.25-0.74z"/> + <path transform="translate(-239.85 -265.76)" d="M417.25,312.65c0-1.08-.29-1.66-1.25-1.66a1.22,1.22,0,0,0-1.38,1.3c0,1,1,1.19,2.09,1.54s2.07.71,2.07,2.39a2.48,2.48,0,0,1-2.74,2.66c-2.88,0-2.91-2.14-2.91-3h1.33c0,1,.29,2,1.58,2a1.33,1.33,0,0,0,1.41-1.41c0-1.14-1-1.38-2.07-1.73s-2.09-.65-2.09-2.41c0-1.58,1.23-2.34,2.71-2.34,2.47,0,2.56,1.71,2.58,2.71Z"/> + <path transform="translate(-239.85 -265.76)" d="M420.19,312.73c0-1.93.82-2.79,2.85-2.79,2.58,0,2.58,1.55,2.58,2.44v4.73c0,.35,0,.68.41.68a.49.49,0,0,0,.32-.08v1a4.9,4.9,0,0,1-.78.08c-.51,0-1.14,0-1.2-1.09h0a2.4,2.4,0,0,1-2,1.22c-1.58,0-2.31-.95-2.31-2.47a2.2,2.2,0,0,1,1.6-2.34l1.79-.54c1-.3,1-.57,1-1.28S423.87,311,423,311a1.45,1.45,0,0,0-1.46,1.66v.08Zm4.1,1.3c-.49.52-1.66.63-2.26,1a1.35,1.35,0,0,0-.65,1.35c0,.86.3,1.46,1.2,1.46a1.73,1.73,0,0,0,1.71-1.62Z"/> + <path transform="translate(-239.85 -265.76)" d="m433.11 318.12c0 2.53-1.17 3.45-2.88 3.45a2.46 2.46 0 0 1-2.79-2.12h1.33c0.06 0.78 0.67 1.08 1.36 1.08 1.71 0 1.65-1.31 1.65-1.9v-1.11a2 2 0 0 1-1.92 1.14c-2.47 0-2.63-3.12-2.63-4.24 0-2.29 0.62-4.46 2.77-4.46a1.91 1.91 0 0 1 1.84 1.3v-1.08h1.27zm-4.51-3.7c0 1.38 0.21 3.1 1.54 3.1s1.72-1.36 1.72-3.1-0.29-3.32-1.71-3.32c-1.24-0.01-1.55 1.28-1.55 3.31z"/> + <path transform="translate(-239.85 -265.76)" d="M436.31,314.57c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.95-1.44-2.95-4.35,0-2.12.41-4.58,3-4.58s2.83,2.27,2.83,4.09v.54Zm3.07-1v-.46c0-.95-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.32Z"/> + <path transform="translate(-239.85 -265.76)" d="M442.21,317h1.46v1.38c0,1.2-.09,2.28-1.46,2.64v-.74a1.12,1.12,0,0,0,.7-1.22v-.38h-.7Z"/> + <path transform="translate(-239.85 -265.76)" d="m454 318.65h-1.27v-1a1.92 1.92 0 0 1-1.84 1.27c-2 0-2.77-1.79-2.77-4.46 0-1.77 0.29-4.46 2.68-4.46a2.06 2.06 0 0 1 1.87 1.19v-3.78h1.33zm-3-0.92c1.47 0 1.71-1.39 1.71-3.33 0-1.65-0.29-3.32-1.71-3.32-1.24 0-1.55 1.3-1.55 3.32s0.4 3.34 1.64 3.34z"/> + <path transform="translate(-239.85 -265.76)" d="M319.95,325.16h1.46v1.38c0,1.2-.09,2.28-1.46,2.64v-.74a1.12,1.12,0,0,0,.7-1.22v-.38h-.7Z"/> + <path transform="translate(-239.85 -265.76)" d="m460.36 307.35h1.33v1.52h-1.33zm0 2.82h1.33v8.48h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="m463.86 310.17h1.27v1a2.27 2.27 0 0 1 2.06-1.22c2.23 0 2.23 1.7 2.23 2.69v6h-1.33v-5.84c0-0.65 0-1.71-1.25-1.71a1.64 1.64 0 0 0-1.68 1.71v5.86h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="m477.13 318.12c0 2.53-1.17 3.45-2.88 3.45a2.46 2.46 0 0 1-2.79-2.12h1.33c0.06 0.78 0.66 1.08 1.36 1.08 1.71 0 1.65-1.31 1.65-1.9v-1.11a2 2 0 0 1-1.92 1.14c-2.47 0-2.63-3.12-2.63-4.24 0-2.29 0.62-4.46 2.77-4.46a1.91 1.91 0 0 1 1.84 1.3v-1.08h1.27zm-4.51-3.7c0 1.38 0.21 3.1 1.54 3.1s1.73-1.36 1.73-3.1-0.29-3.32-1.71-3.32c-1.25-0.01-1.57 1.28-1.57 3.31z"/> + <path transform="translate(-239.85 -265.76)" d="M480.32,314.57c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.58,3-4.58s2.83,2.27,2.83,4.09v.54Zm3.07-1v-.46c0-.95-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.32Zm-1.22-6.78h1.55L482,309h-1Z"/> + <path transform="translate(-239.85 -265.76)" d="m486.59 310.17h1.27v1a2.27 2.27 0 0 1 2.06-1.22c2.23 0 2.23 1.7 2.23 2.69v6h-1.33v-5.84c0-0.65 0-1.71-1.25-1.71a1.64 1.64 0 0 0-1.68 1.71v5.86h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="m494.35 307.35h1.33v1.52h-1.33zm0 2.82h1.33v8.48h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="M498.79,314.57c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.95-1.44-2.95-4.35,0-2.12.41-4.58,3-4.58s2.83,2.27,2.83,4.09v.54Zm3.07-1v-.46c0-.95-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.32Z"/> + <path transform="translate(-239.85 -265.76)" d="M504.89,310.17h1.33v1.27h0c.38-.81.89-1.49,1.84-1.49a1.36,1.36,0,0,1,.59.1v1.3a3.59,3.59,0,0,0-.71-.06,1.89,1.89,0,0,0-1.74,2v5.37h-1.33Z"/> + <path transform="translate(-239.85 -265.76)" d="M510,307.35h1.33v1.52H510Zm0,2.82h1.33v8.48H510Z"/> + <path transform="translate(-239.85 -265.76)" d="M514.28,314.57c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.08,0-2.95-1.44-2.95-4.35,0-2.12.41-4.58,3-4.58s2.83,2.27,2.83,4.09v.54Zm3.07-1v-.46c0-.95-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.32Z"/> + <path transform="translate(-239.85 -265.76)" d="M298,332.38c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.57,3-4.57s2.83,2.26,2.83,4.08v.54Zm3.07-1v-.46c0-1-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.31Z"/> + <path transform="translate(-239.85 -265.76)" d="M304.64,325.51H306V328h1.47v1H306v5.45c0,.68.17,1,.87,1a4.46,4.46,0,0,0,.59,0v1.09a5.68,5.68,0,0,1-1.08.09c-1.38,0-1.71-.57-1.71-1.68V329H303.4v-1h1.23Z"/> + <path transform="translate(-239.85 -265.76)" d="m317.76 336.46h-1.26v-1a1.92 1.92 0 0 1-1.84 1.27c-2 0-2.77-1.79-2.77-4.46 0-1.77 0.29-4.46 2.68-4.46a2.06 2.06 0 0 1 1.87 1.19v-3.79h1.33zm-3-0.92c1.47 0 1.71-1.39 1.71-3.33 0-1.64-0.29-3.32-1.71-3.32-1.24 0-1.55 1.3-1.55 3.32s0.36 3.33 1.59 3.33z"/> + <path transform="translate(-239.85 -265.76)" d="M456.23,307.35h1.46v1.38c0,1.2-.1,2.28-1.46,2.64v-.74a1.12,1.12,0,0,0,.7-1.22V309h-.7Z"/> + <path transform="translate(-239.85 -265.76)" d="M323,330.54c0-1.93.82-2.79,2.85-2.79,2.58,0,2.58,1.55,2.58,2.44v4.73c0,.35,0,.68.41.68a.47.47,0,0,0,.32-.08v1a4.9,4.9,0,0,1-.78.08c-.51,0-1.14,0-1.2-1.09h0a2.4,2.4,0,0,1-2,1.22c-1.58,0-2.31-.95-2.31-2.47a2.2,2.2,0,0,1,1.6-2.34l1.79-.54c1-.3,1-.57,1-1.28s-.48-1.25-1.36-1.25a1.45,1.45,0,0,0-1.46,1.66v.08Zm4.1,1.3c-.49.52-1.66.63-2.26,1a1.36,1.36,0,0,0-.65,1.35c0,.85.3,1.46,1.2,1.46a1.73,1.73,0,0,0,1.71-1.62Z"/> + <path transform="translate(-239.85 -265.76)" d="M330.54,328h1.33v1.27h0c.38-.81.89-1.49,1.84-1.49a1.37,1.37,0,0,1,.59.09v1.3a3.63,3.63,0,0,0-.71-.06,1.89,1.89,0,0,0-1.74,2v5.37h-1.33Z"/> + <path transform="translate(-239.85 -265.76)" d="M339.28,330.56c0-.82-.33-1.76-1.35-1.76-.82,0-1.66.41-1.66,3.51,0,1.11,0,3.32,1.61,3.32,1.14,0,1.39-1.2,1.39-2.12h1.33c0,1.35-.66,3.17-2.79,3.17s-2.94-1.44-2.94-4.35c0-2.12.41-4.57,3-4.57a2.56,2.56,0,0,1,2.71,2.8Z"/> + <path transform="translate(-239.85 -265.76)" d="m342.34 325.16h1.33v3.79a2.45 2.45 0 0 1 2-1.19c2.18 0 2.18 1.69 2.18 2.69v6h-1.25v-5.86c0-0.65 0-1.71-1.25-1.71a1.64 1.64 0 0 0-1.68 1.71v5.86h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="m349.85 325.16h1.33v1.52h-1.33zm0 2.82h1.33v8.49h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="M353.74,325.51h1.33V328h1.47v1h-1.47v5.45c0,.68.17,1,.87,1a4.45,4.45,0,0,0,.59,0v1.09a5.68,5.68,0,0,1-1.08.09c-1.38,0-1.71-.57-1.71-1.68V329h-1.23v-1h1.23Z"/> + <path transform="translate(-239.85 -265.76)" d="M358.9,332.38c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.57,3-4.57s2.83,2.26,2.83,4.08v.54Zm3.07-1v-.46c0-1-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.31Z"/> + <path transform="translate(-239.85 -265.76)" d="M369.21,330.56c0-.82-.33-1.76-1.35-1.76-.82,0-1.66.41-1.66,3.51,0,1.11,0,3.32,1.61,3.32,1.14,0,1.39-1.2,1.39-2.12h1.33c0,1.35-.66,3.17-2.79,3.17s-2.94-1.44-2.94-4.35c0-2.12.41-4.57,3-4.57a2.55,2.55,0,0,1,2.71,2.8Z"/> + <path transform="translate(-239.85 -265.76)" d="M372.49,325.51h1.33V328h1.47v1h-1.47v5.45c0,.68.17,1,.87,1a4.45,4.45,0,0,0,.59,0v1.09a5.68,5.68,0,0,1-1.08.09c-1.38,0-1.71-.57-1.71-1.68V329h-1.23v-1h1.23Z"/> + <path transform="translate(-239.85 -265.76)" d="M382.13,336.46h-1.27v-1h0a2.27,2.27,0,0,1-2.06,1.22c-2.23,0-2.23-1.69-2.23-2.69v-6h1.33v5.86c0,.65,0,1.71,1.25,1.71a1.64,1.64,0,0,0,1.68-1.71V328h1.33Z"/> + <path transform="translate(-239.85 -265.76)" d="M384.22,328h1.33v1.27h0c.38-.81.89-1.49,1.84-1.49a1.37,1.37,0,0,1,.59.09v1.3a3.63,3.63,0,0,0-.71-.06,1.89,1.89,0,0,0-1.74,2v5.37h-1.33Z"/> + <path transform="translate(-239.85 -265.76)" d="M389.95,332.38c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.57,3-4.57s2.83,2.26,2.83,4.08v.54Zm3.07-1v-.46c0-1-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.31Z"/> + <path transform="translate(-239.85 -265.76)" d="m405.7 336.46h-1.27v-1a1.92 1.92 0 0 1-1.84 1.27c-2 0-2.77-1.79-2.77-4.46 0-1.77 0.29-4.46 2.68-4.46a2.06 2.06 0 0 1 1.87 1.19v-3.79h1.33zm-3-0.92c1.47 0 1.71-1.39 1.71-3.33 0-1.64-0.29-3.32-1.71-3.32-1.23 0-1.55 1.3-1.55 3.32s0.36 3.33 1.59 3.33z"/> + <path transform="translate(-239.85 -265.76)" d="M408.57,332.38c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2H413a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.57,3-4.57S413,330,413,331.84v.54Zm3.07-1v-.46c0-1-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.31Z"/> + <path transform="translate(-239.85 -265.76)" d="M423.82,328.29c-.06-1.19-.51-2.21-1.88-2.21-1.93,0-2.18,2.12-2.18,4.73s.25,4.73,2.18,4.73,2.08-2.31,2.08-3.82h-2.23v-1.14h3.5v5.87h-1v-1.54h0a2.51,2.51,0,0,1-2.44,1.76c-2.94,0-3.47-2.83-3.47-5.87,0-2.85.52-5.87,3.64-5.87a3.11,3.11,0,0,1,3.34,3.36Z"/> + <path transform="translate(-239.85 -265.76)" d="M428.19,332.38c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.57,3-4.57s2.83,2.26,2.83,4.08v.54Zm3.07-1v-.46c0-1-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.31Z"/> + <path transform="translate(-239.85 -265.76)" d="m434.13 328h1.27v1a2.27 2.27 0 0 1 2.06-1.22c2.23 0 2.23 1.69 2.23 2.69v6h-1.33v-5.86c0-0.65 0-1.71-1.25-1.71a1.64 1.64 0 0 0-1.68 1.71v5.86h-1.33z"/> + <path transform="translate(-239.85 -265.76)" d="M442.58,332.38c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2H447a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.95-1.44-2.95-4.35,0-2.12.41-4.57,3-4.57S447,330,447,331.84v.54Zm1.22-7.82,1.11,2.25H444l-1.71-2.25Zm1.85,6.78v-.46c0-1-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.31Z"/> + <path transform="translate(-239.85 -265.76)" d="m447.89 328h1.46l1.58 6.81 1.58-6.81h1.49l-2.3 8.49h-1.52z"/> + <path transform="translate(-239.85 -265.76)" d="M456.24,332.38c0,1.3,0,3.26,1.63,3.26,1.27,0,1.44-1.33,1.44-2h1.33a2.87,2.87,0,0,1-2.85,3c-2.07,0-2.94-1.44-2.94-4.35,0-2.12.41-4.57,3-4.57s2.83,2.26,2.83,4.08v.54Zm3.07-1v-.46c0-1-.3-2.07-1.47-2.07-1.39,0-1.55,1.71-1.55,2.22v.31Z"/> + <g class="cls-3"> + <path transform="translate(-239.85 -265.76)" d="M299.94,265.94V271h0a3.06,3.06,0,0,1,2.87-1.51,3,3,0,0,1,2.22.79,3.56,3.56,0,0,1,.78,2.56v8.74h-3v-8.13a2,2,0,0,0-.31-1.28,1.23,1.23,0,0,0-1-.36q-1.6,0-1.6,2v7.82h-3V265.94Z"/> + <path transform="translate(-239.85 -265.76)" d="M335,277.09a6.61,6.61,0,0,0,.08,1,3.34,3.34,0,0,0,.25.88,1.66,1.66,0,0,0,.46.61,1.08,1.08,0,0,0,.7.23,1.23,1.23,0,0,0,1.12-.55,4,4,0,0,0,.48-1.67h2.72a4.73,4.73,0,0,1-1.1,3.13,4.18,4.18,0,0,1-3.18,1.07,5,5,0,0,1-2.56-.55,3.39,3.39,0,0,1-1.36-1.45,5.67,5.67,0,0,1-.54-2q-.1-1.12-.1-2.24a15.38,15.38,0,0,1,.16-2.28,5.5,5.5,0,0,1,.66-2,3.57,3.57,0,0,1,1.41-1.36,5.12,5.12,0,0,1,2.45-.5,4.77,4.77,0,0,1,2.16.43,3.26,3.26,0,0,1,1.33,1.21,5.05,5.05,0,0,1,.66,1.88,15.85,15.85,0,0,1,.18,2.46v.68h-6Zm3-3.93a3,3,0,0,0-.23-.88,1.23,1.23,0,0,0-.46-.55,1.4,1.4,0,0,0-.76-.19,1.28,1.28,0,0,0-.76.21,1.5,1.5,0,0,0-.47.55,2.73,2.73,0,0,0-.25.76,4.58,4.58,0,0,0-.08.83v.46h3.09Q338.07,273.68,338,273.16Z"/> + <path transform="translate(-239.85 -265.76)" d="M370,269.8V271h0a3.31,3.31,0,0,1,1.13-1.19,3,3,0,0,1,1.54-.36,3,3,0,0,1,2.74,1.46,9.63,9.63,0,0,1,.88,4.74,9.43,9.43,0,0,1-.88,4.71,3,3,0,0,1-2.74,1.42,2.79,2.79,0,0,1-2.54-1.34h0v4.89h-3V269.8Zm.43,8.8a1.25,1.25,0,0,0,1.3,1,1.24,1.24,0,0,0,1.28-1,14.42,14.42,0,0,0,0-5.81,1.24,1.24,0,0,0-1.28-1,1.25,1.25,0,0,0-1.3,1,14.39,14.39,0,0,0,0,5.81Z"/> + <path transform="translate(-239.85 -265.76)" d="M405.73,265.76v2.59h-3v-2.59Zm0,4v11.79h-3V269.8Z"/> + <path transform="translate(-239.85 -265.76)" d="M432.38,273.13a4,4,0,0,1,.33-1.72,3,3,0,0,1,.89-1.12,3.51,3.51,0,0,1,1.31-.61,6.72,6.72,0,0,1,1.61-.19,7.48,7.48,0,0,1,2.19.26,3,3,0,0,1,1.29.75,2.49,2.49,0,0,1,.62,1.15,6.06,6.06,0,0,1,.16,1.46v6.2a8.39,8.39,0,0,0,.08,1.29,4.52,4.52,0,0,0,.3,1h-2.89a2.51,2.51,0,0,1-.23-.6c-.05-.21-.1-.42-.14-.62h0a2.57,2.57,0,0,1-1.22,1.19,4.92,4.92,0,0,1-1.79.27,3,3,0,0,1-1.34-.27,2.25,2.25,0,0,1-.88-.76,3.36,3.36,0,0,1-.48-1.08,4.77,4.77,0,0,1-.15-1.19,5.17,5.17,0,0,1,.18-1.44,2.77,2.77,0,0,1,.54-1,2.93,2.93,0,0,1,.92-.71,7.36,7.36,0,0,1,1.35-.5l1.71-.46a1.82,1.82,0,0,0,.94-.48,1.35,1.35,0,0,0,.26-.9,1.62,1.62,0,0,0-.32-1.06,1.34,1.34,0,0,0-1.08-.38,1.3,1.3,0,0,0-1.05.42,1.68,1.68,0,0,0-.35,1.12v.33h-2.72Zm4.87,2.95a4.28,4.28,0,0,1-.64.21,2.33,2.33,0,0,0-1.32.66,1.86,1.86,0,0,0-.39,1.25,2.38,2.38,0,0,0,.26,1.16.92.92,0,0,0,.88.48,2.18,2.18,0,0,0,.63-.1,1.79,1.79,0,0,0,.6-.32,1.68,1.68,0,0,0,.45-.57,1.83,1.83,0,0,0,.17-.83v-2.32A2.7,2.7,0,0,1,437.25,276.07Z"/> + </g> + </g> + </g> +</svg> diff --git a/doc/rapport.gpp.md b/doc/rapport.gpp.md index 9323ab327e036d11ded48d2f4670c519d6de376d..18006b897abc522dbe8e27d83d6ebedfab12cfee 100644 --- a/doc/rapport.gpp.md +++ b/doc/rapport.gpp.md @@ -5,26 +5,19 @@ }--- documentclass: memoir lang: fr-CH -title: Travail de bachelor -subtitle: | +title: | Bootiful\ Déploiement d'OS à choix durant le processus de boot -author: | - Haute école du paysage, d'ingénierie et d'architecture de Genève\ - \ - Étudiant: Dimitri Lizzi\ - Professeur référent: Florent Gluck -date: | - août 2020 +author: Dimitri Lizzi +advisor: Florent Glück +orientation: logiciels et systèmes complexes +date: Août 2020 +keywords: [Bachelor, HEPIA, HESSO, Bootiful] geometry: margin=2.5cm,includefoot,includehead papersize: a4 numbersections: true fontsize: 12pt -mainfont: lmroman12-regular.otf -monofont: lmmono12-regular.otf -monofontoptions: Scale=0.75 output: pdf_document -linkcolor: cyan header-includes: | \usepackage{pdfpages} \usepackage{fancyhdr} @@ -32,7 +25,7 @@ header-includes: | \usepackage{float} \usepackage{lastpage} \usepackage{fvextra} - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{frame=single,breaklines,commandchars=\\\{\}} + \DefineVerbatimEnvironment{Highlighting}{Verbatim}{frame=single,breaklines,commandchars=\\\{\},fontsize=\footnotesize} \pagestyle{fancy} \setlength{\headheight}{14pt} @@ -55,6 +48,7 @@ header-includes: | \OnehalfSpacing abstract: | + \pagebreak TODO: Abstract + illustration --- !!comment{ @@ -515,6 +509,82 @@ il comporte de nombreuses limitations auxquelles il faudrait palier: # Recherche et développement +## Compatibilité !!acronym{EFI} + +Lors des tests du système initial sur les PC fournis par l'école (DELL +Optiplex 7060 micro), il s'est avéré que bien que le système de +déploiement était fonctionnel, l'initialisation des images +d'!!acronym{OS} qui venaient d'être déployées par le logiciel d'amorçage +!!acronym{GRUB} ne fonctionnait pas: un écran noir était affiché, avec +parfois une suite de caractères étranges affichée à l'écran, parfois +non, alors que sur des machines virtuelles _VirtualBox_, le démarrage +des mêmes images ne posait aucun problème. + +Ces mini-ordinateurs sont capables de démarrer sur le réseau avec le +protocole !!acronym{PXE} en mode émulation _legacy_ ou en mode natif +!!acronym{EFI}. Le système initial fonctionne uniquement en mode +_legacy_ et il est soupçonné que c'est un bug ou une limitation dans +l'émulation du mode _legacy_ sur ces machines qui empêchait le démarrage +de l'!!acronym{OS} déployé, bien qu'il n'ait pas été possible de le +prouver avec certitude. + +Cela a conduit à effectuer un autre test sur un ordinateur portable +personnel à disposition (Lenovo U530), sur lequel il s'est avéré que le +boot !!acronym{PXE} _legacy_ n'était même pas supporté: seul le +démarrage en mode !!acronym{EFI} était possible. + +À ce moment, il a été décidé de modifier le système pour le rendre +compatible !!acronym{EFI}/!!acronym{UEFI}, en partant du principe qu'il +serait utilisé sur des !!acronym{PC} récents qui sont compatibles avec +ce mode de démarrage. + +La première étape de cette transition vers !!acronym{EFI} a été de +recompiler le logiciel d'amorçage !!acronym{GRUB} dans sa version +!!acronym{EFI} pour une architecture x86 64 bits. Jusqu'à présent, +l'exécutable déjà compilé de !!acronym{GRUB} présent dans les dossiers +du projet initial avait été utilisé. Il avait été compilé pour une +architecture x86 32 bits en mode !!acronym{PC} _legacy_ uniquement. La +compilation du système est nécessaire car le système de déploiement +initial comporte un module !!acronym{GRUB} développé spécifiquement pour +le projet, qui permet d'effectuer la vérification et l'effacement de la +signature à la fin du disque et de changer l'option de démarrage par +défaut en fonction de sa présence. Il n'est donc pas possible d'utiliser +un exécutable déjà compilé de !!acronym{GRUB} car il faut que ce module +soit aussi compilé. + +Dans le projet initial, le code source de !!acronym{GRUB} dans sa +version 2.02 avait simplement été recopié dans un dossier du dépôt git, +le fichier source du module de vérification de la signature `isign.c` +avait été rajouté au code source et les fichiers de `Makefile` avaient +été modifiés pour que le nouveau module soit compilé. Le problème avec +cette approche est qu'il est difficile de mettre à jour !!acronym{GRUB} +sur une nouvelle version. + +Une nouvelle approche a été choisie pour intégrer le module `isign` à +!!acronym{GRUB}, qui permet de mettre à jour plus facilement +!!acronym{GRUB}, qui a d'ailleurs été utilisé en version 2.04, la +dernière version sortie au moment où cela a été fait. La nouvelle +approche est la suivante: + +1. Un clone du dépôt officiel de !!acronym{GRUB} a été créé sur le + serveur git de !!acronym{HEPIA}. Il a été nommé `bootiful-grub`. +2. Un commit a été fait sur ce clone du dépôt git, contenant l'ajout du + fichier source `isign.c` et la modification du fichier générant le + `Makefile` pour prendre en compte ce module lors de la compilation. +3. Le dépôt git cloné a été rajouté comme sous module du dépôt principal + du projet _Bootiful_ dans le sous dossier `grub/bootiful-grub`. + +L'avantage de cette nouvelle approche est qu'il est maintenant facile +d'intégrer les changements survenus dans le dépôt git officiel sur son +clone pour bénéficier des dernières mises à jour de !!acronym{GRUB}. + + + +**TODO: expliquer les problèmes rencontrés sans !!acronym{EFI} avec +lesmachines récentes, des modifications nécessaires pour supporter ce +nouveau système et des limitations que cela apporte.** + + ## Amélioration de la vitesse de transfert des images Le protocole !!acronym{NFS} est utilisé dans le système initial pour @@ -1253,6 +1323,7 @@ fonctionnalité de Docker de construction en plusieurs "étages" Le fichier `Makefile` à la racine du projet définit des cibles et des recettes pour exécuter `docker build` exporter les données des deux derniers étages dans leurs dossiers respectifs: + - le contenu de l'étage `nfs-export-stage`, c'est à dire l'archive `nfsroot.tar.gz`, est exportée dans le dossier `nfs/`. Elle sera extraite dans le serveur !!acronym{NFS}. @@ -1268,12 +1339,6 @@ différentes mesures qui ont montré que clonezilla est intéressant les images larges mais que dd est parfois plus performant pour de petites images.** -## Compatibilité !!acronym{EFI} - -**TODO: expliquer les problèmes rencontrés sans !!acronym{EFI} avec les machines -récentes, des modifications nécessaires pour supporter ce nouveau -système et des limitations que cela apporte.** - ## Déploiement d'image Windows ## Amélioration des scripts de déploiement diff --git a/doc/rapport.md b/doc/rapport.md index cc8f8903da80be927f997ba6a9d8233cf777f7f3..44c63c3ef3a23205e61afef0425f16c3a5a06e91 100644 --- a/doc/rapport.md +++ b/doc/rapport.md @@ -503,6 +503,82 @@ il comporte de nombreuses limitations auxquelles il faudrait palier: # Recherche et développement +## Compatibilité <abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr> + +Lors des tests du système initial sur les PC fournis par l'école (DELL +Optiplex 7060 micro), il s'est avéré que bien que le système de +déploiement était fonctionnel, l'initialisation des images +d'<abbr title="Operating System: système d’exploitation ">OS</abbr> qui venaient d'être déployées par le logiciel d'amorçage +<abbr title="GRand Unified Bootloader ">GRUB</abbr> ne fonctionnait pas: un écran noir était affiché, avec +parfois une suite de caractères étranges affichée à l'écran, parfois +non, alors que sur des machines virtuelles _VirtualBox_, le démarrage +des mêmes images ne posait aucun problème. + +Ces mini-ordinateurs sont capables de démarrer sur le réseau avec le +protocole <abbr title="Pre-boot eXecution Environment: environnement d’exécution pré-démarrage ">PXE</abbr> en mode émulation _legacy_ ou en mode natif +<abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr>. Le système initial fonctionne uniquement en mode +_legacy_ et il est soupçonné que c'est un bug ou une limitation dans +l'émulation du mode _legacy_ sur ces machines qui empêchait le démarrage +de l'<abbr title="Operating System: système d’exploitation ">OS</abbr> déployé, bien qu'il n'ait pas été possible de le +prouver avec certitude. + +Cela a conduit à effectuer un autre test sur un ordinateur portable +personnel à disposition (Lenovo U530), sur lequel il s'est avéré que le +boot <abbr title="Pre-boot eXecution Environment: environnement d’exécution pré-démarrage ">PXE</abbr> _legacy_ n'était même pas supporté: seul le +démarrage en mode <abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr> était possible. + +À ce moment, il a été décidé de modifier le système pour le rendre +compatible <abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr>/<abbr title="Unified Extensible Firmware Interface: interface micrologicielle extensible unifiée ">UEFI</abbr>, en partant du principe qu'il +serait utilisé sur des <abbr title="Personal Computer: ordinateur personnel ">PC</abbr> récents qui sont compatibles avec +ce mode de démarrage. + +La première étape de cette transition vers <abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr> a été de +recompiler le logiciel d'amorçage <abbr title="GRand Unified Bootloader ">GRUB</abbr> dans sa version +<abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr> pour une architecture x86 64 bits. Jusqu'à présent, +l'exécutable déjà compilé de <abbr title="GRand Unified Bootloader ">GRUB</abbr> présent dans les dossiers +du projet initial avait été utilisé. Il avait été compilé pour une +architecture x86 32 bits en mode <abbr title="Personal Computer: ordinateur personnel ">PC</abbr> _legacy_ uniquement. La +compilation du système est nécessaire car le système de déploiement +initial comporte un module <abbr title="GRand Unified Bootloader ">GRUB</abbr> développé spécifiquement pour +le projet, qui permet d'effectuer la vérification et l'effacement de la +signature à la fin du disque et de changer l'option de démarrage par +défaut en fonction de sa présence. Il n'est donc pas possible d'utiliser +un exécutable déjà compilé de <abbr title="GRand Unified Bootloader ">GRUB</abbr> car il faut que ce module +soit aussi compilé. + +Dans le projet initial, le code source de <abbr title="GRand Unified Bootloader ">GRUB</abbr> dans sa +version 2.02 avait simplement été recopié dans un dossier du dépôt git, +le fichier source du module de vérification de la signature `isign.c` +avait été rajouté au code source et les fichiers de `Makefile` avaient +été modifiés pour que le nouveau module soit compilé. Le problème avec +cette approche est qu'il est difficile de mettre à jour <abbr title="GRand Unified Bootloader ">GRUB</abbr> +sur une nouvelle version. + +Une nouvelle approche a été choisie pour intégrer le module `isign` à +<abbr title="GRand Unified Bootloader ">GRUB</abbr>, qui permet de mettre à jour plus facilement +<abbr title="GRand Unified Bootloader ">GRUB</abbr>, qui a d'ailleurs été utilisé en version 2.04, la +dernière version sortie au moment où cela a été fait. La nouvelle +approche est la suivante: + +1. Un clone du dépôt officiel de <abbr title="GRand Unified Bootloader ">GRUB</abbr> a été créé sur le + serveur git de <abbr title="Haute école du paysage, d’ingénierie et d’architecture de Genève ">HEPIA</abbr>. Il a été nommé `bootiful-grub`. +2. Un commit a été fait sur ce clone du dépôt git, contenant l'ajout du + fichier source `isign.c` et la modification du fichier générant le + `Makefile` pour prendre en compte ce module lors de la compilation. +3. Le dépôt git cloné a été rajouté comme sous module du dépôt principal + du projet _Bootiful_ dans le sous dossier `grub/bootiful-grub`. + +L'avantage de cette nouvelle approche est qu'il est maintenant facile +d'intégrer les changements survenus dans le dépôt git officiel sur son +clone pour bénéficier des dernières mises à jour de <abbr title="GRand Unified Bootloader ">GRUB</abbr>. + + + +**TODO: expliquer les problèmes rencontrés sans <abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr> avec +lesmachines récentes, des modifications nécessaires pour supporter ce +nouveau système et des limitations que cela apporte.** + + ## Amélioration de la vitesse de transfert des images Le protocole <abbr title="Network File System: système de fichiers en réseau ">NFS</abbr> est utilisé dans le système initial pour @@ -1310,6 +1386,7 @@ fonctionnalité de Docker de construction en plusieurs "étages" Le fichier `Makefile` à la racine du projet définit des cibles et des recettes pour exécuter `docker build` exporter les données des deux derniers étages dans leurs dossiers respectifs: + - le contenu de l'étage `nfs-export-stage`, c'est à dire l'archive `nfsroot.tar.gz`, est exportée dans le dossier `nfs/`. Elle sera extraite dans le serveur <abbr title="Network File System: système de fichiers en réseau ">NFS</abbr>. @@ -1325,12 +1402,6 @@ différentes mesures qui ont montré que clonezilla est intéressant les images larges mais que dd est parfois plus performant pour de petites images.** -## Compatibilité <abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr> - -**TODO: expliquer les problèmes rencontrés sans <abbr title="Extensible Firmware Interface: interface micrologicielle extensible unifiée ">EFI</abbr> avec les machines -récentes, des modifications nécessaires pour supporter ce nouveau -système et des limitations que cela apporte.** - ## Déploiement d'image Windows ## Amélioration des scripts de déploiement diff --git a/doc/rapport.pdf b/doc/rapport.pdf index 7683dcab65d32b3ecb7c75be0d85b3a75fb59225..831007b923fac7eba0c2af77ad0c036c00466168 100644 Binary files a/doc/rapport.pdf and b/doc/rapport.pdf differ diff --git a/doc/rapport.tex b/doc/rapport.tex new file mode 100644 index 0000000000000000000000000000000000000000..e51283ea6342d5309da407edae4c7927a84d46c8 --- /dev/null +++ b/doc/rapport.tex @@ -0,0 +1,2243 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode}{hyperref} +\PassOptionsToPackage{hyphens}{url} +% +\documentclass[ + 12pt, + french, + a4paper, +]{memoir} +\usepackage{lmodern} +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex + \usepackage{unicode-math} + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +\usepackage{xcolor} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\hypersetup{ + pdftitle={Bootiful Déploiement d'OS à choix durant le processus de boot}, + pdfauthor={Dimitri Lizzi}, + pdflang={fr-CH}, + pdfkeywords={Bachelor, HEPIA, HESSO, Bootiful}, + hidelinks, + pdfcreator={LaTeX via pandoc}} +\urlstyle{same} % disable monospaced font for URLs +\usepackage[margin=2.5cm,includefoot,includehead]{geometry} +\usepackage{color} +\usepackage{fancyvrb} +\newcommand{\VerbBar}{|} +\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} +% Add ',fontsize=\small' for more characters per line +\newenvironment{Shaded}{}{} +\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}} +\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}} +\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}} +\newcommand{\BuiltInTok}[1]{#1} +\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}} +\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}} +\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}} +\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}} +\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}} +\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}} +\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}} +\newcommand{\ExtensionTok}[1]{#1} +\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}} +\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}} +\newcommand{\ImportTok}[1]{#1} +\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}} +\newcommand{\NormalTok}[1]{#1} +\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}} +\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}} +\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}} +\newcommand{\RegionMarkerTok}[1]{#1} +\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}} +\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}} +\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}} +\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}} +\usepackage{longtable,booktabs} +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +\setcounter{secnumdepth}{5} +\usepackage{pdfpages} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{float} +\usepackage{lastpage} +\usepackage{fvextra} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{frame=single,breaklines,commandchars=\\\{\}} + +\pagestyle{fancy} +\setlength{\headheight}{14pt} + +\renewcommand{\headrulewidth}{0.4pt} +\renewcommand{\footrulewidth}{0.4pt} + +\fancyhead[LO,LE]{Bootiful} +\fancyhead[CO,CE]{Déploiement d'OS à choix durant le processus de boot} +\fancyhead[RO,RE]{Dimitri Lizzi} +\fancyfoot[LO,LE]{août 2020} + +\fancyfoot[CO,CE]{} +\fancyfoot[RE,RO]{\thepage /\pageref{LastPage}} + +\setcounter{tocdepth}{4} + +\setlength{\parindent}{0pt} +\setlength{\parskip}{9pt} + +\OnehalfSpacing +\ifxetex + % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic) + \usepackage{polyglossia} + \setmainlanguage[]{french} +\else + \usepackage[shorthands=off,main=french]{babel} +\fi + +\title{Bootiful\\ +Déploiement d'OS à choix durant le processus de boot} +\author{Dimitri Lizzi} +\date{Août 2020} + +\begin{document} +% Nom conformes des tables +\renewcommand*\listfigurename{Liste des illustrations} +\renewcommand*\listtablename{Liste des tableaux} +% Sets the page numbering style to roman +%\pagestyle{headings} +\setcounter{page}{1} +\pagenumbering{roman} + +% Hides the page number for the cover page +\thispagestyle{empty} +% Hides the header for the cover page +% Cover page +\begin{figure} + \begin{sffamily} + \begin{minipage}{.4\textwidth} + \centering + \hspace*{-3cm}\includegraphics[height=2cm,bb=0 0 278.9 70.92]{images/logo_hepia.svg} + \end{minipage}\qquad + \begin{minipage}{.4\textwidth} + \centering + \hspace*{5cm}\includegraphics[scale=1]{images/hes.png} + \end{minipage} + \end{sffamily} +\end{figure} + +\begin{center} + \huge{Bootiful\\ +Déploiement d'OS à choix durant le processus de boot}\\ + \vspace{.5cm} + \IfFileExists{images/front-logo.png}{ + \includegraphics[width=8cm,height=5cm]{images/front-logo.png}\\ + }{ + \vspace{5cm} + } + + \vspace{5mm} + \large{Thèse de Bachelor présentée par}\\ + \vspace{5mm} + \textbf{\Large{Dimitri Lizzi}}\\ + \vspace{5mm} + + \large{pour l’obtention du titre Bachelor of Science HES-SO en}\\ + \vspace{5mm} + \textbf{\Large{Ingénierie des technologies de l’information avec orientation en \\logiciels +et systèmes complexes}} + + \vspace{5mm} + \textbf{Août 2020\\} + \vspace{5mm} + \begin{tabular}{ p{6cm} } + \multicolumn{1}{c}{Professeur-e HES responsable}\\ + \multicolumn{1}{c}{\textbf{Florent Glück}}\\ + \end{tabular} +\end{center} + + +\mainmatter +\tableofcontents +\newpage + +\chapter*{Liste des acronymes} +\addcontentsline{toc}{chapter}{Liste des acronymes} + +\begin{description} +\item[EFI \protect\hypertarget{acronym__EFI}{}{}] +\emph{Extensible Firmware Interface}: interface micrologicielle +extensible unifiée +\item[BIOS \protect\hypertarget{acronym__BIOS}{}{}] +\emph{Basic Input Output System}: système de base d'entrée sortie +\item[FTP \protect\hypertarget{acronym__FTP}{}{}] +\emph{File Transfer Protocol}: protocole de transfert de fichier +\item[DHCP \protect\hypertarget{acronym__DHCP}{}{}] +\emph{Dynamic Host Configuration Protocol}: protocole de configuration +dynamique des hôtes +\item[GPT \protect\hypertarget{acronym__GPT}{}{}] +\emph{GUID Partition Table}: table de partitionnement GUID +\item[GRUB \protect\hypertarget{acronym__GRUB}{}{}] +\emph{GRand Unified Bootloader} EFI +\protect\hypertarget{acronym__EFI}{}{} + +\emph{Extensible Firmware Interface}: interface micrologicielle +extensible unifiée +\end{description} + +FTP \protect\hypertarget{acronym__FTP}{}{} HEPIA +\protect\hypertarget{acronym__HEPIA}{}{} \textasciitilde{} \emph{File +Transfer Protocol}: protocole de transfert de fichier \textasciitilde{} +Haute école du paysage, d'ingénierie et d'architecture de Genève + +\begin{description} +\tightlist +\item[GPT \protect\hypertarget{acronym__GPT}{}{}] +\emph{GUID Partition Table}: table de partitionnement GUID +\item[HTTPS \protect\hypertarget{acronym__HTTPS}{}{}] +\emph{HyperText Transfer Protocol Secure}: protocole de transfert +hypertexte sécurisé +\item[GRUB \protect\hypertarget{acronym__GRUB}{}{}] +\emph{GRand Unified Bootloader} +\item[HTTP \protect\hypertarget{acronym__HTTP}{}{}] +\emph{HyperText Transfer Protocol}: protocole de transfert hypertexte +\item[HEPIA \protect\hypertarget{acronym__HEPIA}{}{}] +Haute école du paysage, d'ingénierie et d'architecture de Genève +\item[IPFS \protect\hypertarget{acronym__IPFS}{}{}] +\emph{InterPlanetary File System}: système de fichier inter-planétaire +\item[HTTPS \protect\hypertarget{acronym__HTTPS}{}{}] +\emph{HyperText Transfer Protocol Secure}: protocole de transfert +hypertexte sécurisé +\item[IP \protect\hypertarget{acronym__IP}{}{}] +\emph{Internet Protocol}: protocole internet +\item[HTTP \protect\hypertarget{acronym__HTTP}{}{}] +\emph{HyperText Transfer Protocol}: protocole de transfert hypertexte +\item[LDAP \protect\hypertarget{acronym__LDAP}{}{}] +\emph{Lightweight Directory Access Protocol}: protocole léger d'accès à +un annuaire +\item[IPFS \protect\hypertarget{acronym__IPFS}{}{}] +\emph{InterPlanetary File System}: système de fichier inter-planétaire +\item[MBR \protect\hypertarget{acronym__MBR}{}{}] +\emph{Master Boot Record}: enregistrement d'amorcage maître +\item[IP \protect\hypertarget{acronym__IP}{}{}] +\emph{Internet Protocol}: protocole internet +\item[NAT \protect\hypertarget{acronym__NAT}{}{}] +\emph{Network Address Translation}: traduction d'adresse réseau +\item[LDAP \protect\hypertarget{acronym__LDAP}{}{}] +\emph{Lightweight Directory Access Protocol}: protocole léger d'accès à +un annuaire +\item[NFS \protect\hypertarget{acronym__NFS}{}{}] +\emph{Network File System}: système de fichiers en réseau +\item[MBR \protect\hypertarget{acronym__MBR}{}{}] +\emph{Master Boot Record}: enregistrement d'amorcage maître +\item[OS \protect\hypertarget{acronym__OS}{}{}] +\emph{Operating System}: système d'exploitation +\item[NAT \protect\hypertarget{acronym__NAT}{}{}] +\emph{Network Address Translation}: traduction d'adresse réseau +\item[PC \protect\hypertarget{acronym__PC}{}{}] +\emph{Personal Computer}: ordinateur personnel +\item[NFS \protect\hypertarget{acronym__NFS}{}{}] +\emph{Network File System}: système de fichiers en réseau +\item[PXE \protect\hypertarget{acronym__PXE}{}{}] +\emph{Pre-boot eXecution Environment}: environnement d'exécution +pré-démarrage +\item[OS \protect\hypertarget{acronym__OS}{}{}] +\emph{Operating System}: système d'exploitation +\item[SCP \protect\hypertarget{acronym__SCP}{}{}] +\emph{Secure CoPy}: protocole de copie sécurisée sur le réseau +\item[PC \protect\hypertarget{acronym__PC}{}{}] +\emph{Personal Computer}: ordinateur personnel +\item[SMB \protect\hypertarget{acronym__SMB}{}{}] +\emph{Server Message Block} +\item[SSH \protect\hypertarget{acronym__SSH}{}{}] +\emph{Secure SHell}: protocole de terminal à distance securisé +\item[PXE \protect\hypertarget{acronym__PXE}{}{}] +\emph{Pre-boot eXecution Environment}: environnement d'exécution +pré-démarrage +\end{description} + +SCP \protect\hypertarget{acronym__SCP}{}{} TFTP +\protect\hypertarget{acronym__TFTP}{}{} \textasciitilde{} \emph{Secure +CoPy}: protocole de copie sécurisée sur le réseau \textasciitilde{} +\emph{Trivial File Transfer Protocol}: protocole simplifié de transfert +de fichiers + +\begin{description} +\item[UEFI \protect\hypertarget{acronym__UEFI}{}{}] +\emph{Unified Extensible Firmware Interface}: interface micrologicielle +extensible unifiée SMB \protect\hypertarget{acronym__SMB}{}{} + +\emph{Server Message Block} +\end{description} + +WWW \protect\hypertarget{acronym__WWW}{}{} SSH +\protect\hypertarget{acronym__SSH}{}{} \textasciitilde{} \emph{World +Wide Web}: toile mondiale / réseau mondial \textasciitilde{} +\emph{Secure SHell}: protocole de terminal à distance securisé + +\newpage +\listoffigures +\newpage +\listoftables + +\hypertarget{introduction}{% +\chapter{Introduction}\label{introduction}} + +\hypertarget{contexte}{% +\section{Contexte}\label{contexte}} + +Aujourd'hui les machines des salles de cours à +\protect\hyperlink{acronym__HEPIA}{HEPIA} sont installées avec une image +spécifique d'un système d'exploitation. Dans le cadre de certains cours, +on désirerait pouvoir utiliser un autre système d'exploitation +(\protect\hyperlink{acronym__OS}{OS}) et aussi avoir la possibilité +d'être administrateur sur la machine physique. En effet, utiliser une +machine virtuelle n'est pas toujours souhaitable, surtout lorsqu'il y a +interaction avec du matériel, typiquement lors du développement pour +l'embarqué. Le but de ce projet est de développer un système de +déploiement répondant à ces besoins. Lors de la mise sous tension d'une +machine, le système proposerait à l'utilisateur un choix d'OSes et +celui-ci s'installerait à la volée (distributions Linux, différentes +versions de Windows, etc.). Afin de minimiser le temps d'attente lors de +l'installation de l'\protect\hyperlink{acronym__OS}{OS}, un mécanisme de +cache évitant le téléchargement des images préalablement téléchargées +sera mis en place. On désire aussi que le système de déploiement +permette de customiser certains aspects de l'image choisie. Ce travail +ce base sur une ébauche d'un travail déjà existant. + +\hypertarget{objectifs}{% +\section{Objectifs}\label{objectifs}} + +\begin{itemize} +\tightlist +\item + Etude du travail existant. +\item + Mise en place d'un déploiement automatisé et reproductible du travail + existant. +\item + Ajout du support d'images Windows. +\item + Optimisation du format d'image afin d'en accélérer sensiblement la + vitesse de téléchargement. +\item + Mise en place d'un mécanisme de personnalisation des images en + post-installation. +\item + Implémenter une gestion administrative aisée du système de déploiement + + \begin{itemize} + \tightlist + \item + Il doit être aisé de créer des images et configurer les opérations à + effectuer en post-installation. + \end{itemize} +\item + Le système doit pouvoir supporter l'authentification des utilisateurs + via un serveur \protect\hyperlink{acronym__LDAP}{LDAP} (Linux + seulement) + + \begin{itemize} + \tightlist + \item + Les OS déployés (Linux), doivent pouvoir s'intégrer au processus + d'authentification utilisé dans les salles de laboratoires ITI. + \end{itemize} +\item + Gestion du système aussi simple et aisée que possible. +\item + Si le temps le permet: optimisation de la bande passante du réseau + dans le cas de nombreux téléchargements effectués en parallèle. +\end{itemize} + +\hypertarget{muxe9thodologie-de-travail}{% +\section{Méthodologie de travail}\label{muxe9thodologie-de-travail}} + +\textbf{TODO: Expliquer comment le travail a été planifié, les meetings +hebdomadaires, les outils à disposition, le fait de travailler à +distance dans un contexte ``cours du soir''} + +\hypertarget{cas-dutilisation}{% +\chapter{Cas d'utilisation}\label{cas-dutilisation}} + +\textbf{TODO: décrire les cas d'utilisation du projet à l'aide d'un +diagramme de use cases qui montre les inter-actions possibles entre les +différentes entités du sytème que sont les utilsateurs, administrateurs, +les postes clients, le serveur, les images, les configurations. Le +diagramme doit décrire les aspects fonctionnels du système (quoi) sans +détailler les aspects techniques (comment).} + +L'aspect fonctionnel du système à réaliser est décrit avec un diagramme +de cas d'utilisations dans la figure \ref{diagram_usecases}. + +\begin{figure} +\centering +\includegraphics{images/diagram_usecases.svg} +\caption{Diagramme des cas d'utilisation du +système.\label{diagram_usecases}} +\end{figure} + +\hypertarget{uxe9tat-de-lart}{% +\chapter{État de l'art}\label{uxe9tat-de-lart}} + +De nombreux systèmes de déploiement +d'\protect\hyperlink{acronym__OS}{OS} existent, mais aucun d'entre eux +ne répond précisément aux objectifs précis du cahier des charges de ce +projet. + +Les sous-sections qui suivent décrivent quelques-uns de ces systèmes, +leurs points forts et points faibles et pourquoi ils ne sont pas adaptés +tels-quel pour ce projet. + +\hypertarget{ibm-tivoli-rembo}{% +\section{IBM Tivoli / Rembo}\label{ibm-tivoli-rembo}} + +\textbf{TODO: expliquer que ce projet se rapproche le plus des objectifs +du projet, qu'il a été développé initialement à l'université de Genève +et a été utilisé à HEPIA par le passé avec succès. Expliquer le rachat +par IBM et la problématique de la licence couteuse. Introduire l'intérêt +d'une solution open source pour ne pas retomber dans le meme schéma.} + +\hypertarget{fog}{% +\section{Fog}\label{fog}} + +\textbf{TODO: expliquer le fonctionnement et les cas d'utilisation de +fog, l'utilisation actuelle de ce système dans l'école, de ses +limitations et pourquoi il ne permet pas de répondre aux objectifs de ce +projet.} + +\hypertarget{clonezilla}{% +\section{Clonezilla}\label{clonezilla}} + +\textbf{TODO: expliquer le fonctionnement, les cas d'utilisation le +contexte. Parler de l'outil partclone et de ses avantages. Expliquer +pourquoi il n'est pas adapté tel quel, mais aussi pourquoi il est +intéressant de réutiliser certaines parties.} + +\hypertarget{ghost}{% +\section{Ghost}\label{ghost}} + +\textbf{TODO: expliquer le fonctionnement et mettre en parallèle à fog +et clonezilla et souligner les problématiques d'une solution commerciale +au lieu d'une solution open-source. } + +\hypertarget{acronis-trueimage}{% +\section{Acronis TrueImage}\label{acronis-trueimage}} + +\textbf{TODO: expliquer le fonctionnement et mettre en parallèle à fog +et clonezilla et souligner les problématiques d'une solution commerciale +au lieu d'une solution open-source. } + +\hypertarget{architecture-initiale-du-projet}{% +\chapter{Architecture initiale du +projet}\label{architecture-initiale-du-projet}} + +Le projet \emph{Bootiful} n'a pas été initié dans le cadre de ce travail +de bachelor: une implémentation basique avait déjà été réalisée afin de +prouver que l'idée fonctionne. Cette version initiale a été créée par +Abhilash Venkatesh, un étudiant indien qui est venu à +\protect\hyperlink{acronym__HEPIA}{HEPIA} effectuer un stage pendant la +période de mai à juillet 2019. + +Les premières étapes de ce travail diplôme ont été de reproduire le +système réalisé dans le projet initial afin de valider son +fonctionnement, d'analyser en détail son fonctionnement et sa structure +et de documenter son architecture. + +Ce chapitre est l'aboutissement de cette étude. Il décrit les détails de +l'architecture du projet initial qui a été reproduite, afin d'apporter +un contexte aux chapitres suivants qui décrivent les ajouts et +modifications de cette architecture. + +\hypertarget{composants-initiaux}{% +\section{Composants initiaux}\label{composants-initiaux}} + +Le système est composé de multiples clients qui communiquent avec un +serveur central à travers un réseau \protect\hyperlink{acronym__IP}{IP}. + +\hypertarget{postes-clients}{% +\subsection{Postes clients}\label{postes-clients}} + +Les postes clients supportés par le système sont des ordinateurs +compatibles \protect\hyperlink{acronym__PC}{PC} x86. + +Ils doivent nécessairement être équipés d'une carte réseau et d'un +micrologiciel \protect\hyperlink{acronym__BIOS}{BIOS} ou +\protect\hyperlink{acronym__UEFI}{UEFI} capables et configurés pour +amorcer un système d'exploitation à partir du réseau à chaque démarrage +en utilisant le standard \protect\hyperlink{acronym__PXE}{PXE}. + +Ils doivent aussi disposer d'un disque dur sur lequel les images de +système d'exploitation seront déployées et mises en cache. L'espace +disque est subdivisé en trois parties distinctes ayant chacune un rôle +précis. + +La première partie du disque est l'espace dédié au déploiement d'un +\protect\hyperlink{acronym__OS}{OS}. Elle prend 80\% de l'espace total +disponible, au début du disque. Au tout début de cette partie du disque, +dans le premier secteur addressable du disque, se trouve le secteur +d'amorçage au format \protect\hyperlink{acronym__MBR}{MBR}. Ce premier +secteur contient deux informations nécessaires pour le chargement d'un +système d'exploitation: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + \textbf{La routine d'amorcage}: c'est le premier programme exécuté + lors du démarrage sur le disque. Sa taille est très limitée: 440 + octets. Il sert généralement à initier un chargeur d'amorcage ou + \emph{bootloader} présent un peu plus loin sur le disque, qui est un + petit programme qui va initier un système d'exploitation. +\item + \textbf{La table des partitions}: définit une liste de partitions, qui + sont des subdivisions logiques de l'espace du disque. Selon le système + d'exploitation installé et la manière dont il a été configuré lors de + son installation initiale les partitions peuvent varier en nombre et + en taille. Les données à l'intérieur de chaque partition sont + généralement structurées en utilisant un système de fichiers. Les + partitions vont varier en nombre, taille, et format selon l'image + déployée. +\end{enumerate} + +La seconde partie du disque est l'espace dédié à la mise en cache +d'images d'\protect\hyperlink{acronym__OS}{OS}, qui prend 20\% de +l'espace total disponible, moins 4096 octets, à la fin du disque. Ce +cache permet de stocker des images disques compressées qui peuvent être +décompressées sur la première partie du disque. Lors du premier +déploiement d'une image disque compressée disponible sur le serveur, +cette dernière est transmise depuis le serveur jusqu'au client en +version compressée à travers le réseau. Au fur et à mesure que les +données compressées de l'image sont réceptionnées par le client, elles +sont simultanément copiées dans le cache et décompressées sur la +première partie du disque. + +Ce mécanisme de cache permet de ne plus avoir à télécharger à nouveau +l'image lors des prochains déploiements car elle sera disponible +localement. Il suffira de décompresser le fichier présent dans le cache +et d'écrire les données extraites séquentiellement sur la première +partie du disque. Cela permet d'éviter de surcharger la bande passante +du réseau et les ressources du serveur, en particulier quand un grand +nombre de clients vont fréquemment déployer la même image en même temps, +comme cela sera souvent le cas dans le contexte d'une école +d'informatique où les élèves déploient la même image au début de chaque +session d'un même cours. + +Enfin, les 4096 octets restants à la fin du disque sont dédiés à +l'écriture d'une signature servant à signaler si une image vient d'être +deployée sur le disque. La présence cette signature est verifiée à +chaque démarrage pour déterminer s'il faut démarrer une image +fraichement déployée ou si au contraire l'image déployée a déjà été +utilisée et qu'il faut lancer un nouveau déploiement. Ainsi, le système +peut s'assurer qu'une image disque déployée n'est exécutée qu'une seule +fois, ce qui laisse la liberté à l'utilisateur du poste client de faire +ce qu'il veut sur le système déployé sans se soucier de rendre le +système inutilisable, car il suffit de redémarrer la machine pour +repartir sur une base propre. + +Le mécanisme de signature est nécessaire à cause du moyen choisi pour +déployer les images: un système d'exploitation Linux minimaliste est est +chargé en mémoire depuis le réseau afin de lancer le processus de choix +d'une image et de la déployer. Une fois le déploiement terminé, la +machine redémarre. La signature à la fin du disque est un moyen simple +et efficace de faire persister l'information qu'une image vient d'être +déployée et de la vérifier au démarrage. + +\hypertarget{serveur}{% +\subsection{Serveur}\label{serveur}} + +Le composant central du système est un \emph{serveur} linux qui +inter-agit avec les postes clients pour leur permettre d'effectuer +plusieurs actions: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + Recevoir une configuration IP et un chargeur d'amorcage + \protect\hyperlink{acronym__GRUB}{GRUB} à exécuter pour démarrer sur + le réseau en utilisant le standard PXE. +\item + Analyser la signature présente sur le disque dur depuis le chargeur + d'amorçage chargeur d'amorcage + \protect\hyperlink{acronym__GRUB}{GRUB}. + + \begin{itemize} + \tightlist + \item + Si elle n'est pas présente, amorcer un système d'exploitation + minimaliste servant à effectuer le choix d'une image et + d'automatiser son déploiement et sa mise en cache. + \item + Si elle est présente, l'effacer et démarrer sur le disque dur pour + initier l'amorçage de l'\protect\hyperlink{acronym__OS}{OS} déployé. + \end{itemize} +\item + Lister les images disponible et les méta-données de chacune d'entre + elle: + + \begin{itemize} + \tightlist + \item + Le nom de l'image, pour permettre aux utilisateurs d'effectuer un + choix. + \item + La taille de l'image décompressée, pour pouvoir vérifier que la + taille du disque client est suffisante pour déployer l'image. + \item + La taille de l'image compressée, pour pouvoir vérifier que l'image + puisse être mise en cache. + \item + Un \emph{hash} de l'image pour pouvoir l'identifier de manière + unique et vérifier si elle est déjà présente dans le cache ou s'il + faut la télécharger. + \end{itemize} +\item + Télécharger une image choisie. +\item + Sauvegarder et charger une copie du + \protect\hyperlink{acronym__MBR}{MBR} contenant la table des + partitions qui contient la partition cachée, afin de pouvoir le + restaurer et remonter cette partition. +\item + Sauvegarder un log du déploiement afin de pouvoir garder une trace des + temps de déploiement et des éventuelles erreurs rencontrées. +\end{enumerate} + +Trois protocoles réseau standard sont utilisés pour permettre au client +d'effectuer ces actions: + +\begin{itemize} +\item + \protect\hyperlink{acronym__DHCP}{DHCP}: fournit aux clients initiant + un démarrage sur le réseau une configuration IP, et l'adresse d'un + serveur TFTP et le nom du fichier exécutable du chargeur d'amorçage à + récupérer sur ce dernier +\item + \protect\hyperlink{acronym__TFTP}{TFTP}: permet au clients de + télécharger: + + \begin{itemize} + \tightlist + \item + le fichier exécutable du chargeur d'amorçage + \item + la configuration du chargeur d'amorçage + \item + les modules optionels du chargeur d'amorçage, téléchargés selon la + configuration + \item + l'image initrd permettant d'initialiser le système linux de + déploiement + \item + le noyeau linux de l'OS de déploiement + \item + l'image du système de fichier racine de l'OS de déploiement + \end{itemize} +\item + \protect\hyperlink{acronym__NFS}{NFS}: permet au système linux de + monter un partage distant qui contient: + + \begin{itemize} + \tightlist + \item + les scripts permettant d'effectuer le déploiement automatique + \item + un dossier contenant les images et leurs métadonnées + \item + un dossier dans lequel enregistrer une copie du MBR + \item + un dossier dans lequel enregistrer les logs du déploiement + \end{itemize} +\end{itemize} + +\hypertarget{diagramme-des-composants-du-serveur}{% +\subsection{Diagramme des composants du +serveur}\label{diagramme-des-composants-du-serveur}} + +La figure \ref{diagram_components} est un diagramme qui détaille les +différents composants et leurs interactions. + +\begin{figure} +\centering +\includegraphics{images/diagram_components.svg} +\caption{Diagramme des composants du système\label{diagram_components}} +\end{figure} + +\hypertarget{processus-de-duxe9ploiement-initial}{% +\section{Processus de déploiement +initial}\label{processus-de-duxe9ploiement-initial}} + +\textbf{TODO: décrire pas à pas les différentes étapes du processus de +déploiement telles que montrées sur le diagramme.} + +Les différentes étapes du processus de déploiement d'images sont +décrites dans la figure \ref{diagram_activity_deployment} qui est un +diagrame d'activité détaillant les différentes étapes du processus de +déploiement d'images. + +\begin{figure} +\centering +\includegraphics{images/diagram_activity_deployment.svg} +\caption{Diagramme d'activité du processus de déploiement +initial\label{diagram_activity_deployment}} +\end{figure} + +\hypertarget{architecture-ruxe9seau-initiale}{% +\section{Architecture réseau +initiale}\label{architecture-ruxe9seau-initiale}} + +Pour faire fonctionner le système, il faut que les machines clientes et +le serveur puissent communiquer à travers un réseau local. + +Les tests ont été effectués dans un réseau domestique classique: une +\emph{box} internet sert à la fois de passerelle internet et de routeur +DHCP dans le réseau local. + +Il y a un problème pour tester le système dans ce réseau local: le +serveur de déploiement doit aussi jouer le rôle de serveur DHCP et il y +aura des collisions entre les deux. La solution choisie pour palier à ce +problème, est d'utiliser deux interfaces réseau sur le serveur pour le +connecter à deux réseaux locaux distincts. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + L'interface \texttt{eth0} du serveur de déploiement est connectée au + réseau \texttt{192.168.1.0/24}, dont les adresses IP sont distribuées + par la box internet, qui sert aussi de passerelle vers internet. +\item + L'interface \texttt{eth1} du serveur de déploiement est connectée au + réseau \texttt{192.168.56.0/24}, dont les adresses IP sont distribuées + par le serveur de déploiement d'images. Il n'y a pas de passerelle + vers internet. +\end{enumerate} + +Le serveur étant une machine virtuelle \emph{VirtualBox} créée par +l'outil \emph{Vagrant}, ses interfaces réseau sont aussi virtuelles. Ces +interfaces virtuelles ont été ratachées aux interfaces de la machine +hôte de la manière suivante: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + L'interface \texttt{eth0} de la machine virtuelle est ratachée à + l'interface \texttt{wlan0} de la machine hôte en utilisant le mode + \protect\hyperlink{acronym__NAT}{NAT}. +\item + L'interface \texttt{eth1} de la machine virtuelle est ratachée à + l'interface \texttt{eth0} de la machine hôte en utilisant le mode + \texttt{bridged}. +\end{enumerate} + +La figure \ref{diagram_home_network} illustre les détails de la +configuration réseau décrite ci-dessus. + +\begin{figure} +\centering +\includegraphics{images/diagram_home_network.svg} +\caption{Diagramme montrant la configuration des équipements réseaux +utilisée pendant le test du système +initial.\label{diagram_home_network}} +\end{figure} + +\hypertarget{mise-en-opuxe9ration-du-projet-initial}{% +\section{Mise en opération du projet +initial}\label{mise-en-opuxe9ration-du-projet-initial}} + +La mise en fonctionnement du système initial à partir de la +documentation et des fichiers du dépôt git a été fastidieuse car il +contient des fichiers de configuration, des binaires et des sources et +des scripts non documentés. Il faut parcourir les différents fichiers +\texttt{readme} éparpillés dans les dossiers pour tenter de comprendre +comment installer un serveur. Aussi, certaines configurations ne +semblaient pas être à jour et ne fonctionnaient pas en étant utilisées +telles quel. + +La configuration du serveur \protect\hyperlink{acronym__DHCP}{DHCP} a du +être modifiée pour qu'en plus du +\texttt{option\ tftp-server-name\ "192.168.56.100"}, le paramètre +\texttt{next-server\ 192.168.56.100} soit aussi envoyé aux clients. Le +premier paramètre sert au client à savoir sur quel serveur TFTP +l'exécutable d'amorçage (dans ce cas, +\protect\hyperlink{acronym__GRUB}{GRUB}) doit être téléchargé. +Cependant, une fois \protect\hyperlink{acronym__GRUB}{GRUB} démarré, il +n'était pas capable de trouver l'image du système linux de déploiement. +L'option \texttt{next-server} a permis de renseigner +\protect\hyperlink{acronym__GRUB}{GRUB} sur le fait qu'il doit par +défaut rechercher les fichiers mentionnés dans la configuration dans le +serveur \protect\hyperlink{acronym__TFTP}{TFTP} accessible par l'adresse +IP mentionnée. + +Ensuite, une fois capable de démarrer l'OS de déploiement, il a fallu +résoudre de nombreux petits bugs dans les scripts de déploiement, qui ne +s'exécutaient pas complètement à cause d'erreurs dans certaines +commandes. Une fois les scripts corrigés, le démarrage de l'image +déployée ne fonctionnait pas. Pour des raisons non documentées, +\protect\hyperlink{acronym__GRUB}{GRUB} était configuré pour lancer le +programme \texttt{ipxe} depuis le serveur +\protect\hyperlink{acronym__TFTP}{TFTP}, qui lui même initie le +démarrage depuis le premier disque. Ce système ne fonctionnait pas: +\texttt{ipxe} ne se lançait même pas à cause d'un chemin invalide. De +plus ce système rajoutait une étape inutile: +\protect\hyperlink{acronym__GRUB}{GRUB} est tout à fait capable de +démarrer sur le premier disque. Le fichier de configuration de +\protect\hyperlink{acronym__GRUB}{GRUB} a donc été modifié pour +directement démarrer sur le disque quand la signature est détectée à la +fin du disque. Enfin, le système était fonctionnel. + +Pour faciliter l'utilisation et le développement du système dans le +futur, il a été décidé d'automatiser la création d'une machine virtuelle +du serveur, afin que la mise en fonctionnement d'un nouveau serveur de +déploiement d'images soit le plus simple possible nécessite le moins +d'intervention possible. Le programme \emph{Vagrant} a été utilisé dans +un premier temps pour automatiser la création d'une machine virtuelle à +partir d'un fichier \texttt{Vagrantfile} définissant la configuration de +la machine et les commandes à lancer pour l'installer et la configurer. +Une fois ce fichier de configuration créé, une seule commande est +nécessaire pour créer, configurer et lancer un serveur fonctionnel dans +une machine virtuelle: \texttt{vagrant\ up}. + +\begin{figure} +\centering +\includegraphics{images/vagrant_logo.svg} +\caption{Logo du logiciel \emph{Vagrant} utilisé pour automatiser la +création du serveur du système initial.} +\end{figure} + +La distribution \emph{Linux} \emph{Debian} a été choisie comme +\protect\hyperlink{acronym__OS}{OS} de base de cette machine virtuelle, +car elle est \emph{open-source}, populaire, stable et dispose de +nombreux paquets. Elle est utilisée dans la version \emph{Buster}, qui +est la version stable au moment de ce travail. + +\begin{figure} +\centering +\includegraphics{images/debian_logo.svg} +\caption{Logo de la distribution \emph{Linux} \emph{Debian} utilisée +comme base du serveur.} +\end{figure} + +\hypertarget{limitations-du-projet-initial}{% +\section{Limitations du projet +initial}\label{limitations-du-projet-initial}} + +Bien que le système du projet initial ait pu être mis en fonctionnement, +il comporte de nombreuses limitations auxquelles il faudrait palier: + +\begin{itemize} +\tightlist +\item + Les systèmes EFI ne sont pas supportés. +\item + Les images prennent beaucoup de place et sont longues à transférer. +\item + Les grosses images prennent beaucoup de temps à être déployées. +\item + La création d'images nécessite plusieurs opérations en ligne de + commande, ce n'est pas très facile à utiliser. +\item + Les scripts de déploiement sont fragiles et gèrent mal les erreurs. +\item + Il n'y a pas de système de personnalisation d'image. Si on veut faire + \(n\) personnalisation partant sur la base du même + \protect\hyperlink{acronym__OS}{OS}, il faut faire \(n\) images: une + pour chaque personnalisation. +\item + L'installation de nouveaux outils sur le système d'exploitation de + l'\protect\hyperlink{acronym__OS}{OS} de déploiement créé avec + \emph{Buildroot} peut être compliqué si l'outil a beaucoup de + dépendances. +\item + Les dépendances du projet sont difficile à reproduire: il faut + disposer des bonnes dépendances et du bon environnement. +\item + Les scripts de déploiement ne fonctionnent que si le client utilise + une interface réseau nommée \texttt{eth0}. +\item + Les logs sauvés sur le serveur ne sont pas très complets et il est + difficile de diagnostiquer les erreurs et les timings des différentes + étapes à partir de ceux-ci. +\item + Le système de déploiement doit sauver et restaurer un + \protect\hyperlink{acronym__MBR}{MBR} sur le serveur pour utiliser sa + partition cachée de cache des images. Cela implique des + lectures/écritures sur le disque et sur le partage NFS du serveur qui + prennent du temps et rajoutent de la complexité. Étant donné que la + position du cache est fixe (elle est calculée à partir de la taille du + disque, qui ne devrait pas changer), le client devrait être capable de + détecter et monter la partition sans dépendre du serveur. +\end{itemize} + +\hypertarget{recherche-et-duxe9veloppement}{% +\chapter{Recherche et +développement}\label{recherche-et-duxe9veloppement}} + +\hypertarget{compatibilituxe9-efi}{% +\section{\texorpdfstring{Compatibilité +\protect\hyperlink{acronym__EFI}{EFI}}{Compatibilité EFI}}\label{compatibilituxe9-efi}} + +Lors des tests du système initial sur les PC fournis par l'école (DELL +Optiplex 7060 micro), il s'est avéré que bien que le système de +déploiement était fonctionnel, l'initialisation des images +d'\protect\hyperlink{acronym__OS}{OS} qui venaient d'être déployées par +le logiciel d'amorçage \protect\hyperlink{acronym__GRUB}{GRUB} ne +fonctionnait pas: un écran noir était affiché, avec parfois une suite de +caractères étranges affichée à l'écran, parfois non, alors que sur des +machines virtuelles \emph{VirtualBox}, le démarrage des mêmes images ne +posait aucun problème. + +Ces mini-ordinateurs sont capables de démarrer sur le réseau avec le +protocole \protect\hyperlink{acronym__PXE}{PXE} en mode émulation +\emph{legacy} ou en mode natif \protect\hyperlink{acronym__EFI}{EFI}. Le +système initial fonctionne uniquement en mode \emph{legacy} et il est +soupçonné que c'est un bug ou une limitation dans l'émulation du mode +\emph{legacy} sur ces machines qui empêchait le démarrage de +l'\protect\hyperlink{acronym__OS}{OS} déployé, bien qu'il n'ait pas été +possible de le prouver avec certitude. + +Cela a conduit à effectuer un autre test sur un ordinateur portable +personnel à disposition (Lenovo U530), sur lequel il s'est avéré que le +boot \protect\hyperlink{acronym__PXE}{PXE} \emph{legacy} n'était même +pas supporté: seul le démarrage en mode +\protect\hyperlink{acronym__EFI}{EFI} était possible. + +À ce moment, il a été décidé de modifier le système pour le rendre +compatible +\protect\hyperlink{acronym__EFI}{EFI}/\protect\hyperlink{acronym__UEFI}{UEFI}, +en partant du principe qu'il serait utilisé sur des +\protect\hyperlink{acronym__PC}{PC} récents qui sont compatibles avec ce +mode de démarrage. + +La première étape de cette transition vers +\protect\hyperlink{acronym__EFI}{EFI} a été de recompiler le logiciel +d'amorçage \protect\hyperlink{acronym__GRUB}{GRUB} dans sa version +\protect\hyperlink{acronym__EFI}{EFI} pour une architecture x86 64 bits. +Jusqu'à présent, l'exécutable déjà compilé de +\protect\hyperlink{acronym__GRUB}{GRUB} présent dans les dossiers du +projet initial avait été utilisé. Il avait été compilé pour une +architecture x86 32 bits en mode \protect\hyperlink{acronym__PC}{PC} +\emph{legacy} uniquement. La compilation du système est nécessaire car +le système de déploiement initial comporte un module +\protect\hyperlink{acronym__GRUB}{GRUB} développé spécifiquement pour le +projet, qui permet d'effectuer la vérification et l'effacement de la +signature à la fin du disque et de changer l'option de démarrage par +défaut en fonction de sa présence. Il n'est donc pas possible d'utiliser +un exécutable déjà compilé de \protect\hyperlink{acronym__GRUB}{GRUB} +car il faut que ce module soit aussi compilé. + +Dans le projet initial, le code source de +\protect\hyperlink{acronym__GRUB}{GRUB} dans sa version 2.02 avait +simplement été recopié dans un dossier du dépôt git, le fichier source +du module de vérification de la signature \texttt{isign.c} avait été +rajouté au code source et les fichiers de \texttt{Makefile} avaient été +modifiés pour que le nouveau module soit compilé. Le problème avec cette +approche est qu'il est difficile de mettre à jour +\protect\hyperlink{acronym__GRUB}{GRUB} sur une nouvelle version. + +Une nouvelle approche a été choisie pour intégrer le module +\texttt{isign} à \protect\hyperlink{acronym__GRUB}{GRUB}, qui permet de +mettre à jour plus facilement \protect\hyperlink{acronym__GRUB}{GRUB}, +qui a d'ailleurs été utilisé en version 2.04, la dernière version sortie +au moment où cela a été fait. La nouvelle approche est la suivante: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + Un clone du dépôt officiel de \protect\hyperlink{acronym__GRUB}{GRUB} + a été créé sur le serveur git de + \protect\hyperlink{acronym__HEPIA}{HEPIA}. Il a été nommé + \texttt{bootiful-grub}. +\item + Un commit a été fait sur ce clone du dépôt git, contenant l'ajout du + fichier source \texttt{isign.c} et la modification du fichier générant + le \texttt{Makefile} pour prendre en compte ce module lors de la + compilation. +\item + Le dépôt git cloné a été rajouté comme sous module du dépôt principal + du projet \emph{Bootiful} dans le sous dossier + \texttt{grub/bootiful-grub}. +\end{enumerate} + +L'avantage de cette nouvelle approche est qu'il est maintenant facile +d'intégrer les changements survenus dans le dépôt git officiel sur son +clone pour bénéficier des dernières mises à jour de +\protect\hyperlink{acronym__GRUB}{GRUB}. + +\textbf{TODO: expliquer les problèmes rencontrés sans +\protect\hyperlink{acronym__EFI}{EFI} avec lesmachines récentes, des +modifications nécessaires pour supporter ce nouveau système et des +limitations que cela apporte.} + +\hypertarget{amuxe9lioration-de-la-vitesse-de-transfert-des-images}{% +\section{Amélioration de la vitesse de transfert des +images}\label{amuxe9lioration-de-la-vitesse-de-transfert-des-images}} + +Le protocole \protect\hyperlink{acronym__NFS}{NFS} est utilisé dans le +système initial pour transférer une image depuis le client vers le +serveur. Peut-être que la vitesse de transfert des images à travers le +réseau pourrait être améliorée en utilisant un autre protocole. Pour +décider si le choix de ce protocole est adapté ou si au contraire il +serait bénéfique d'en utiliser un autre, la vitesse de transfert d'une +grosse image a été mesurée sur différents protocoles de transfert de +fichier. + +\hypertarget{protocoles-considuxe9ruxe9s}{% +\subsection{Protocoles considérés}\label{protocoles-considuxe9ruxe9s}} + +Les différents protocoles qui ont été mesurés sont: + +\begin{itemize} +\tightlist +\item + \protect\hyperlink{acronym__SCP}{SCP}: ce protocole, utilisable avec + le programme éponyme \texttt{scp}, permet le transfert de fichiers + sécurisé entre un client et un serveur utilisant le protocole d'accès + à distance sécurisé \protect\hyperlink{acronym__SSH}{SSH}. Bien que le + chiffrage de la communication n'est pas nécessaire dans notre cas, il + est intéressant d'observer si ce dernier a un impact sur le temps de + transfert. +\item + \protect\hyperlink{acronym__HTTP}{HTTP}: c'est le protocole + client-serveur utilisé sur le World Wide Web + (\protect\hyperlink{acronym__WWW}{WWW}) pour la communication entre en + les navigateurs (client) et les serveurs. Il est souvent utilisé pour + le téléchargement de fichiers sur internet et offre probablement des + performances acceptables. Il existe aussi une version chiffrée de ce + protocole, \protect\hyperlink{acronym__HTTPS}{HTTPS}, mais uniquement + la version non-chiffrée sera testée ici, car le chiffrement de la + communication ne semble pas nécessaire et pourrait impacter les + performances. +\item + \protect\hyperlink{acronym__FTP}{FTP}: ce protocole standard fait + exactement ce que nous avons besoin: transférer des fichiers à travers + le réseau. Il y a de forte chances qu'il offre de très bonnes + performances. +\item + \protect\hyperlink{acronym__NFS}{NFS}: le protocole standard pour + monter à distance des dossiers partagés entre des + \protect\hyperlink{acronym__OS}{OS} Linux. C'est ce système qui est + utilisé par le projet initial, mais ce n'est probablement pas le plus + rapide, car permet de faire plus qu'un simple transfert de fichiers. +\item + \protect\hyperlink{acronym__SMB}{SMB}: le protocole standard pour + monter à distance des dossier partagés entre des + \protect\hyperlink{acronym__OS}{OS} Windows. Une implémentation existe + sous linux, \emph{Samba}, et elle est courremment utilisée pour une + meilleure compatiblité avec les systèmes Windows que sont équivalent + \protect\hyperlink{acronym__NFS}{NFS}. +\item + \protect\hyperlink{acronym__IPFS}{IPFS}: ce protocole pair à pair + décentralisé permet à chacun de des pairs de mettre à disposition ou + de télécharger des fichiers. Il pourrait être intéressant d'utiliser + ce protocole pour soulager la charge du serveur, car tous les clients + connectés peuvent se partager des parties d'images qu'ils ont déjà. Le + serveur de déploiement ne serait qu'un pair de plus, qui dispose de + toutes les images. Il est cependant possible que ce protocole ne soit + pas le plus performant à cause de sa jeunesse et de son mode de + fonctionnement complexe qui apporte un surcout à l'échange, en tout + cas dans le cas ou il n'y a que deux pairs. +\end{itemize} + +\hypertarget{environnement-des-tests-de-performance-des-protocoles-de-transfert-de-fichiers}{% +\subsection{Environnement des tests de performance des protocoles de +transfert de +fichiers}\label{environnement-des-tests-de-performance-des-protocoles-de-transfert-de-fichiers}} + +Deux machines de test identiques ont été utilisées: il s'agit de mini-PC +DELL Optiplex 7060 micro avec les spécifications suivantes: + +\begin{itemize} +\tightlist +\item + Processeur: Intel® Core™ i7-8700 CPU cadencé à 3.20GHz, +\item + Mémoire vive: 8 GiB (2 barettes 4GiB SODIMM DDR4 Synchronous 2666 MHz + (0.4 ns)) +\item + Disque: TOSHIBA KSG60ZMV SSD 476GiB (512GB) +\item + Réseau: Intel e1000e Gigabit Ethernet +\end{itemize} + +Les deux machines de test sont connectées en réseau avec un switch +Gigabit Ethernet. Le système d'exploitation Debian 10.4.0 (nom de code +\emph{buster}) AMD64 a été installé sur deux machines de test, sans +interface graphique. La première machine est nommée \texttt{debian1} et +la seconde \texttt{debian2}. Les noms \texttt{debian1.home} et +\texttt{debian2.home} permettent aux deux machines de communiquer entre +elles en faisant abstraction de leur adresse +\protect\hyperlink{acronym__IP}{IP}. L'utilisateur \texttt{debian} avec +le mot de passe \texttt{debian} est utilisé sur chacune des deux +machines. + +Le fichier à copier, \texttt{win10.tar.gz} est une image brute de +windows 10 compressée avec \texttt{gzip}, qui fait une taille totale de +13743592907 B (12.8 GiB). Il est présent dans le dossier +\texttt{/home/debian} de la machine \texttt{debian1}. + +La commande \texttt{perf} est utilisée pour tester 4 exécutions d'une +commande de copie lancée depuis la machine \texttt{debian2}. Elle est +installée à l'aide de la commande suivante: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install linux{-}perf} +\end{Highlighting} +\end{Shaded} + +Pour faire fonctionner la commande sans être root, le kernel doit être +configuré avec la commande suivante: + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{echo}\NormalTok{ 1 }\OperatorTok{\textgreater{}}\NormalTok{ /proc/sys/kernel/perf\_event\_paranoid} +\end{Highlighting} +\end{Shaded} + +Les sections suivantes détaillent les configurations spécifiques à +chaque protocole effectuées sur chacune des machines et les résultats du +test. La dernière section récapitule les résultats et explique quel +protocole est choisi pour la suite du travail et pourquoi. + +\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-scp}{% +\subsection{\texorpdfstring{Tests de performance du protocole de +transfert de fichiers +\protect\hyperlink{acronym__SCP}{SCP}}{Tests de performance du protocole de transfert de fichiers SCP}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-scp}} + +Tout d'abord, des clés SSH ont été générées sur chaque machine avec la +commande suivante: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{ssh{-}keygen} +\end{Highlighting} +\end{Shaded} + +Ensuite, les clés ont été échangées. Sur \texttt{debian1}, la commande +suivante a été utilisée: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{ssh{-}copy{-}id}\NormalTok{ debian2.home} +\end{Highlighting} +\end{Shaded} + +Sur \texttt{debian2}, la commande suivante a été utilisée: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{ssh{-}copy{-}id}\NormalTok{ debian1.home} +\end{Highlighting} +\end{Shaded} + +Finalement, le benchmark de la copie a été lancé sur \texttt{debian2}: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz} +\ExtensionTok{win10.tar.gz}\NormalTok{ 100\% 13GB 109.6MB/s 01:59 } +\ExtensionTok{win10.tar.gz}\NormalTok{ 100\% 13GB 109.6MB/s 01:59 } +\ExtensionTok{win10.tar.gz}\NormalTok{ 100\% 13GB 109.7MB/s 01:59 } +\ExtensionTok{win10.tar.gz}\NormalTok{ 100\% 13GB 109.6MB/s 01:59 } + + \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}scp debian1.home:/home/debian/win10.tar.gz /home/debian/win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:} + + \ExtensionTok{60}\NormalTok{,349.20 msec task{-}clock \# 0.504 CPUs utilized ( +{-} 3.61\% )} + \ExtensionTok{808}\NormalTok{,243 context{-}switches \# 0.013 M/sec ( +{-} 0.26\% )} + \ExtensionTok{16}\NormalTok{ cpu{-}migrations \# 0.000 K/sec ( +{-} 14.73\% )} + \ExtensionTok{16}\NormalTok{,862 page{-}faults \# 0.279 K/sec ( +{-} 18.95\% )} + \ExtensionTok{191}\NormalTok{,612,352,176 cycles \# 3.175 GHz ( +{-} 0.33\% ) }\KeywordTok{(}\ExtensionTok{50.09\%}\KeywordTok{)} + \ExtensionTok{406}\NormalTok{,400,076,305 instructions \# 2.12 insn per cycle ( +{-} 0.25\% ) }\KeywordTok{(}\ExtensionTok{62.64\%}\KeywordTok{)} + \ExtensionTok{13}\NormalTok{,334,327,547 branches \# 220.953 M/sec ( +{-} 1.42\% ) }\KeywordTok{(}\ExtensionTok{62.43\%}\KeywordTok{)} + \ExtensionTok{246}\NormalTok{,499,018 branch{-}misses \# 1.85\% of all branches ( +{-} 3.10\% ) }\KeywordTok{(}\ExtensionTok{62.36\%}\KeywordTok{)} + \ExtensionTok{64}\NormalTok{,653,696,732 L1{-}dcache{-}loads \# 1071.326 M/sec ( +{-} 0.44\% ) }\KeywordTok{(}\ExtensionTok{62.40\%}\KeywordTok{)} + \ExtensionTok{4}\NormalTok{,559,992,550 L1{-}dcache{-}load{-}misses \# 7.05\% of all L1{-}dcache hits ( +{-} 0.41\% ) }\KeywordTok{(}\ExtensionTok{62.43\%}\KeywordTok{)} + \ExtensionTok{784}\NormalTok{,218,339 LLC{-}loads \# 12.995 M/sec ( +{-} 0.64\% ) }\KeywordTok{(}\ExtensionTok{50.01\%}\KeywordTok{)} + \ExtensionTok{121}\NormalTok{,317,304 LLC{-}load{-}misses \# 15.47\% of all LL{-}cache hits ( +{-} 0.52\% ) }\KeywordTok{(}\ExtensionTok{50.29\%}\KeywordTok{)} + + \ExtensionTok{119.8094}\NormalTok{ +{-} 0.0182 seconds time elapsed ( +{-} 0.02\% )} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-http}{% +\subsection{\texorpdfstring{Tests de performance du protocole de +transfert de fichiers +\protect\hyperlink{acronym__HTTP}{HTTP}}{Tests de performance du protocole de transfert de fichiers HTTP}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-http}} + +Le serveur \protect\hyperlink{acronym__HTTP}{HTTP} \emph{Apache} a été +installé sur la machine \texttt{debian1} et le fichier a été mis à +disposition sur ce serveur avec les commandes suivantes: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install apache2} +\FunctionTok{cp}\NormalTok{ win10.tar.gz /var/www/html/} +\end{Highlighting} +\end{Shaded} + +Finalement, le benchmark du téléchargement du fichier avec la commande +\texttt{wget} a été lancé sur \texttt{debian2}: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d wget http://debian1.home/win10.tar.gz} +\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:53:53{-}{-} http://debian1.home/win10.tar.gz} +\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29} +\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.} +\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK} +\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]} +\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.2’} + +\ExtensionTok{win10.tar.gz.2}\NormalTok{ 100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{] 12.80G 110MB/s in 2m 0s } + +\ExtensionTok{2020{-}05{-}20}\NormalTok{ 09:55:53 (110 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.2’ saved [13743592907/13743592907]} + +\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:55:53{-}{-} http://debian1.home/win10.tar.gz} +\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29} +\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.} +\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK} +\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]} +\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.3’} + +\ExtensionTok{win10.tar.gz.3}\NormalTok{ 100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{] 12.80G 108MB/s in 2m 0s } + +\ExtensionTok{2020{-}05{-}20}\NormalTok{ 09:57:52 (109 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.3’ saved [13743592907/13743592907]} + +\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:57:52{-}{-} http://debian1.home/win10.tar.gz} +\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29} +\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.} +\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK} +\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]} +\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.4’} + +\ExtensionTok{win10.tar.gz.4}\NormalTok{ 100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{] 12.80G 108MB/s in 2m 1s } + +\ExtensionTok{2020{-}05{-}20}\NormalTok{ 09:59:53 (109 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.4’ saved [13743592907/13743592907]} + +\ExtensionTok{{-}{-}2020{-}05{-}20}\NormalTok{ 09:59:53{-}{-} http://debian1.home/win10.tar.gz} +\ExtensionTok{Resolving}\NormalTok{ debian1.home (debian1.home)}\ExtensionTok{...}\NormalTok{ 2a02:120b:c3e2:cab0:e6b9:7aff:feed:e0cd, 192.168.1.29} +\ExtensionTok{Connecting}\NormalTok{ to debian1.home (debian1.home)}\KeywordTok{|}\ExtensionTok{2a02}\NormalTok{:120b:c3e2:cab0:e6b9:7aff:feed:e0cd}\KeywordTok{|}\NormalTok{:}\ExtensionTok{80...}\NormalTok{ connected.} +\ExtensionTok{HTTP}\NormalTok{ request sent, awaiting response... 200 OK} +\ExtensionTok{Length}\NormalTok{: 13743592907 (13G) [}\ExtensionTok{application}\NormalTok{/}\ExtensionTok{x{-}gzip}\NormalTok{]} +\ExtensionTok{Saving}\NormalTok{ to: ‘win10.tar.gz.5’} + +\ExtensionTok{win10.tar.gz.5}\NormalTok{ 100\%[==============================================}\OperatorTok{\textgreater{}}\NormalTok{] 12.80G 110MB/s in 2m 0s } + +\ExtensionTok{2020{-}05{-}20}\NormalTok{ 10:01:52 (110 MB/s) }\ExtensionTok{{-}}\NormalTok{ ‘win10.tar.gz.5’ saved [13743592907/13743592907]} + + + \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}wget http://debian1.home/win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:} + + \ExtensionTok{46}\NormalTok{,792.73 msec task{-}clock \# 0.390 CPUs utilized ( +{-} 0.64\% )} + \ExtensionTok{417}\NormalTok{,641 context{-}switches \# 0.009 M/sec ( +{-} 0.31\% )} + \ExtensionTok{18}\NormalTok{ cpu{-}migrations \# 0.000 K/sec ( +{-} 8.25\% )} + \ExtensionTok{292}\NormalTok{ page{-}faults \# 0.006 K/sec ( +{-} 0.30\% )} + \ExtensionTok{61}\NormalTok{,311,321,905 cycles \# 1.310 GHz ( +{-} 0.25\% ) }\KeywordTok{(}\ExtensionTok{49.71\%}\KeywordTok{)} + \ExtensionTok{55}\NormalTok{,652,602,418 instructions \# 0.91 insn per cycle ( +{-} 0.20\% ) }\KeywordTok{(}\ExtensionTok{61.93\%}\KeywordTok{)} + \ExtensionTok{10}\NormalTok{,835,524,321 branches \# 231.564 M/sec ( +{-} 0.14\% ) }\KeywordTok{(}\ExtensionTok{62.04\%}\KeywordTok{)} + \ExtensionTok{229}\NormalTok{,073,690 branch{-}misses \# 2.11\% of all branches ( +{-} 1.03\% ) }\KeywordTok{(}\ExtensionTok{62.77\%}\KeywordTok{)} + \ExtensionTok{16}\NormalTok{,218,621,768 L1{-}dcache{-}loads \# 346.606 M/sec ( +{-} 0.16\% ) }\KeywordTok{(}\ExtensionTok{62.94\%}\KeywordTok{)} + \ExtensionTok{1}\NormalTok{,767,713,664 L1{-}dcache{-}load{-}misses \# 10.90\% of all L1{-}dcache hits ( +{-} 0.17\% ) }\KeywordTok{(}\ExtensionTok{62.78\%}\KeywordTok{)} + \ExtensionTok{392}\NormalTok{,258,789 LLC{-}loads \# 8.383 M/sec ( +{-} 1.79\% ) }\KeywordTok{(}\ExtensionTok{50.19\%}\KeywordTok{)} + \ExtensionTok{113}\NormalTok{,116,138 LLC{-}load{-}misses \# 28.84\% of all LL{-}cache hits ( +{-} 0.25\% ) }\KeywordTok{(}\ExtensionTok{49.57\%}\KeywordTok{)} + + \ExtensionTok{119.871}\NormalTok{ +{-} 0.235 seconds time elapsed ( +{-} 0.20\% )} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-ftp}{% +\subsection{\texorpdfstring{Tests de performance du protocole de +transfert de fichiers +\protect\hyperlink{acronym__FTP}{FTP}}{Tests de performance du protocole de transfert de fichiers FTP}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-ftp}} + +Le serveur \protect\hyperlink{acronym__FTP}{FTP} \texttt{vsftpd} a été +installé sur la machine \texttt{debian1} avec la commande suivante: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install vsftpd} +\end{Highlighting} +\end{Shaded} + +Le client \protect\hyperlink{acronym__FTP}{FTP} \texttt{ftp} a été +installé sur la machine \texttt{debian2} avec la commande suivante: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install ftp} +\end{Highlighting} +\end{Shaded} + +Par défaut, un utilisateur se connecte sur son dossier \texttt{home} sur +le serveur, donc il n'y a pas besoin de créer de configuration spéciale +car le fichier à \texttt{win10.tar.gz} est déjà présent dans le dossier +\texttt{/home/debian}. La commande suivante est lancée pour mesurer le +temps de transfert: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d lftp {-}u debian,debian {-}e }\StringTok{"get {-}e win10.tar.gz;quit"}\NormalTok{ debian1.home} +\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (109.61 MiB/s) } +\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (109.11 MiB/s) } +\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (108.81 MiB/s) } +\ExtensionTok{13743592907}\NormalTok{ bytes transferred in 120 seconds (109.01 MiB/s) } + + \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}lftp {-}u debian,debian {-}e get {-}e win10.tar.gz;quit debian1.home\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:} + + \ExtensionTok{43}\NormalTok{,760.05 msec task{-}clock \# 0.364 CPUs utilized ( +{-} 3.19\% )} + \ExtensionTok{416}\NormalTok{,480 context{-}switches \# 0.010 M/sec ( +{-} 0.21\% )} + \ExtensionTok{20}\NormalTok{ cpu{-}migrations \# 0.000 K/sec ( +{-} 17.44\% )} + \ExtensionTok{768}\NormalTok{ page{-}faults \# 0.018 K/sec ( +{-} 1.76\% )} + \ExtensionTok{50}\NormalTok{,319,107,200 cycles \# 1.150 GHz ( +{-} 1.87\% ) }\KeywordTok{(}\ExtensionTok{49.42\%}\KeywordTok{)} + \ExtensionTok{41}\NormalTok{,925,907,326 instructions \# 0.83 insn per cycle ( +{-} 2.58\% ) }\KeywordTok{(}\ExtensionTok{61.97\%}\KeywordTok{)} + \ExtensionTok{8}\NormalTok{,345,354,967 branches \# 190.707 M/sec ( +{-} 2.51\% ) }\KeywordTok{(}\ExtensionTok{62.63\%}\KeywordTok{)} + \ExtensionTok{192}\NormalTok{,939,322 branch{-}misses \# 2.31\% of all branches ( +{-} 3.57\% ) }\KeywordTok{(}\ExtensionTok{62.66\%}\KeywordTok{)} + \ExtensionTok{12}\NormalTok{,148,795,763 L1{-}dcache{-}loads \# 277.623 M/sec ( +{-} 2.11\% ) }\KeywordTok{(}\ExtensionTok{63.06\%}\KeywordTok{)} + \ExtensionTok{1}\NormalTok{,646,404,955 L1{-}dcache{-}load{-}misses \# 13.55\% of all L1{-}dcache hits ( +{-} 0.76\% ) }\KeywordTok{(}\ExtensionTok{62.79\%}\KeywordTok{)} + \ExtensionTok{516}\NormalTok{,891,020 LLC{-}loads \# 11.812 M/sec ( +{-} 0.79\% ) }\KeywordTok{(}\ExtensionTok{49.87\%}\KeywordTok{)} + \ExtensionTok{112}\NormalTok{,961,435 LLC{-}load{-}misses \# 21.85\% of all LL{-}cache hits ( +{-} 0.29\% ) }\KeywordTok{(}\ExtensionTok{49.56\%}\KeywordTok{)} + + \ExtensionTok{120.151}\NormalTok{ +{-} 0.213 seconds time elapsed ( +{-} 0.18\% )} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-nfs}{% +\subsection{\texorpdfstring{Tests de performance du protocole de +transfert de fichiers +\protect\hyperlink{acronym__NFS}{NFS}}{Tests de performance du protocole de transfert de fichiers NFS}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-nfs}} + +Le serveur \protect\hyperlink{acronym__NFS}{NFS} est installé et +configuré avec les commandes suivantes sur \texttt{debian1}: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install nfs{-}kernel{-}server} +\FunctionTok{mkdir}\NormalTok{ /nfsroot} +\FunctionTok{cp}\NormalTok{ win10.tar.gz /nfsroot/} +\BuiltInTok{echo} \StringTok{\textquotesingle{}/nfsroot/ *(rw,fsid=0,no\_root\_squash,no\_subtree\_check,async,insecure)\textquotesingle{}} \OperatorTok{\textgreater{}\textgreater{}}\NormalTok{ /etc/exports} +\ExtensionTok{systemctl}\NormalTok{ restart nfs{-}server} +\end{Highlighting} +\end{Shaded} + +Le client partage est monté sur le client \texttt{debian2} avec les +commandes suivantes: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{su} +\ExtensionTok{apt}\NormalTok{ install nfs{-}common} +\FunctionTok{mkdir}\NormalTok{ /nfsroot} +\FunctionTok{mount}\NormalTok{ {-}t nfs debian1.home:/nfsroot /nfsroot} +\BuiltInTok{exit} +\end{Highlighting} +\end{Shaded} + +Finalement, le benchmark de la copie a été lancé sur \texttt{debian2}: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d cp {-}f /nfsroot/win10.tar.gz \textasciitilde{}/win10.tar.gz} + + \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}cp {-}f /nfsroot/win10.tar.gz /home/debian/win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:} + + \ExtensionTok{17}\NormalTok{,076.43 msec task{-}clock \# 0.142 CPUs utilized ( +{-} 7.26\% )} + \ExtensionTok{13}\NormalTok{,716 context{-}switches \# 0.803 K/sec ( +{-} 3.93\% )} + \ExtensionTok{3}\NormalTok{ cpu{-}migrations \# 0.000 K/sec ( +{-} 22.88\% )} + \ExtensionTok{360}\NormalTok{ page{-}faults \# 0.021 K/sec ( +{-} 0.24\% )} + \ExtensionTok{29}\NormalTok{,329,681,962 cycles \# 1.718 GHz ( +{-} 0.84\% ) }\KeywordTok{(}\ExtensionTok{50.10\%}\KeywordTok{)} + \ExtensionTok{39}\NormalTok{,303,308,222 instructions \# 1.34 insn per cycle ( +{-} 0.27\% ) }\KeywordTok{(}\ExtensionTok{62.64\%}\KeywordTok{)} + \ExtensionTok{7}\NormalTok{,592,336,916 branches \# 444.609 M/sec ( +{-} 0.28\% ) }\KeywordTok{(}\ExtensionTok{62.68\%}\KeywordTok{)} + \ExtensionTok{79}\NormalTok{,751,186 branch{-}misses \# 1.05\% of all branches ( +{-} 0.28\% ) }\KeywordTok{(}\ExtensionTok{62.46\%}\KeywordTok{)} + \ExtensionTok{10}\NormalTok{,749,309,904 L1{-}dcache{-}loads \# 629.482 M/sec ( +{-} 0.40\% ) }\KeywordTok{(}\ExtensionTok{62.54\%}\KeywordTok{)} + \ExtensionTok{1}\NormalTok{,097,825,933 L1{-}dcache{-}load{-}misses \# 10.21\% of all L1{-}dcache hits ( +{-} 1.45\% ) }\KeywordTok{(}\ExtensionTok{62.44\%}\KeywordTok{)} + \ExtensionTok{230}\NormalTok{,105,352 LLC{-}loads \# 13.475 M/sec ( +{-} 1.25\% ) }\KeywordTok{(}\ExtensionTok{49.92\%}\KeywordTok{)} + \ExtensionTok{13}\NormalTok{,665,720 LLC{-}load{-}misses \# 5.94\% of all LL{-}cache hits ( +{-} 8.55\% ) }\KeywordTok{(}\ExtensionTok{49.87\%}\KeywordTok{)} + + \ExtensionTok{120.417}\NormalTok{ +{-} 0.119 seconds time elapsed ( +{-} 0.10\% )} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-smb}{% +\subsection{\texorpdfstring{Tests de performance du protocole de +transfert de fichiers +\protect\hyperlink{acronym__SMB}{SMB}}{Tests de performance du protocole de transfert de fichiers SMB}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-smb}} + +Le serveur \protect\hyperlink{acronym__SMB}{SMB} \texttt{samba} est +installé et configuré avec les commandes suivantes sur \texttt{debian1}: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install samba} +\ExtensionTok{smbpasswd}\NormalTok{ {-}a debian } +\FunctionTok{cat} \StringTok{\textquotesingle{}[debian]} +\StringTok{path = /home/debian} +\StringTok{valid users = debian} +\StringTok{read only = no\textquotesingle{}} \OperatorTok{\textgreater{}\textgreater{}}\NormalTok{ /etc/samba/smb.conf} +\ExtensionTok{systemctl}\NormalTok{ restart smbd} +\end{Highlighting} +\end{Shaded} + +Le client \protect\hyperlink{acronym__SMB}{SMB} \texttt{samba} est +installé sur le client avec la commande suivante: + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{apt}\NormalTok{ install samba{-}client} +\end{Highlighting} +\end{Shaded} + +Finalement, le benchmark de la copie est lancé sur \texttt{debian2}: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\ExtensionTok{perf}\NormalTok{ stat {-}r 4 {-}d smbclient {-}U debian\%debian //debian1.home/debian {-}c }\StringTok{\textquotesingle{}get win10.tar.gz\textquotesingle{}} +\ExtensionTok{Unable}\NormalTok{ to initialize messaging context} +\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (109684.9 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 109684.9 KiloBytes/sec}\KeywordTok{)} +\ExtensionTok{Unable}\NormalTok{ to initialize messaging context} +\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (109443.4 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 109443.4 KiloBytes/sec}\KeywordTok{)} +\ExtensionTok{Unable}\NormalTok{ to initialize messaging context} +\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (110095.1 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 110095.1 KiloBytes/sec}\KeywordTok{)} +\ExtensionTok{Unable}\NormalTok{ to initialize messaging context} +\ExtensionTok{getting}\NormalTok{ file \textbackslash{}win10.tar.gz of size 13743592907 as win10.tar.gz (109244.7 KiloBytes/sec) }\KeywordTok{(}\ExtensionTok{average}\NormalTok{ 109244.7 KiloBytes/sec}\KeywordTok{)} + + \ExtensionTok{Performance}\NormalTok{ counter stats for }\StringTok{\textquotesingle{}smbclient {-}U debian\%debian //debian1.home/debian {-}c get win10.tar.gz\textquotesingle{}}\NormalTok{ (4 runs)}\BuiltInTok{:} + + \ExtensionTok{35}\NormalTok{,488.67 msec task{-}clock \# 0.290 CPUs utilized ( +{-} 0.49\% )} + \ExtensionTok{352}\NormalTok{,535 context{-}switches \# 0.010 M/sec ( +{-} 0.24\% )} + \ExtensionTok{14}\NormalTok{ cpu{-}migrations \# 0.000 K/sec ( +{-} 19.12\% )} + \ExtensionTok{3}\NormalTok{,915 page{-}faults \# 0.110 K/sec ( +{-} 3.20\% )} + \ExtensionTok{35}\NormalTok{,420,663,303 cycles \# 0.998 GHz ( +{-} 0.45\% ) }\KeywordTok{(}\ExtensionTok{50.50\%}\KeywordTok{)} + \ExtensionTok{35}\NormalTok{,124,728,140 instructions \# 0.99 insn per cycle ( +{-} 2.40\% ) }\KeywordTok{(}\ExtensionTok{62.99\%}\KeywordTok{)} + \ExtensionTok{6}\NormalTok{,843,251,403 branches \# 192.829 M/sec ( +{-} 2.43\% ) }\KeywordTok{(}\ExtensionTok{62.60\%}\KeywordTok{)} + \ExtensionTok{115}\NormalTok{,346,267 branch{-}misses \# 1.69\% of all branches ( +{-} 1.05\% ) }\KeywordTok{(}\ExtensionTok{62.27\%}\KeywordTok{)} + \ExtensionTok{9}\NormalTok{,922,177,546 L1{-}dcache{-}loads \# 279.587 M/sec ( +{-} 1.82\% ) }\KeywordTok{(}\ExtensionTok{61.98\%}\KeywordTok{)} + \ExtensionTok{1}\NormalTok{,307,137,276 L1{-}dcache{-}load{-}misses \# 13.17\% of all L1{-}dcache hits ( +{-} 0.23\% ) }\KeywordTok{(}\ExtensionTok{62.22\%}\KeywordTok{)} + \ExtensionTok{437}\NormalTok{,456,998 LLC{-}loads \# 12.327 M/sec ( +{-} 4.03\% ) }\KeywordTok{(}\ExtensionTok{50.00\%}\KeywordTok{)} + \ExtensionTok{159}\NormalTok{,643,085 LLC{-}load{-}misses \# 36.49\% of all LL{-}cache hits ( +{-} 8.69\% ) }\KeywordTok{(}\ExtensionTok{50.44\%}\KeywordTok{)} + + \ExtensionTok{122.565}\NormalTok{ +{-} 0.215 seconds time elapsed ( +{-} 0.18\% )} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tests-de-performance-du-protocole-de-transfert-de-fichiers-ipfs}{% +\subsection{\texorpdfstring{Tests de performance du protocole de +transfert de fichiers +\protect\hyperlink{acronym__IPFS}{IPFS}}{Tests de performance du protocole de transfert de fichiers IPFS}}\label{tests-de-performance-du-protocole-de-transfert-de-fichiers-ipfs}} + +Sur chacune des machines, le langage \emph{Go} doit être installé avec +les commandes suivantes: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{wget}\NormalTok{ https://dl.google.com/go/go1.14.3.linux{-}amd64.tar.gz} +\FunctionTok{tar}\NormalTok{ {-}C /usr/local {-}xzf go1.14.3.linux{-}amd64.tar.gz} +\BuiltInTok{echo} \StringTok{\textquotesingle{}export PATH=$PATH:/usr/local/go/bin\textquotesingle{}} \OperatorTok{\textgreater{}\textgreater{}}\NormalTok{ /etc/profile} +\BuiltInTok{export} \VariableTok{PATH=$PATH}\NormalTok{:/usr/local/go/bin} +\end{Highlighting} +\end{Shaded} + +Ensuite, \protect\hyperlink{acronym__IPFS}{IPFS} est installé sur +chacune des machines: + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{wget}\NormalTok{ https://dist.ipfs.io/go{-}ipfs/v0.5.1/go{-}ipfs\_v0.5.1\_linux{-}amd64.tar.gz} +\FunctionTok{tar}\NormalTok{ xvzf go{-}ipfs\_v0.5.1\_linux{-}amd64.tar.gz} +\FunctionTok{mv}\NormalTok{ go{-}ipfs/ipfs /usr/local/bin/ipfs} +\end{Highlighting} +\end{Shaded} + +Un noeud \protect\hyperlink{acronym__IPFS}{IPFS} est ensuite initialisé +sur chacune des machines: + +\begin{Shaded} +\begin{Highlighting}[] +\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ init} +\end{Highlighting} +\end{Shaded} + +Pour avoir un réseau IPFS privé, on génère une clé de \emph{swarm} sur +\texttt{debian1} et on la copie sur \texttt{debian2}, en lançant les +commandes suivantes sur la machine \texttt{debian1}: + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{echo}\NormalTok{ {-}e }\StringTok{"/key/swarm/psk/1.0.0/\textbackslash{}n/base16/\textbackslash{}n}\KeywordTok{\textasciigrave{}}\FunctionTok{tr}\NormalTok{ {-}dc }\StringTok{\textquotesingle{}a{-}f0{-}9\textquotesingle{}} \OperatorTok{\textless{}}\NormalTok{ /dev/urandom }\KeywordTok{|} \FunctionTok{head}\NormalTok{ {-}c64}\KeywordTok{\textasciigrave{}}\StringTok{"} \OperatorTok{\textgreater{}}\NormalTok{ \textasciitilde{}/.ipfs/swarm.key} +\FunctionTok{scp}\NormalTok{ /home/debian/.ipfs/swarm.key debian2.home:/home/debian/.ipfs/swarm.key} +\end{Highlighting} +\end{Shaded} + +Maintenant, il faut configurer un noeud d'amorçage (\emph{bootstrap +node}) sur \texttt{debian1}, qui sera utilisé par \texttt{debian2} pour +se connecter au réseau \protect\hyperlink{acronym__IPFS}{IPFS} privé +séparé du réseau public qui utilise d'autres noeuds d'amorçage. Pour +faire cela, il faut commencer par supprimer la liste des noeuds +d'amorçage publics sur les deux machines avec la commande suivante: + +\begin{Shaded} +\begin{Highlighting}[] +\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ bootstrap rm {-}{-}all} +\end{Highlighting} +\end{Shaded} + +Ensuite, il faut récupérer l'identifiant unique \texttt{PeerID} de +\texttt{debian1} pour pouvoir le configurer comme un noeud d'amorçage +dans \texttt{debian2}. La commande suivante est lancée sur +\texttt{debian1}: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ config show }\KeywordTok{|} \FunctionTok{grep} \StringTok{"PeerID"} + \StringTok{"PeerID"}\NormalTok{: }\StringTok{"QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei"} +\end{Highlighting} +\end{Shaded} + +L'identitfiant unique \texttt{PeerID} de \texttt{debian1} retourné par +la commande est: + +\texttt{QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei} + +On peutmaintenant le rajouter dans la configuration des noeuds +d'amorçage des deux machines en lançant la commande suivante sur chacune +d'entre elle: + +\begin{Shaded} +\begin{Highlighting}[] +\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ bootstrap add /dnsaddr/debian1.home/p2p/QmX9MYUQhjKxua6HQMtpzaZd9ui4gGT75FJgAxeQJC47Ei} +\end{Highlighting} +\end{Shaded} + +Maintenant, le \emph{daemon} \protect\hyperlink{acronym__IPFS}{IPFS} +peut être lancé sur chacune des machines. La variable d'environnement +\texttt{LIBP2P\_FORCE\_PNET=1} est définie pour forcer les échanges à se +faire sur un réseau privé. + +\begin{Shaded} +\begin{Highlighting}[] +\BuiltInTok{export} \VariableTok{LIBP2P\_FORCE\_PNET=}\NormalTok{1} +\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ daemon} +\end{Highlighting} +\end{Shaded} + +Dans ce cas, le \emph{daemon} a été exécuté en avant plan et un second +terminal sera ouvert pour la suite des commandes. Dans une configuration +plus durable, il faudrait le faire tourner en arrière plan, par exemple +avec une unité systemd. + +Maintenant on peut partager l'image sur le réseau avec la commande +suivante sur \texttt{debian1}: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ add win10.tar.gz } +\ExtensionTok{added}\NormalTok{ QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv win10.tar.gz} + \ExtensionTok{12.80}\NormalTok{ GiB / 12.80 GiB [==============================================================================] 100.00\%} +\end{Highlighting} +\end{Shaded} + +Le temps d'ajout de l'image a pris plus de trois minutes. À la fin, la +référence du fichier, qui l'identifie de manière unique sur le réseau, +est affichée: \texttt{QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv}. + +On peut maintenant tenter de récupérer le fichier depuis +\texttt{debian2}: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{$ }\VariableTok{IPFS\_PATH=}\NormalTok{\textasciitilde{}/.ipfs }\ExtensionTok{ipfs}\NormalTok{ get QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv} +\ExtensionTok{Saving}\NormalTok{ file(s) }\ExtensionTok{to}\NormalTok{ QmRm8As8ECuQoLq3UWowsxJ8mh89txLvpUh7A2mgw5pMhv} + \ExtensionTok{12.80}\NormalTok{ GiB / 12.80 GiB [==============================================================================] 100.00\% 7m27s} +\end{Highlighting} +\end{Shaded} + +Le transfert a pris \(7m27s = 447s\). C'est beaucoup trop long pour nos +besoins. Le benchmark avec \texttt{perf} n'a même pas été effectué au vu +de ce résultat. + +\hypertarget{choix-du-protocole-de-transfert-de-fichiers}{% +\subsection{Choix du protocole de transfert de +fichiers}\label{choix-du-protocole-de-transfert-de-fichiers}} + +La table \ref{table_protocols} ainsi que la figure \ref{chart_protocols} +récapitulent les résultats mesurés pour chacun des protocoles testés. On +peut remarquer que pour tous les protocoles, sauf +\protect\hyperlink{acronym__IPFS}{IPFS}, les résultats sont proches de +120 secondes. Cette durée montre que pour ces protocoles, on est proches +de la limite théorique de gigabit ethernet: + +\[ \frac{13743592907 [B]}{120 [s]} = \frac{109948743256 [b]}{120 [s]} \approx 916239527 [b/s] \approx 0.916 [Gb/s] \approx 1 [Gb/s] \] + +On peut donc conclure que le choix du protocole +\protect\hyperlink{acronym__NFS}{NFS} est approprié car les autres +protocole n'accélèrent pas considérablement la vitesse de transfert +d'une image. + +\clearpage + +\begin{longtable}[]{@{}llll@{}} +\caption{Table des mesures de la durée de la copie d'un fichier avec +différents protocoles \label{table_protocols}}\tabularnewline +\toprule +\begin{minipage}[b]{0.22\columnwidth}\raggedright +Protocole\strut +\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright +Durée (secondes)\strut +\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright +Écart entre les mesures (± secondes)\strut +\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright +Nombre de mesures\strut +\end{minipage}\tabularnewline +\midrule +\endfirsthead +\toprule +\begin{minipage}[b]{0.22\columnwidth}\raggedright +Protocole\strut +\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright +Durée (secondes)\strut +\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright +Écart entre les mesures (± secondes)\strut +\end{minipage} & \begin{minipage}[b]{0.22\columnwidth}\raggedright +Nombre de mesures\strut +\end{minipage}\tabularnewline +\midrule +\endhead +\begin{minipage}[t]{0.22\columnwidth}\raggedright +SCP\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +119.8094\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +0.0182\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +4\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.22\columnwidth}\raggedright +HTTP\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +119.871\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +0.235\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +4\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.22\columnwidth}\raggedright +FTP\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +120.151\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +0.213\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +4\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.22\columnwidth}\raggedright +NFS\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +120.417\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +0.119\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +4\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.22\columnwidth}\raggedright +SMB\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +122.565\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +0.215\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +4\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.22\columnwidth}\raggedright +IPFS\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +447\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +0\strut +\end{minipage} & \begin{minipage}[t]{0.22\columnwidth}\raggedright +1\strut +\end{minipage}\tabularnewline +\bottomrule +\end{longtable} + +\begin{figure} +\centering +\includegraphics{charts/chart_protocols.svg} +\caption{Graphique des mesures de la durée de la copie d'un fichier avec +différents protocoles\label{chart_protocols}} +\end{figure} + +\clearpage + +\hypertarget{ruxe9duction-de-la-taille-des-images}{% +\section{Réduction de la taille des +images}\label{ruxe9duction-de-la-taille-des-images}} + +Dans le système initial, une image prend beaucoup de place. Chaque image +est une copie exacte des partitions d'un système effectuée avec l'outil +\texttt{dd}, qui est ensuite compressée avec \texttt{gzip}. Cette taille +massive a plusieurs impacts négatifs: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + Ralentissement de la vitesse de déploiement: il y a plus de données à + transmettre à travers le réseau et à copier sur le disque à chaque + déploiement. +\item + Réduction du nombre d'images pouvant être mise en cache en même temps. +\item + Réduction du nombre d'images pouvant être stockées sur le serveur. +\end{enumerate} + +L'outil \emph{Clonezilla} a été considéré pour créer des images de +taille plus réduites. Les images clonezilla sont créées avec l'outil +\emph{Partclone}. Cet outil utilise une approche différente de +\texttt{dd}: seuls les blocs utilisés sur les partitions sont copiés +dans le fichier de l'image et seuls les blocs utilisés sont ensuite +restaurés. Les images contentant uniquement les blocs utilisés sont +ensuite compressées avec \texttt{gzip}. + +La taille des images créées avec clonezilla a été comparée à la taille +des images déployées et à la taille des images juste compressées avec +\texttt{gzip}, avec trois images: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + Une petite image du système \emph{Debian}, comparée dans le tableau + \ref{table_image_sizes_debian} et la figure + \ref{chart_image_sizes_debian} +\item + Une image moyenne du système \emph{Xubuntu}, comparée dans le tableau + \ref{table_image_sizes_xubuntu} et la figure + \ref{chart_image_sizes_xubuntu} +\item + Une grande image du système \emph{Windows 10}, comparée dans le + tableau \ref{table_image_sizes_win10} et la figure + \ref{chart_image_sizes_win10} +\end{enumerate} + +\clearpage + +\begin{longtable}[]{@{}ll@{}} +\caption{Table des tailles d'une petite image \emph{Debian} dans +plusieurs formats \label{table_image_sizes_debian}}\tabularnewline +\toprule +Type & Taille (GB)\tabularnewline +\midrule +\endfirsthead +\toprule +Type & Taille (GB)\tabularnewline +\midrule +\endhead +Déployé & 3.220176384\tabularnewline +Gzip & 0.496763976\tabularnewline +Clonezilla & 0.29615293\tabularnewline +\bottomrule +\end{longtable} + +\begin{figure} +\centering +\includegraphics{charts/chart_image_sizes_debian.svg} +\caption{Graphique des tailles d'une petite image \emph{Debian} dans +plusieurs formats\label{chart_image_sizes_debian}} +\end{figure} + +\clearpage + +\begin{longtable}[]{@{}ll@{}} +\caption{Table des tailles d'une image \emph{Xubuntu} moyenne dans +plusieurs formats \label{table_image_sizes_xubuntu}}\tabularnewline +\toprule +Type & Taille (GB)\tabularnewline +\midrule +\endfirsthead +\toprule +Type & Taille (GB)\tabularnewline +\midrule +\endhead +Déployé & 200.511847936\tabularnewline +Gzip & 2.031040094\tabularnewline +Clonezilla & 1.840064982\tabularnewline +\bottomrule +\end{longtable} + +\begin{figure} +\centering +\includegraphics{charts/chart_image_sizes_xubuntu.svg} +\caption{Graphique des tailles d'une image \emph{Xubuntu} moyenne dans +plusieurs formats\label{chart_image_sizes_xubuntu}} +\end{figure} + +\clearpage + +\begin{longtable}[]{@{}ll@{}} +\caption{Table des tailles d'une grande image \emph{Windows 10} dans +plusieurs formats \label{table_image_sizes_win10}}\tabularnewline +\toprule +Type & Taille (GB)\tabularnewline +\midrule +\endfirsthead +\toprule +Type & Taille (GB)\tabularnewline +\midrule +\endhead +Déployé & 512.09515776\tabularnewline +Gzip & 31.9568621077\tabularnewline +Clonezilla & 12.855020882\tabularnewline +\bottomrule +\end{longtable} + +\begin{figure} +\centering +\includegraphics{charts/chart_image_sizes_win10.svg} +\caption{Graphique des tailles d'une grande image \emph{Windows 10} dans +plusieurs formats\label{chart_image_sizes_win10}} +\end{figure} + +On peut voir que les images créées avec \emph{Clonezilla} prennent +environ la moitié de la taille des images simplement compressées avec +\texttt{gzip}. Les résultats de ces mesures de tailles ont donc motivé +la modification du système de déploiement pour que des images +\emph{Clonezilla} puissent être utilisées. + +\hypertarget{amuxe9lioration-de-los-de-duxe9ploiement}{% +\section{Amélioration de l'OS de +déploiement}\label{amuxe9lioration-de-los-de-duxe9ploiement}} + +\hypertarget{buildroot-loutil-de-construction-de-los-de-duxe9ploiement-initial}{% +\subsection{\texorpdfstring{\emph{Buildroot}: l'outil de construction de +l'\protect\hyperlink{acronym__OS}{OS} de déploiement +initial}{Buildroot: l'outil de construction de l'OS de déploiement initial}}\label{buildroot-loutil-de-construction-de-los-de-duxe9ploiement-initial}} + +L'image du système d'exploitation \emph{Linux} servant à l'exécution des +scripts de déploiement dans le système initial est construit avec +\emph{Buildroot}. Cet outil permet de générer compiler un noyau linux, +de créer un système de fichier racine minimal et de générer un chargeur +d'amorçage (\emph{bootloader}). Cet outil est principalement utilisé +pour générer des systèmes embarqués. Il avait été choisi dans le système +initial car il permettait de créer une image +d'\protect\hyperlink{acronym__OS}{OS} très petite qui peut être +téléchargée très rapidement sur le réseau. + +\hypertarget{probluxe8mes-avec_buildroot_-pour-construire-los-de-duxe9ploiement}{% +\subsection{\texorpdfstring{Problèmes avec\_Buildroot\_ pour construire +l'\protect\hyperlink{acronym__OS}{OS} de +déploiement}{Problèmes avec\_Buildroot\_ pour construire l'OS de déploiement}}\label{probluxe8mes-avec_buildroot_-pour-construire-los-de-duxe9ploiement}} + +Buildroot permet d'installer facilement les paquets de nombreuses +applications dans le système de fichiers de l'image. Malheureusement, +aucun paquet n'existe pour \emph{Clonezilla}. L'idée de créer un paquet +pour ce logiciel a été étudiée, mais n'a pas été retenue, car il +nécessite de nombreuses dépendances, et bien que cela aurait été +possible de le faire, le temps à investir dans cette tâche aurait été +considérable, et le résultat n'aurait été testable qu'une fois cette +tâche accomplie. De plus, pour chaque mise à jour de \emph{Clonezilla} +que l'on souhaiterait utiliser, par exemple pour profiter de +l'implémentation d'un nouveau système de fichier ou des résolutions de +bugs, il faudrait remettre à jour ce paquet. + +\hypertarget{choix-de-debian-pour-remplauxe7er-buildroot}{% +\subsection{\texorpdfstring{Choix de \emph{Debian} pour remplaçer +\emph{Buildroot}}{Choix de Debian pour remplaçer Buildroot}}\label{choix-de-debian-pour-remplauxe7er-buildroot}} + +Pour simplifier l'utilisation de \emph{Clonezilla} et de nombreux autres +outils, le passsage à une solution alternative à \emph{Buildroot} a été +décidé. De nombreuses distributions Linux proposent des paquets pour +\emph{Clonezilla}. Les plus intéressantes sont \emph{Debian} et +\emph{Ubuntu} car l'équipe de \emph{Clonezilla} les utilise pour la +version \emph{live-CD} de l'outil. Ils développent et distribuent +eux-mêmes des paquets au format \texttt{deb} pour ces deux +distributions. Un travail a donc été entrepris pour remplacer +l'\protect\hyperlink{acronym__OS}{OS} de déploiement basé sur +\emph{Buildroot} par un \protect\hyperlink{acronym__OS}{OS} basé sur +\emph{Debian}. Ce choix permettra d'utiliser facilement les nombreux +paquets disponibles pour cette distribution si il y en a besoin dans les +versions futures du système de déploiement. + +Le problème avec l'utilisation d'une distribution telle que +\emph{Debian} est que la taille du système de fichiers racine n'est pas +aussi réduite que ce que l'on peut obtenir avec \emph{Buildroot}. La +stratégie d'exécution du système d'exploitation a donc été modifiée pour +tenir compte de ce changement de taille. Le système initial chargeait à +chaque fois une image entière du système de fichiers racine (environ +100MB) en mémoire. Sur le nouveau système, seul le noyau linux est +téléchargé, ainsi que l'image \emph{initrd}. Le sytème de fichier racine +est monté à partir d'un partage \protect\hyperlink{acronym__NFS}{NFS}. +Cela permet d'avoir un système de fichiers racine contenant beaucoup +plus de données, mais de ne télécharger à travers le réseau que ceux qui +sont utilisés, au moment où ils sont utilisés. + +\hypertarget{cruxe9ation-du-systuxe8me-de-fichiers-racine-debian-avec-multistrap}{% +\subsection{\texorpdfstring{Création du système de fichiers racine +\emph{Debian} avec +\emph{multistrap}}{Création du système de fichiers racine Debian avec multistrap}}\label{cruxe9ation-du-systuxe8me-de-fichiers-racine-debian-avec-multistrap}} + +Le système de fichiers racine accessible via un partage +\protect\hyperlink{acronym__NFS}{NFS} est créé en utilisant l'outil +\emph{multistrap} fourni par Debian. Cet outil permet de générer un +système de fichiers racine pour une architecture donnée, et d'y +installer une liste de paquets choisie. Une fois le sytème de fichiers +racine créé, certains fichiers de configurations doivent sont créés +manuellement: + +\begin{itemize} +\tightlist +\item + \texttt{/etc/hostname}: le nom d'hôte de la machine. Dans notre cas, + la valeur \texttt{bootiful-deployer} a été entrée. +\item + \texttt{/etc/hosts}: la liste des hôtes connus. Dans notre cas, une + seule entrée est nécessaire: \texttt{127.0.0.1\ \ localhost} +\item + \texttt{/etc/fstab}: la liste de systèmes de fichiers à monter au + démarrage. Pour palier au fait que le système de fichiers racine sera + en lecture seule, plusieurs dossiers ont été montés en \texttt{tmpfs} + (système de fichier temporaire chargé en mémoire) afin de permettre + aux processus du système d'y écrire des fichiers: \texttt{/tmp}, + \texttt{/dev}, \texttt{/var/run}, \texttt{/var/lock}, + \texttt{/var/tmp}, \texttt{/var/log}, \texttt{/var/lib/clonezilla}, + \texttt{/bootiful} +\item + \texttt{/etc/mtab}: ce fichier contient la liste des volumes + actuellement montés. Au début, il n'avait pas été créé et cela causait + une erreur fatale dans \emph{Partclone}, qui n'arrivait pas à détecter + si une partition était montée ou non. Cela a été résolu en créant ce + fichier comme un lien symbolique vers le fichier \texttt{/proc/mounts} + qui est un faux fichier généré en mémoire par le noyau \emph{Linux} et + qui contient la liste des points des volumes actuellement montés. +\end{itemize} + +Quelques autres fichiers sont rajoutés/remplacés dans le système de +fichiers racine: + +\begin{itemize} +\tightlist +\item + \texttt{/etc/initramfs.conf}: configuration pour générer une image + \emph{initramfs} qui va initialiser montage du système de fichiers + racine depuis un partage NFS +\item + \texttt{/etc/systemd/system/bootiful-deploy-log.service}: + configuration d'unité \emph{Systemd} qui permet de lancer le script + d'initialisation du déploiement d'images au démarrage +\item + \texttt{/usr/bin/bootiful-deploy-init}: script d'initialisation du + déploiement d'images. Lance le script de déploiement d'images et + affiche permet de choisir quelle action effectuer si le déploiement ne + se termine pas avec succès. +\item + \texttt{/usr/bin/bootiful-common}: script contenant des fonctions + communes aux différents script de déploiement \texttt{bootiful-*}. Il + n'est pas conçu pour être exécuté directement, mais à être chargé par + les autres scripts avec la commande \texttt{source}. +\item + \texttt{/usr/bin/bootiful-deploy}: script permettant le choix de + l'image, des configurations (si applicable), et d'effectuer le + déploiement de l'image choisie. +\item + \texttt{/usr/bin/bootiful-save-image}: script utilitaire permettant de + construire une image avec \emph{dd}. Il a été utilisé pour construire + les images des benchmarks, mais il vaut mieux utiliser le live-cd + \emph{Clonezilla} pour la création d'une nouvelle image. +\item + \texttt{/usr/bin/bootiful-reset-cache}: script utilitaire permettant + de réinitialiser le cache des images. Il a été utilisé pour pouvoir + facilement réinitialiser le cache lors des benchmarks. +\end{itemize} + +Ensuite, la commande \texttt{chroot} est utilisée pour remplacer +temporairement le système de fichier racine actuel de la machine (celle +qui a lancé \emph{multistrap}) par celui qui vient d'être créé. +Plusieurs commandes sont lancées dans cet environnement pour initialiser +le système: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \texttt{dpkg\ -\/-configure\ -a}: lance la configuration + post-installation de tous les paquets \emph{Debian}. +\item + \texttt{apt-get\ autoremove\ -\/-purge\ \&\&\ apt-get\ clean}: + désinstalle les dépendances inutiles et vide le cache des paquets. +\item + \texttt{update-initramfs\ -u}: regénère une image \emph{initramfs} qui + va initialiser montage du système de fichiers racine depuis un partage + NFS en utilisant la configuration rajoutée précédemment dans + \texttt{/etc/initramfs.conf}. +\item + \texttt{systemctl\ enable\ bootiful-deploy-log.service}: active + l'unité \emph{Systemd} de lancement automatique du script de + déploiement décrite dans le fichier + \texttt{/etc/systemd/system/bootiful-deploy-log.service} ajouté + précédemment. +\end{enumerate} + +\hypertarget{automatisation-de-la-cruxe9ation-du-systuxe8me-de-duxe9ploiement-avec-docker}{% +\subsection{\texorpdfstring{Automatisation de la création du système de +déploiement avec +\emph{Docker}}{Automatisation de la création du système de déploiement avec Docker}}\label{automatisation-de-la-cruxe9ation-du-systuxe8me-de-duxe9ploiement-avec-docker}} + +Pour utiliser l'outil \emph{multistrap} afin de créer un système de +fichier racine \emph{Debian}, il faut que le programme +\texttt{multistrap} soit lancé depuis un système d'exploitation +\emph{Debian}. Pour rendre la création de ce système de fichiers +possible depuis d'autres distributions Linux, un conteneur \emph{Docker} +a été créé. + +Le processus de création du système décrit dans la section précédente a +été automatisé et est décrit dans un fichier \texttt{Dockerfile}. La +nouvelle fonctionnalité de Docker de construction en plusieurs +``étages'' (\emph{multi-stage build}) a été utilisée. Trois ``étages'' +sont définis: + +\begin{itemize} +\tightlist +\item + \texttt{build-stage}: depuis une image \texttt{debian:bullseye} + construit une image de système de fichier racine \emph{Debian} et le + configure comme décrit dans la section précédente. Le dossier + \texttt{/boot/} est sorti du dossier du système de fichiers racine + nouvellement créé et déplacé dans \texttt{/multistrap/boot}. Le reste + du système de fichier racine (tout sauf \texttt{/boot/} est compressé + dans une archive \texttt{/multistrap/nfsroot.tar.gz}. Cette étape est + un pré-requis des étapes suivantes et n'est normalement pas exécutée + directement. +\item + \texttt{nfs-export-stage}: dans une image vide + (\texttt{FROM\ scratch}), copie le fichier + \texttt{/multistrap/nfsroot.tar.gz} depuis l'étape + \texttt{build-stage}. L'image de cette étape contient donc uniquement + un fichier à sa racine, \texttt{nfsroot.tar.gz}, qui pourra être + exporté et extrait dans le serveur + \protect\hyperlink{acronym__NFS}{NFS} pour être partagé. +\item + \texttt{tftp-export-stage}: dans une image vide + (\texttt{FROM\ scratch}), copie le contenu du dossier + \texttt{/multistrap/boot} depuis l'étape \texttt{build-stage}. L'image + de cette étape contient donc uniquement le contenu de la du dossier + \texttt{/boot/} de la partition racine, c'est à dire les fichiers + \texttt{initrd.img} (image \emph{initrd} initialisant le système de + fichier racine depuis \protect\hyperlink{acronym__NFS}{NFS}) et + \texttt{vmlinuz} (le noyau \emph{Linux}). Le contenu de cette image + pourra être exporté dans le dossier partagé du serveur + \protect\hyperlink{acronym__TFTP}{TFTP}, afin d'être téléchargé depuis + le logiciel d'amorçage \protect\hyperlink{acronym__GRUB}{GRUB} pour + lancer le système de déploiement. +\end{itemize} + +Le fichier \texttt{Makefile} à la racine du projet définit des cibles et +des recettes pour exécuter \texttt{docker\ build} exporter les données +des deux derniers étages dans leurs dossiers respectifs: + +\begin{itemize} +\tightlist +\item + le contenu de l'étage \texttt{nfs-export-stage}, c'est à dire + l'archive \texttt{nfsroot.tar.gz}, est exportée dans le dossier + \texttt{nfs/}. Elle sera extraite dans le serveur + \protect\hyperlink{acronym__NFS}{NFS}. +\item + le contenu de l'étage \texttt{tftp-export-stage}, c'est à dire + \texttt{initrd.img} et \texttt{vmlinuz} sont exportés dans le dossier + \texttt{tftp/tftpboot/boot/deployer} qui contient le système de + déploiement d'image servi par le serveur + \protect\hyperlink{acronym__TFTP}{TFTP}. +\end{itemize} + +\hypertarget{ruxe9duction-du-temps-de-duxe9ploiement-total}{% +\section{Réduction du temps de déploiement +total}\label{ruxe9duction-du-temps-de-duxe9ploiement-total}} + +\textbf{TODO: expliquer, détailler et comparer (tableaux, diagrammes) +les différentes mesures qui ont montré que clonezilla est intéressant +les images larges mais que dd est parfois plus performant pour de +petites images.} + +\hypertarget{duxe9ploiement-dimage-windows}{% +\section{Déploiement d'image +Windows}\label{duxe9ploiement-dimage-windows}} + +\hypertarget{amuxe9lioration-des-scripts-de-duxe9ploiement}{% +\section{Amélioration des scripts de +déploiement}\label{amuxe9lioration-des-scripts-de-duxe9ploiement}} + +\textbf{TODO: Expliquer les problèmes rencontrés avec les scripts de +déploiement initiaux et les nombreuses améliorations apportées par leur +ré-écriture\\ +quasi-complète (gestion des erreurs, stack traces, amélioration des +logs, gestion des images plus grandes que le cache, mesure des timings, +scripts utilitaires de maintenance, possibilité d'utiliser clonezilla, +détection du point d'entrée EFI).} + +\hypertarget{personnalisation-dimages-post-duxe9ploiement}{% +\section{Personnalisation d'images +post-déploiement}\label{personnalisation-dimages-post-duxe9ploiement}} + +\textbf{TODO: expliquer pourquoi Ansible a été choisi pour cette tache, +et des avantages que cela apporte de pouvoir customiser une image +post-déploiement plutôt que d'avoir une multitude d'images pour chaque +personnalisation (simplicité de création de playbook plutot que la +création d'une image complète, possiblité de réutiliser les mêmes +playbooks sur plusieurs images similaires, réutilisation d'images).} + +\hypertarget{architecture-finale-du-projet}{% +\chapter{Architecture finale du +projet}\label{architecture-finale-du-projet}} + +\hypertarget{composants}{% +\section{Composants}\label{composants}} + +\textbf{TODO: diagramme des composants du projet et description} + +\hypertarget{processus-de-duxe9ploiement}{% +\section{Processus de déploiement}\label{processus-de-duxe9ploiement}} + +\textbf{TODO: diagramme du processus de déploiement et description +complète de ce dernier. Explication détaillées de la structure des +scripts de déploiement, de leurs possibilités et de leurs limitations.} + +\hypertarget{architecture-ruxe9seau}{% +\section{Architecture réseau}\label{architecture-ruxe9seau}} + +\textbf{TODO: description de l'architecture réseau finale utilisée pour +développer et tester le système avec diagramme. Expliquer comment cette +architecture de test peut être transposée à une architecture de +production.} + +\hypertarget{processus-de-build}{% +\section{Processus de build}\label{processus-de-build}} + +\textbf{TODO: expliquer comment sont construites les différentes parties +du projet. Expliquer les différentes parties du makefile et les +différentes images docker utilisées pour construire les différents +composants.} + +\hypertarget{duxe9ploiement-du-serveur}{% +\section{Déploiement du serveur}\label{duxe9ploiement-du-serveur}} + +\textbf{TODO: expliquer comment le serveur peut fonctionner à l'aide +d'un \texttt{docker-compose} réunissant les serveurs TFTP, NFS et DHCP. +Expliquer comment ces différentes parties sont utilisés dans un +environnement de développement, les limitations, et comment adapter +cette configuration à un environnement de production.} + +\hypertarget{structure-des-images}{% +\section{Structure des images}\label{structure-des-images}} + +\textbf{TODO: expliquer exactement comment sont structurées les données +des images (raw et clonezilla).} + +\hypertarget{systuxe8me-de-personnalisation-des-images}{% +\section{Système de personnalisation des +images}\label{systuxe8me-de-personnalisation-des-images}} + +\textbf{TODO: expliquer en détails comment fonctionne le système de +personnalisation des images, ce qui est nécéssaire sur le client et ce +qui est nécessaire sur le serveur} + +\hypertarget{utilisation-du-systuxe8me-duxe9ployuxe9}{% +\chapter{Utilisation du système +déployé}\label{utilisation-du-systuxe8me-duxe9ployuxe9}} + +\hypertarget{duxe9ployer-une-image-sur-un-poste}{% +\section{Déployer une image sur un +poste}\label{duxe9ployer-une-image-sur-un-poste}} + +\textbf{TODO: expliquer pas à pas comment utiliser l'interface pour +déployer une image sur un client et les différentes inter-actions de +l'utilisateur, avec des captures d'écran, etc.} + +\hypertarget{cruxe9ation-dune-image-clonezilla}{% +\section{Création d'une image +clonezilla}\label{cruxe9ation-dune-image-clonezilla}} + +\textbf{TODO: expliquer pas à pas comment créer une image avec +clonezilla et comment l'ajouter au serveur de déploiement.} + +\hypertarget{cruxe9ation-dune-image-dd}{% +\section{Création d'une image dd}\label{cruxe9ation-dune-image-dd}} + +\textbf{TODO: expliquer pas à pas comment créer une image avec +clonezilla et comment l'ajouter au serveur de déploiement.} + +\hypertarget{pruxe9paration-dune-image-pour-quelle-supporte-le-systuxe8me-de-personnalisation}{% +\section{Préparation d'une image pour qu'elle supporte le système de +personnalisation}\label{pruxe9paration-dune-image-pour-quelle-supporte-le-systuxe8me-de-personnalisation}} + +\textbf{TODO: expliquer comment préparer un système pour qu'il supporte +le système de personnalisation avec ansible, et comment créer les +scripts de personnalisation, avec un exemple type simple.} + +\hypertarget{conclusion}{% +\chapter{Conclusion}\label{conclusion}} + +\hypertarget{synthuxe8se-du-travail-effectuuxe9}{% +\subsection{Synthèse du travail +effectué}\label{synthuxe8se-du-travail-effectuuxe9}} + +\hypertarget{points-damuxe9lioration}{% +\subsection{Points d'amélioration}\label{points-damuxe9lioration}} + +\hypertarget{retour-personnel-sur-la-maniuxe8re-dont-le-travail-sest-effectuuxe9}{% +\subsection{Retour personnel sur la manière dont le travail s'est +effectué}\label{retour-personnel-sur-la-maniuxe8re-dont-le-travail-sest-effectuuxe9}} + +\backmatter +\end{document} diff --git a/doc/templates/default.latex b/doc/templates/default.latex index 4ceca434c64c66fd8f37379cc24bf7b71767d8d3..a59da0d1d2e6604fba9d57eed38ef5019ccc7478 100644 --- a/doc/templates/default.latex +++ b/doc/templates/default.latex @@ -401,21 +401,59 @@ $endif$ $endif$ \begin{document} -$if(has-frontmatter)$ -\frontmatter -$endif$ -$if(title)$ -$if(beamer)$ -\frame{\titlepage} -$else$ -\maketitle -$endif$ -$if(abstract)$ -\begin{abstract} -$abstract$ -\end{abstract} -$endif$ -$endif$ +% Nom conformes des tables +\renewcommand*\listfigurename{Liste des illustrations} +\renewcommand*\listtablename{Liste des tableaux} +% Sets the page numbering style to roman +%\pagestyle{headings} +\setcounter{page}{1} +\pagenumbering{roman} + +% Hides the page number for the cover page +\thispagestyle{empty} +% Hides the header for the cover page +% Cover page +\begin{figure} + \begin{sffamily} + \begin{minipage}{.4\textwidth} + \centering + \hspace*{-3cm}\includegraphics[height=1.25cm]{images/logo_hepia.pdf} + \end{minipage}\qquad + \begin{minipage}{.4\textwidth} + \centering + \hspace*{5cm}\includegraphics[height=1.25cm]{images/logo-hesso-geneve.pdf} + \end{minipage} + \end{sffamily} +\end{figure} + +\begin{center} + \huge{$title$}\\ + \vspace{.5cm} + \IfFileExists{images/front-logo.png}{ + \includegraphics[width=8cm,height=5cm]{images/front-logo.png}\\ + }{ + \vspace{5cm} + } + + \vspace{5mm} + \large{Thèse de Bachelor présentée par}\\ + \vspace{5mm} + \textbf{\Large{$author$}}\\ + \vspace{5mm} + + \large{pour l’obtention du titre Bachelor of Science HES-SO en}\\ + \vspace{5mm} + \textbf{\Large{Ingénierie des technologies de l’information avec orientation en \\$orientation$}} + + \vspace{5mm} + \textbf{$date$\\} + \vspace{5mm} + \begin{tabular}{ p{6cm} } + \multicolumn{1}{c}{Professeur-e HES responsable}\\ + \multicolumn{1}{c}{\textbf{$advisor$}}\\ + \end{tabular} +\end{center} + $for(include-before)$ $include-before$