SlideShare une entreprise Scribd logo
DevOps
L’approche packaging natif
LyonJUG 20 Décembre 2011
Henri Gomez
+20 ans dans l’industrie logicielle
Architecte Java, CI et direction de production
Dev, QA et Ops
OpenSource Activist
  Apache Tomcat
  JPackage
  openjdk-osx-build
Packaging Natif


Coeur de la pile applicative des OS
Gestion des dépendances
Mise à jour automatique ou sélective
Utilisé par les Ops
Packaging sous Unix


RPM (Redhat Package Manager) sous RHEL/CentOS/
Fedora, SLES/OpenSuse, Mandriva
DEB sous Debian/Ubuntu
PKG sous Solaris
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)
Points communs avec
Maven
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
Un DSL pour les Ops


Simple
Quelques macros
SH powered
Construire un RPM


Des fichiers binaires - depuis l’entrepôt de livrables
Des sources - depuis le SCM
Un fichier de construction, le SPECFILE
Entête déclaratif
Name: myapp
Version: 1.0.0
Release: 1
Summary: MyApp powered by Apache Tomcat
Group: Applications/Communications
URL: http://www.mycorp.org/
Vendor: MyCorp
Packager: MyPackager
License: AGPLv1
BuildArch: noarch

%define   tomcat_rel        7.0.22
%define   myapp             myapp
%define   myappusername     myuser
%define   myappuserid       1234
%define   myappgroupid      1234

Requires:             java = 1.6.0

Source0: apache-tomcat-%{tomcat_rel}.tar.gz
Source1: myapp.war

%description
MyApp powered by Apache Tomcat
Construction

%prep
%setup -q -c

%build

%install
# Prep the install location.
rm -rf $RPM_BUILD_ROOT

mkdir -p $RPM_BUILD_ROOT%{_initrddir}
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
Hook de pré-install


%pre
%if 0%{?suse_version} > 1140
%service_add_pre %{myapp}.service
%endif
# add user and group
%{_sbindir}/groupadd -r -g %{myappgroupid} %{myappusername} 2>/dev/null || :
%{_sbindir}/useradd -s /sbin/nologin -c "%{myapp} user" -g %{myappusername} -r -d %
{myappdir} -u %{myappuserid} %{myappusername} 2>/dev/null || :
Hook de post-install
%post
%if 0%{?suse_version} > 1140
%service_add_post %{myapp}.service
%endif
if [ "$1" == "1" ]; then
  # register app as service
  systemctl enable %{myapp}.service >/dev/null 2>&1

     # Generated random password for RO and RW accounts
     RANDOMVAL=`echo $RANDOM | md5sum | sed "s| -||g" | tr -d " "`
     sed -i "s|@@SKEL_RO_PWD@@|$RANDOMVAL|g" %{_sysconfdir}/sysconfig/%{myapp}
     RANDOMVAL=`echo $RANDOM | md5sum | sed "s| -||g" | tr -d " "`
     sed -i "s|@@SKEL_RW_PWD@@|$RANDOMVAL|g" %{_sysconfdir}/sysconfig/%{myapp}

     pushd %{myappdir} >/dev/null
       ln -s %{myapplogdir} logs
       ln -s %{myapptempdir} temp
       ln -s %{myappworkdir} work
     popd >/dev/null

fi
Hook de pre-uninstall
%preun
%if 0%{?suse_version} > 1140
%service_del_preun %{myapp}.service
%endif
if [ "$1" == "0" ]; then
  # Uninstall time, stop App and cleanup

     # stop Application
     [ -x "/etc/init.d/%{myapp}" ] && /etc/init.d/%{myapp} stop

     %{_sbindir}/userdel %{myappusername}
     %{_sbindir}/groupdel %{myappusername}

     rm -rf %{myappworkdir}/* %{myapptempdir}/*

     # unregister app from services
     systemctl disable %{myapp}.service >/dev/null 2>&1

     # finalize housekeeping
     rm -rf %{myappdir}
     rm -rf %{myapplogdir}
     rm -rf %{myapptempdir}
     rm -rf %{myappworkdir}

fi
Hook de post-uninstall



%postun
%if 0%{?suse_version} > 1140
%service_del_postun %{myapp}.service
%endif
Déclaration du contenu
%files
%defattr(-,root,root)
%attr(0755,%{myappusername},%{myappusername}) %dir %{myapplogdir}
%attr(0755, root,root) %{_initrddir}/%{myapp}
%attr(0644,root,root) %{_systemdir}/%{myapp}.service
%config(noreplace) %{_sysconfdir}/sysconfig/%{myapp}
%config %{_sysconfdir}/logrotate.d/%{myapp}
%config %{_sysconfdir}/security/limits.d/%{myapp}
%{myappdir}/bin
%{myappdir}/conf
%{myappdir}/lib
%attr(-,%{myappusername}, %{myappusername}) %{myappdir}/webapps
%attr(0755,%{myappusername},%{myappusername}) %dir %{myappdatadir}
%attr(0755,%{myappusername},%{myappusername}) %dir %{myapptempdir}
%attr(0755,%{myappusername},%{myappusername}) %dir %{myappworkdir}
%doc %{myappdir}/NOTICE
%doc %{myappdir}/RUNNING.txt
%doc %{myappdir}/LICENSE
%doc %{myappdir}/RELEASE-NOTES
Historique


%changelog
* Sat Dev 03 2011 henri.gomez@gmail.com   1.0.3-1
- Adapt spec to OpenSuse 12.1
* Sun Nov 20 2011 henri.gomez@gmail.com   1.0.2-1
- Make use of OpenSuse 11.4 macros
* Sun Jun 19 2011 henri.gomez@gmail.com   1.0.1-1
- Update Application
* Sun Jun 19 2011 henri.gomez@gmail.com   1.0.0-2
- Add user account creation/deletion
* Sun May 22 2011 henri.gomez@gmail.com   1.0.0-1
- Initial RPM
AUTONOME

Un package est auto-suffisant
  Programmes principaux et annexes (ex: logrotate)
  Données
  Comptes utilisateurs d’exécution
  Contrôle total sur le cycle de vie ‘en situation’
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ésintallation
  Hooks sur opération sur autres packages
ET ENCORE


Un processus déterministe et donc réplicable
Peut être utilisé par Puppet ou Chef
Des artifacts centralisables comme pour Maven
Une approche composant d’exécution
Types de RPMs

       RPMs OS
       RPMs OS
        RPMs OS
Fournis par votre distribution Linux


                                       RPMs Applicatif
                                       RPMs Applicatif
                                        RPMs Applicatif
RPMs Configuration
 RPMs Configuration                     Produits par les Devs & Ops
  RPMs Configuration
   RPMs Configuration
      Produits par les Ops
L’ASSEMBLAGE

Installer une usine à packages (Jenkins)
Créer un dépôt de packages
  Apache HTTPd
  Nexus/Artifactory
Préparer des images Linux (exemple: JeOS)
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)
dépôt de packages

Serveur Apache HTTPd
  Installer createrepo (RPM), dpkg-dev (DEB)
  Upload via web-dav ou ssh (plus simple)
Nexus/Artifactory
  Installer createrepo (RPM), dpkg-dev (DEB)
  Upload via web-dav (par Maven par exemple)
JeOS

Juste les composants essentiels de l’OS
Moins de packages installés
Taux de mise à jour plus faible
Réduction des risques de failles de sécurité
Une empreinte mémoire et disque réduite
De JeOS à instance


Inventaire des besoins
Pré-requis et dépendances
Spécificités applicatives
Les communs


Serveur SSH
Comptes administrateur
Monitoring (SNMP)
Firewall (port 22 et SNMP autorisés)
Ma petite FORGE


Subversion
Git
Jenkins
Nexus
Sonar
Subversion


Apache HTTPd server
Subversion
Viewvc
Comptes utilisateurs
GIT


Environnement Java (OpenJDK, Sun/Oracle ou IBM)
GitBlit
  Compte utilisateur spécifique
  Tomcat 7 powered & single webapp
Jenkins


Environnement Java (OpenJDK, Sun/Oracle ou IBM)
Jenkins
  Compte utilisateur spécifique
  Tomcat 7 powered & single webapp
Nexus


Environnement Java (OpenJDK, Sun/Oracle ou IBM)
Nexus
  Compte utilisateur spécifique
  Tomcat 7 powered & single webapp
SONAR


Environnement Java (OpenJDK, Sun/Oracle ou IBM)
Sonar
  Compte utilisateur spécifique
  Tomcat 7 powered & single webapp
  SQL backend (Derby ou MySQL)
MySQL BACKEND


MySQL
 Comptes utilisateurs
 Configuration InnoDB
Global FRONT-END

Apache HTTPd VHosts
 Subversion
 Git
 Jenkins
 Nexus
 Sonar
Conclusion

Une approche simple
Mise en oeuvre par étape
Adaptée à de petites infrastructures
Utilisable avec Puppet ou Chef pour de grosses
infrastructure
RPM DevOPS


http://code.google.com/p/devops-incubator/
  RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar
  Pour OpenSuse 11.4 & 12.1
LIRE


http://www.rpm.org/max-rpm/

http://fedoraproject.org/wiki/Packaging/Guidelines

http://en.opensuse.org/openSUSE:Specfile_guidelines

Nexus : http://code.google.com/p/nexus-yum-plugin/

Artifactory : http://wiki.jfrog.org/confluence/display/RTF/YUM+Repositories
Des questions ?
Licences et copyright


 Photos et logos appartiennent à leur auteurs/
 propriétaires respectifs.
 Contenu sous Creative Commons 3.0
 http://creativecommons.org/licenses/by-nc-sa/3.0/us/

Contenu connexe

Tendances

Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Fabien Arcellier
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
Jeoffrey Bauvin
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
Johan Moreau
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
Olivier BAZOUD
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
Adrien Blind
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
SOAT
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Emmanuel Hugonnet
 
Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011
Jean-Marc Fontaine
 
Introduction aux problématiques des architectures distribuées
Introduction aux problématiques des architectures distribuéesIntroduction aux problématiques des architectures distribuées
Introduction aux problématiques des architectures distribuées
SOAT
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
SmartnSkilled
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
Christophe Villeneuve
 
Deploiement continu breizh camp
Deploiement continu breizh campDeploiement continu breizh camp
Deploiement continu breizh camp
Claude Falguiere
 
Journée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tousJournée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tous
Publicis Sapient Engineering
 
Apache Maven 3
Apache Maven 3Apache Maven 3
Apache Maven 3
Maxime Gréau
 
Alphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide completAlphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie Sirius
GDG Bujumbura
 
Alphorm.com Formation VMware vSphere 7 : What's New 2/2
Alphorm.com Formation VMware vSphere 7 : What's New 2/2Alphorm.com Formation VMware vSphere 7 : What's New 2/2
Alphorm.com Formation VMware vSphere 7 : What's New 2/2
Alphorm
 
Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenable
Christophe Villeneuve
 

Tendances (20)

Ansib formation-ansible
Ansib formation-ansibleAnsib formation-ansible
Ansib formation-ansible
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
 
Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011
 
Introduction aux problématiques des architectures distribuées
Introduction aux problématiques des architectures distribuéesIntroduction aux problématiques des architectures distribuées
Introduction aux problématiques des architectures distribuées
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Deploiement continu breizh camp
Deploiement continu breizh campDeploiement continu breizh camp
Deploiement continu breizh camp
 
Journée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tousJournée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tous
 
Apache Maven 3
Apache Maven 3Apache Maven 3
Apache Maven 3
 
Alphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide completAlphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide complet
 
Road map to DevOps engineering - Elie Sirius
Road map to DevOps engineering -  Elie SiriusRoad map to DevOps engineering -  Elie Sirius
Road map to DevOps engineering - Elie Sirius
 
Alphorm.com Formation VMware vSphere 7 : What's New 2/2
Alphorm.com Formation VMware vSphere 7 : What's New 2/2Alphorm.com Formation VMware vSphere 7 : What's New 2/2
Alphorm.com Formation VMware vSphere 7 : What's New 2/2
 
Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenable
 

Similaire à 20111220 lyon jug-packaging-natif

Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
hibnico
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
Khalid ALLILI
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Olivier DASINI
 
APACHE HTTP
APACHE HTTPAPACHE HTTP
APACHE HTTP
Rachid NID SAID
 
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
Microsoft
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
gcatt
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
Jérôme Petazzoni
 
Dev ops@kelkoo
Dev ops@kelkoo Dev ops@kelkoo
Dev ops@kelkoo
Alain Delafosse
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
Guillaume Sauthier
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
Arnaud Héritier
 
Alphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Alexandre Touret
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
Bilal Baltagi
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
XavierPestel
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
AbdellahELMAMOUN
 
OpenNMS
OpenNMSOpenNMS
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
Julien Wittouck
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
Web à Québec
 
Docker, ça mange quoi au printemps
Docker, ça mange quoi au printempsDocker, ça mange quoi au printemps
Docker, ça mange quoi au printemps
Julien Maitrehenry
 

Similaire à 20111220 lyon jug-packaging-natif (20)

Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
APACHE HTTP
APACHE HTTPAPACHE HTTP
APACHE HTTP
 
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Dev ops@kelkoo
Dev ops@kelkoo Dev ops@kelkoo
Dev ops@kelkoo
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
Nagios
NagiosNagios
Nagios
 
Alphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et Configurer
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
OpenNMS
OpenNMSOpenNMS
OpenNMS
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
 
Docker, ça mange quoi au printemps
Docker, ça mange quoi au printempsDocker, ça mange quoi au printemps
Docker, ça mange quoi au printemps
 

Plus de Henri Gomez

SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
Henri Gomez
 
SRE - Mythes et Réalités - Volcamp 2023.pdf
SRE - Mythes et Réalités - Volcamp 2023.pdfSRE - Mythes et Réalités - Volcamp 2023.pdf
SRE - Mythes et Réalités - Volcamp 2023.pdf
Henri Gomez
 
20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natif20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natif
Henri Gomez
 
Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018
Henri Gomez
 
Glowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bienGlowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bien
Henri Gomez
 
Glowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bienGlowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bien
Henri Gomez
 
From ci to cd - LavaJug 2012
From ci to cd  - LavaJug 2012From ci to cd  - LavaJug 2012
From ci to cd - LavaJug 2012
Henri Gomez
 
From ci to cd
From ci to cdFrom ci to cd
From ci to cd
Henri Gomez
 
Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012
Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012
Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012
Henri Gomez
 
20111205 breizh jug-devops
20111205 breizh jug-devops20111205 breizh jug-devops
20111205 breizh jug-devops
Henri Gomez
 
20111205 breizh jug-packaging-natif
20111205 breizh jug-packaging-natif20111205 breizh jug-packaging-natif
20111205 breizh jug-packaging-natif
Henri Gomez
 
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
Henri Gomez
 
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
Henri Gomez
 
DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011
DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011
DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011
Henri Gomez
 
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
Henri Gomez
 

Plus de Henri Gomez (15)

SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
 
SRE - Mythes et Réalités - Volcamp 2023.pdf
SRE - Mythes et Réalités - Volcamp 2023.pdfSRE - Mythes et Réalités - Volcamp 2023.pdf
SRE - Mythes et Réalités - Volcamp 2023.pdf
 
20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natif20200225 bbl-docker-packaging-natif
20200225 bbl-docker-packaging-natif
 
Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018
 
Glowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bienGlowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bien
 
Glowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bienGlowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bien
 
From ci to cd - LavaJug 2012
From ci to cd  - LavaJug 2012From ci to cd  - LavaJug 2012
From ci to cd - LavaJug 2012
 
From ci to cd
From ci to cdFrom ci to cd
From ci to cd
 
Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012
Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012
Using Jenkins as Native Packages Factory - Jenkins User Conference Paris 2012
 
20111205 breizh jug-devops
20111205 breizh jug-devops20111205 breizh jug-devops
20111205 breizh jug-devops
 
20111205 breizh jug-packaging-natif
20111205 breizh jug-packaging-natif20111205 breizh jug-packaging-natif
20111205 breizh jug-packaging-natif
 
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
 
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
 
DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011
DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011
DevOps - Retour d'expérience - GenevaJug du 30 Aout 2011
 
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
 

20111220 lyon jug-packaging-natif

  • 2. Henri Gomez +20 ans dans l’industrie logicielle Architecte Java, CI et direction de production Dev, QA et Ops OpenSource Activist Apache Tomcat JPackage openjdk-osx-build
  • 3. Packaging Natif Coeur de la pile applicative des OS Gestion des dépendances Mise à jour automatique ou sélective Utilisé par les Ops
  • 4. Packaging sous Unix RPM (Redhat Package Manager) sous RHEL/CentOS/ Fedora, SLES/OpenSuse, Mandriva DEB sous Debian/Ubuntu PKG sous Solaris
  • 5. 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)
  • 6. Points communs avec Maven 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
  • 7. Un DSL pour les Ops Simple Quelques macros SH powered
  • 8. Construire un RPM Des fichiers binaires - depuis l’entrepôt de livrables Des sources - depuis le SCM Un fichier de construction, le SPECFILE
  • 9. Entête déclaratif Name: myapp Version: 1.0.0 Release: 1 Summary: MyApp powered by Apache Tomcat Group: Applications/Communications URL: http://www.mycorp.org/ Vendor: MyCorp Packager: MyPackager License: AGPLv1 BuildArch: noarch %define tomcat_rel 7.0.22 %define myapp myapp %define myappusername myuser %define myappuserid 1234 %define myappgroupid 1234 Requires: java = 1.6.0 Source0: apache-tomcat-%{tomcat_rel}.tar.gz Source1: myapp.war %description MyApp powered by Apache Tomcat
  • 10. Construction %prep %setup -q -c %build %install # Prep the install location. rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{_initrddir} mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
  • 11. Hook de pré-install %pre %if 0%{?suse_version} > 1140 %service_add_pre %{myapp}.service %endif # add user and group %{_sbindir}/groupadd -r -g %{myappgroupid} %{myappusername} 2>/dev/null || : %{_sbindir}/useradd -s /sbin/nologin -c "%{myapp} user" -g %{myappusername} -r -d % {myappdir} -u %{myappuserid} %{myappusername} 2>/dev/null || :
  • 12. Hook de post-install %post %if 0%{?suse_version} > 1140 %service_add_post %{myapp}.service %endif if [ "$1" == "1" ]; then # register app as service systemctl enable %{myapp}.service >/dev/null 2>&1 # Generated random password for RO and RW accounts RANDOMVAL=`echo $RANDOM | md5sum | sed "s| -||g" | tr -d " "` sed -i "s|@@SKEL_RO_PWD@@|$RANDOMVAL|g" %{_sysconfdir}/sysconfig/%{myapp} RANDOMVAL=`echo $RANDOM | md5sum | sed "s| -||g" | tr -d " "` sed -i "s|@@SKEL_RW_PWD@@|$RANDOMVAL|g" %{_sysconfdir}/sysconfig/%{myapp} pushd %{myappdir} >/dev/null ln -s %{myapplogdir} logs ln -s %{myapptempdir} temp ln -s %{myappworkdir} work popd >/dev/null fi
  • 13. Hook de pre-uninstall %preun %if 0%{?suse_version} > 1140 %service_del_preun %{myapp}.service %endif if [ "$1" == "0" ]; then # Uninstall time, stop App and cleanup # stop Application [ -x "/etc/init.d/%{myapp}" ] && /etc/init.d/%{myapp} stop %{_sbindir}/userdel %{myappusername} %{_sbindir}/groupdel %{myappusername} rm -rf %{myappworkdir}/* %{myapptempdir}/* # unregister app from services systemctl disable %{myapp}.service >/dev/null 2>&1 # finalize housekeeping rm -rf %{myappdir} rm -rf %{myapplogdir} rm -rf %{myapptempdir} rm -rf %{myappworkdir} fi
  • 14. Hook de post-uninstall %postun %if 0%{?suse_version} > 1140 %service_del_postun %{myapp}.service %endif
  • 15. Déclaration du contenu %files %defattr(-,root,root) %attr(0755,%{myappusername},%{myappusername}) %dir %{myapplogdir} %attr(0755, root,root) %{_initrddir}/%{myapp} %attr(0644,root,root) %{_systemdir}/%{myapp}.service %config(noreplace) %{_sysconfdir}/sysconfig/%{myapp} %config %{_sysconfdir}/logrotate.d/%{myapp} %config %{_sysconfdir}/security/limits.d/%{myapp} %{myappdir}/bin %{myappdir}/conf %{myappdir}/lib %attr(-,%{myappusername}, %{myappusername}) %{myappdir}/webapps %attr(0755,%{myappusername},%{myappusername}) %dir %{myappdatadir} %attr(0755,%{myappusername},%{myappusername}) %dir %{myapptempdir} %attr(0755,%{myappusername},%{myappusername}) %dir %{myappworkdir} %doc %{myappdir}/NOTICE %doc %{myappdir}/RUNNING.txt %doc %{myappdir}/LICENSE %doc %{myappdir}/RELEASE-NOTES
  • 16. Historique %changelog * Sat Dev 03 2011 henri.gomez@gmail.com 1.0.3-1 - Adapt spec to OpenSuse 12.1 * Sun Nov 20 2011 henri.gomez@gmail.com 1.0.2-1 - Make use of OpenSuse 11.4 macros * Sun Jun 19 2011 henri.gomez@gmail.com 1.0.1-1 - Update Application * Sun Jun 19 2011 henri.gomez@gmail.com 1.0.0-2 - Add user account creation/deletion * Sun May 22 2011 henri.gomez@gmail.com 1.0.0-1 - Initial RPM
  • 17. AUTONOME Un package est auto-suffisant Programmes principaux et annexes (ex: logrotate) Données Comptes utilisateurs d’exécution Contrôle total sur le cycle de vie ‘en situation’
  • 18. 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ésintallation Hooks sur opération sur autres packages
  • 19. ET ENCORE Un processus déterministe et donc réplicable Peut être utilisé par Puppet ou Chef Des artifacts centralisables comme pour Maven Une approche composant d’exécution
  • 20. Types de RPMs RPMs OS RPMs OS RPMs OS Fournis par votre distribution Linux RPMs Applicatif RPMs Applicatif RPMs Applicatif RPMs Configuration RPMs Configuration Produits par les Devs & Ops RPMs Configuration RPMs Configuration Produits par les Ops
  • 21. L’ASSEMBLAGE Installer une usine à packages (Jenkins) Créer un dépôt de packages Apache HTTPd Nexus/Artifactory Préparer des images Linux (exemple: JeOS)
  • 22. 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)
  • 23. dépôt de packages Serveur Apache HTTPd Installer createrepo (RPM), dpkg-dev (DEB) Upload via web-dav ou ssh (plus simple) Nexus/Artifactory Installer createrepo (RPM), dpkg-dev (DEB) Upload via web-dav (par Maven par exemple)
  • 24. JeOS Juste les composants essentiels de l’OS Moins de packages installés Taux de mise à jour plus faible Réduction des risques de failles de sécurité Une empreinte mémoire et disque réduite
  • 25. De JeOS à instance Inventaire des besoins Pré-requis et dépendances Spécificités applicatives
  • 26. Les communs Serveur SSH Comptes administrateur Monitoring (SNMP) Firewall (port 22 et SNMP autorisés)
  • 29. GIT Environnement Java (OpenJDK, Sun/Oracle ou IBM) GitBlit Compte utilisateur spécifique Tomcat 7 powered & single webapp
  • 30. Jenkins Environnement Java (OpenJDK, Sun/Oracle ou IBM) Jenkins Compte utilisateur spécifique Tomcat 7 powered & single webapp
  • 31. Nexus Environnement Java (OpenJDK, Sun/Oracle ou IBM) Nexus Compte utilisateur spécifique Tomcat 7 powered & single webapp
  • 32. SONAR Environnement Java (OpenJDK, Sun/Oracle ou IBM) Sonar Compte utilisateur spécifique Tomcat 7 powered & single webapp SQL backend (Derby ou MySQL)
  • 33. MySQL BACKEND MySQL Comptes utilisateurs Configuration InnoDB
  • 34. Global FRONT-END Apache HTTPd VHosts Subversion Git Jenkins Nexus Sonar
  • 35. Conclusion Une approche simple Mise en oeuvre par étape Adaptée à de petites infrastructures Utilisable avec Puppet ou Chef pour de grosses infrastructure
  • 36. RPM DevOPS http://code.google.com/p/devops-incubator/ RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar Pour OpenSuse 11.4 & 12.1
  • 39. Licences et copyright Photos et logos appartiennent à leur auteurs/ propriétaires respectifs. Contenu sous Creative Commons 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/us/