RPM experiments

926 views

Published on

Some RPM experiments I made recently

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
926
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

RPM experiments

  1. 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. 2. whoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoami • JJJJJJJJJJJJJJJJJulien Pivotto • rrrrrrrrrrrrrrrrroidelapluie • SSSSSSSSSSSSSSSSSysadmin • FFFFFFFFFFFFFFFFFLOSS since 2004 • IIIIIIIIIIIIIIIIInuits since 2011 • CCCCCCCCCCCCCCCCCentOS CfgMgmtSig
  3. 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. 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. 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. 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. 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. 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?
  9. 9. RPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPMRPM
  10. 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. 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. 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. 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. 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. 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. 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. 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?
  18. 18. PackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglovePackaginglove • hhhhhhhhhhhhhhhhhttp://packaginglove.github.io/packaging- book/ • CCCCCCCCCCCCCCCCCurrently limited to RPM • AAAAAAAAAAAAAAAAA pragmatic approach • DDDDDDDDDDDDDDDDDeb coming • PPPPPPPPPPPPPPPPPlz contribute
  19. 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. 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. 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. 22. dockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdockerdocker • dddddddddddddddddocker runs on travis • FFFFFFFFFFFFFFFFFaster than vagrant • uuuuuuuuuuuuuuuuuseful run options: --rm -v -w -t -i --env
  23. 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. 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. 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. 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. 27. Cloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud toolsCloud tools
  28. 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. 29. travis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gemtravis gem travis setup releases
  30. 30. 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
  31. 31. coprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcoprcopr • hhhhhhhhhhhhhhhhhttps://copr.fedorainfracloud.org/coprs/roidelapl • fffffffffffffffffedora project • IIIIIIIIIIIIIIIIInfra to build RPM • WWWWWWWWWWWWWWWWWeb interface • pppppppppppppppppublic builds • llllllllllllllllless limitations than travis
  32. 32. 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
  33. 33. 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
  34. 34. MakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefileMakefile el7: docker run −e XUID="$(shell id −u)" −−rm −v $(shell pwd):/work −w /work −ti fedora:23 ./dockerscript.sh
  35. 35. 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
  36. 36. 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
  37. 37. ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusion
  38. 38. ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusion • fffffffffffffffffedora: source of pkgs • tttttttttttttttttravis/copr: Public builds • dddddddddddddddddocker: reproducible locally

×