From ba77aca73ba3ca1fd1ce6221483c9839e3ca1752 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Wed, 28 Oct 2020 23:16:34 +0100 Subject: [PATCH] New tuto 3 done --- tutorial/2/Makefile | 2 - tutorial/2/rendu.md | 4 +- tutorial/2/tutorial.md | 19 ++- tutorial/3/Makefile | 10 +- tutorial/3/project-rendu.md | 39 ----- tutorial/3/rendu.md | 49 +++++++ tutorial/3/tutorial.md | 27 ++-- tutorial/4/Makefile | 4 +- tutorial/{3 => 4}/capabilities.md | 0 tutorial/{3 => 4}/cgroups.md | 0 tutorial/{3 => 4}/check.sh | 0 tutorial/{3 => 4}/chroot.md | 0 tutorial/{3 => 4}/installation.md | 0 tutorial/{3 => 4}/oom.md | 0 tutorial/{3 => 4}/project-body.md | 0 tutorial/4/project-intro.md | 14 +- tutorial/4/project-rendu.md | 37 +++-- tutorial/{3 => 4}/pseudofs.md | 0 tutorial/{3 => 4}/seccomp.md | 0 tutorial/4/tutorial.md | 19 +-- tutorial/{3 => 4}/tutorial.tex | 0 tutorial/5/Makefile | 12 ++ tutorial/{4 => 5}/cmpns.md | 0 tutorial/{4 => 5}/docker-exec.md | 0 tutorial/{4 => 5}/lesson.md | 0 tutorial/{4 => 5}/mount.md | 0 tutorial/{4 => 5}/mountns.md | 0 tutorial/{4 => 5}/namespaces.md | 0 tutorial/{4 => 5}/networkns.md | 0 tutorial/{4 => 5}/pidns.md | 0 tutorial/{3 => 5}/project-intro.md | 14 +- tutorial/5/project-rendu.md | 32 +++++ tutorial/{4 => 5}/rendu.md | 0 tutorial/{4 => 5}/setup.md | 0 tutorial/5/tutorial.md | 24 ++++ tutorial/{4 => 5}/userns.md | 0 tutorial/devops/cd.md | 6 + tutorial/devops/ci.md | 118 +++++++++++++++ tutorial/devops/devops.md | 196 +++++++++++++++++++++++++ tutorial/devops/drone-run.png | Bin 0 -> 62439 bytes tutorial/devops/drone-youp0m.yml | 50 +++++++ tutorial/devops/oauth-drone.png | Bin 0 -> 42252 bytes tutorial/devops/publish-docker.md | 94 ++++++++++++ tutorial/devops/tag-released.png | Bin 0 -> 41988 bytes tutorial/devops/tools.md | 197 ++++++++++++++++++++++++++ tutorial/devops/what.md | 63 ++++++++ tutorial/docker-basis/ex-owncloud.md | 48 +++++++ tutorial/docker-internals/Makefile | 2 +- tutorial/docker-internals/registry.md | 2 +- tutorial/docker-internals/rendu.md | 15 +- tutorial/docker-internals/runc.md | 8 +- tutorial/docker-internals/tutorial.md | 21 +-- tutorial/dockerfiles/commit.png | Bin 0 -> 70958 bytes tutorial/dockerfiles/dockerfile.md | 5 +- tutorial/dockerfiles/goodpractices.md | 2 +- tutorial/dockerfiles/interactive.md | 24 ++++ tutorial/dockerfiles/working-with.md | 6 + 57 files changed, 1026 insertions(+), 137 deletions(-) delete mode 100644 tutorial/3/project-rendu.md create mode 100644 tutorial/3/rendu.md rename tutorial/{3 => 4}/capabilities.md (100%) rename tutorial/{3 => 4}/cgroups.md (100%) rename tutorial/{3 => 4}/check.sh (100%) rename tutorial/{3 => 4}/chroot.md (100%) rename tutorial/{3 => 4}/installation.md (100%) rename tutorial/{3 => 4}/oom.md (100%) rename tutorial/{3 => 4}/project-body.md (100%) rename tutorial/{3 => 4}/pseudofs.md (100%) rename tutorial/{3 => 4}/seccomp.md (100%) rename tutorial/{3 => 4}/tutorial.tex (100%) create mode 100644 tutorial/5/Makefile rename tutorial/{4 => 5}/cmpns.md (100%) rename tutorial/{4 => 5}/docker-exec.md (100%) rename tutorial/{4 => 5}/lesson.md (100%) rename tutorial/{4 => 5}/mount.md (100%) rename tutorial/{4 => 5}/mountns.md (100%) rename tutorial/{4 => 5}/namespaces.md (100%) rename tutorial/{4 => 5}/networkns.md (100%) rename tutorial/{4 => 5}/pidns.md (100%) rename tutorial/{3 => 5}/project-intro.md (59%) create mode 100644 tutorial/5/project-rendu.md rename tutorial/{4 => 5}/rendu.md (100%) rename tutorial/{4 => 5}/setup.md (100%) create mode 100644 tutorial/5/tutorial.md rename tutorial/{4 => 5}/userns.md (100%) create mode 100644 tutorial/devops/cd.md create mode 100644 tutorial/devops/ci.md create mode 100644 tutorial/devops/devops.md create mode 100644 tutorial/devops/drone-run.png create mode 100644 tutorial/devops/drone-youp0m.yml create mode 100644 tutorial/devops/oauth-drone.png create mode 100644 tutorial/devops/publish-docker.md create mode 100644 tutorial/devops/tag-released.png create mode 100644 tutorial/devops/tools.md create mode 100644 tutorial/devops/what.md create mode 100644 tutorial/docker-basis/ex-owncloud.md create mode 100644 tutorial/dockerfiles/commit.png create mode 100644 tutorial/dockerfiles/working-with.md diff --git a/tutorial/2/Makefile b/tutorial/2/Makefile index c52c4a3..97e271d 100644 --- a/tutorial/2/Makefile +++ b/tutorial/2/Makefile @@ -2,8 +2,6 @@ include ../pandoc-opts.mk SOURCES = tutorial.md \ ../dockerfiles/interactive.md ../dockerfiles/dockerfile.md ../dockerfiles/goodpractices.md ../dockerfiles/entrypoint.md \ - ../docker-internals/registry.md \ - ../docker-internals/runc.md \ ../docker-internals/clair.md \ rendu.md diff --git a/tutorial/2/rendu.md b/tutorial/2/rendu.md index 5c32640..f85725b 100644 --- a/tutorial/2/rendu.md +++ b/tutorial/2/rendu.md @@ -19,7 +19,7 @@ envoyé à une autre adresse et/ou non signé et/ou reçu après la correction n sera pas pris en compte. Par ailleurs, n'oubliez pas de répondre à -[l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=307). +[l'évaluation du cours](https://virli.nemunai.re/quiz/4). Tarball @@ -39,8 +39,6 @@ login_x-TP2/youp0m/Dockerfile login_x-TP2/youp0m/entrypoint.sh login_x-TP2/youp0m/.dockerignore login_x-TP2/youp0m/... -login_x-TP2/registry_play.sh -login_x-TP5/runc/config.json login_x-TP2/clair/docker-compose.yml login_x-TP2/clair/clair_config/config.yaml login_x-TP2/nginx:mainline.html # rapport d'analyse PAclair diff --git a/tutorial/2/tutorial.md b/tutorial/2/tutorial.md index 467c7e4..ae399b0 100644 --- a/tutorial/2/tutorial.md +++ b/tutorial/2/tutorial.md @@ -3,7 +3,7 @@ title: Virtualisation légère -- TP n^o^ 2 subtitle: Construire des images Docker et leur sécurité author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} institute: EPITA -date: Mercredi 16 octobre 2019 +date: Mardi 22 septembre 2020 abstract: | Durant ce deuxième TP, nous allons voir comment créer nos propres images, comment s'assurer qu'elles n'ont pas de vulnérabilités @@ -12,15 +12,14 @@ abstract: | \vspace{1em} Tous les éléments de ce TP (exercices et projet) sont à rendre à - au plus tard le mercredi 23 octobre 2019 à 13 h - 42, des questions de cours sont également à compléter avant cette - date sur Epitaf. Consultez la dernière section de chaque partie pour - plus d'information sur les éléments à rendre. + au plus tard le **jeudi 22 octobre 2020 à 12 h + 42**. Consultez la dernière section de chaque partie pour plus d'information + sur les éléments à rendre. Et n'oubliez pas de répondre aux [questions de + cours](https://virli.nemunai.re/quiz/4). - En tant que personnes sensibilisées à la sécurité des échanges - électroniques, vous devrez m'envoyer vos rendus signés avec votre - clef PGP. Pensez à - [me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re) - faire signer votre clef et n'hésitez pas à [faire signer la + En tant que personnes sensibilisées à la sécurité des échanges électroniques, + vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à + [me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re) faire signer + votre clef et n'hésitez pas à [faire signer la votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/). ... diff --git a/tutorial/3/Makefile b/tutorial/3/Makefile index a085943..55a995b 100644 --- a/tutorial/3/Makefile +++ b/tutorial/3/Makefile @@ -1,6 +1,14 @@ include ../pandoc-opts.mk -SOURCES = tutorial.md installation.md chroot.md pseudofs.md capabilities.md cgroups.md oom.md seccomp.md project-intro.md project-body.md project-rendu.md +SOURCES = tutorial.md \ + ../devops/devops.md \ + ../devops/what.md \ + ../devops/tools.md \ + ../devops/ci.md \ + ../devops/publish-docker.md \ + ../docker-internals/oci.md \ + ../docker-internals/registry.md \ + rendu.md all: tutorial.pdf diff --git a/tutorial/3/project-rendu.md b/tutorial/3/project-rendu.md deleted file mode 100644 index aa55d9b..0000000 --- a/tutorial/3/project-rendu.md +++ /dev/null @@ -1,39 +0,0 @@ -## Modalité de rendu - -Un service automatique s'occupe de réceptionner vos rendus, de faire les -vérifications nécessaires et de vous envoyer un accusé de réception (ou de -rejet). - -Ce service écoute sur l'adresse , c'est donc à cette adresse -et exclusivement à celle-ci que vous devez envoyer vos rendus. Tout rendu -envoyé à une autre adresse et/ou non signé et/ou reçu après la correction ne -sera pas pris en compte. - -Par ailleurs, n'oubliez pas de répondre à -[l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=308). - - -## Tarball - -Tous les fichiers identifiés comme étant à rendre pour ce TP sont à -placer dans une tarball (pas d'archive ZIP, RAR, ...). - -Voici une arborescence type (adaptez les extensions et les éventuels -fichiers supplémentaires associés au langage que vous aurez choisi -pour chaque exercice) : - -
-``` -login_x-TP3/ -login_x-TP3/escape.c -login_x-TP3/procinfo.sh -login_x-TP3/suspend_schedule.sh -login_x-TP3/view_caps.c -login_x-TP3/monitor.sh -login_x-TP3/monitor_init.sh -login_x-TP3/syscall_filter.c -``` -
- -Les premières étapes du projet ne sont pas à rendre et feront l'objet -d'un rendu à part. diff --git a/tutorial/3/rendu.md b/tutorial/3/rendu.md new file mode 100644 index 0000000..e11ac4d --- /dev/null +++ b/tutorial/3/rendu.md @@ -0,0 +1,49 @@ +\newpage + +Rendu +===== + +Modalités de rendu +------------------ + +En tant que personnes sensibilisées à la sécurité des échanges électroniques, +vous devrez m'envoyer vos rendus signés avec votre clef PGP. + +Un service automatique s'occupe de réceptionner vos rendus, de faire des +vérifications élémentaires et de vous envoyer un accusé de réception (ou de +rejet). + +Ce service écoute sur l'adresse , c'est donc à cette adresse +et exclusivement à celle-ci que vous devez envoyer vos rendus. Tout rendu +envoyé à une autre adresse et/ou non signé et/ou reçu après la correction ne +sera pas pris en compte. + +Par ailleurs, n'oubliez pas de répondre à +[l'évaluation du cours](https://virli.nemunai.re/quiz/5). + + +Tarball +------- + +Tous les fichiers identifiés comme étant à rendre pour ce TP sont à +placer dans une tarball (pas d'archive ZIP, RAR, ...). + +Voici une arborescence type (vous pourriez avoir des fichiers +supplémentaires) : + +
+``` +login_x-TP3/ +login_x-TP3/cicd-playbook/ +login_x-TP3/cicd-playbook/cicd-setup.yml +login_x-TP3/cicd-playbook/roles/... +login_x-TP3/youp0m/ +login_x-TP3/youp0m/.drone.yml +login_x-TP3/youp0m/.ansible/... # Pour ceux qui auraient fait le 5.4 optionnel +login_x-TP3/youp0m/Dockerfile +login_x-TP3/youp0m/entrypoint.sh +login_x-TP3/youp0m/.dockerignore +login_x-TP3/youp0m/... +login_x-TP3/registry_play.sh +``` +
diff --git a/tutorial/3/tutorial.md b/tutorial/3/tutorial.md index e48130e..299f052 100644 --- a/tutorial/3/tutorial.md +++ b/tutorial/3/tutorial.md @@ -1,25 +1,24 @@ --- title: Virtualisation légère -- TP n^o^ 3 -subtitle: Linux Internals partie 1 +subtitle: DevOps, intégration et déploiement continu author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} institute: EPITA -date: Mercredi 23 octobre 2019 +date: Mercredi 28 octobre 2020 abstract: | - Ce premier TP consacré aux Linux Internals va nous permettre - d'appréhender les notions de pseudos systèmes de fichiers, de - cgroups ainsi que de capabilities. + Durant ce troisième TP, nous allons jouer les DevOps et déployer + automatiquement des services ! \vspace{1em} - Certains éléments de ce TP sont à rendre à au - plus tard le mercredi 6 novembre 2019 à 13 h 42. Consultez la - dernière section de chaque partie pour plus d'information sur les - éléments à rendre. + Tous les éléments de ce TP (exercices et projet) sont à rendre à + au plus tard le **mercredi 4 novembre 2020 à 12 h + 42**. Consultez la dernière section de chaque partie pour plus d'information + sur les éléments à rendre. Et n'oubliez pas de répondre aux [questions de + cours](https://virli.nemunai.re/quiz/5). - En tant que personnes sensibilisées à la sécurité des échanges - électroniques, vous devrez m'envoyer vos rendus signés avec votre - clef PGP. Pensez à - [me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re) - faire signer votre clef et n'hésitez pas à [faire signer la + En tant que personnes sensibilisées à la sécurité des échanges électroniques, + vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à + [me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re) faire signer + votre clef et n'hésitez pas à [faire signer la votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/). ... diff --git a/tutorial/4/Makefile b/tutorial/4/Makefile index 1002ae8..a085943 100644 --- a/tutorial/4/Makefile +++ b/tutorial/4/Makefile @@ -1,11 +1,11 @@ include ../pandoc-opts.mk -SOURCES_TUTO = tutorial.md setup.md mount.md namespaces.md cmpns.md docker-exec.md networkns.md pidns.md mountns.md userns.md rendu.md +SOURCES = tutorial.md installation.md chroot.md pseudofs.md capabilities.md cgroups.md oom.md seccomp.md project-intro.md project-body.md project-rendu.md all: tutorial.pdf -tutorial.pdf: ${SOURCES_TUTO} +tutorial.pdf: ${SOURCES} pandoc ${PANDOCOPTS} -o $@ $+ clean:: diff --git a/tutorial/3/capabilities.md b/tutorial/4/capabilities.md similarity index 100% rename from tutorial/3/capabilities.md rename to tutorial/4/capabilities.md diff --git a/tutorial/3/cgroups.md b/tutorial/4/cgroups.md similarity index 100% rename from tutorial/3/cgroups.md rename to tutorial/4/cgroups.md diff --git a/tutorial/3/check.sh b/tutorial/4/check.sh similarity index 100% rename from tutorial/3/check.sh rename to tutorial/4/check.sh diff --git a/tutorial/3/chroot.md b/tutorial/4/chroot.md similarity index 100% rename from tutorial/3/chroot.md rename to tutorial/4/chroot.md diff --git a/tutorial/3/installation.md b/tutorial/4/installation.md similarity index 100% rename from tutorial/3/installation.md rename to tutorial/4/installation.md diff --git a/tutorial/3/oom.md b/tutorial/4/oom.md similarity index 100% rename from tutorial/3/oom.md rename to tutorial/4/oom.md diff --git a/tutorial/3/project-body.md b/tutorial/4/project-body.md similarity index 100% rename from tutorial/3/project-body.md rename to tutorial/4/project-body.md diff --git a/tutorial/4/project-intro.md b/tutorial/4/project-intro.md index e4a3175..1d46c98 100644 --- a/tutorial/4/project-intro.md +++ b/tutorial/4/project-intro.md @@ -5,20 +5,20 @@ Projet et rendu ## Sujet -**Ce projet, étalé sur ce TP et le TP précédent, constitue le cœur de la - notation de ce cours.** - -Vous allez continuer aujourd'hui le projet qui s'étendra depuis le TP précédent -et qui consistera à réaliser la partie d'isolation de la moulinette des ACUs ! +Vous allez commencer aujourd'hui un projet qui s'étendra au prochain TP et qui +consistera à réaliser la partie d'isolation de la moulinette des ACUs ! Cette semaine, il faudra faire en sorte de restreindre un groupe de processus -pour qu'il s'exécute indépendemment de votre système. +pour qu'il ne puisse pas faire de déni de service sur notre machine. Il n'y a pas de restriction sur le langage utilisé, vous pouvez tout aussi bien -utiliser du C, du C++, du Python, du shell, etc. +utiliser du C, du C++, du Python, etc. L'usage de bibliothèques **non relatives** au projet est autorisé : le but de ce sujet est d'évaluer votre compréhension et votre utilisation de la tuyauterie bas-niveau du noyau liée à la virtualisation légère. À partir du moment où vous n'utilisez pas une bibliothèque qui abstrait complètement cette plomberie, n'hésitez pas à l'utiliser ! + +Gardez en tête que ce projet sera à continuer au prochain TP, où il sera +principalement question de faire des appels systèmes. diff --git a/tutorial/4/project-rendu.md b/tutorial/4/project-rendu.md index 3af9fc5..aa55d9b 100644 --- a/tutorial/4/project-rendu.md +++ b/tutorial/4/project-rendu.md @@ -1,32 +1,39 @@ -Modalités de rendu -================== - -En tant que personnes sensibilisées à la sécurité des échanges électroniques, -vous devrez m'envoyer vos rendus signés avec votre clef PGP. +## Modalité de rendu Un service automatique s'occupe de réceptionner vos rendus, de faire les vérifications nécessaires et de vous envoyer un accusé de réception (ou de rejet). -Ce service écoute sur l'adresse . C'est donc à cette adresse +Ce service écoute sur l'adresse , c'est donc à cette adresse et exclusivement à celle-ci que vous devez envoyer vos rendus. Tout rendu envoyé à une autre adresse et/ou non signé et/ou reçu après la correction ne sera pas pris en compte. -Pour différencier le rendu du TP, du rendu du projet, ajoutez une balise -`[PROJET]` au sujet de votre courriel, afin qu'il soit traité comme tel. +Par ailleurs, n'oubliez pas de répondre à +[l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=308). -Tarball -------- -Le projet à rendre pour ce cours est à placer dans une tarball (pas d'archive -ZIP, RAR, ...). +## Tarball -Voici une arborescence type: +Tous les fichiers identifiés comme étant à rendre pour ce TP sont à +placer dans une tarball (pas d'archive ZIP, RAR, ...). + +Voici une arborescence type (adaptez les extensions et les éventuels +fichiers supplémentaires associés au langage que vous aurez choisi +pour chaque exercice) :
``` -login_x-mymoulette/README -login_x-mymoulette/... +login_x-TP3/ +login_x-TP3/escape.c +login_x-TP3/procinfo.sh +login_x-TP3/suspend_schedule.sh +login_x-TP3/view_caps.c +login_x-TP3/monitor.sh +login_x-TP3/monitor_init.sh +login_x-TP3/syscall_filter.c ```
+ +Les premières étapes du projet ne sont pas à rendre et feront l'objet +d'un rendu à part. diff --git a/tutorial/3/pseudofs.md b/tutorial/4/pseudofs.md similarity index 100% rename from tutorial/3/pseudofs.md rename to tutorial/4/pseudofs.md diff --git a/tutorial/3/seccomp.md b/tutorial/4/seccomp.md similarity index 100% rename from tutorial/3/seccomp.md rename to tutorial/4/seccomp.md diff --git a/tutorial/4/tutorial.md b/tutorial/4/tutorial.md index d119d99..e48130e 100644 --- a/tutorial/4/tutorial.md +++ b/tutorial/4/tutorial.md @@ -1,19 +1,20 @@ --- -title: Virtualisation légère -- TP n^o^ 4 -subtitle: Linux Internals partie 2 +title: Virtualisation légère -- TP n^o^ 3 +subtitle: Linux Internals partie 1 author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} institute: EPITA -date: Mercredi 6 novembre 2019 +date: Mercredi 23 octobre 2019 abstract: | - Le but de ce second TP sur les mécanismes internes du noyau va nous - permettre d'utiliser les commandes et les appels systèmes relatifs - aux *namespaces* ainsi que d'appréhender la complexité des systèmes - de fichiers. + Ce premier TP consacré aux Linux Internals va nous permettre + d'appréhender les notions de pseudos systèmes de fichiers, de + cgroups ainsi que de capabilities. \vspace{1em} - Tous les exercices de ce TP sont à rendre à au - plus tard le mercredi 20 novembre 2017 à 13 h 42. + Certains éléments de ce TP sont à rendre à au + plus tard le mercredi 6 novembre 2019 à 13 h 42. Consultez la + dernière section de chaque partie pour plus d'information sur les + éléments à rendre. En tant que personnes sensibilisées à la sécurité des échanges électroniques, vous devrez m'envoyer vos rendus signés avec votre diff --git a/tutorial/3/tutorial.tex b/tutorial/4/tutorial.tex similarity index 100% rename from tutorial/3/tutorial.tex rename to tutorial/4/tutorial.tex diff --git a/tutorial/5/Makefile b/tutorial/5/Makefile new file mode 100644 index 0000000..1002ae8 --- /dev/null +++ b/tutorial/5/Makefile @@ -0,0 +1,12 @@ +include ../pandoc-opts.mk + +SOURCES_TUTO = tutorial.md setup.md mount.md namespaces.md cmpns.md docker-exec.md networkns.md pidns.md mountns.md userns.md rendu.md + + +all: tutorial.pdf + +tutorial.pdf: ${SOURCES_TUTO} + pandoc ${PANDOCOPTS} -o $@ $+ + +clean:: + rm tutorial.pdf diff --git a/tutorial/4/cmpns.md b/tutorial/5/cmpns.md similarity index 100% rename from tutorial/4/cmpns.md rename to tutorial/5/cmpns.md diff --git a/tutorial/4/docker-exec.md b/tutorial/5/docker-exec.md similarity index 100% rename from tutorial/4/docker-exec.md rename to tutorial/5/docker-exec.md diff --git a/tutorial/4/lesson.md b/tutorial/5/lesson.md similarity index 100% rename from tutorial/4/lesson.md rename to tutorial/5/lesson.md diff --git a/tutorial/4/mount.md b/tutorial/5/mount.md similarity index 100% rename from tutorial/4/mount.md rename to tutorial/5/mount.md diff --git a/tutorial/4/mountns.md b/tutorial/5/mountns.md similarity index 100% rename from tutorial/4/mountns.md rename to tutorial/5/mountns.md diff --git a/tutorial/4/namespaces.md b/tutorial/5/namespaces.md similarity index 100% rename from tutorial/4/namespaces.md rename to tutorial/5/namespaces.md diff --git a/tutorial/4/networkns.md b/tutorial/5/networkns.md similarity index 100% rename from tutorial/4/networkns.md rename to tutorial/5/networkns.md diff --git a/tutorial/4/pidns.md b/tutorial/5/pidns.md similarity index 100% rename from tutorial/4/pidns.md rename to tutorial/5/pidns.md diff --git a/tutorial/3/project-intro.md b/tutorial/5/project-intro.md similarity index 59% rename from tutorial/3/project-intro.md rename to tutorial/5/project-intro.md index 1d46c98..e4a3175 100644 --- a/tutorial/3/project-intro.md +++ b/tutorial/5/project-intro.md @@ -5,20 +5,20 @@ Projet et rendu ## Sujet -Vous allez commencer aujourd'hui un projet qui s'étendra au prochain TP et qui -consistera à réaliser la partie d'isolation de la moulinette des ACUs ! +**Ce projet, étalé sur ce TP et le TP précédent, constitue le cœur de la + notation de ce cours.** + +Vous allez continuer aujourd'hui le projet qui s'étendra depuis le TP précédent +et qui consistera à réaliser la partie d'isolation de la moulinette des ACUs ! Cette semaine, il faudra faire en sorte de restreindre un groupe de processus -pour qu'il ne puisse pas faire de déni de service sur notre machine. +pour qu'il s'exécute indépendemment de votre système. Il n'y a pas de restriction sur le langage utilisé, vous pouvez tout aussi bien -utiliser du C, du C++, du Python, etc. +utiliser du C, du C++, du Python, du shell, etc. L'usage de bibliothèques **non relatives** au projet est autorisé : le but de ce sujet est d'évaluer votre compréhension et votre utilisation de la tuyauterie bas-niveau du noyau liée à la virtualisation légère. À partir du moment où vous n'utilisez pas une bibliothèque qui abstrait complètement cette plomberie, n'hésitez pas à l'utiliser ! - -Gardez en tête que ce projet sera à continuer au prochain TP, où il sera -principalement question de faire des appels systèmes. diff --git a/tutorial/5/project-rendu.md b/tutorial/5/project-rendu.md new file mode 100644 index 0000000..3af9fc5 --- /dev/null +++ b/tutorial/5/project-rendu.md @@ -0,0 +1,32 @@ +Modalités de rendu +================== + +En tant que personnes sensibilisées à la sécurité des échanges électroniques, +vous devrez m'envoyer vos rendus signés avec votre clef PGP. + +Un service automatique s'occupe de réceptionner vos rendus, de faire les +vérifications nécessaires et de vous envoyer un accusé de réception (ou de +rejet). + +Ce service écoute sur l'adresse . C'est donc à cette adresse +et exclusivement à celle-ci que vous devez envoyer vos rendus. Tout rendu +envoyé à une autre adresse et/ou non signé et/ou reçu après la correction ne +sera pas pris en compte. + +Pour différencier le rendu du TP, du rendu du projet, ajoutez une balise +`[PROJET]` au sujet de votre courriel, afin qu'il soit traité comme tel. + +Tarball +------- + +Le projet à rendre pour ce cours est à placer dans une tarball (pas d'archive +ZIP, RAR, ...). + +Voici une arborescence type: + +
+``` +login_x-mymoulette/README +login_x-mymoulette/... +``` +
diff --git a/tutorial/4/rendu.md b/tutorial/5/rendu.md similarity index 100% rename from tutorial/4/rendu.md rename to tutorial/5/rendu.md diff --git a/tutorial/4/setup.md b/tutorial/5/setup.md similarity index 100% rename from tutorial/4/setup.md rename to tutorial/5/setup.md diff --git a/tutorial/5/tutorial.md b/tutorial/5/tutorial.md new file mode 100644 index 0000000..d119d99 --- /dev/null +++ b/tutorial/5/tutorial.md @@ -0,0 +1,24 @@ +--- +title: Virtualisation légère -- TP n^o^ 4 +subtitle: Linux Internals partie 2 +author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} +institute: EPITA +date: Mercredi 6 novembre 2019 +abstract: | + Le but de ce second TP sur les mécanismes internes du noyau va nous + permettre d'utiliser les commandes et les appels systèmes relatifs + aux *namespaces* ainsi que d'appréhender la complexité des systèmes + de fichiers. + + \vspace{1em} + + Tous les exercices de ce TP sont à rendre à au + plus tard le mercredi 20 novembre 2017 à 13 h 42. + + En tant que personnes sensibilisées à la sécurité des échanges + électroniques, vous devrez m'envoyer vos rendus signés avec votre + clef PGP. Pensez à + [me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re) + faire signer votre clef et n'hésitez pas à [faire signer la + votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/). +... diff --git a/tutorial/4/userns.md b/tutorial/5/userns.md similarity index 100% rename from tutorial/4/userns.md rename to tutorial/5/userns.md diff --git a/tutorial/devops/cd.md b/tutorial/devops/cd.md new file mode 100644 index 0000000..0a73e0a --- /dev/null +++ b/tutorial/devops/cd.md @@ -0,0 +1,6 @@ +\newpage + +Déploiement +=========== + +TODO il faudrait pouvoir cliquer sur le bouton pour mettre à jour l'image docker qui tourne localement ? en passant par Ansible ? diff --git a/tutorial/devops/ci.md b/tutorial/devops/ci.md new file mode 100644 index 0000000..c912706 --- /dev/null +++ b/tutorial/devops/ci.md @@ -0,0 +1,118 @@ +\newpage + +Intégration continue +==================== + +Une fois Gitea et Drone installés et configurés, nous allons pouvoir rentré +dans le vif du sujet : faire de l'intégration continue sur notre premier projet ! + +## `youp0m` + +### Créez un dépôt pour `youp0m` + +Reprenez les travaux réalisés au TP précédent. Nous allons notamment avoir +besoin du `Dockerfile` dans la section suivante. + +Après avoir créé (ou migré pour les plus malins !) le dépôt +[`youp0m`](https://gitea.nemunai.re/nemunaire/youp0m), dans Drone, +synchronisez les dépôts, puis activez la surveillance de `youp0m`. + +Vous allez devoir rédiger un fichier `.drone.yml`, que l'on placera à la +racine du dépôt (celui qui existe déjà dans le dépôt pourra servir +d'inspiration, mais il ne fonctionnera pas directement sur votre +installation). C'est ce fichier qui sera traité par DroneCI pour savoir comment +compiler et tester le projet. + + +### Définir les étapes d'intégration + +Toutes les informations nécessaire à l'écriture du fichier `.drone.yml` se +trouvent dans [l'excellente documentation du +projet](https://docs.drone.io/pipeline/docker/examples/languages/golang/). + +Les étapes sont sensiblement les mêmes que dans le `Dockerfile` que vous avez +écrit lors du TP précédent. + +Comittez puis pousser votre travail, dès qu'il sera reçu par Gitea, vous +devriez voir l'interface de Drone lancer les étapes décrites dans le fichier. + +**IMPORTANT :** si vous avez l'impression que ça ne marche pas et que vous avez +réutilisé le fichier présent sur le dépôt au lieu de partir de l'exemple donné +dans la documentation, **commencez en partant de l'exemple de la +documentation** ! Le fichier présent sur le dépôt ne fonctionnera pas dans +votre situation ! + +![Drone en action](../devops/drone-run.png){height=8cm} + +Lorsqu'apparaît enfin la ligne `git.nemunai.re/youp0m`, le projet est compilé ! + + +### Inspection qualité + +Nous n'avons pas encore de test à proprement parlé. Nous allons utiliser +[Sonarqube](https://www.sonarqube.org/) pour faire une revue qualité du code ! + +Tout d'abord, il faut lancer le conteneur Sonarqube (pensez à l'ajouter à votre +playbook !) : + +
+```bash +docker run --rm -d --name sonarqube --network drone -p 9000:9000 sonarqube +``` +
+ +Le service met un bon moment avant de démarrer, dès qu'il se sera initialisé, +nous pourrons accéder à l'interface sur . + +En attendant qu'il démarre, nous pouvons commencer à ajouter le nécessaire à +notre `.drone.yml` : . + +Après s'être connecté à Sonarqube (`admin:admin`), nous pouvons aller générer +un token, tel que décrit dans la [documentation du plugin +Drone](http://plugins.drone.io/aosapps/drone-sonar-plugin/). + +Une fois la modification commitée et poussée, Drone enverra le code à Sonarqube +qui en fera une analyse minutieuse. Rendez-vous sur + pour admirer le résultat. + + +### Publier le binaire correspondant aux tags/jalons + +Nous savons maintenant que notre projet compile bien dans un environnement +différent de celui du développeur ! Néanmoins, le binaire produit est perdu dès +lors que la compilation est terminée, car nous n'en faisons rien. + +Ajoutons donc une nouvelle règle à notre `.droneci.yml` pour placer le binaire +au sein de la liste des fichiers téléchargeable aux côtés des tags. + +Vous aurez sans doute besoin de : + + - + - + +Attention à ne pas stocker votre clef d'API dans le fichier YAML ! + +![Binaire publié automatiquement sur Gitea](../devops/tag-released.png){height=8cm} + +Lorsque l'on est plusieurs à travailler sur le projet ou pour accroître la +sécurité, il convient de créer, un compte *bot* qui sera responsable de la +création des *releases*. Ce sera donc sa clef d'API que l'on indiquera dans +l'interface de Drone. + + +### Publier pour plusieurs architectures ? + +Le compilateur Go est fourni avec l'ensemble des backends des différentes +architectures matérielles qu'il supporte, nous pouvons donc aisément faire de +la compilation croisée pour d'autres architectures. + +Essayons maintenant de compiler `youp0m` pour plusieurs architecture afin de +vérifier que cela fonctionne bien ! + +Un exemple est donné tout en haut de cette page : +. + +En faisant varier `$GOARCH` en `arm`, `arm64`, `mips`, ... nous pouvons générer +les binaires correspondant à chaque architecture et système. + +Ajoutez au moins 2 autres architectures à votre fichier `.drone.yml`. diff --git a/tutorial/devops/devops.md b/tutorial/devops/devops.md new file mode 100644 index 0000000..cb97170 --- /dev/null +++ b/tutorial/devops/devops.md @@ -0,0 +1,196 @@ +\newpage + +Le mouvement DevOps +=================== + +Jusqu'à récemment, et encore dans de nombreuses entreprises, les développeurs +et les administrateurs systèmes faisaient partis de deux équipes différentes : +les uns développant sur leurs machines avec les dernières bibliothèques, +utilisant les derniers frameworks à la mode, sans se préoccuper de la sécurité +(ils travaillent en `root` ou avec `sudo` ;)), tandis que les autres tentaient +tant bien que mal de déployer ces services avec les contraintes opérationnelles +en tête.\newline +Ces contraintes : tant liées à la **sécurité** (il faut s'assurer +qu'un service n'utilise pas une bibliothèque vulnérable par exemple, donc soit +utilisé sur un système à jour, et qu'il ne tourne pas en `root`), qu'à la +**disponibilité** (si le service est mal codé est contient beaucoup de fuites +mémoire, il ne faut pas que les autres services présents sur la même machine en +pâtissent). + +Une guerre faisait donc rage entre les développeurs qui ne comprennaient pas +que les administrateurs système ne pouvaient pas maintenir autant de version +d'une bibliothèque qu'il y avait de service : par exemple dans le cas de +plusieurs services en PHP, on pouvait leur demander de déployer des +applications utilisant la version 5.1, et la 5.2 pour d'autres, ... lorsqu'il y +avait des incompatibilités mineures et plus personne pour s'occuper de la +maintenance d'un vieux service toujours utilisé. + +Le même principe est aussi valable pour Python, Ruby, ... : les développeurs +ont toujours eu tendance à vouloir utiliser les dernières améliorations d'un +langage, mais les administrateurs systèmes n'ont alors pas de paquets stables +dans la distribution. En effet, les distributions stables telles que Debian, +RedHat ou CentOS ont des cycles de vie assez long et se concentrent plus sur la +stabilité.\newline +Cette stabilité est obtenue grâce à l'utilisation de versions éprouvées des +langages et des bibliothèques, qui assurent un temps de maintenance et de +recherche de bugs réduit aux équipes opérationnelles. Si un projet fonctionne +bien avec une version donnée d'une de ces distributions, on peut être assez +confiant sur le fait que ce sera toujours le cas (du moins tant que la +distribution assure le support de sa version). +\newline + +Le but du DevOps est donc de retrouver une certaine fluidité entre le +développement et l'exploitation. Il s'agit d'un mouvement qui vise à ce que les +développeurs, sans avoir à gérer au quotidien la maintenance des serveurs de +production, soient davantage impliqués dans les opérations de déploiement. Cela +passe notamment par la prise en compte de l'environnement de déploiement dès la +phase de conception du projet, puis dès les premiers développements, des tests +automatisés sont réalisés directement dans un environnement proche de la +production. + +Il en résulte moins de friction entre les deux équipes. Les développeurs étant +par ailleurs amenés à écrire des recettes de déploiement, tels que des +playbooks Ansible ou bien encore des conteneurs Docker. +\newline + +Chez Google (et d'autres entreprises qui ont depuis repris l'idée), des équipes +sont chargées de développer la fiabilité des systèmes d'information de +production. Ce sont les équipes SRE, pour Site Reliability Engineering. On +confie alors complètement la responsabilité de l'environnement de production +aux développeurs qui sont chargés de l'automatiser. Au delà de l'automatisation +des déploiements des services, il s'agit ici de développer des mécanismes +permettant au système de réagir face aux situations telles que les montées en +charges, les pannes, ... + +Attention par contre aux entreprises qui recrutent un profil DevOps, car cela a +autant de sens que recruter un développeur Scrum ou un développeur cycle en V : +DevOps est une méthodologie. Les entreprises qui recrutent un DevOps +recherchent généralement quelqu'un qui fera à la fois du développement logiciel +d'un côté et de l'administration système de l'autre : une situation +généralement assez difficile à vivre. Alors qu'au contraire, la mouvance DevOps +doit être prise au sérieux par l'ensemble des développeurs. Lors d'un entretien +d'embauche pour ce genre de poste, assurez-vous bien de ne pas être le seul à +faire du DevOps. + + +## Intégration continue + +L'**intégration continue** est la première brique à mettre en place : le but +est de compiler automatiquement chaque commit dans un environnement proche de +celui de production, puis de lancer les suites de tests du logiciel. + +Cela permet de détecter les problèmes au plus tôt dans le cycle de +développement, mais cela permet également d'améliorer la qualité du code sur le +long terme, car on peut y ajouter facilement des outils qui vont se charger +automatiquement de réaliser des analyses : cela peut aller de la couverture des +tests, à de l'analyse statique ou dynamique de binaire, en passant par la +recherche de vulnérabilités ou de mauvaises pratiques de programmation. + +À la fin du processus, il est courant d'exporter les produits de compilation +(tarballs, paquets, ISO, conteneurs, ...) ainsi que les journaux et rapports +vers un dossier accessible. Cela permet ainsi aux développeurs de voir les +problèmes et de pousser les analyses avec leurs propres outils. + +Sans déploiement continu (la section suivante), c'est également ces produits de +compilation que les administrateurs systèmes vont déployer sans peine, lorsque +les développeurs considéreront avoir atteint un jalon, une version stable. + + +## Déploiement continu + +Une fois tous les tests passés et les objets produits (on parle d'*artifact* ou +d'*assets*), il est possible de déclencher un déploiement : il s'agit de rendre +accessible aux utilisateurs finaux le services ou les objets. + +Dans le cas d'un programme à télécharger +([Python](https://buildbot.python.org/all/#/), VLC, +[MariaDB](https://buildbot.askmonty.org/buildbot/), ...), on va placer les +paquets sur le site internet, éventuellement mettre à jour un fichier pointant +vers la dernière version (pour que les utilisateurs aient la notifications). + +Ou bien dans le cas d'un service en ligne (GitHub, Netflix, GMail, ...), il +s'agira de mettre à jour le service. + +Parfois les deux seront à faire : à la fois publier un paquet ou un conteneur +et mettre à jour un service en ligne : [le serveur +Synapse](https://buildkite.com/matrix-dot-org/synapse) du protocole de +messagerie Matrix ou encore +[Gitlab](https://gitlab.com/gitlab-org/gitlab/-/pipelines).\newline + +Il existe pour cela de très nombreuses stratégies : lorsque l'on n'a pas +beaucoup de trafic ni beaucoup de machines, on peut simplement éteindre +l'ancien service et démarrer le nouveau, si ça prend quelques millisecondes en +étant automatisé, cela peut être suffisant compte tenu du faible +traffic. + +Lorsque l'on a un trafic élevé, de nombreux clients et donc que le service est +réparti sur plusieurs machines, on ne peut pas se contenter de tout éteindre et +de tout rallumer. Déjà parce que trop de visiteurs vont se retrouver avec des +pages d'erreur, et aussi parce qu'en cas de bug logiciel qui n'aurait pas été +vu malgré les étapes précédentes, cela pourrait créer une situation +catastrophique (imaginez qu'on ne puisse plus valider une commande sur Amazon à +cause d'une ligne commentée par erreur !).\newline +On va donc privilégier un déploiement progressif de la nouvelle version (que +l'on va étendre sur plusieurs minutes, heures ou mêmes jours), en éteignant +tour à tour les instances, et en veillant à ce que les métriques (voir la +section suivante !) soient constantes. + + +## Monitoring et supervision + +Une fois déployé, le service peut avoir des ratés, alors il convient de le +surveiller afin d'être le plus proactif possible dans la résolution des +problèmes. La pire situation est celle dans laquelle c'est un utilisateur qui +nous informe d'un problème... (sur Twitter !?) + +Nous avons réalisé durant le précédent TP, une partie collecte de métriques, +avec nos conteneurs TICK. Nous n'allons donc pas nous en occuper aujourd'hui. +\newline + +Notez tout de même qu'il y a deux grandes catégories de logiciels de +supervision : + +**Basée sur des états** comme Nagios, Zabbix, ... : ces logiciels vont +simplement réaliser des séries de tests définis, à intervalles réguliers et +contacter l'administrateur d'astreinte dès qu'un test ne passe plus de manière +persistante. + +Il y a rarement beaucoup d'intelligence ou d'anticipation automatique dans ces +outils. +\newline + +**Basée sur les métriques** comme ELK, Prometheus, InfluxDB, ... : dans la +stack TICK que nous avons mis en place au précédent TP, nous avions placé un +agent sur la machine que nous souhaitions analyser. Outre les graphiques +présenté dans Chronograf, le dernier outil que l'on n'avait pas configuré était +Kapacitor, qui permet après avoir analysé les données, d'alerter en fonction +d'une évolution. + +L'instrumentation d'une application est une bonne manière de faire remonter des +métrique (combien de clients actuellement connectés, combien de +messages/transactions traités, ...). Ce sont autant d'information que l'on peut +faire remonter dans sa base de données de métriques. +\newline + +La différence entre les deux techniques est que nagios va vous alerter à partir +d'un certain seuil que vous aurez préalablement défini (s'il reste moins de 10% +d'espace disque par exemple), tandis que Kapacitor va tenter d'interpréter les +indicateurs (et donc vous alerter seulement si la courbe représentant l'espace +disque disponible augmente de telle sorte qu'il ne reste plus que quelques +heures avant d'être saturé). + +Sur la base de ces indicateurs, il est possible d'engager des opérations +automatiques, comme par exemple la provision de nouvelles machines pour épauler +un service distribuable, qui est proche de la surcharge, acheter de l'espace de +stockage supplémentaire auprès du fournisseur, ... +\newline + +Enfin, citons dans cette partie le [Chaos +Monkey](https://fr.wikipedia.org/wiki/Chaos_Monkey), conçu par Netflix, qui est +un programme qui va casser de manière aléatoire des éléments de l'environnement +de production. Le but est de provoquer sciemment des pannes, des latences, +... à n'importe quel niveau du produit, afin d'en tester (brulatement certes) +sa résilience. Cela oblige les développeurs, les opérationnels et les +architectes à concevoir des services hautement tolérant aux pannes, ce qui fait +que le jour où une véritable panne survient, elle n'a aucun impact sur la +production (enfin on espère !). diff --git a/tutorial/devops/drone-run.png b/tutorial/devops/drone-run.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6918b6ae4f7b7db4fc0f7411d44ef212e7a807 GIT binary patch literal 62439 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%0DW`%O) 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%0Dee9(5i^AadnG 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 Np`NL3$<4pQ{|h{e$G!jn literal 0 HcmV?d00001 diff --git a/tutorial/devops/publish-docker.md b/tutorial/devops/publish-docker.md new file mode 100644 index 0000000..e80f949 --- /dev/null +++ b/tutorial/devops/publish-docker.md @@ -0,0 +1,94 @@ +\newpage + +Publier une image Docker +======================== + +Toutes les tâches de publication peuvent s'assimiler à des tâches de +déploiement continu. C'est en particulier le cas lorsque le produit de +compilation sera simplement publié et qu'il n'y a pas de service à mettre à +jour ensuite (par exemple, dans le cas de Firefox ou de LibreOffice, une fois +testés, les paquets sont envoyés sur le serveur d'où ils seront distribués ; il +n'y a pas de service/docker à relancer). + +À l'inverse, `youp0m` est à la fois un programme que l'on peut télécharger et +un service un ligne qu'il faut déployer pour mettre à jour facilement. Pour +simplifier le déploiement, nous utilisons des images Docker. Il faut cependant +les générer ... + + +## Mise en place du registre + +*Si vous avez choisi Gitlab, vous pouvez utiliser directement le registre +Docker intégré. Si vous utilisez Gitea, continuez cette section.* + +Afin de disposer de notre propre registre Docker sur lequel publier nos images, +nous allons utiliser l'image de registre fournie par Docker. Elle se lance +comme suit : + +
+```bash +docker run --rm -d --name registry --network droneci -p 5000:5000 registry:2 +``` +
+ +Vous trouverez davantage d'informations +[ici](https://docs.docker.com/registry/deploying/). + +Vous pouvez tester son bon fonctionnement avec la commande suivante : + +
+```bash +42sh$ curl http://localhost:5000/v2/ +{} +``` +
+ + +## Publication de l'image + +Une fois le registre démarré, il ne nous reste plus qu'à ajouter une étape de +publication de l'image Docker. Cela se fait au moyen du plugin suivant : +. + +Sans plus de configuration, le registre que nous avons démarré +n'attend pas d'authentification. Et comme il n'a pas de certificat TLS +pour utiliser `https`, il est nécessaire de définir l'option +`insecure` à `true`. + + +## Test de l'image + +Sur l'hôte, nous pouvons tester que l'image a bien été publiée grâce à la +commande suivante : + +
+```bash +docker run --rm -p 8080:8080 localhost:5000/youp0m +``` +
+ +On notera que ceci est possible exclusivement parce que le registre +`localhost:5000` est considéré non-sûr par défaut. C'est à dire qu'il n'a pas +besoin de certificat TLS sur sa connexion HTTP pour être utilisé.\newline +Si on avait dû utiliser un autre nom de domaine, il aurait fallu +[l'ajouter à la liste des +`insecure-registries`](https://docs.docker.com/registry/insecure/). + + +## Suite du déploiement + +Pour aujourd'hui, nous en resterons là pour le déploiement, car nous n'avons +pas d'environnement de production sur lequel déployer notre service. + +Vous pouvez néamnoins tester les plugins +[`scp`](http://plugins.drone.io/appleboy/drone-scp/) ou +[`ansible`](http://plugins.drone.io/drone-plugins/drone-ansible/), si vous avez +une machine virtuelle avec une connexion SSH. N'hésitez pas à l'ajouter à votre +`.droneci.yml`. + + +## Profitons ! + +Sonarqube a repéré quelques erreurs dans le code de `youp0m`, essayez de les +corriger, et publiez une nouvelle version, pour observer toute la chaîne en +action ! diff --git a/tutorial/devops/tag-released.png b/tutorial/devops/tag-released.png new file mode 100644 index 0000000000000000000000000000000000000000..3f60694c61afca138724c86075a55c0651a1f45a GIT binary patch literal 41988 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 literal 0 HcmV?d00001 diff --git a/tutorial/devops/tools.md b/tutorial/devops/tools.md new file mode 100644 index 0000000..fe1d7f7 --- /dev/null +++ b/tutorial/devops/tools.md @@ -0,0 +1,197 @@ +\newpage + +Les bons outils +=============== + +## Gestionnaire de versions + +Avant de pouvoir commencer notre aventure, il est nécessaire d'avoir un +gestionnaire de versions. Nous allons ici utiliser Git. + + +### Problématique du stockage des produits de compilation + +Outre les interfaces rudimentaires fournies au dessus de Git +([gitweb](https://git.wiki.kernel.org/index.php/Gitweb)), il y a de nombreux +projets qui offrent davantage que le simple hébergement de dépôts. Vous pouvez +voir sur GitHub notamment qu'il est possible d'attacher à un tag un [certain +nombre de fichiers](https://github.com/docker/compose/releases/latest). + +On notera également que depuis le 1er septembre, GitHub propose un [registre +Docker](https://github.blog/2020-09-01-introducing-github-container-registry/) +que l'on peut lier avec ses dépôts. Une fonctionnalité que GitLab propose +[depuis +2016](https://about.gitlab.com/blog/2016/05/23/gitlab-container-registry/). + +En effet, la problématique du stockage des produits de compilation est +vaste. Si au début on peut se satisfaire d'un simple serveur web/FTP/SSH pour +les récupérer manuellement, on a vite envie de pouvoir utiliser les outils +standards directement : `docker pull ...`, `npm install ...`, ... + +Des programmes et services se sont spécialisés là dedans, citons notamment +[Artifactory](https://jfrog.com/artifactory/) ou [Nexus +Repository](https://www.sonatype.com/nexus/repository-oss) et bien d'autres. + +Dans la première partie du TP, nous allons nous contenter de publier un binaire +associé à un tag de notre projet. + + +### Installation et configuration + +Aller c'est parti ! première chose à faire : installer et configurer +[Gitea](https://gitea.io/) (ceux qui le souhaitent peuvent choisir +[gitlab](https://gitlab.org/) ou une autre plate-forme, mais la suite du TP +sera moins guidée pour eux). + +Nous allons utiliser l'image : . + +Votre playbook resemblera à quelque chose comme ça : + +
+```yaml +- name: Launch gitea container + docker_container: + name: gitea + image: "gitea/gitea:{{ version }}" + volumes: + - /var/lib/gitea:/data + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro + state: started + restart_policy: unless-stopped + memory: 1G + memory_swap: 1G + networks: + - name: gitea + published_ports: + - "2222:22" + - "3000:3000" + env: + RUN_MODE: "prod" + DOMAIN: "gitea" + SSH_DOMAIN: "gitea" + INSTALL_LOCK: "true" + SECRET_KEY: "{{ secret_key }}" +``` +
+ +Plus d'infos sur cette page : . + +Une fois le conteneur lancé, vous pouvez accéder à l'interface de gitea sur le +port 3000 de votre machine (à moins que vous n'ayez opté pour un autre port). + +Vous pouvez ajouter un nouvel administrateur avec la commande suivante : + +
+```bash +docker exec gitea gitea admin user create --username "${USER}" --random-password \ + --must-change-password=false --admin --email "${USER}@epita.fr" +``` +
+ +Notez le mot de passe généré pour [vous y connecter](http://localhost:3000/user/login). + + +## Logiciel d'intégration continue + +De nombreuses solutions sont disponibles sur Internet, la plupart du temps +gratuite pour les projets libres ([Travis CI](https://travis-ci.org/), +[CircleCI](https://circleci.com/), ...). + +Mais nous allons déployer notre propre solution, en utilisant [Drone +CI](https://drone.io/). C'est une solution d'intégration continue libre et +moderne, conçue tout autour de Docker. Idéale pour nous ! + + +### Interface de contrôle et de dispatch des tâches + +La documentation du projet est extrêmement bien faite, suivons la marche à +suivre pour [relier Gitea à +Drone](https://docs.drone.io/server/provider/gitea/). + +L'URL de redirection sera dans notre cas : `http://droneci/login`. + + +Voici à quoi pourrait ressemble le playbook Ansible démarrant notre conteneur +Drone : + +
+```yaml +- name: Launch drone container + docker_container: + name: droneci + image: drone/drone:1 + volumes: + - /var/lib/drone:/data + state: started + restart_policy: unless-stopped + memory: 1G + memory_swap: 1G + networks: + - name: drone + - name: gitea + published_ports: + - "80:80" + env: + DRONE_GITEA_CLIENT_ID: "{{ client.id }}" + DRONE_GITEA_CLIENT_SECRET: "{{ client.secret }}" + DRONE_GITEA_SERVER: "http://gitea:3000" + DRONE_RPC_SECRET: "{{ shared_secret }}" + DRONE_SERVER_HOST: "droneci" + DRONE_SERVER_PROTO: "http" +``` +
+ +Une fois lancé, rendez-vous sur l'interface de DroneCI : + +Vous serez automatiquement redirigé vers la page d'authentification de Gitea, +puis vers l'autorisation OAuth d'accès de Drone à Gitea. Il faut bien +évidemment valider cette demande, afin que Drone ait accès à nos dépôts. + +![OAuth Drone](../devops/oauth-drone.png){width=9cm} + + +### *Runner* + +Notre conteneur `droneci` est uniquement une interface graphique qui va +centraliser d'un côté les nouveaux commits à traiter, et de l'autre les +résultats retournés par les agents chargés d'exécuter le code. + +Il serait impensable d'exécuter arbitrairement du code en parallèle d'une +application privilégiée (ici, notre conteneur `droneci` a accès aux dépôts +potentiellement privés de Gitea). Les agents qui sont amenés à traiter du code +arbitraire s'exécutent à part et peuvent être de différents types. Dans le +vocabulaire de Drone, on les appelle des ~~blade~~*runners*. + +Nous allons lancer un *runner* Docker : il s'agit d'un type d'agent qui va +exécuter nos étapes de compilation dans des conteneurs Docker (oui, quand on +disait que Drone était conçu autour de Docker, c'était pas pour rire !) + +Voici à quoi pourrait ressemble le playbook Ansible démarrant notre agent Drone : + +
+```yaml +- name: Launch drone runer + docker_container: + name: droneci-runner + image: "drone/drone-runner-docker:1" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + state: started + restart_policy: unless-stopped + memory: 2G + memory_swap: 2G + networks: + - drone + env: + DRONE_RPC_PROTO: "http" + DRONE_RPC_HOST: "droneci" + DRONE_RPC_SECRET: "{{ shared_secret }}" + DRONE_RUNNER_CAPACITY: 2 + DRONE_RUNNER_NAME: "my-runner" + DRONE_RUNNER_NETWORKS: "drone,gitea" +``` +
+ + +L'environnement étant prêt, il ne reste plus qu'à nous lancer dans nos projets ! diff --git a/tutorial/devops/what.md b/tutorial/devops/what.md new file mode 100644 index 0000000..387a614 --- /dev/null +++ b/tutorial/devops/what.md @@ -0,0 +1,63 @@ +\newpage + +But du TP +========= + +Nous allons nous mettre aujourd'hui dans la peau d'une équipe DevOps et +réaliser une solution complète de intégration/déploiement continu (le fameux +CI/CD, pour *Continuous Integration* et *Continuous Delivery*). + +Le résultat attendu d'ici la fin du TP sera de mettre en place toutes les +briques décrite dans la section précédente. +\newline + +Nous allons commencer par automatiser le projet `youp0m`, plus simple, puis la +plate-forme du FIC dans son ensemble, ce qui représente un petit challenge. + +Il est également attendu que vous rendiez un playbook Ansible, permettant de +retrouver un environnement similaire. Car on se reservira de cette installation +dans un prochain TP. +\newline + +Dans un premier temps, on voudra juste compiler notre projet, pour s'assurer +que chaque commit poussé ne contient pas d'erreur de compilation, dans +l'environnement défini comme étant celui de production. Ensuite, on ajoutera +quelques tests automatiques. Puis nous publierons automatiquement le binaire +`youp0m` comme fichier associé à un tag au sein de l'interface web du +gestionnaire de versions. + +Enfin, nous mettrons en place un registre Docker qui nous permettra de publier +automatiquement l'image Docker assocciée. C'est à partir de cette image Docker +que l'on va commencer à déployer automatiquement... + + +## Préparer le terrain + +Tous les déploiements sont à faire sur votre machine en utilisant des +conteneurs Docker, qui seront regroupés au sein de réseaux Docker. Cela vous +permettra d'utiliser la résolution de noms entre vos conteneurs. + +Dans votre playbook Ansible, vous pourrez procéder ainsi : + +
+```yaml +- name: Create virli network + docker_network: + name: virli3 +``` +
+ + +Étant donné que votre machine ne dispose pas de domaine sur Internet et que +l'on va essayer de simplifier au maximum l'installation, vous devriez ajouter +cette ligne à votre fichier `/etc/hosts` : + +
+```conf +127.0.0.1 gitea droneci +``` +
+ +Cette ligne va vous permettre de résoudre les noms des conteneurs. Cela +permettra aux requêtes OAuth de se faire de manière transparente pour vous +lorsque vous serez dans votre navigateur. diff --git a/tutorial/docker-basis/ex-owncloud.md b/tutorial/docker-basis/ex-owncloud.md new file mode 100644 index 0000000..ebaee74 --- /dev/null +++ b/tutorial/docker-basis/ex-owncloud.md @@ -0,0 +1,48 @@ +\newpage + +Exercice +======== + +Pour mettre en pratiques toutes les notions que l'on a vu jusque là, écrivez un +script `mycloud-run.sh` pour automatiser le lancement de votre instance +personnelle de [`nextcloud`](https://hub.docker.com/_/nextcloud/) ou +d'[`owncloud`](https://hub.docker.com/r/owncloud/server/). Une attention +particulière devra être apportée à la manière dont vous gérerez le rappel du +script pour éventuellement relancer un conteneur qui se serait arrêté +(évidemment sans perdre les données). + +À la fin de son exécution, le script affichera un lien utilisable sur l'hôte +pour se rendre sur la page de connexion. Une autre machine de votre réseau +local devrait également pouvoir accéder à la plate-forme, simplement en +renseignant l'IP de votre machine et en ajoutant éventuellement des règles de +pare-feu (mais cette dernière partie n'est pas demandée, gardez simplement en +tête que cela doit pouvoir être fait manuellement au cas par cas : sur une +machine sans pare-feu configurée, cela ne demande pas d'étape supplémentaire). + +Votre script devra se limiter aux notions vues durant cette partie du TP +(ie. sans utiliser `docker-compose` ou `docker stack` que l'on verra dans la +seconde partie). Il pourra cependant faire usage des commandes `docker OBJECT +inspect` pour ne pas avoir à faire d'analyse syntaxique sur les retours des +commandes lisibles par les humains. + +Cette instance devra utiliser une base de données MySQL (lancée par vos soins +dans un autre conteneur) et contenir ses données dans un ou plusieurs volumes +(afin qu'elles persistent à une mise à jour des conteneurs par exemple). + +L'exécution doit être la plus sécurisée possible (pas de port MySQL exposé sur +l'hôte par exemple, etc.) et la plus respectueuse des bonnes pratiques que l'on +a pu voir durant ce premier cours. + + +### Exemple d'exécution + +
+```bash +42sh$ ./mycloud-run.sh +http://localhost:12345/ +42sh$ #docker kill db +42sh$ ./mycloud-run.sh # le script relancera une base de données, + # sans avoir perdu les données +http://localhost:12345/ +``` +
diff --git a/tutorial/docker-internals/Makefile b/tutorial/docker-internals/Makefile index 20b1510..e4deb39 100644 --- a/tutorial/docker-internals/Makefile +++ b/tutorial/docker-internals/Makefile @@ -1,6 +1,6 @@ include ../pandoc-opts.mk -SOURCES = tutorial.md clair.md oci.md registry.md runc.md linuxkit.md rendu.md +SOURCES = tutorial.md oci.md runc.md linuxkit.md rendu.md all: tutorial.pdf diff --git a/tutorial/docker-internals/registry.md b/tutorial/docker-internals/registry.md index c19c882..1417575 100644 --- a/tutorial/docker-internals/registry.md +++ b/tutorial/docker-internals/registry.md @@ -7,7 +7,7 @@ Registres * * * * * -Dans cette partie, nous allons appréhender le fonctionnement d'un registre OCI, +Nous allons appréhender le fonctionnement d'un registre OCI, et préparer le *rootfs* d'une image de base (Debian, Ubuntu, hello, ...) : en nous préoccupant simplement de la couche la plus basse (qui ne contient pas de modification ou de suppression : chaque fichier est normal). diff --git a/tutorial/docker-internals/rendu.md b/tutorial/docker-internals/rendu.md index c81b4ee..97675fb 100644 --- a/tutorial/docker-internals/rendu.md +++ b/tutorial/docker-internals/rendu.md @@ -30,14 +30,11 @@ cela dépendra de votre avancée dans le projet) :
``` -login_x-TP5/ -login_x-TP5/docker-compose.yml # 1. Clair -login_x-TP5/clair_config/config.yaml -login_x-TP5/nginx:mainline.html # rapport d'analyse PAclair -login_x-TP5/registry_play.sh # 3. Registre -login_x-TP5/config.json # 4. runc -login_x-TP5/... # + scripts éventuels -login_x-TP5/vault.yml # 5. LinuxKit -login_x-TP5/pkg/... +login_x-OCI/ +login_x-OCI/registry_play.sh # 0. Registre +login_x-OCI/config.json # 2. runc +login_x-OCI/... # + scripts éventuels +login_x-OCI/vault.yml # 3. LinuxKit +login_x-OCI/pkg/... ```
diff --git a/tutorial/docker-internals/runc.md b/tutorial/docker-internals/runc.md index 0d45d3e..d61fd84 100644 --- a/tutorial/docker-internals/runc.md +++ b/tutorial/docker-internals/runc.md @@ -22,15 +22,15 @@ essayer de lancer un shell `alpine` avec un volume dans notre home. Vous devriez avoir le binaire `runc` ou `docker-runc`. Si ce n'est pas le cas, vous pouvez télécharger la dernière version : -. La 1.0.0-rc9 est Ok. +. La 1.0.0-rc92 est Ok. ## Extraction du rootfs -À l'aide du script réalisé dans la partie précédentes, extrayons le rootfs -d'alpine : `library/alpine` dans le registre Docker. +À l'aide du script d'extraction de registre réalisé dans le TP 3, extrayons le +rootfs d'alpine : `library/alpine` dans le registre Docker. -Si vous n'avez pas eu le temps de terminer l'exercice précédent, vous pouvez +Si vous n'avez pas eu le temps de terminer le script d'extraction, vous pouvez utiliser :
diff --git a/tutorial/docker-internals/tutorial.md b/tutorial/docker-internals/tutorial.md index b8b4a69..af0d112 100644 --- a/tutorial/docker-internals/tutorial.md +++ b/tutorial/docker-internals/tutorial.md @@ -1,23 +1,24 @@ --- -title: Virtualisation légère -- TP n^o^ 5 -subtitle: Docker Internals +title: Virtualisation légère -- TP n^o^ 3 +subtitle: Les projets de l'Open Container Initiative author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps} institute: EPITA -date: Mercredi 14 novembre 2018 +date: Mercredi 28 octobre 2020 abstract: | - Dans ce cinquième du TP, nous allons entrer dans les sous-bassements de - Docker ! + Après avoir beaucoup parlé de Docker, nous allons voir dans ce TP la + manière dont les différents projets qu'il utilise dans sa plomberie + interne interagissent. \vspace{1em} - Tous les éléments de ce TP (exercices et projet) sont à rendre à - au plus tard le dimanche 25 novembre 2018 à 23 + Les éléments de ce TP constituent du contenu bonus que vous pouvez rendre à + au plus tard le dimanche 22 novembre 2020 à 23 h 42. Consultez la dernière section de chaque partie pour plus d'information sur les éléments à rendre. En tant que personnes sensibilisées à la sécurité des échanges électroniques, vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à - [me](https://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) - faire signer votre clef et n'hésitez pas à [faire signer votre - clef](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/). + [me](https://keys.openpgp.org/search?q=nemunaire%40nemunai.re) faire signer + votre clef et n'hésitez pas à [faire signer la + votre](https://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/). ... diff --git a/tutorial/dockerfiles/commit.png b/tutorial/dockerfiles/commit.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3d30784595e1e2119025c401032a96dfec0c4a GIT binary patch literal 70958 zcmd4%V{l|$+W?GqCeFmRJ<-HAC$??dHYb_bwr$(CZQIGo%>6#~o$vqoaaL7Vb+6w0 zveycgkrIJ{!h`|<05D>rf^q-=h!6k()DHpnwSychG6(=5s=FzuILPTbK~9E-U3J<_$!JF~Xk=VYuHw;6Zw~o0TTBf;Tz-lxQ?mu6LAHDjbTE z#V7M}c7T`Id>nRKKhfgm&msP@EYM`SA#ZoUXsdp5jdKOEfj+-_1d1|*s-^4O} zj(kgYNy{`8I$!Y8?0L!X?#%3@yFz+X9+s>#GYi}l(lcLiwMG;tvRWl`OLXY0n7I7? zapnAETS7<1#Fh09{}D1tn+$vDk5{{jIPIEGdxXCe*id*g+e`E1BXM$_t?UW%bPIY1;ZxDO9W09OV}AlF?{8S)8J;&(wf;-CE}K`&HB-9$vo^?Y}2-f;hdJ<*1RD}e1`NCvA#tVi+L2x(Nl7Se}w(OP`n&hLb|q9~rA1 zV|Q#Yt(~kUE^8Yp5m#1kc)?V6+PJ%3SZ_G*7!(VZW8a_4EyUq?j}R|j_ZTf#wr+KD zZ`w6p=rDbsz1^H!fM0r$c9fvP zJmI3uU$nn|q?zosO{Z}*?QVmC}J55`R^3q&=Lv#>Y(1Wp!1)?xeLsvf1D=I ziPa9r_o6tVf4FsD)W24%%@Fn_{`8an98kT{`FH2Ys-G;kW&U##SA9ih5`BI`rF>w5bBOU)m^7}6 zC7-Ac0%_PWodtJsV`*af_2ekFg~FjLUQxZ6D5E(TF}C)Ut^90!S=aRmYh5<^Az3_r zEnKT5n~r3<7Rh@yWVb9sNpXN0`^a&YD9DZ&db!6Z{^rUx%@Zje#-gC-#v+|raj>Jk zVD?7hw;b*~-tZI-K3h*goK@{y06NJ#(>3bY6OZ<>`jYaA7P!;`qH?FAS{$xZKH2Lr zgYp0thpUNfWGEzL2)wNPMMj94^7oo5cPg1F7J#o-<$ zw$e({#d8ei=ay_MqGgT~ft05-r!R)E&gD~5<bsvv()) z3-GN91ocu_hz?;PQgJg*HY9&u%_0x(@A_?s%?fG`4dlAiRfU5KX3*4H$tbJNVprD6 z3p*%^j;7FM{LIzM1p`L1NsS4%cb`UbWc@S`eAy;1N`aR^pv&!Mt5P`T+eQv0w{WI` zrR6KbiaWfr6@;x$L5ZM-%f{)Ls%4BGFKPjPVlzpAfY%UoxVS5ilxEf-j8* z_l!GAqf_D9IA*qQ1*XwBN>C912t{wB#Q0WOx8YHMSbdird8Z&T6=zJDixpVKWak34 zjJc+X2K$uEC`E5mi+v+uR}Dc)laFeD3;N5ocNrHzm$}Foui$HS+V=?do3!_uQSgVg zD2|j+Cv(aK`l_ko+drTMQa-j{;dT6IPVh|uE8UA!tmUed7AY3=3j7rt6zbQ9lf& zuwR_OqNka^|4e=+g?^>^H+sH5j@wo0ziMGQj4Vas2m@n>Xk>+Tx7@dixvcS#kzZs- zY>`ASDAqu9@Ha~^rl*me^0Dcu71D7NV}HC)QJy4qB-53Gcxbb)Q&`7}UxgDO?H?3Q z_^}mc9e=Z!xRTG^s?Y=`hzGY4z_N|X*&v3qz%!Ejv*;6O%C1^iOvwT$%u@> zhj^_&v|79Sq6Hl|h=rt@LZB~kl7gW_+($vn8({G~%}h3Dhrsr|E3jrCr)`my#4wol zPo#eseCgv8XXKpgkky3q?#tC%qw!Hiz53ayfq-D#76+z6_>Mv7H)iD=NR{Q%awsTn z1ZEHa-AXNBLL*oQvN86BY~Tjiz}(-a3Ls^de(+ERpzNYimq&9e7Z#3$G48Z<-?PfM zv5}!lbfFhcvocnirgS^ng|1nJ ziZA>mOGB4d`f@JU!z8{Dj=C+}MFq3kyxbmQp-kLu4h%-%BpL&KNWlJwe@Vi3xGRj` zH?LZpXaOaF4Az`rRyTY`GXSz84@;u8F+WWuдev5(P}N2MhTnj89I#Z)gsk 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 Wt#&4>z6l%|5eO@aoq4gTYuLZeAPFP@ literal 0 HcmV?d00001 diff --git a/tutorial/dockerfiles/dockerfile.md b/tutorial/dockerfiles/dockerfile.md index cad186a..b415941 100644 --- a/tutorial/dockerfiles/dockerfile.md +++ b/tutorial/dockerfiles/dockerfile.md @@ -49,7 +49,8 @@ docker container run -it my_editor /bin/bash ## `RUN` dans le `Dockerfile` Dans un `Dockerfile`, chaque ligne est exécutée indépendamment des autres et -correspondra à une nouvelle couche de notre image. +correspondra à une nouvelle couche de notre image. Exactement comme on a +réalisé le script dans la partie précédente. Cela signifie que l'exemple suivant **ne fonctionne pas** : @@ -312,7 +313,7 @@ Pour réaliser ce genre de contribution, on ajoute généralement un `Dockerfile à la racine du dépôt. Vous pouvez cloner le dépôts de sources de `youp0m` à : - + Pour compiler le projet, vous pouvez utiliser dans votre `Dockerfile` diff --git a/tutorial/dockerfiles/goodpractices.md b/tutorial/dockerfiles/goodpractices.md index 833a467..bd4ea48 100644 --- a/tutorial/dockerfiles/goodpractices.md +++ b/tutorial/dockerfiles/goodpractices.md @@ -22,7 +22,7 @@ Ce fichier fonctionne de la même manière que le `.gitignore` : vous pouvez utiliser du globing. Pour plus d'informations, vous pouvez consulter la documentation accessible à -. +. ## N'installez rien de superflu diff --git a/tutorial/dockerfiles/interactive.md b/tutorial/dockerfiles/interactive.md index 3480d58..502e3d5 100644 --- a/tutorial/dockerfiles/interactive.md +++ b/tutorial/dockerfiles/interactive.md @@ -71,3 +71,27 @@ docker container run -it my_nano /bin/bash Vous constatez cette fois que vous pouvez lancer `nano`, alors que vous ne pouvez toujours pas le faire dans un conteneur issu d'une image `ubuntu` ! + + +## Scripté ? + +On peut automatiser les étapes ci-dessus avec un script qui ressemblerait à ça : + +

+```bash +docker container run ubuntu apt-get update +docker container commit $(docker container ls -lq) my_nano_step-1 +docker container run my_nano_step-1 apt-get install nano +docker container commit $(docker container ls -lq) my_nano +``` +
+ +On obtiendra de la même manière notre image `my_nano` : + +
+```bash +docker container run -it my_nano /bin/bash +``` +
+ +Contenant notre éditeur de texte favori. diff --git a/tutorial/dockerfiles/working-with.md b/tutorial/dockerfiles/working-with.md new file mode 100644 index 0000000..4d2a891 --- /dev/null +++ b/tutorial/dockerfiles/working-with.md @@ -0,0 +1,6 @@ +\newpage + +Développer avec Docker +====================== + +Ajouter une feature dans le front web. Via docker run -v