2. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
HENRI GOMEZ
▸ Head of SRE @ Saagie
▸ +30 ans dans l’industrie logicielle
▸ Dev C/Java, CI/CD, QA, Ops/SRE
▸ OpenSource Activist
▸ Apache Tomcat
▸ JPackage
▸ Obuildfactory / Devops Incubator
3. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
DÉFINITION D’UN LIVRABLE
▸ C’est un artefact utilisable par les équipes up-stream
▸ Pour un Dev ce sont donc les équipes QA et/ou Ops
4. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
JAR, WAR, ZIP, TARBALL ?
▸ Ce sont des archives simples, non opérables directement
▸ Pas de gestion de dépendances
▸ Pas de gestion de pré-requis
▸ Pas de convention de déploiement
5. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
FLATPAK, SNAP ?
▸ Packaging par overlay
▸ Démon nécessaire
▸ Proche du packaging Docker dans l’esprit
6. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
NIX ?
▸ Le système de packaging le plus avancé
▸ Pour NixOS
▸ Très riche, trop peut être
7. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
DOCKER ?
▸ C’est à la fois une archive et un format de Run
▸ Un écosystème majeur s’est construit autour
8. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
LES QUESTIONS À SE POSER
▸ Gestion des pré-requis
▸ Cycle de vie (mise à jour, suppression)
▸ Quid du déploiement (qui, quoi, comment)
▸ Localisation dans le FileSystem (FHS rules)
▸ Les droits d'exécutions et accès dans le FileSystem
9. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
PACKAGING NATIF
▸ Coeur de la pile applicative des OS
▸ Gestion des dépendances
▸ Mise à jour automatique ou sélective
▸ Largement utilisé par les Ops
10. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
PACKAGING SOUS UNIX
▸ RPM (Redhat Package Manager) sous RHEL/CentOS/
Fedora, SLES/OpenSuse, Mandriva
▸ DEB sous Debian/Ubuntu
▸ PKG sous Solaris
11. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
QU’EST-CE QU’UN PACKAGE ?
▸ Un fichier (.rpm, .deb)
▸ Des données (fichiers et programmes)
▸ Du code exécuté lors de l’installation, la mise à jour ou la
suppression du package
▸ Lié à une architecture (Intel, ARM, PowerPC en 32 ou
64bits) ou neutre (exemple: une application Java)
12. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
POINTS COMMUNS AVEC MAVEN / GRADLE
▸ Construction par DSL
▸ Quelques commandes pour les manipuler (rpm, apt-get)
▸ Gestion des dépendances pour la construction mais aussi
pour l’exécution
▸ Dépôts de packages, accessible en local ou via HTTP
▸ Nexus et Artifactory peuvent servir de dépôts RPM
▸ Mises à jour automatiques ou contrôlées
13. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
UN DSL POUR LES OPS
▸ Simple
▸ Quelques macros
▸ Shell powered
14. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
CONSTRUIRE UN RPM
▸ Des fichiers binaires - depuis l’entrepôt de livrables
▸ Des sources - depuis le SCM
▸ Un fichier de construction, le SPECFILE
24. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
AUTONOME
▸ Un package est auto-suffisant
▸ Programmes principaux
▸ Connectable à des services (ex: logrotate / cron)
▸ Données
▸ Comptes utilisateurs d’exécution
▸ Contrôle total sur le cycle de vie ‘en situation’
25. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
CYCLE DE VIE IN SITU
▸ Contrôle total sur le cycle de vie ‘en situation’
▸ Hooks pre/post installation
▸ Hook lors de la mise à jour
▸ Hooks pre/post désinstallation
▸ Hooks sur opération sur autres packages
26. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
ET ENCORE
▸ Un processus déterministe et donc réplicable
▸ Peut être utilisé par Ansible, Puppet ou Chef
▸ Des artifacts centralisables comme pour Maven
▸ Une approche composant d’exécution
27. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
TYPES DE RPMS
RPMS OSRPMS OSRPMS OS
Fournis par votre distribution Linux
RPMS APPLICATIFRPMS APPLICATIFRPMS APPLICATIF
Produits par les Devs & OpsRPMS CONFIGURATION
RPMS CONFIGURATION
RPMS CONFIGURATION
RPMS CONFIGURATION
Produits par les Ops
dépréciés par Rudder/Ansible/Puppet.Chef
28. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
L’ASSEMBLAGE
▸ Installer une usine à packages (Jenkins)
▸ Créer un dépôt de packages
▸ Apache HTTPd / NGinx
▸ Nexus/Artifactory
▸ Construire et tester sur environnement minimal (JEOS)
▸ Pour éviter les dépendances implicites (ex: curl)
29. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
USINE A PACKAGES
▸ Jenkins (what else ?)
▸ Un agent Jenkins par distribution cible
▸ Déployer les outils de construction packages sur l’agent
▸ rpm-build, make, autoconf (RPM)
▸ build-essential, devscripts, ubuntu-dev-tools (DEB)
31. BBL DOCKER - PACKAGING NATIF - 26 FEVRIER 2020
CONCLUSION
▸ Une approche simple
▸ Mise en oeuvre par étape
▸ Adaptée à de petites infrastructures
▸ Utilisable avec Ansible, Puppet ou Chef