DevOpsL’approche packaging natifLyonJUG 20 Décembre 2011
Henri Gomez+20 ans dans l’industrie logicielleArchitecte Java, CI et direction de productionDev, QA et OpsOpenSource Activ...
Packaging NatifCoeur de la pile applicative des OSGestion des dépendancesMise à jour automatique ou sélectiveUtilisé par l...
Packaging sous UnixRPM (Redhat Package Manager) sous RHEL/CentOS/Fedora, SLES/OpenSuse, MandrivaDEB sous Debian/UbuntuPKG ...
Qu’est-ce qu’un package ?Un fichier (.rpm, .deb)Des données (fichiers et programmes)Du code exécuté lors de l’installation, ...
Points communs avecMavenConstruction par DSLQuelques commandes pour les manipuler (rpm, apt-get)Gestion des dépendances po...
Un DSL pour les OpsSimpleQuelques macrosSH powered
Construire un RPMDes fichiers binaires - depuis l’entrepôt de livrablesDes sources - depuis le SCMUn fichier de construction...
Entête déclaratifName: myappVersion: 1.0.0Release: 1Summary: MyApp powered by Apache TomcatGroup: Applications/Communicati...
Construction%prep%setup -q -c%build%install# Prep the install location.rm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT%{_in...
Hook de pré-install%pre%if 0%{?suse_version} > 1140%service_add_pre %{myapp}.service%endif# add user and group%{_sbindir}/...
Hook de post-install%post%if 0%{?suse_version} > 1140%service_add_post %{myapp}.service%endifif [ "$1" == "1" ]; then  # r...
Hook de pre-uninstall%preun%if 0%{?suse_version} > 1140%service_del_preun %{myapp}.service%endifif [ "$1" == "0" ]; then  ...
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(07...
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....
AUTONOMEUn package est auto-suffisant  Programmes principaux et annexes (ex: logrotate)  Données  Comptes utilisateurs d’ex...
CYCLE DE VIE IN SITUContrôle total sur le cycle de vie ‘en situation’  Hooks pre/post installation  Hook lors de la mise à...
ET ENCOREUn processus déterministe et donc réplicablePeut être utilisé par Puppet ou ChefDes artifacts centralisables comm...
Types de RPMs       RPMs OS       RPMs OS        RPMs OSFournis par votre distribution Linux                              ...
L’ASSEMBLAGEInstaller une usine à packages (Jenkins)Créer un dépôt de packages  Apache HTTPd  Nexus/ArtifactoryPréparer de...
Usine a packagesJenkins (what else ?)Un agent Jenkins par distribution cibleDéployer les outils de construction packages s...
dépôt de packagesServeur Apache HTTPd  Installer createrepo (RPM), dpkg-dev (DEB)  Upload via web-dav ou ssh (plus simple)...
JeOSJuste les composants essentiels de l’OSMoins de packages installésTaux de mise à jour plus faibleRéduction des risques...
De JeOS à instanceInventaire des besoinsPré-requis et dépendancesSpécificités applicatives
Les communsServeur SSHComptes administrateurMonitoring (SNMP)Firewall (port 22 et SNMP autorisés)
Ma petite FORGESubversionGitJenkinsNexusSonar
SubversionApache HTTPd serverSubversionViewvcComptes utilisateurs
GITEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)GitBlit  Compte utilisateur spécifique  Tomcat 7 powered & single webapp
JenkinsEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Jenkins  Compte utilisateur spécifique  Tomcat 7 powered & single web...
NexusEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Nexus  Compte utilisateur spécifique  Tomcat 7 powered & single webapp
SONAREnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Sonar  Compte utilisateur spécifique  Tomcat 7 powered & single webapp ...
MySQL BACKENDMySQL Comptes utilisateurs Configuration InnoDB
Global FRONT-ENDApache HTTPd VHosts Subversion Git Jenkins Nexus Sonar
ConclusionUne approche simpleMise en oeuvre par étapeAdaptée à de petites infrastructuresUtilisable avec Puppet ou Chef po...
RPM DevOPShttp://code.google.com/p/devops-incubator/  RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar  Pour OpenSuse ...
LIREhttp://www.rpm.org/max-rpm/http://fedoraproject.org/wiki/Packaging/Guidelineshttp://en.opensuse.org/openSUSE:Specfile_g...
Des questions ?
Licences et copyright Photos et logos appartiennent à leur auteurs/ propriétaires respectifs. Contenu sous Creative Common...
Upcoming SlideShare
Loading in …5
×

20111220 lyon jug-packaging-natif

1,374 views

Published on

Présentation DevOps au LyonJUG.

Approche Packaging Natif

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,374
On SlideShare
0
From Embeds
0
Number of Embeds
343
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

20111220 lyon jug-packaging-natif

  1. 1. DevOpsL’approche packaging natifLyonJUG 20 Décembre 2011
  2. 2. Henri Gomez+20 ans dans l’industrie logicielleArchitecte Java, CI et direction de productionDev, QA et OpsOpenSource Activist Apache Tomcat JPackage openjdk-osx-build
  3. 3. Packaging NatifCoeur de la pile applicative des OSGestion des dépendancesMise à jour automatique ou sélectiveUtilisé par les Ops
  4. 4. Packaging sous UnixRPM (Redhat Package Manager) sous RHEL/CentOS/Fedora, SLES/OpenSuse, MandrivaDEB sous Debian/UbuntuPKG sous Solaris
  5. 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 lasuppression du packageLié à une architecture (Intel, ARM, PowerPC en 32 ou64bits) ou neutre (exemple: une application Java)
  6. 6. Points communs avecMavenConstruction par DSLQuelques commandes pour les manipuler (rpm, apt-get)Gestion des dépendances pour la construction mais aussipour l’exécutionDépôts de packages, accessible en local ou via HTTPNexus et Artifactory peuvent servir de dépôts RPMMises à jour automatiques ou contrôlées
  7. 7. Un DSL pour les OpsSimpleQuelques macrosSH powered
  8. 8. Construire un RPMDes fichiers binaires - depuis l’entrepôt de livrablesDes sources - depuis le SCMUn fichier de construction, le SPECFILE
  9. 9. Entête déclaratifName: myappVersion: 1.0.0Release: 1Summary: MyApp powered by Apache TomcatGroup: Applications/CommunicationsURL: http://www.mycorp.org/Vendor: MyCorpPackager: MyPackagerLicense: AGPLv1BuildArch: noarch%define tomcat_rel 7.0.22%define myapp myapp%define myappusername myuser%define myappuserid 1234%define myappgroupid 1234Requires: java = 1.6.0Source0: apache-tomcat-%{tomcat_rel}.tar.gzSource1: myapp.war%descriptionMyApp powered by Apache Tomcat
  10. 10. Construction%prep%setup -q -c%build%install# Prep the install location.rm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT%{_initrddir}mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
  11. 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. 12. Hook de post-install%post%if 0%{?suse_version} > 1140%service_add_post %{myapp}.service%endifif [ "$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/nullfi
  13. 13. Hook de pre-uninstall%preun%if 0%{?suse_version} > 1140%service_del_preun %{myapp}.service%endifif [ "$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. 14. Hook de post-uninstall%postun%if 0%{?suse_version} > 1140%service_del_postun %{myapp}.service%endif
  15. 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. 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. 17. AUTONOMEUn 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. 18. CYCLE DE VIE IN SITUContrô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. 19. ET ENCOREUn processus déterministe et donc réplicablePeut être utilisé par Puppet ou ChefDes artifacts centralisables comme pour MavenUne approche composant d’exécution
  20. 20. Types de RPMs RPMs OS RPMs OS RPMs OSFournis par votre distribution Linux RPMs Applicatif RPMs Applicatif RPMs ApplicatifRPMs Configuration RPMs Configuration Produits par les Devs & Ops RPMs Configuration RPMs Configuration Produits par les Ops
  21. 21. L’ASSEMBLAGEInstaller une usine à packages (Jenkins)Créer un dépôt de packages Apache HTTPd Nexus/ArtifactoryPréparer des images Linux (exemple: JeOS)
  22. 22. Usine a packagesJenkins (what else ?)Un agent Jenkins par distribution cibleDéployer les outils de construction packages sur l’agent rpm-build, make, autoconf (RPM) build-essential, devscripts, ubuntu-dev-tools (DEB)
  23. 23. dépôt de packagesServeur 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. 24. JeOSJuste les composants essentiels de l’OSMoins de packages installésTaux de mise à jour plus faibleRéduction des risques de failles de sécuritéUne empreinte mémoire et disque réduite
  25. 25. De JeOS à instanceInventaire des besoinsPré-requis et dépendancesSpécificités applicatives
  26. 26. Les communsServeur SSHComptes administrateurMonitoring (SNMP)Firewall (port 22 et SNMP autorisés)
  27. 27. Ma petite FORGESubversionGitJenkinsNexusSonar
  28. 28. SubversionApache HTTPd serverSubversionViewvcComptes utilisateurs
  29. 29. GITEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)GitBlit Compte utilisateur spécifique Tomcat 7 powered & single webapp
  30. 30. JenkinsEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Jenkins Compte utilisateur spécifique Tomcat 7 powered & single webapp
  31. 31. NexusEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Nexus Compte utilisateur spécifique Tomcat 7 powered & single webapp
  32. 32. SONAREnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Sonar Compte utilisateur spécifique Tomcat 7 powered & single webapp SQL backend (Derby ou MySQL)
  33. 33. MySQL BACKENDMySQL Comptes utilisateurs Configuration InnoDB
  34. 34. Global FRONT-ENDApache HTTPd VHosts Subversion Git Jenkins Nexus Sonar
  35. 35. ConclusionUne approche simpleMise en oeuvre par étapeAdaptée à de petites infrastructuresUtilisable avec Puppet ou Chef pour de grossesinfrastructure
  36. 36. RPM DevOPShttp://code.google.com/p/devops-incubator/ RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar Pour OpenSuse 11.4 & 12.1
  37. 37. LIREhttp://www.rpm.org/max-rpm/http://fedoraproject.org/wiki/Packaging/Guidelineshttp://en.opensuse.org/openSUSE:Specfile_guidelinesNexus : http://code.google.com/p/nexus-yum-plugin/Artifactory : http://wiki.jfrog.org/confluence/display/RTF/YUM+Repositories
  38. 38. Des questions ?
  39. 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/

×