4 Commits c3c2526185 ... 117609b9d6

Author SHA1 Message Date
  Marc Beninca 117609b9d6 wip 1 month ago
  Marc Beninca 605e5f9f58 build,topic 1 month ago
  Marc Beninca c78a7fc942 mémoire 1 month ago
  Marc Beninca ba4036f3ad build 1 month ago

+ 12 - 12
build.py

@@ -6,9 +6,9 @@ import subprocess
 
 import sphinx.cmd.build
 
-TRAVAUX = ['probatoire']
-INPUT = ["cnam"]
-OUTPUT = "out"
+TRAVAUX = ['mémoire']
+INPUT = ['cnam']
+OUTPUT = 'out'
 
 
 def others():
@@ -26,19 +26,19 @@ def main():
     shutil.rmtree(output_directory, ignore_errors=True)
     for doc in INPUT:
         arguments = [
-            "-E",
-            "-j", "2",
-            "-b", "html",
-            "-D", "project={}".format(doc),
-            "-D", "master_doc={}".format("index"),
-            "-D", "html_theme={}".format("sphinx_rtd_theme"),
-            # "-C",
-            "-c", directory,
+            '-E',
+            '-j', '2',
+            '-b', 'html',
+            '-D', 'project={}'.format(doc),
+            '-D', 'master_doc={}'.format('index'),
+            '-D', 'html_theme={}'.format('sphinx_rtd_theme'),
+            # '-C',
+            '-c', directory,
             os.path.join(directory, doc),
             os.path.join(output_directory, doc),
         ]
         sphinx.cmd.build.build_main(arguments)
 
 
-if __name__ == "__main__":
+if __name__ == '__main__':
     main()

+ 2 - 2
cnam/travaux/blanc/build.py

@@ -6,8 +6,8 @@ import subprocess
 import sys
 
 DOCUMENTS = [
-    ('document', 'mémoire'),
-    ('présentation', 'présentation'),
+    # ('document', 'mémoire'),
+    # ('présentation', 'présentation'),
 ]
 TMP = 'tmp'
 

+ 1 - 0
cnam/travaux/index.rst

@@ -6,5 +6,6 @@ Travaux
 .. toctree::
    :maxdepth: 1
 
+   mémoire/index
    probatoire/index
    blanc/index

+ 3 - 0
cnam/travaux/mémoire/.gitignore

@@ -0,0 +1,3 @@
+/*.pdf
+/*.pdf.asc
+/*.pdf.vrf

+ 82 - 0
cnam/travaux/mémoire/build.py

@@ -0,0 +1,82 @@
+#! /usr/bin/python3 -B
+
+import os
+import shutil
+import subprocess
+import sys
+
+DOCUMENTS = [
+    ('topic', 'sujet'),
+    # ('document', 'mémoire'),
+    # ('présentation', 'présentation'),
+]
+TMP = 'tmp'
+
+
+def run(command):
+    subprocess.call(command)
+
+
+def errun(command):
+    return subprocess.check_output(
+        command, stderr=subprocess.STDOUT)
+
+
+def build(sign):
+    for en, fr in DOCUMENTS:
+        command = ['xelatex', '-output-directory', TMP, en]
+        run(command)
+        run(['makeglossaries', '-d', TMP, en])
+        run(['biber',
+            '--input-directory', TMP,
+            '--output-directory', TMP,
+            en,
+        ])
+        run(command)
+        run(command)
+        pdf = f'{fr}.pdf'
+        os.rename(os.path.join(TMP, f'{en}.pdf'),
+            os.path.join(TMP, pdf))
+        if not sign:
+            os.rename(os.path.join(TMP, pdf), pdf)
+        else:
+            run(['gpg',
+                '--armor',
+                '--detach-sign',
+                os.path.join(TMP, pdf),
+            ])
+            signature = f'{pdf}.asc'
+            for f in [pdf, signature]:
+                os.rename(os.path.join(TMP, f), f)
+            lines = errun(['gpg',
+                '--verify', signature, pdf,
+            ]).decode('u8').splitlines()
+            id = lines[2].index('"')
+            lines = [
+                lines[0],
+                lines[1],
+                lines[2][:id] + lines[4][id:]
+                .replace('@', ' @ ')
+                .replace('.', ' ⋅ ')
+            ] + lines[5:]
+            buffer = os.linesep.join(lines).encode('u8')
+            with open(f'{pdf}.vrf', 'bw') as f:
+                f.write(buffer)
+
+
+def clean():
+    shutil.rmtree(TMP, ignore_errors=True)
+
+
+def main():
+    file = os.path.realpath(__file__)
+    directory = os.path.dirname(file)
+    os.chdir(directory)
+    clean()
+    os.makedirs(TMP)
+    build(len(sys.argv) == 1)
+    clean()
+
+
+if __name__ == '__main__':
+    main()

+ 7 - 0
cnam/travaux/mémoire/index.rst

@@ -0,0 +1,7 @@
+Mémoire
+=======
+
+.. toctree::
+   :numbered: 2
+
+   page

+ 10 - 0
cnam/travaux/mémoire/page.rst

@@ -0,0 +1,10 @@
+Sujet
+=====
+
+* :download:`Sujet <sujet.pdf>`
+
+Livrables
+=========
+
+Signatures numériques
+=====================

+ 149 - 0
cnam/travaux/mémoire/topic.tex

@@ -0,0 +1,149 @@
+\documentclass[12pt]{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 \hfill IRSM (CYC9104A)
+
+Marc Beninca \hfill Systèmes d’exploitation incrémentaux \hfill 2020 → 2021
+
+\hr
+
+\section{Problématique de l’existant}
+
+\subsection{Partitions systèmes avec accès en écriture}
+
+\subsubsection{Système de fichiers sans gestion d’instantanés}
+
+\begin{itmz}
+\item{avantages :}
+\item{inconvénients :}
+\end{itmz}
+
+\subsubsection{Système de fichiers avec gestion d’instantanés}
+
+\begin{itmz}
+\item{avantages :}
+\item{inconvénients :}
+\end{itmz}
+
+\subsection{Images « à la volée » avec accès en lecture seule}
+
+\subsubsection{Amorçage sans gestion de persistance de données}
+
+\begin{itmz}
+\item{avantages :}
+\item{inconvénients :}
+\end{itmz}
+
+\subsubsection{Amorçage avec gestion de persistance de données}
+
+\begin{itmz}
+\item{avantages :}
+\item{inconvénients :}
+\end{itmz}
+
+\section{Proposition : fonctionnement incrémental}
+
+\subsection{Fabrication}
+
+\subsubsection{Miroirs de dépôts officiels distribution et éditeurs}
+
+\begin{itmz}
+\item{synchronisation locale pour accès rapide, stable et hors-ligne : apt-mirror}
+\item{vérification d’intégrité avant utilisation des paquets synchronisés}
+\end{itmz}
+
+\subsubsection{Construction d’un système de fichiers}
+
+\begin{itmz}
+\item{prise en compte du type de machine cible : physique, virtuelle, conteneur}
+\item{détermination des paquets logiciels à installer et à configurer}
+\item{transformation en système d’exploitation « à la volée »}
+\end{itmz}
+
+\subsubsection{Encapsulation dans un fichier image}
+
+\begin{itmz}
+\item{choix d’un format adapté au montage en lecture seule : squashfs}
+\item{algorithmes de compression disponibles : gz, xz, zstd}
+\item{niveau supplémentaire d’encapsulation avec un format hybride : iso}
+\end{itmz}
+
+\subsubsection{Sécurité}
+
+\begin{itmz}
+\item{intégrité par calcul de sommes de contrôle : sha512sum}
+\item{authenticité via signature des images produites : gpg}
+\end{itmz}
+
+\subsection{Amorçage}
+
+\begin{itmz}
+\item{utilisation d’un chargeur de démarrage signé : grub, secure boot}
+\item{création d’un menu de démarrage à choix multiple d’images}
+\item{vérification d’authenticité et d’intégrité des images}
+\item{chargement d’image(s) en mémoire vive : complet, partiel}
+\end{itmz}
+
+\subsection{Mise à niveau}
+
+\begin{itmz}
+\item{système d’exploitation en cours d’exécution}
+\item{nouvelle image pour le prochain redémarrage}
+\end{itmz}
+
+\section{Scripts d’automatisation potentiels}
+
+\begin{itmz}
+\item{synchronisation locale et vérification d’intégrité, de façon parallélisée}
+\item{construction de systèmes de fichiers à partir de profils versionnés}
+\item{génération à la volée de menu de démarrage}
+\end{itmz}
+
+\hr
+
+\appendix
+
+\section{Contexte professionnel}
+
+M’étant engagé à compter de 2001 envers le Ministère des Armées, je travaille :
+\begin{itmz}
+\item{depuis 2001 pour le corps des sous-officiers de l’Armée de l’Air}
+\item{depuis 2016 sous la Direction Interarmées des Réseaux d’Infrastructure et SI}
+\end{itmz}
+
+\subsection{Restrictions}
+
+\begin{itmz}
+\item{aucun droit d’administration sur l’infrastructure virtuelle attribuée}
+\end{itmz}
+
+\subsection{Propriété intellectuelle}
+
+\begin{itmz}
+\item{toute solution développée sur le temps de travail devient la propriété du Ministère}
+\end{itmz}
+
+\section{Cadre de production du mémoire ingénieur}
+
+\begin{itmz}
+\item{interdiction statutaire d’exercer simultanément une autre activité}
+\end{itmz}
+Est-il possible de manière indépendante ?
+
+\end{document}