SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016
Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto
Inuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTT
February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016
whoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoami
• JJJJJJJJJJJJJJJJJulien Pivotto
• rrrrrrrrrrrrrrrrroidelapluie
• SSSSSSSSSSSSSSSSSysadmin
• FFFFFFFFFFFFFFFFFLOSS since 2004
• IIIIIIIIIIIIIIIIInuits since 2011
• CCCCCCCCCCCCCCCCCentOS CfgMgmtSig
Native packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packages
• RRRRRRRRRRRRRRRRReally? It is still needed?
• PPPPPPPPPPPPPPPPPypi/Rubygems/npm/pear…
• OOOOOOOOOOOOOOOOOmnibus/FPM/…
No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .
It is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easy
gem install fpm
ERROR: Could not find a valid gem `fpm'
(>= 0), here is why:
Unable to download data from https://
rubygems.org/ − Errno::ECONNREFUSED:
Connection refused − connect(2) for "
api.rubygems.org" port 443 (https://api
.rubygems.org/latest_specs.4.8.gz)
I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)
• /////////////////usr/bin/fpm
• ./vendor/bin/fpm
• /////////////////usr/local/bin/fpm
• ~~~~~~~~~~~~~~~~~/.ruby/2.4/gems/rubygems/fpm/bin/fpm
Now I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prod
• DDDDDDDDDDDDDDDDDev: version 1.1
• UUUUUUUUUUUUUUUUUAT (deployed next day): 1.2
• PPPPPPPPPPPPPPPPProd (a week after): 2.0. broken.
Open questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questions
• WWWWWWWWWWWWWWWWWhat is installed?
• WWWWWWWWWWWWWWWWWhere does the file come from?
• CCCCCCCCCCCCCCCCCompilation at install time?
RPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPM
How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011
• hhhhhhhhhhhhhhhhhttps://github.com/roidelapluie/vagrant-
build-mapnik
• /////////////////usr/bin/wget -O /tmp/mapnik.tar.bz2
https://github.com/mapnik-2.0.0.tar.bz2
• /////////////////usr/bin/screen -d -m
/usr/local/bin/build_mapnik.sh
• AAAAAAAAAAAAAAAAAll of that in puppet manifests
I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…
After vagrant provision , wait until the
compilation is done.
You can see the compilations process:
vagrant ssh
sudo screen −r
The packages will be located in the "rpms"
folder.
Building in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VM
cd /opt/mapnik −2.0.0
python scons/scons.py configure PREFIX=${
target} PYTHON_PREFIX=${target}
python scons/scons.py
python scons/scons.py install
FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…
fpm −s dir −n mapnik −v 2.0.0 −−iteration "${
start_date}" 
−C "${target}" −t rpm −−prefix /usr −−url
http://mapnik.org/ 
−−description "Mapnik is a Free Toolkit for
developing mapping applications." 
−−exclude include
Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…
fpm −s dir −n mapnik−devel −v 2.0.0 −−
iteration "${start_date}" 
−C "${target}/include" −t rpm −−prefix /usr/
include −−url http://mapnik.org/ 
−−description "The mapnik−devel package
contains header files for developing
programs using the Mapnik library." 
−−depends "mapnik = 2.0.0"
How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014
• hhhhhhhhhhhhhhhhhttps://github.com/roidelapluie/collectd-
rpm
• SSSSSSSSSSSSSSSSSpec file in collectd upstream
• wwwwwwwwwwwwwwwwwget sources
• iiiiiiiiiiiiiiiiinstall build deps
• rrrrrrrrrrrrrrrrrpmbuild -bb
install build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build deps
egrep "^BuildRequires" collectd −5.5.0/contrib/
redhat/collectd.spec | cut −d `:' −f 2 | tr
−d ` t' | sed `s/,/n/' | uniq | tr −d `
n' | tr `,' ` '|xargs yum install −y
And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?
PackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglove
• hhhhhhhhhhhhhhhhhttp://packaginglove.github.io/packaging-
book/
• CCCCCCCCCCCCCCCCCurrently limited to RPM
• AAAAAAAAAAAAAAAAA pragmatic approach
• DDDDDDDDDDDDDDDDDeb coming
• PPPPPPPPPPPPPPPPPlz contribute
Pick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better tools
• dddddddddddddddddocker instead of vagrant
• yyyyyyyyyyyyyyyyyum/rpm helpers commands
• rrrrrrrrrrrrrrrrreuse/rebuild fedora packages
• ttttttttttttttttthe Cloud ©: copr/travis
RPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpers
• yyyyyyyyyyyyyyyyyum-builddeps install build dependencies
• ssssssssssssssssspectool download the sources
Reuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packages
• ccccccccccccccccclone spec file
• fffffffffffffffffix if needed
dockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdocker
• dddddddddddddddddocker runs on travis
• FFFFFFFFFFFFFFFFFaster than vagrant
• uuuuuuuuuuuuuuuuuseful run options: --rm -v -w -t -i --env
Docker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" image
FROM centos:7
MAINTAINER Julien Pivotto <roidelapluie@inuits
.eu>
RUN yum install −y /usr/bin/wget
RUN yum install −y /usr/bin/spectool
RUN yum install −y /usr/bin/rpmbuild
RUN yum install −y /usr/bin/yum−builddep
RUN yum install −y /usr/bin/make
RUN yum install −y epel−release
Docker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" image
docker build −t el7−build .
Docker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker run
docker run −e XUID="$(id −u)" −−rm −ti −v $PWD
:/work −w /work el7−build ./el7−build.sh
• ------------------rm: do not fill my disk
• -----------------t: allocate a tty
• -----------------i: interactive
• -----------------v $PWD:/work mount current dir on host to
/work in container
• -----------------w /work: use /work as working dir
el7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.sh
useradd −u ${XUID:−1000} rpm
mkdir −p /home/rpm/rpmbuild/SOURCES
spectool −C /home/rpm/rpmbuild/SOURCES −g test
.spec
yum−builddep −y facter.spec
chown −R rpm: /home/rpm
su − rpm −c "rpmbuild −bb /work/facter.spec"
cp −a /home/rpm/rpmbuild/SRPMS/*.src.rpm .
cp −a /home/rpm/rpmbuild/RPMS/*/*.rpm .
Cloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud tools
travis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secrets
• TTTTTTTTTTTTTTTTTravis "secrets" = encrypted variables
• UUUUUUUUUUUUUUUUUse for password, credentials
• VVVVVVVVVVVVVVVVVariables or files
• TTTTTTTTTTTTTTTTThe travis gem
• PPPPPPPPPPPPPPPPPublish to github releases
travis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gem
travis setup releases
travis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.ymltravis.yml
sudo: required
services:
− docker
script:
− make
deploy:
provider: releases
api_key:
secure: Some encrypted stuff
skip_cleanup: true
file_glob: true
file: python−*.rpm
on:
tags: true
coprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcopr
•
hhhhhhhhhhhhhhhhhttps://copr.fedorainfracloud.org/coprs/roidelapl
• fffffffffffffffffedora project
• IIIIIIIIIIIIIIIIInfra to build RPM
• WWWWWWWWWWWWWWWWWeb interface
• pppppppppppppppppublic builds
• llllllllllllllllless limitations than travis
copr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and travis
travis encrypt−file copr−config −−add
echo copr−config > .gitignore
copr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and travis
sudo: required
services:
− docker
script:
− make
before_install:
− openssl aes−256−cbc −K
$encrypted_2ec4d63b6867_key −iv
$encrypted_2ec4d63b6867_iv
−in copr−config.enc −out copr−config −d
MakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefile
el7:
docker run −e XUID="$(shell id −u)" −−rm −v
$(shell pwd):/work −w /work −ti fedora:23
./dockerscript.sh
dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)
#!/bin/bash
set −x;set −e
dnf install −y /usr/bin/spectool /usr/bin/
rpmbuild /usr/bin/copr−cli /usr/bin/python3
−config
useradd −u ${XUID:−1000} bob
mkdir −p /home/bob/rpmbuild/SOURCES
find . −maxdepth 1 −type f −exec cp −v '{}' /
home/bob/rpmbuild/SOURCES ';'
spectool −C /home/bob/rpmbuild/SOURCES −g /
work/boost.spec
chown −R bob: /home/bob
dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)
su − bob −c "rpmbuild −bs /work/boost.spec"
copr−cli −−debug −−config ./copr−config build
boost /home/bob/rpmbuild/SRPMS/*.src.rpm
• rrrrrrrrrrrrrrrrrpmbuild -bs: build only SRPM
• cccccccccccccccccopr-cli --debug is to avoid the 10 minutes
limitation in travis-ci
ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusion
ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusion
• fffffffffffffffffedora: source of pkgs
• tttttttttttttttttravis/copr: Public builds
• dddddddddddddddddocker: reproducible locally

Contenu connexe

Tendances

An introduction to the Pulp project
An introduction to the Pulp projectAn introduction to the Pulp project
An introduction to the Pulp projectJulien Pivotto
 
Diving Into Puppet Providers Development: The Puppet-Corosync Module
Diving Into Puppet Providers Development: The Puppet-Corosync ModuleDiving Into Puppet Providers Development: The Puppet-Corosync Module
Diving Into Puppet Providers Development: The Puppet-Corosync ModuleJulien Pivotto
 
Monitoring at Cloud Scale
Monitoring at Cloud ScaleMonitoring at Cloud Scale
Monitoring at Cloud ScaleJulien Pivotto
 
Postgresql 9.0 HA at RMLL 2012
Postgresql 9.0 HA at RMLL 2012Postgresql 9.0 HA at RMLL 2012
Postgresql 9.0 HA at RMLL 2012Julien Pivotto
 
Testing your puppet code
Testing your puppet codeTesting your puppet code
Testing your puppet codeJulien Pivotto
 
11 Tools for your Open Source devops stack
11 Tools for your Open Source devops stack 11 Tools for your Open Source devops stack
11 Tools for your Open Source devops stack Kris Buytaert
 
Making Py Pi Sux Less Key
Making Py Pi Sux Less KeyMaking Py Pi Sux Less Key
Making Py Pi Sux Less KeyAndreas Jung
 
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...NETWAYS
 
Onsi Fakhouri at SpringOne Platform 2017
Onsi Fakhouri at SpringOne Platform 2017Onsi Fakhouri at SpringOne Platform 2017
Onsi Fakhouri at SpringOne Platform 2017VMware Tanzu
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chefice799
 
Monitoring in an Infrastructure as Code Age
Monitoring in an Infrastructure as Code AgeMonitoring in an Infrastructure as Code Age
Monitoring in an Infrastructure as Code AgeKris Buytaert
 
Another 7 tools for your #devops stack
Another 7 tools for your #devops stackAnother 7 tools for your #devops stack
Another 7 tools for your #devops stackKris Buytaert
 
Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015ice799
 
VCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT WorkshopVCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT WorkshopAnis Ahmad
 

Tendances (20)

An introduction to the Pulp project
An introduction to the Pulp projectAn introduction to the Pulp project
An introduction to the Pulp project
 
Diving Into Puppet Providers Development: The Puppet-Corosync Module
Diving Into Puppet Providers Development: The Puppet-Corosync ModuleDiving Into Puppet Providers Development: The Puppet-Corosync Module
Diving Into Puppet Providers Development: The Puppet-Corosync Module
 
DNSSec
DNSSecDNSSec
DNSSec
 
Monitoring at Cloud Scale
Monitoring at Cloud ScaleMonitoring at Cloud Scale
Monitoring at Cloud Scale
 
Dive into Puppet 4
Dive into Puppet 4Dive into Puppet 4
Dive into Puppet 4
 
Coworking with git
Coworking with gitCoworking with git
Coworking with git
 
Postgresql 9.0 HA at RMLL 2012
Postgresql 9.0 HA at RMLL 2012Postgresql 9.0 HA at RMLL 2012
Postgresql 9.0 HA at RMLL 2012
 
Linux HA anno 2014
Linux HA anno 2014Linux HA anno 2014
Linux HA anno 2014
 
Testing your puppet code
Testing your puppet codeTesting your puppet code
Testing your puppet code
 
11 Tools for your Open Source devops stack
11 Tools for your Open Source devops stack 11 Tools for your Open Source devops stack
11 Tools for your Open Source devops stack
 
Making Py Pi Sux Less Key
Making Py Pi Sux Less KeyMaking Py Pi Sux Less Key
Making Py Pi Sux Less Key
 
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
 
Onsi Fakhouri at SpringOne Platform 2017
Onsi Fakhouri at SpringOne Platform 2017Onsi Fakhouri at SpringOne Platform 2017
Onsi Fakhouri at SpringOne Platform 2017
 
Logstash and friends
Logstash and friendsLogstash and friends
Logstash and friends
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chef
 
Monitoring in an Infrastructure as Code Age
Monitoring in an Infrastructure as Code AgeMonitoring in an Infrastructure as Code Age
Monitoring in an Infrastructure as Code Age
 
Another 7 tools for your #devops stack
Another 7 tools for your #devops stackAnother 7 tools for your #devops stack
Another 7 tools for your #devops stack
 
Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015
 
VCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT WorkshopVCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT Workshop
 

Similaire à RPM experiments

[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...
[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...
[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...François-Guillaume Ribreau
 
Repositories as Code
Repositories as CodeRepositories as Code
Repositories as CodeKris Buytaert
 
Lpreservereurobsd2014
Lpreservereurobsd2014Lpreservereurobsd2014
Lpreservereurobsd2014krispcbsd
 
Snapshots, Replication, and Boot-Environments by Kris Moore
Snapshots, Replication, and Boot-Environments by Kris Moore Snapshots, Replication, and Boot-Environments by Kris Moore
Snapshots, Replication, and Boot-Environments by Kris Moore eurobsdcon
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 
Quest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFREDQuest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFREDAndi Smith
 
Introduction to VeriFast @ Kyoto
Introduction to VeriFast @ KyotoIntroduction to VeriFast @ Kyoto
Introduction to VeriFast @ KyotoKiwamu Okabe
 
Automating MySQL operations with Puppet
Automating MySQL operations with PuppetAutomating MySQL operations with Puppet
Automating MySQL operations with PuppetKris Buytaert
 
Life Preserver - AsiaBSDCon2014
Life Preserver - AsiaBSDCon2014Life Preserver - AsiaBSDCon2014
Life Preserver - AsiaBSDCon2014krispcbsd
 
Swing when you're winning - an introduction to Ruby and Sinatra
Swing when you're winning - an introduction to Ruby and SinatraSwing when you're winning - an introduction to Ruby and Sinatra
Swing when you're winning - an introduction to Ruby and SinatraMatt Gifford
 
How To Install OpenFire in CentOS 7
How To Install OpenFire in CentOS 7How To Install OpenFire in CentOS 7
How To Install OpenFire in CentOS 7VCP Muthukrishna
 
Pipfile, pipenv, pip… what?!
Pipfile, pipenv, pip… what?!Pipfile, pipenv, pip… what?!
Pipfile, pipenv, pip… what?!Ivan Chernoff
 
Speed up your development environment PHP + Nginx + Fedora + PG
Speed up your development environment PHP + Nginx + Fedora + PGSpeed up your development environment PHP + Nginx + Fedora + PG
Speed up your development environment PHP + Nginx + Fedora + PGMarcus Sá
 
Deploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise EnvironmentsDeploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise Environmentsinovex GmbH
 
Groovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineGroovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineKris Buytaert
 
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert NETWAYS
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentCarlos Perez
 

Similaire à RPM experiments (20)

[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...
[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...
[BreizhCamp, format 15min] Construire et automatiser l'ecosystème de son Saa...
 
Mojolicious lite
Mojolicious liteMojolicious lite
Mojolicious lite
 
Repositories as Code
Repositories as CodeRepositories as Code
Repositories as Code
 
Lpreservereurobsd2014
Lpreservereurobsd2014Lpreservereurobsd2014
Lpreservereurobsd2014
 
Snapshots, Replication, and Boot-Environments by Kris Moore
Snapshots, Replication, and Boot-Environments by Kris Moore Snapshots, Replication, and Boot-Environments by Kris Moore
Snapshots, Replication, and Boot-Environments by Kris Moore
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Quest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFREDQuest for the Perfect Workflow for McrFRED
Quest for the Perfect Workflow for McrFRED
 
Introduction to VeriFast @ Kyoto
Introduction to VeriFast @ KyotoIntroduction to VeriFast @ Kyoto
Introduction to VeriFast @ Kyoto
 
Automating MySQL operations with Puppet
Automating MySQL operations with PuppetAutomating MySQL operations with Puppet
Automating MySQL operations with Puppet
 
Life Preserver - AsiaBSDCon2014
Life Preserver - AsiaBSDCon2014Life Preserver - AsiaBSDCon2014
Life Preserver - AsiaBSDCon2014
 
Swing when you're winning - an introduction to Ruby and Sinatra
Swing when you're winning - an introduction to Ruby and SinatraSwing when you're winning - an introduction to Ruby and Sinatra
Swing when you're winning - an introduction to Ruby and Sinatra
 
Perl dancer
Perl dancerPerl dancer
Perl dancer
 
How To Install OpenFire in CentOS 7
How To Install OpenFire in CentOS 7How To Install OpenFire in CentOS 7
How To Install OpenFire in CentOS 7
 
Pipfile, pipenv, pip… what?!
Pipfile, pipenv, pip… what?!Pipfile, pipenv, pip… what?!
Pipfile, pipenv, pip… what?!
 
Speed up your development environment PHP + Nginx + Fedora + PG
Speed up your development environment PHP + Nginx + Fedora + PGSpeed up your development environment PHP + Nginx + Fedora + PG
Speed up your development environment PHP + Nginx + Fedora + PG
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Deploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise EnvironmentsDeploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise Environments
 
Groovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineGroovy there's a docker in my application pipeline
Groovy there's a docker in my application pipeline
 
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software Development
 

Plus de Julien Pivotto

What's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemWhat's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemJulien Pivotto
 
Prometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingPrometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingJulien Pivotto
 
What's new in Prometheus?
What's new in Prometheus?What's new in Prometheus?
What's new in Prometheus?Julien Pivotto
 
Introduction to Grafana Loki
Introduction to Grafana LokiIntroduction to Grafana Loki
Introduction to Grafana LokiJulien Pivotto
 
Why you should revisit mgmt
Why you should revisit mgmtWhy you should revisit mgmt
Why you should revisit mgmtJulien Pivotto
 
Observing the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusObserving the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusJulien Pivotto
 
Monitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusMonitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusJulien Pivotto
 
5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery5 tips for Prometheus Service Discovery
5 tips for Prometheus Service DiscoveryJulien Pivotto
 
Prometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionPrometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionJulien Pivotto
 
Powerful graphs in Grafana
Powerful graphs in GrafanaPowerful graphs in Grafana
Powerful graphs in GrafanaJulien Pivotto
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress ControllerJulien Pivotto
 
Improved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerImproved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerJulien Pivotto
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with KeycloakJulien Pivotto
 
Monitoring as an entry point for collaboration
Monitoring as an entry point for collaborationMonitoring as an entry point for collaboration
Monitoring as an entry point for collaborationJulien Pivotto
 
Incident Resolution as Code
Incident Resolution as CodeIncident Resolution as Code
Incident Resolution as CodeJulien Pivotto
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusJulien Pivotto
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusJulien Pivotto
 
An introduction to Ansible
An introduction to AnsibleAn introduction to Ansible
An introduction to AnsibleJulien Pivotto
 

Plus de Julien Pivotto (20)

The O11y Toolkit
The O11y ToolkitThe O11y Toolkit
The O11y Toolkit
 
What's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemWhat's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its Ecosystem
 
Prometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingPrometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is coming
 
What's new in Prometheus?
What's new in Prometheus?What's new in Prometheus?
What's new in Prometheus?
 
Introduction to Grafana Loki
Introduction to Grafana LokiIntroduction to Grafana Loki
Introduction to Grafana Loki
 
Why you should revisit mgmt
Why you should revisit mgmtWhy you should revisit mgmt
Why you should revisit mgmt
 
Observing the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusObserving the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From Prometheus
 
Monitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusMonitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with Prometheus
 
5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery
 
Prometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionPrometheus and TLS - an Introduction
Prometheus and TLS - an Introduction
 
Powerful graphs in Grafana
Powerful graphs in GrafanaPowerful graphs in Grafana
Powerful graphs in Grafana
 
YAML Magic
YAML MagicYAML Magic
YAML Magic
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress Controller
 
Improved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerImproved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and Alertmanager
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with Keycloak
 
Monitoring as an entry point for collaboration
Monitoring as an entry point for collaborationMonitoring as an entry point for collaboration
Monitoring as an entry point for collaboration
 
Incident Resolution as Code
Incident Resolution as CodeIncident Resolution as Code
Incident Resolution as Code
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
An introduction to Ansible
An introduction to AnsibleAn introduction to Ansible
An introduction to Ansible
 

Dernier

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Dernier (20)

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

RPM experiments

  • 1. RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016RPM Building in 2016 Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto Inuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTTInuits TTT February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016February 26th, 2016
  • 2. whoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoami • JJJJJJJJJJJJJJJJJulien Pivotto • rrrrrrrrrrrrrrrrroidelapluie • SSSSSSSSSSSSSSSSSysadmin • FFFFFFFFFFFFFFFFFLOSS since 2004 • IIIIIIIIIIIIIIIIInuits since 2011 • CCCCCCCCCCCCCCCCCentOS CfgMgmtSig
  • 3. Native packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packagesNative packages • RRRRRRRRRRRRRRRRReally? It is still needed? • PPPPPPPPPPPPPPPPPypi/Rubygems/npm/pear… • OOOOOOOOOOOOOOOOOmnibus/FPM/…
  • 4. No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .No need for native packages. . .
  • 5. It is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easyIt is so easy gem install fpm ERROR: Could not find a valid gem `fpm' (>= 0), here is why: Unable to download data from https:// rubygems.org/ − Errno::ECONNREFUSED: Connection refused − connect(2) for " api.rubygems.org" port 443 (https://api .rubygems.org/latest_specs.4.8.gz)
  • 6. I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/)I have it installed (4 times :-/) • /////////////////usr/bin/fpm • ./vendor/bin/fpm • /////////////////usr/local/bin/fpm • ~~~~~~~~~~~~~~~~~/.ruby/2.4/gems/rubygems/fpm/bin/fpm
  • 7. Now I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prodNow I can deploy to prod • DDDDDDDDDDDDDDDDDev: version 1.1 • UUUUUUUUUUUUUUUUUAT (deployed next day): 1.2 • PPPPPPPPPPPPPPPPProd (a week after): 2.0. broken.
  • 8. Open questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questionsOpen questions • WWWWWWWWWWWWWWWWWhat is installed? • WWWWWWWWWWWWWWWWWhere does the file come from? • CCCCCCCCCCCCCCCCCompilation at install time?
  • 10. How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011How I built RPM in 2011 • hhhhhhhhhhhhhhhhhttps://github.com/roidelapluie/vagrant- build-mapnik • /////////////////usr/bin/wget -O /tmp/mapnik.tar.bz2 https://github.com/mapnik-2.0.0.tar.bz2 • /////////////////usr/bin/screen -d -m /usr/local/bin/build_mapnik.sh • AAAAAAAAAAAAAAAAAll of that in puppet manifests
  • 11. I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young…I was so young… After vagrant provision , wait until the compilation is done. You can see the compilations process: vagrant ssh sudo screen −r The packages will be located in the "rpms" folder.
  • 12. Building in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VMBuilding in the VM cd /opt/mapnik −2.0.0 python scons/scons.py configure PREFIX=${ target} PYTHON_PREFIX=${target} python scons/scons.py python scons/scons.py install
  • 13. FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things…FPM all the things… fpm −s dir −n mapnik −v 2.0.0 −−iteration "${ start_date}" −C "${target}" −t rpm −−prefix /usr −−url http://mapnik.org/ −−description "Mapnik is a Free Toolkit for developing mapping applications." −−exclude include
  • 14. Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package…Even the devel package… fpm −s dir −n mapnik−devel −v 2.0.0 −− iteration "${start_date}" −C "${target}/include" −t rpm −−prefix /usr/ include −−url http://mapnik.org/ −−description "The mapnik−devel package contains header files for developing programs using the Mapnik library." −−depends "mapnik = 2.0.0"
  • 15. How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014How I built RPM in 2014 • hhhhhhhhhhhhhhhhhttps://github.com/roidelapluie/collectd- rpm • SSSSSSSSSSSSSSSSSpec file in collectd upstream • wwwwwwwwwwwwwwwwwget sources • iiiiiiiiiiiiiiiiinstall build deps • rrrrrrrrrrrrrrrrrpmbuild -bb
  • 16. install build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build depsinstall build deps egrep "^BuildRequires" collectd −5.5.0/contrib/ redhat/collectd.spec | cut −d `:' −f 2 | tr −d ` t' | sed `s/,/n/' | uniq | tr −d ` n' | tr `,' ` '|xargs yum install −y
  • 17. And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?And in 2016?
  • 19. Pick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better toolsPick better tools • dddddddddddddddddocker instead of vagrant • yyyyyyyyyyyyyyyyyum/rpm helpers commands • rrrrrrrrrrrrrrrrreuse/rebuild fedora packages • ttttttttttttttttthe Cloud ©: copr/travis
  • 20. RPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpersRPM/yum helpers • yyyyyyyyyyyyyyyyyum-builddeps install build dependencies • ssssssssssssssssspectool download the sources
  • 21. Reuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packagesReuse fedora packages • ccccccccccccccccclone spec file • fffffffffffffffffix if needed
  • 22. dockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdocker • dddddddddddddddddocker runs on travis • FFFFFFFFFFFFFFFFFaster than vagrant • uuuuuuuuuuuuuuuuuseful run options: --rm -v -w -t -i --env
  • 23. Docker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" image FROM centos:7 MAINTAINER Julien Pivotto <roidelapluie@inuits .eu> RUN yum install −y /usr/bin/wget RUN yum install −y /usr/bin/spectool RUN yum install −y /usr/bin/rpmbuild RUN yum install −y /usr/bin/yum−builddep RUN yum install −y /usr/bin/make RUN yum install −y epel−release
  • 24. Docker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" imageDocker "el7-build" image docker build −t el7−build .
  • 25. Docker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker runDocker run docker run −e XUID="$(id −u)" −−rm −ti −v $PWD :/work −w /work el7−build ./el7−build.sh • ------------------rm: do not fill my disk • -----------------t: allocate a tty • -----------------i: interactive • -----------------v $PWD:/work mount current dir on host to /work in container • -----------------w /work: use /work as working dir
  • 26. el7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.shel7-build.sh useradd −u ${XUID:−1000} rpm mkdir −p /home/rpm/rpmbuild/SOURCES spectool −C /home/rpm/rpmbuild/SOURCES −g test .spec yum−builddep −y facter.spec chown −R rpm: /home/rpm su − rpm −c "rpmbuild −bb /work/facter.spec" cp −a /home/rpm/rpmbuild/SRPMS/*.src.rpm . cp −a /home/rpm/rpmbuild/RPMS/*/*.rpm .
  • 27. Cloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud tools
  • 28. travis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secretstravis secrets • TTTTTTTTTTTTTTTTTravis "secrets" = encrypted variables • UUUUUUUUUUUUUUUUUse for password, credentials • VVVVVVVVVVVVVVVVVariables or files • TTTTTTTTTTTTTTTTThe travis gem • PPPPPPPPPPPPPPPPPublish to github releases
  • 29. travis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gem travis setup releases
  • 31. coprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcopr • hhhhhhhhhhhhhhhhhttps://copr.fedorainfracloud.org/coprs/roidelapl • fffffffffffffffffedora project • IIIIIIIIIIIIIIIIInfra to build RPM • WWWWWWWWWWWWWWWWWeb interface • pppppppppppppppppublic builds • llllllllllllllllless limitations than travis
  • 32.
  • 33.
  • 34.
  • 35.
  • 36. copr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and travis travis encrypt−file copr−config −−add echo copr−config > .gitignore
  • 37. copr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and traviscopr and travis sudo: required services: − docker script: − make before_install: − openssl aes−256−cbc −K $encrypted_2ec4d63b6867_key −iv $encrypted_2ec4d63b6867_iv −in copr−config.enc −out copr−config −d
  • 38. MakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefile el7: docker run −e XUID="$(shell id −u)" −−rm −v $(shell pwd):/work −w /work −ti fedora:23 ./dockerscript.sh
  • 39. dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2)dockerscript.sh (1/2) #!/bin/bash set −x;set −e dnf install −y /usr/bin/spectool /usr/bin/ rpmbuild /usr/bin/copr−cli /usr/bin/python3 −config useradd −u ${XUID:−1000} bob mkdir −p /home/bob/rpmbuild/SOURCES find . −maxdepth 1 −type f −exec cp −v '{}' / home/bob/rpmbuild/SOURCES ';' spectool −C /home/bob/rpmbuild/SOURCES −g / work/boost.spec chown −R bob: /home/bob
  • 40. dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2)dockerscript.sh (2/2) su − bob −c "rpmbuild −bs /work/boost.spec" copr−cli −−debug −−config ./copr−config build boost /home/bob/rpmbuild/SRPMS/*.src.rpm • rrrrrrrrrrrrrrrrrpmbuild -bs: build only SRPM • cccccccccccccccccopr-cli --debug is to avoid the 10 minutes limitation in travis-ci