mémoire→thesis
This commit is contained in:
parent
3b62292654
commit
86b7e4a5e0
21 changed files with 0 additions and 0 deletions
3
cnam/travaux/thesis/.gitignore
vendored
Normal file
3
cnam/travaux/thesis/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
/*.pdf
|
||||
/*.pdf.asc
|
||||
/*.pdf.vrf
|
159
cnam/travaux/thesis/build.py
Executable file
159
cnam/travaux/thesis/build.py
Executable file
|
@ -0,0 +1,159 @@
|
|||
#! /usr/bin/python3 -B
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
AUTHOR = 'Marc BENINCA'
|
||||
MAIN = 'main'
|
||||
TMP = 'tmp'
|
||||
|
||||
ENGLISH = 'en'
|
||||
FRENCH = 'fr'
|
||||
LANGUAGES = [ENGLISH, FRENCH]
|
||||
|
||||
DOCUMENTS = [
|
||||
{ENGLISH: 'thesis', FRENCH: 'mémoire'},
|
||||
{ENGLISH: 'presentation', FRENCH: 'présentation'},
|
||||
]
|
||||
TITLE = {
|
||||
ENGLISH: 'Incremental Live Operating Systems',
|
||||
FRENCH: 'Systèmes d’exploitation autonomes incrémentaux',
|
||||
}
|
||||
SUBTITLE = {
|
||||
ENGLISH: 'a reversal of conventional approaches',
|
||||
FRENCH: 'une inversion des approches conventionnelles',
|
||||
}
|
||||
DATE = {
|
||||
ENGLISH: 'Month DD, 2021',
|
||||
FRENCH: 'JJ Mois 2021',
|
||||
}
|
||||
|
||||
|
||||
def run(command):
|
||||
subprocess.call(command)
|
||||
|
||||
|
||||
def errun(command):
|
||||
return subprocess.check_output(
|
||||
command, stderr=subprocess.STDOUT)
|
||||
|
||||
|
||||
def build(directory, sign):
|
||||
# temporary directory
|
||||
tmp = os.path.join(directory, TMP)
|
||||
# for each language
|
||||
for language in LANGUAGES:
|
||||
# languages
|
||||
other_languages = [lang for lang in LANGUAGES if lang is not language]
|
||||
languages = [language, *other_languages]
|
||||
other_languages = ','.join(other_languages)
|
||||
summaries = ''.join(
|
||||
[f'\\input{{summary.{lang}}}' for lang in languages])
|
||||
# display languages
|
||||
for item in ['', language, other_languages, languages, summaries]:
|
||||
print(item)
|
||||
# for each document
|
||||
for document in DOCUMENTS:
|
||||
# display language
|
||||
print()
|
||||
print(document[language])
|
||||
# clean
|
||||
os.chdir(directory)
|
||||
wipe(tmp)
|
||||
os.makedirs(tmp)
|
||||
# move into document directory
|
||||
os.chdir(document[ENGLISH])
|
||||
# prepare variables
|
||||
variables = {
|
||||
'author': AUTHOR,
|
||||
'title': TITLE[language],
|
||||
'subtitle': SUBTITLE[language],
|
||||
'date': DATE[language],
|
||||
'mainlanguage': language,
|
||||
'otherlanguages': other_languages,
|
||||
'summaries': summaries,
|
||||
}
|
||||
# transform variables
|
||||
variables = ''.join([f'\\def\\{k}{{{v}}}'
|
||||
for k, v in variables.items()])
|
||||
# prepare build command
|
||||
command = ['xelatex',
|
||||
'-output-directory', tmp,
|
||||
f'{variables}\\input{{{MAIN}}}',
|
||||
]
|
||||
# if it's the main document
|
||||
if document[ENGLISH] == 'thesis':
|
||||
# pre build
|
||||
run(command)
|
||||
# build glossaries
|
||||
run(['makeglossaries', '-d', tmp, MAIN])
|
||||
# build references
|
||||
run(['biber',
|
||||
'--input-directory', tmp,
|
||||
'--output-directory', tmp,
|
||||
MAIN,
|
||||
])
|
||||
# re build
|
||||
run(command)
|
||||
# final build
|
||||
run(command)
|
||||
# rename the document
|
||||
pdf = f'{document[language]}.pdf'
|
||||
os.rename(os.path.join(tmp, f'{MAIN}.pdf'),
|
||||
os.path.join(tmp, pdf),
|
||||
)
|
||||
# if signature is disabled
|
||||
if not sign:
|
||||
# fetch the document from temporary directory
|
||||
os.rename(os.path.join(tmp, pdf),
|
||||
os.path.join(directory, pdf),
|
||||
)
|
||||
# if signature is enabled
|
||||
else:
|
||||
# sign the document
|
||||
run(['gpg',
|
||||
'--armor',
|
||||
'--detach-sign',
|
||||
os.path.join(tmp, pdf),
|
||||
])
|
||||
signature = f'{pdf}.asc'
|
||||
# fetch the document and signature from temporary directory
|
||||
for f in [pdf, signature]:
|
||||
os.rename(os.path.join(tmp, f),
|
||||
os.path.join(directory, f),
|
||||
)
|
||||
# verify the document signature
|
||||
lines = errun(['gpg', '--verify',
|
||||
os.path.join(directory, signature),
|
||||
os.path.join(directory, pdf),
|
||||
]).decode('u8').splitlines()
|
||||
id = lines[2].index('"')
|
||||
lines = [
|
||||
lines[0],
|
||||
lines[1],
|
||||
lines[2][:id] + lines[4][id:]
|
||||
.replace('@', ' @ ')
|
||||
.replace('.', ' ⋅ ')
|
||||
] + lines[5:]
|
||||
# write verification file
|
||||
buffer = os.linesep.join(lines).encode('u8')
|
||||
with open(os.path.join(directory, f'{pdf}.vrf'), 'bw') as f:
|
||||
f.write(buffer)
|
||||
# clean
|
||||
wipe(tmp)
|
||||
|
||||
|
||||
def wipe(directory):
|
||||
shutil.rmtree(directory, ignore_errors=True)
|
||||
|
||||
|
||||
def main():
|
||||
file = os.path.realpath(__file__)
|
||||
directory = os.path.dirname(file)
|
||||
build(directory, len(sys.argv) == 1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
38
cnam/travaux/thesis/index.rst
Normal file
38
cnam/travaux/thesis/index.rst
Normal file
|
@ -0,0 +1,38 @@
|
|||
Mémoire
|
||||
=======
|
||||
|
||||
:download:`Sujet <sujet.pdf>`
|
||||
|
||||
=========================================== ===========================================
|
||||
Français English
|
||||
=========================================== ===========================================
|
||||
:download:`Mémoire <mémoire.pdf>` :download:`Thesis <thesis.pdf>`
|
||||
:download:`Présentation <présentation.pdf>` :download:`Presentation <presentation.pdf>`
|
||||
=========================================== ===========================================
|
||||
|
||||
.. literalinclude:: mémoire.pdf.vrf
|
||||
|
||||
=============================================== ===============================================
|
||||
Signatures numériques Digital signatures
|
||||
=============================================== ===============================================
|
||||
:download:`Mémoire <mémoire.pdf.asc>` :download:`Thesis <thesis.pdf.asc>`
|
||||
:download:`Présentation <présentation.pdf.asc>` :download:`Presentation <presentation.pdf.asc>`
|
||||
=============================================== ===============================================
|
||||
|
||||
.. todo::
|
||||
|
||||
* mémoire
|
||||
|
||||
* vérifier les marges
|
||||
* séparer les chapitres
|
||||
* rédiger l’introduction
|
||||
* rédiger la conclusion
|
||||
|
||||
* présentation
|
||||
|
||||
* logo du CNAM
|
||||
* couleur des barres
|
||||
* page de garde
|
||||
* plan
|
||||
* marges
|
||||
* page de fin
|
7
cnam/travaux/thesis/presentation/main.tex
Normal file
7
cnam/travaux/thesis/presentation/main.tex
Normal file
|
@ -0,0 +1,7 @@
|
|||
\input{settings}
|
||||
|
||||
\begin{document}
|
||||
|
||||
…
|
||||
|
||||
\end{document}
|
1
cnam/travaux/thesis/presentation/settings.tex
Normal file
1
cnam/travaux/thesis/presentation/settings.tex
Normal file
|
@ -0,0 +1 @@
|
|||
\documentclass[12pt]{extarticle}
|
11
cnam/travaux/thesis/thesis/acronyms.tex
Normal file
11
cnam/travaux/thesis/thesis/acronyms.tex
Normal file
|
@ -0,0 +1,11 @@
|
|||
\ml
|
||||
{\def\acronyms{Acronyms}}
|
||||
{\def\acronyms{Abréviations}}
|
||||
\printglossary[type=\acronymtype,
|
||||
title=\acronyms]
|
||||
|
||||
\newacronym{os}
|
||||
{\ml{OS}{SE}}
|
||||
{\ml{Operating System}{Système d’Exploitation}}
|
||||
|
||||
\pagebreak
|
19
cnam/travaux/thesis/thesis/back.tex
Normal file
19
cnam/travaux/thesis/thesis/back.tex
Normal file
|
@ -0,0 +1,19 @@
|
|||
\ml
|
||||
{\def\back{Summaries}}
|
||||
{\def\back{Résumés}}
|
||||
\chapter*{}
|
||||
\addcontentsline{toc}{chapter}{\back}
|
||||
|
||||
\begin{center}\begin{large}\textbf{
|
||||
\title\\
|
||||
\subtitle
|
||||
}\end{large}\end{center}
|
||||
|
||||
\ml{CNAM Master's thesis}{Mémoire d’Ingénieur CNAM},\\
|
||||
Bordeaux 2021.
|
||||
|
||||
\summaries
|
||||
|
||||
\thispagestyle{empty}
|
||||
|
||||
\pagebreak
|
5
cnam/travaux/thesis/thesis/conclusion.tex
Normal file
5
cnam/travaux/thesis/thesis/conclusion.tex
Normal file
|
@ -0,0 +1,5 @@
|
|||
\def\outro{Conclusion}
|
||||
\chapter*{\outro}
|
||||
\addcontentsline{toc}{chapter}{\outro}
|
||||
|
||||
\pagebreak
|
4
cnam/travaux/thesis/thesis/figures.tex
Normal file
4
cnam/travaux/thesis/thesis/figures.tex
Normal file
|
@ -0,0 +1,4 @@
|
|||
\renewcommand{\listfigurename}{Figures}
|
||||
\listoffigures
|
||||
|
||||
\pagebreak
|
64
cnam/travaux/thesis/thesis/front.tex
Normal file
64
cnam/travaux/thesis/thesis/front.tex
Normal file
|
@ -0,0 +1,64 @@
|
|||
\begin{center}
|
||||
|
||||
\includegraphics[height=2.54cm]{../../cnam}
|
||||
|
||||
{\bfseries
|
||||
\begin{large}
|
||||
|
||||
{\larger[2] C}ONSERVATOIRE {\larger[2] N}ATIONAL
|
||||
DES {\larger[2] A}RTS ET {\larger[2] M}ÉTIERS
|
||||
|
||||
\ml
|
||||
{ASSOCIATE REGIONAL CENTER OF NEW-AQUITAINE}
|
||||
{CENTRE RÉGIONAL ASSOCIÉ DE NOUVELLE-AQUITAINE}
|
||||
|
||||
\hrq
|
||||
|
||||
\ml{THESIS}{MÉMOIRE}
|
||||
|
||||
\ml{defended in order to obtain}{présenté en vue d’obtenir}
|
||||
|
||||
\ml{MASTER'S DEGREE from the CNAM}{le DIPLÔME d’INGÉNIEUR CNAM}
|
||||
|
||||
\ml{SPECIALIZATION: Computer Science}{SPÉCIALITÉ : Informatique}
|
||||
|
||||
\ml
|
||||
{OPTION: Networks, Systems and Multimedia}
|
||||
{OPTION : Réseaux, Systèmes et Multimédia}
|
||||
|
||||
\vfill
|
||||
\ml{by}{par}
|
||||
\vfill
|
||||
|
||||
\author
|
||||
|
||||
\hrq
|
||||
|
||||
\title\\
|
||||
\subtitle
|
||||
|
||||
\ml
|
||||
{Defended on \date}
|
||||
{Soutenu le \date}
|
||||
|
||||
\hrq
|
||||
|
||||
JURY
|
||||
|
||||
\end{large}
|
||||
\vspace{1em}
|
||||
\begin{small}
|
||||
|
||||
{\renewcommand{\arraystretch}{1.5} \begin{tabular}[t]{rllll}
|
||||
\ml{PRESIDENT:}{PRÉSIDENT :} & \tt & \first & \last & \textit{\renewcommand{\arraystretch}{1} \begin{tabular}[t]{@{}l@{}}\role\\\org\end{tabular}} \\
|
||||
\ml{MEMBERS:}{MEMBRES :} & \tt & \first & \last & \textit{\renewcommand{\arraystretch}{1} \begin{tabular}[t]{@{}l@{}}\role\\\org\end{tabular}} \\
|
||||
& \tt & \first & \last & \textit{\renewcommand{\arraystretch}{1} \begin{tabular}[t]{@{}l@{}}\role\\\org\end{tabular}}
|
||||
\end{tabular}}
|
||||
|
||||
\end{small}
|
||||
}
|
||||
\end{center}
|
||||
|
||||
\thispagestyle{empty}
|
||||
|
||||
\pagebreak
|
7
cnam/travaux/thesis/thesis/glossary.tex
Normal file
7
cnam/travaux/thesis/thesis/glossary.tex
Normal file
|
@ -0,0 +1,7 @@
|
|||
\ml
|
||||
{\def\gloss{Glossary}}
|
||||
{\def\gloss{Glossaire}}
|
||||
\printglossary
|
||||
[title=\gloss]
|
||||
|
||||
\pagebreak
|
7
cnam/travaux/thesis/thesis/introduction.tex
Normal file
7
cnam/travaux/thesis/thesis/introduction.tex
Normal file
|
@ -0,0 +1,7 @@
|
|||
\def\intro{Introduction}
|
||||
\chapter*{\intro}
|
||||
\addcontentsline{toc}{chapter}{\intro}
|
||||
|
||||
\gls{os}
|
||||
|
||||
\pagebreak
|
114
cnam/travaux/thesis/thesis/main.tex
Normal file
114
cnam/travaux/thesis/thesis/main.tex
Normal file
|
@ -0,0 +1,114 @@
|
|||
\input{settings}
|
||||
\input{variables}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\singlespacing
|
||||
|
||||
\input{front}
|
||||
|
||||
\onehalfspacing
|
||||
|
||||
\input{thanks}
|
||||
\input{acronyms}
|
||||
\input{glossary}
|
||||
\input{toc}
|
||||
\input{introduction}
|
||||
|
||||
\ml
|
||||
{\chapter{\todo}}
|
||||
{\chapter{Problématique : maintenance des systèmes d’exploitation}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Systèmes de fichiers, installés sur partitions, avec accès en écriture}}
|
||||
|
||||
\ml
|
||||
{\subsection{\todo}}
|
||||
{\subsection{Système de fichiers conventionnel}}
|
||||
|
||||
\ml
|
||||
{\subsection{\todo}}
|
||||
{\subsection{Système de fichiers géré par des recettes configuration}}
|
||||
|
||||
\ml
|
||||
{\subsection{\todo}}
|
||||
{\subsection{Système de fichiers avec gestion d’instantanés}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Images autonomes, sans installation, avec accès en lecture seule}}
|
||||
|
||||
\ml
|
||||
{\subsection{\todo}}
|
||||
{\subsection{Amorçage sans gestion de persistance}}
|
||||
|
||||
\ml
|
||||
{\subsection{\todo}}
|
||||
{\subsection{Amorçage avec gestion de persistance}}
|
||||
|
||||
\ml
|
||||
{\chapter{\todo}}
|
||||
{\chapter{Proposition : fonctionnement autonome incrémental}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Miroirs de dépôts officiels distribution et éditeurs tiers}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Construction d’un système de fichiers autonome (Debian GNU/Linux)}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Encapsulation dans un fichier image}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Sécurité du fichier image produit}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Amorçage de fichier(s) image(s) sécurisé(s)}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Mise à niveau incrémentale}}
|
||||
|
||||
\ml
|
||||
{\chapter{\todo}}
|
||||
{\chapter{Automatisations potentiellement implémentables}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Vérification d’intégrité de dépôts}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Construction de systèmes de fichiers autonomes complets}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Création de nouveaux fichiers par mise à jour d’images}}
|
||||
|
||||
\ml
|
||||
{\section{\todo}}
|
||||
{\section{Génération à la volée de menus de démarrage}}
|
||||
|
||||
\input{conclusion}
|
||||
|
||||
\appendix
|
||||
|
||||
\ml
|
||||
{\chapter{Appendix}}
|
||||
{\chapter{Annexe}}
|
||||
\pagebreak
|
||||
|
||||
\input{figures}
|
||||
\input{tables}
|
||||
|
||||
\singlespacing
|
||||
|
||||
\input{back}
|
||||
|
||||
\end{document}
|
76
cnam/travaux/thesis/thesis/settings.tex
Normal file
76
cnam/travaux/thesis/thesis/settings.tex
Normal file
|
@ -0,0 +1,76 @@
|
|||
% set default size and document class
|
||||
\documentclass[12pt]{report}
|
||||
|
||||
% acronyms, glossary
|
||||
\usepackage[acronym,toc]{glossaries}
|
||||
\makeglossaries
|
||||
|
||||
% tune table of contents
|
||||
\usepackage{tocloft}
|
||||
|
||||
% links
|
||||
\usepackage[colorlinks,
|
||||
citecolor=blue,
|
||||
filecolor=blue,
|
||||
linkcolor=blue,
|
||||
urlcolor=blue,
|
||||
]{hyperref}
|
||||
|
||||
% adjust chapter titles
|
||||
\usepackage{etoolbox}
|
||||
\makeatletter
|
||||
\patchcmd{\@makechapterhead}{50\p@}{0pt}{}{}
|
||||
\patchcmd{\@makeschapterhead}{50\p@}{0pt}{}{}
|
||||
\makeatother
|
||||
|
||||
% set paper geometry
|
||||
\usepackage[a4paper,portrait,
|
||||
bmargin=20mm,lmargin=20mm,rmargin=20mm,tmargin=20mm]{geometry}
|
||||
|
||||
% images
|
||||
\usepackage{graphicx}
|
||||
|
||||
% set fonts
|
||||
\usepackage{fontspec}
|
||||
% set relative sizes
|
||||
\usepackage{relsize}
|
||||
\setlength{\parindent}{0em}
|
||||
\setlength{\parskip}{1em}
|
||||
\setmainfont{DejaVu Sans}
|
||||
\setmonofont{DejaVu Sans Mono}
|
||||
|
||||
% set spacings
|
||||
\usepackage{setspace}
|
||||
|
||||
% lists of figures, tables
|
||||
\usepackage{tocbibind}
|
||||
|
||||
% set languages
|
||||
\usepackage{polyglossia}
|
||||
% recommended
|
||||
\usepackage{csquotes}
|
||||
\setmainlanguage{\mainlanguage}
|
||||
\setotherlanguages{\otherlanguages}
|
||||
|
||||
% simple commands
|
||||
|
||||
\newcommand{\hr}{\rule{\textwidth}{1pt}}
|
||||
|
||||
\newcommand{\hrq}{\rule{.25\textwidth}{1pt}}
|
||||
|
||||
% handle multiple languages
|
||||
|
||||
\newcommand{\ifstreq}[4]{\expandafter\ifstrequal\expandafter{#1}{#2}{#3}{#4}}
|
||||
|
||||
\def\todo{TODO}
|
||||
|
||||
\newcommand{\ml}[2]{%
|
||||
\ifstreq{\mainlanguage}{en}{\ifstrempty{#1}{\todo}{#1}}{%
|
||||
\ifstreq{\mainlanguage}{fr}{\ifstrempty{#2}{\todo}{#2}}{%
|
||||
ERROR%
|
||||
}}%
|
||||
}
|
||||
|
||||
\newcommand{\en}[1]{\textenglish{#1}}
|
||||
|
||||
\newcommand{\fr}[1]{\textfrench{#1}}
|
18
cnam/travaux/thesis/thesis/summary.en.tex
Normal file
18
cnam/travaux/thesis/thesis/summary.en.tex
Normal file
|
@ -0,0 +1,18 @@
|
|||
\begin{center}
|
||||
|
||||
\hr
|
||||
|
||||
\textbf{SUMMARY}
|
||||
|
||||
\end{center}
|
||||
|
||||
.\\
|
||||
.\\
|
||||
.
|
||||
|
||||
.\\
|
||||
.\\
|
||||
…
|
||||
|
||||
\textbf{Key words: ?, ?, ?, ?,\\
|
||||
?, ?, ?, ?.}
|
18
cnam/travaux/thesis/thesis/summary.fr.tex
Normal file
18
cnam/travaux/thesis/thesis/summary.fr.tex
Normal file
|
@ -0,0 +1,18 @@
|
|||
\begin{center}
|
||||
|
||||
\hr
|
||||
|
||||
\textbf{RÉSUMÉ}
|
||||
|
||||
\end{center}
|
||||
|
||||
.\\
|
||||
.\\
|
||||
.
|
||||
|
||||
.\\
|
||||
.\\
|
||||
…
|
||||
|
||||
\textbf{Mots clés : ?, ?, ?, ?,\\
|
||||
?, ?, ?, ?.}
|
7
cnam/travaux/thesis/thesis/tables.tex
Normal file
7
cnam/travaux/thesis/thesis/tables.tex
Normal file
|
@ -0,0 +1,7 @@
|
|||
\ml
|
||||
{\def\tables{Tables}}
|
||||
{\def\tables{Tableaux}}
|
||||
\renewcommand{\listtablename}{\tables}
|
||||
\listoftables
|
||||
|
||||
\pagebreak
|
7
cnam/travaux/thesis/thesis/thanks.tex
Normal file
7
cnam/travaux/thesis/thesis/thanks.tex
Normal file
|
@ -0,0 +1,7 @@
|
|||
\ml
|
||||
{\def\thanks{Acknowledgements}}
|
||||
{\def\thanks{Remerciements}}
|
||||
\chapter*{\thanks}
|
||||
\addcontentsline{toc}{chapter}{\thanks}
|
||||
|
||||
\pagebreak
|
10
cnam/travaux/thesis/thesis/toc.tex
Normal file
10
cnam/travaux/thesis/thesis/toc.tex
Normal file
|
@ -0,0 +1,10 @@
|
|||
\ml
|
||||
{\def\toc{Contents}}
|
||||
{\def\toc{Plan}}
|
||||
\renewcommand{\contentsname}{\toc}
|
||||
|
||||
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\pagebreak
|
5
cnam/travaux/thesis/thesis/variables.tex
Normal file
5
cnam/travaux/thesis/thesis/variables.tex
Normal file
|
@ -0,0 +1,5 @@
|
|||
\def\first{\ml{First}{Prénom}}
|
||||
\def\last{\ml{LAST}{NOM}}
|
||||
\def\org{\ml{Organization}{Organisme}}
|
||||
\def\role{\ml{Role}{Fonction}}
|
||||
\def\tt{\ml{Title}{Civilité}}
|
177
cnam/travaux/thesis/topic.tex
Normal file
177
cnam/travaux/thesis/topic.tex
Normal file
|
@ -0,0 +1,177 @@
|
|||
\documentclass[10pt]{article}
|
||||
|
||||
\usepackage{fontspec}
|
||||
\usepackage[a4paper,portrait,
|
||||
bmargin=10mm,lmargin=15mm,rmargin=15mm,tmargin=10mm]{geometry}
|
||||
|
||||
\pagenumbering{gobble}
|
||||
\setlength{\parindent}{0em}
|
||||
\setlength{\parskip}{0em}
|
||||
\setmainfont{DejaVu Sans}
|
||||
|
||||
\newcommand{\hr}{\rule{\textwidth}{1pt}}
|
||||
|
||||
\newenvironment{itmz}{\begin{itemize}
|
||||
\setlength{\itemsep}{0em}
|
||||
}{\end{itemize}}
|
||||
|
||||
\begin{document}
|
||||
|
||||
CNAM / UAMM91 \hfill Mémoire ingénieur / Sujet (version n°1) \hfill IRSM ↔ CYC9104A
|
||||
|
||||
Marc Beninca \hfill \textbf{Systèmes d’exploitation autonomes incrémentaux} \hfill 2020 → 2021
|
||||
|
||||
\hr
|
||||
|
||||
\section{Problématique : maintenance des systèmes d’exploitation}
|
||||
|
||||
En fonction des cas d’utilisation, maintenir des systèmes d’exploitation peut nécessiter de penser :\\
|
||||
mises à jour, indisponibilité, sauvegardes, tests, instantanés, restaurations, recettes de configuration.
|
||||
|
||||
\subsection{Systèmes de fichiers, installés sur partitions, avec accès en écriture}
|
||||
|
||||
\subsubsection{Système de fichiers conventionnel : ext2, ext3, ext4, jfs, xfs}
|
||||
|
||||
\begin{itmz}
|
||||
\item{\textbf{avantages} : instantanéité de toutes les modifications apportées aux fichiers du système}
|
||||
\item{\textbf{inconvénients} : nécessité de régulièrement réaliser et tester des sauvegardes du système}
|
||||
\end{itmz}
|
||||
|
||||
\subsubsection{Système de fichiers géré par des recettes de configuration : ansible, chef, puppet}
|
||||
|
||||
\begin{itmz}
|
||||
\item{\textbf{avantages} : possibilité de remettre rapidement en état certains pans entiers du système}
|
||||
\item{\textbf{inconvénients} : pas de résolution des écarts de configuration non gérés par les recettes}
|
||||
\end{itmz}
|
||||
|
||||
\subsubsection{Système de fichiers avec gestion d’instantanés : btrfs, zfs}
|
||||
|
||||
\begin{itmz}
|
||||
\item{\textbf{avantages} : permet de sauvegarder et restaurer un état des fichiers du système à un instant}
|
||||
\item{\textbf{inconvénients} : réduit progressivement l’espace disponible, pas encore utilisé par défaut}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Images autonomes, sans installation, avec accès en lecture seule}
|
||||
|
||||
\subsubsection{Amorçage sans gestion de persistance}
|
||||
|
||||
\begin{itmz}
|
||||
\item{\textbf{avantages} : démarrer sur un système autonome dans un état ayant été figé au préalable}
|
||||
\item{\textbf{inconvénients} : perdre au redémarrage toutes modifications faites aux fichiers du système}
|
||||
\end{itmz}
|
||||
|
||||
\subsubsection{Amorçage avec gestion de persistance}
|
||||
|
||||
\begin{itmz}
|
||||
\item{\textbf{avantages} : conservation sur une partition marquée des fichiers modifiés depuis le démarrage}
|
||||
\item{\textbf{inconvénients} : pas de séparation entre la persistance des fichiers systèmes et des données}
|
||||
\end{itmz}
|
||||
|
||||
\hr
|
||||
|
||||
\section{Proposition : fonctionnement autonome incrémental}
|
||||
|
||||
Mettre en œuvre un système d’exploitation hybride entre un système installé et un système autonome :\\
|
||||
cumuler les avantages des deux, en images incrémentales ou complètes, sans les divers inconvénients.
|
||||
|
||||
\begin{itmz}
|
||||
\item{\textbf{avantages} : redémarrage = restauration, mise à jour = sauvegarde, séparation système/données}
|
||||
\item{\textbf{inconvénients} : maintenance exhaustive si effectuée régulièrement et d’une façon manuelle}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Miroirs de dépôts officiels distribution et éditeurs}
|
||||
|
||||
\begin{itmz}
|
||||
\item{synchronisation locale pour accès rapide, stable et hors-ligne : \textbf{apt-mirror}, \textbf{debmirror}, \textbf{ftpsync}}
|
||||
\item{vérification d’intégrité des dépôts locaux avant utilisation de leurs paquets logiciels synchronisés}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Construction d’un système de fichiers autonome (debian gnu/linux)}
|
||||
|
||||
\begin{itmz}
|
||||
\item{prise en compte du type de machine hôte pour le choix des paquets de base : physique, virtuelle}
|
||||
\item{création d’un système de fichiers de base minimal à partir des dépôts locaux : \textbf{debootstrap}}
|
||||
\item{intégration des paquets nécessaires à la construction d’autres systèmes autonomes, si besoin}
|
||||
\item{transformation effective en système d’exploitation autonome : \textbf{live-boot}, \textbf{update-initramfs}}
|
||||
\item{détermination des autres paquets logiciels à installer et à configurer, en fonction des besoins}
|
||||
\item{déport des données à rendre persistantes, avec des liens symboliques pointant vers partition(s)}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Encapsulation dans un fichier image}
|
||||
|
||||
\begin{itmz}
|
||||
\item{utilisation d’un format de fichier amorçable adapté au montage en lecture seule : \textbf{squashfs}}
|
||||
\item{choix d’un des divers algorithmes de compression disponibles : \textbf{gzip}, \textbf{lzma}, \textbf{lzo}, \textbf{lz4}, \textbf{xz}, \textbf{zstd}}
|
||||
\item{niveau supplémentaire d’encapsulation avec un format de fichier amorçable hybride : \textbf{iso}}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Sécurité du fichier image produit}
|
||||
|
||||
\begin{itmz}
|
||||
\item{assurer l’intégrité du fichier final par le calcul d’une somme de contrôle : \textbf{sha256}, \textbf{sha512}}
|
||||
\item{garantir l’authenticité de l’image grâce à une signature numérique associée au fichier : \textbf{gpg}}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Amorçage de fichier(s) image(s) sécurisé(s)}
|
||||
|
||||
\begin{itmz}
|
||||
\item{chargeur de démarrage avec gestion de signature numérique : \textbf{grub}, \textbf{bios}, \textbf{uefi}, \textbf{secure boot}}
|
||||
\item{création d’un menu de démarrage à choix multiple d’images : \textbf{grub.cfg}, \textbf{squash4}, \textbf{iso9660}}
|
||||
\item{vérification d’authenticité et d’intégrité de fichiers images : \textbf{gcry\_sha256}, \textbf{gcry\_sha512}, \textbf{pgp}}
|
||||
\item{chargement d’image(s) en mémoire vive d’une machine hôte : complet, partiel avec \textbf{overlayfs}}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Mise à niveau incrémentale}
|
||||
|
||||
\begin{itmz}
|
||||
\item{fabrication d’une nouvelle image, à partir de la plus récente, pour le prochain redémarrage}
|
||||
\item{si le redémarrage est différé, mise à jour du système d’exploitation actuellement en mémoire}
|
||||
\item{si le redémarrage est nécessaire et critique, réduction de sa durée effective : \textbf{kexec-tools}}
|
||||
\end{itmz}
|
||||
|
||||
\section{Automatisations potentiellement implémentables}
|
||||
|
||||
\begin{itmz}
|
||||
\item{vérification d’intégrité des dépôts, voire le processus de synchronisation, de façon parallélisée}
|
||||
\item{construction de systèmes de fichiers autonomes complets, à partir de différents profils versionnés}
|
||||
\item{création de nouveaux fichiers images, par la mise à jour d’images amorçables déjà existantes}
|
||||
\item{génération à la volée de menus de démarrage, à choix multiples d’images amorçables détectées}
|
||||
\end{itmz}
|
||||
|
||||
\hr
|
||||
|
||||
\appendix
|
||||
|
||||
\section{Contexte professionnel}
|
||||
|
||||
En tant que militaire engagé de carrière, depuis 19 ans envers le Ministère des Armées, je travaille :
|
||||
\begin{itmz}
|
||||
\item{depuis 2001 pour le corps des sous-officiers d’active de l’actuelle Armée de l’Air et de l’Espace}
|
||||
\item{depuis 2016 sous la Direction Interarmées des Réseaux d’Infrastructure et Systèmes d’Information}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Restrictions diverses}
|
||||
|
||||
\begin{itmz}
|
||||
\item{interdiction, en tant que militaire, d’exercer simultanément une autre activité professionnelle}
|
||||
\item{pas de droits d’administration sur le gestionnaire de l’infrastructure virtuelle distante partagée}
|
||||
\item{stations de travail locales sans possibilité de virtualisation, administrées par une entité extérieure}
|
||||
\item{ordinateurs portables réquisitionnés pour le personnel pouvant exercer son activité en télétravail}
|
||||
\end{itmz}
|
||||
|
||||
\subsection{Propriété intellectuelle}
|
||||
|
||||
\begin{itmz}
|
||||
\item{tout développement effectué sur le temps de travail devient directement la propriété du Ministère}
|
||||
\item{le fonctionnement ici proposé a un champ d’application plus large que le seul cadre de mon emploi}
|
||||
\item{une solution pour son automatisation aurait donc plus de portée si publiée sous une licence libre}
|
||||
\end{itmz}
|
||||
|
||||
\section{Cadre de production du mémoire}
|
||||
|
||||
Compte tenu des circonstances précédemment énoncées, et dans l’intérêt du projet en lui-même :
|
||||
\begin{itmz}
|
||||
\item{m’est-il possible de conduire la réalisation de ce mémoire ingénieur « Hors Temps de Travail » ?}
|
||||
\end{itmz}
|
||||
|
||||
\end{document}
|
Loading…
Add table
Add a link
Reference in a new issue