20120110 paris jug-packaging-natif
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

20120110 paris jug-packaging-natif

  • 1,038 views
Uploaded on

Présentation DevOps au ParisJUG....

Présentation DevOps au ParisJUG.

Approche Packaging Natif

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,038
On Slideshare
1,029
From Embeds
9
Number of Embeds
3

Actions

Shares
Downloads
14
Comments
0
Likes
2

Embeds 9

http://a0.twimg.com 4
https://twitter.com 4
https://si0.twimg.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. DevOpsL’approche packaging natifParisJUG 10 Janvier 2012
  • 2. Henri GomezCI Architect @ Axway+20 ans dans l’industrie logicielleArchitecte Java, CI et Direction de productionOpenSource Activist Apache Tomcat JPackage openjdk-osx-build
  • 3. 3,2,1 - Rocket LaunchedCourtesy Steve Jurvetson
  • 4. Définition d’un livrableC’est un artefact utilisable par les équipes up-streamPour un Dev ce sont donc les équipes QA et/ou Ops
  • 5. Jar, war, zip, tarball ?Ce sont des archives simples, non opérables directement
  • 6. Les questions à se poserGestion des pré-requisCycle de vie (mise à jour, suppression)Quid du déploiement (qui, quoi, comment)Localisation dans le FileSystem (FHS rules)Les droits dexécutions et accès dans le FileSystem
  • 7. Packaging NatifCoeur de la pile applicative des OSGestion des dépendancesMise à jour automatique ou sélectiveLargement utilisé par les Ops
  • 8. Packaging sous UnixRPM (Redhat Package Manager) sous RHEL/CentOS/Fedora, SLES/OpenSuse, MandrivaDEB sous Debian/UbuntuPKG sous Solaris
  • 9. 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)
  • 10. 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
  • 11. Un DSL pour les OpsSimpleQuelques macrosSH powered
  • 12. Construire un RPMDes fichiers binaires - depuis l’entrepôt de livrablesDes sources - depuis le SCMUn fichier de construction, le SPECFILE
  • 13. 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
  • 14. 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
  • 15. 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 || :
  • 16. 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
  • 17. 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
  • 18. Hook de post-uninstall%postun%if 0%{?suse_version} > 1140%service_del_postun %{myapp}.service%endif
  • 19. 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
  • 20. 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
  • 21. 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’
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. L’ASSEMBLAGEInstaller une usine à packages (Jenkins)Créer un dépôt de packages Apache HTTPd Nexus/ArtifactoryPréparer des images Linux (exemple: JeOS)
  • 26. 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)
  • 27. 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)
  • 28. 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
  • 29. De JeOS à instanceInventaire des besoinsPré-requis et dépendancesSpécificités applicatives
  • 30. Les communsServeur SSHComptes administrateurMonitoring (SNMP)Firewall (port 22 et SNMP autorisés)
  • 31. Ma petite FORGESubversionGitJenkinsNexusSonar
  • 32. SubversionApache HTTPd serverSubversionViewvcComptes utilisateurs
  • 33. GITEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)GitBlit Compte utilisateur spécifique Tomcat 7 powered & single webapp
  • 34. JenkinsEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Jenkins Compte utilisateur spécifique Tomcat 7 powered & single webapp
  • 35. NexusEnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Nexus Compte utilisateur spécifique Tomcat 7 powered & single webapp
  • 36. SONAREnvironnement Java (OpenJDK, Sun/Oracle ou IBM)Sonar Compte utilisateur spécifique Tomcat 7 powered & single webapp SQL backend (Derby ou MySQL)
  • 37. Global FRONT-ENDApache HTTPd VHosts Subversion Git Jenkins Nexus Sonar
  • 38. ConclusionUne approche simpleMise en oeuvre par étapeAdaptée à de petites infrastructuresUtilisable avec Puppet ou Chef
  • 39. RPM DevOPShttp://code.google.com/p/devops-incubator/ RPMs pour Subversion, GitBlit, Jenkins, Nexus, Sonar Pour OpenSuse 11.4 & 12.1
  • 40. 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
  • 41. Des questions ?
  • 42. 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/