Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RPMing your apps and tools

Avatar for Joshua Thijssen Joshua Thijssen
February 22, 2014
320

RPMing your apps and tools

Avatar for Joshua Thijssen

Joshua Thijssen

February 22, 2014
Tweet

Transcript

  1. 2 Joshua Thijssen Freelance consultant and trainer @ NoxLogic. Founder

    of the Dutch Web Alliance. Development in PHP, Python, C, Java. Lead developer of Saffire. Blog: http://adayinthelifeof.nl Email: [email protected] Twitter: @jaytaph
  2. ➡ Not only for RedHat ➡ Also all derivates: CentOS,

    Fedora etc ➡ Can also be used on Debian-like systems (but not recommended) 5
  3. 7

  4. ➡ Takes care of dependencies ➡ Less time to install

    ➡ No compilation needed ➡ Easier to maintain ➡ Can be automated easily (puppet, chef etc) 8
  5. [jthijssen@centos65 ~]$ yum search php xdebug Loaded plugins: downloadonly, fastestmirror

    Loading mirror speeds from cached hostfile * base: ftp.tudelft.nl * epel: mirror.muntinternet.net * extras: ftp.tudelft.nl * updates: ftp.tudelft.nl * webtatic: nl.repo.webtatic.com ========================================= N/S Matched: php, xdebug ========================================= php-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php54w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php55w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts Full name and summary matches only, use "search all" for everything. 11
  6. [jthijssen@centos65 ~]$ yum info php-pecl-xdebug Loaded plugins: downloadonly, fastestmirror Loading

    mirror speeds from cached hostfile * base: ftp.tudelft.nl * epel: mirror.muntinternet.net * extras: ftp.tudelft.nl * updates: ftp.tudelft.nl * webtatic: nl.repo.webtatic.com Available Packages Name : php-pecl-xdebug Arch : x86_64 Version : 2.1.4 Release : 1.el6 Size : 143 k Repo : epel Summary : PECL package for debugging PHP scripts URL : http://pecl.php.net/package/xdebug License : PHP Description : The Xdebug extension helps you debugging your script by providing a lot of : valuable debug information. The debug information that Xdebug can provide : includes the following: : : * stack and function traces in error messages with: .... : Xdebug also provides: : : * profiling information for PHP scripts : * code coverage analysis : * capabilities to debug your scripts interactively with a debug client 12
  7. [jthijssen@centos65 ~]$ yum list installed Loaded plugins: downloadonly, fastestmirror Loading

    mirror speeds from cached hostfile * base: ftp.tudelft.nl * epel: mirror.muntinternet.net * extras: ftp.tudelft.nl * updates: ftp.tudelft.nl * webtatic: nl.repo.webtatic.com Installed Packages GeoIP.x86_64 1.4.8-1.el6 @epel MAKEDEV.x86_64 3.24-6.el6 @anaconda-CentOS-201311272149.x86_64/6.5 acl.x86_64 2.2.49-6.el6 @anaconda-CentOS-201311272149.x86_64/6.5 aic94xx-firmware.noarch 30-2.el6 @anaconda-CentOS-201311272149.x86_64/6.5 atmel-firmware.noarch 1.3-7.el6 @anaconda-CentOS-201311272149.x86_64/6.5 attr.x86_64 2.4.44-7.el6 @anaconda-CentOS-201311272149.x86_64/6.5 audit.x86_64 2.2-2.el6 @anaconda-CentOS-201311272149.x86_64/6.5 audit-libs.x86_64 2.2-2.el6 @anaconda-CentOS-201311272149.x86_64/6.5 authconfig.x86_64 6.1.12-13.el6 @anaconda-CentOS-201311272149.x86_64/6.5 b43-openfwwf.noarch 5.2-4.el6 @anaconda-CentOS-201311272149.x86_64/6.5 .... yum-plugin-downloadonly.noarch 1.1.30-14.el6 @base yum-plugin-fastestmirror.noarch 1.1.30-14.el6 @anaconda-CentOS-201311272149.x86_64/6.5 zd1211-firmware.noarch 1.4-4.el6 @anaconda-CentOS-201311272149.x86_64/6.5 zlib.x86_64 1.2.3-29.el6 @anaconda-CentOS-201311272149.x86_64/6.5 zsh.x86_64 4.3.10-7.el6 @base 13
  8. [jthijssen@centos65 ~]$ repoquery -q -l php-pecl-xdebug /etc/php.d/xdebug.ini /usr/bin/debugclient /usr/lib64/php/modules/xdebug.so /usr/share/doc/php-pecl-xdebug-2.1.4

    /usr/share/doc/php-pecl-xdebug-2.1.4/CREDITS /usr/share/doc/php-pecl-xdebug-2.1.4/Changelog /usr/share/doc/php-pecl-xdebug-2.1.4/LICENSE /usr/share/doc/php-pecl-xdebug-2.1.4/NEWS /usr/share/doc/php-pecl-xdebug-2.1.4/README /usr/share/pear/.pkgxml/php-pecl-xdebug.xml 14
  9. [jthijssen@centos65 ~]$ rpm -qf /home/jthijssen/.viminfo file /home/jthijssen/.viminfo is not owned

    by any package 15 [jthijssen@centos65 ~]$ rpm -qf /usr/bin/php php55w-cli-5.5.7-1.w6.x86_64
  10. [jthijssen@centos65 ~]$ yum whatprovides /usr/bin/php Loaded plugins: downloadonly, fastestmirror Loading

    mirror speeds from cached hostfile * base: ftp.tudelft.nl * epel: mirror.muntinternet.net * extras: ftp.tudelft.nl * updates: ftp.tudelft.nl * webtatic: nl.repo.webtatic.com php-cli-5.3.3-26.el6.x86_64 : Command-line interface for PHP Repo : base Matched from: Filename : /usr/bin/php php55w-cli-5.5.8-1.w6.x86_64 : Command-line interface for PHP Repo : webtatic Matched from: Filename : /usr/bin/php php-cli-5.3.3-27.el6_5.x86_64 : Command-line interface for PHP Repo : updates Matched from: Filename : /usr/bin/php .. php55w-cli-5.5.7-1.w6.x86_64 : Command-line interface for PHP Repo : installed Matched from: Other : Provides-match: /usr/bin/php 16
  11. [jthijssen@centos65 ~]$ yum whatprovides /usr/bin/php --disablerepo=* Loaded plugins: downloadonly, fastestmirror

    Loading mirror speeds from cached hostfile php55w-cli-5.5.7-1.w6.x86_64 : Command-line interface for PHP Repo : installed Matched from: Other : Provides-match: /usr/bin/php 17
  12. [jthijssen@centos65 ~]$ sudo yum install screen Loaded plugins: downloadonly, fastestmirror

    Loading mirror speeds from cached hostfile * base: ftp.tudelft.nl * epel: be.mirror.eurid.eu * extras: ftp.tudelft.nl * updates: ftp.tudelft.nl * webtatic: us-east.repo.webtatic.com Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package screen.x86_64 0:4.0.3-16.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================= Package Arch Version Repository Size ============================================================================================================================= Installing: screen x86_64 4.0.3-16.el6 base 494 k Transaction Summary ============================================================================================================================= Install 1 Package(s) Total download size: 494 k Installed size: 795 k Is this ok [y/N]: y Downloading Packages: screen-4.0.3-16.el6.x86_64.rpm | 494 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : screen-4.0.3-16.el6.x86_64 1/1 Verifying : screen-4.0.3-16.el6.x86_64 1/1 Installed: screen.x86_64 0:4.0.3-16.el6 Complete! 18
  13. [jthijssen@centos65 ~]$ sudo yum remove screen Loaded plugins: downloadonly, fastestmirror

    Setting up Remove Process Resolving Dependencies --> Running transaction check ---> Package screen.x86_64 0:4.0.3-16.el6 will be erased --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================= Package Arch Version Repository Size ============================================================================================================================= Removing: screen x86_64 4.0.3-16.el6 @base 795 k Transaction Summary ============================================================================================================================= Remove 1 Package(s) Installed size: 795 k Is this ok [y/N]: y Downloading Packages: Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Erasing : screen-4.0.3-16.el6.x86_64 1/1 Verifying : screen-4.0.3-16.el6.x86_64 1/1 Removed: screen.x86_64 0:4.0.3-16.el6 Complete! 19
  14. [jthijssen@centos65 ~]$ sudo yum install tig sudo yum install tig

    Loaded plugins: downloadonly, fastestmirror Loading mirror speeds from cached hostfile * base: ftp.tudelft.nl * epel: be.mirror.eurid.eu * extras: ftp.tudelft.nl * updates: ftp.tudelft.nl * webtatic: us-east.repo.webtatic.com Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package tig.x86_64 0:0.17-1.el6 will be installed --> Processing Dependency: git for package: tig-0.17-1.el6.x86_64 --> Running transaction check ---> Package git.x86_64 0:1.7.1-3.el6_4.1 will be installed --> Processing Dependency: perl-Git = 1.7.1-3.el6_4.1 for package: git-1.7.1-3.el6_4.1.x86_64 --> Processing Dependency: rsync for package: git-1.7.1-3.el6_4.1.x86_64 --> Processing Dependency: perl(Git) for package: git-1.7.1-3.el6_4.1.x86_64 --> Processing Dependency: perl(Error) for package: git-1.7.1-3.el6_4.1.x86_64 --> Processing Dependency: openssh-clients for package: git-1.7.1-3.el6_4.1.x86_64 --> Running transaction check ---> Package openssh-clients.x86_64 0:5.3p1-94.el6 will be installed ---> Package perl-Error.noarch 1:0.17015-4.el6 will be installed ---> Package perl-Git.noarch 0:1.7.1-3.el6_4.1 will be installed ---> Package rsync.x86_64 0:3.0.6-9.el6_4.1 will be installed --> Finished Dependency Resolution Dependencies Resolved ... 20
  15. ... ============================================================================================================================= Package Arch Version Repository Size ============================================================================================================================= Installing: tig

    x86_64 0.17-1.el6 epel 103 k Installing for dependencies: git x86_64 1.7.1-3.el6_4.1 base 4.6 M openssh-clients x86_64 5.3p1-94.el6 base 402 k perl-Error noarch 1:0.17015-4.el6 base 29 k perl-Git noarch 1.7.1-3.el6_4.1 base 28 k rsync x86_64 3.0.6-9.el6_4.1 base 334 k Transaction Summary ============================================================================================================================= Install 6 Package(s) Total download size: 5.5 M Installed size: 17 M Is this ok [y/N]: y Downloading Packages: (1/6): git-1.7.1-3.el6_4.1.x86_64.rpm | 4.6 MB 00:02 (2/6): openssh-clients-5.3p1-94.el6.x86_64.rpm | 402 kB 00:00 (3/6): perl-Error-0.17015-4.el6.noarch.rpm | 29 kB 00:00 (4/6): perl-Git-1.7.1-3.el6_4.1.noarch.rpm | 28 kB 00:00 (5/6): rsync-3.0.6-9.el6_4.1.x86_64.rpm | 334 kB 00:00 (6/6): tig-0.17-1.el6.x86_64.rpm | 103 kB 00:00 ----------------------------------------------------------------------------------------------------------------------------- Total 1.7 MB/s | 5.5 MB 00:03 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded ... 21
  16. ... Running Transaction Installing : 1:perl-Error-0.17015-4.el6.noarch 1/6 Installing : openssh-clients-5.3p1-94.el6.x86_64

    2/6 Installing : rsync-3.0.6-9.el6_4.1.x86_64 3/6 Installing : perl-Git-1.7.1-3.el6_4.1.noarch 4/6 Installing : git-1.7.1-3.el6_4.1.x86_64 5/6 Installing : tig-0.17-1.el6.x86_64 6/6 Verifying : 1:perl-Error-0.17015-4.el6.noarch 1/6 Verifying : perl-Git-1.7.1-3.el6_4.1.noarch 2/6 Verifying : git-1.7.1-3.el6_4.1.x86_64 3/6 Verifying : rsync-3.0.6-9.el6_4.1.x86_64 4/6 Verifying : tig-0.17-1.el6.x86_64 5/6 Verifying : openssh-clients-5.3p1-94.el6.x86_64 6/6 Installed: tig.x86_64 0:0.17-1.el6 Dependency Installed: git.x86_64 0:1.7.1-3.el6_4.1 openssh-clients.x86_64 0:5.3p1-94.el6 perl-Error.noarch 1:0.17015-4.el6 perl-Git.noarch 0:1.7.1-3.el6_4.1 rsync.x86_64 0:3.0.6-9.el6_4.1 Complete! [jthijssen@centos65 ~]$ 22
  17. [jthijssen@centos65 ~]$ sudo yum history list all Loaded plugins: downloadonly,

    fastestmirror ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 18 | <jthijssen> | 2014-02-03 13:06 | Erase | 1 17 | <jthijssen> | 2014-02-03 13:05 | Install | 6 16 | <jthijssen> | 2014-02-03 13:03 | Erase | 1 15 | <jthijssen> | 2014-02-03 13:02 | Install | 1 14 | <jthijssen> | 2014-02-03 12:56 | Install | 1 13 | <jthijssen> | 2013-12-14 22:52 | Install | 1 12 | <jthijssen> | 2013-12-14 22:16 | Install | 1 EE 11 | <jthijssen> | 2013-12-14 22:13 | Install | 3 < 10 | <jthijssen> | 2013-12-14 22:05 | Install | 1 > 9 | <jthijssen> | 2013-12-14 21:41 | Install | 7 8 | <jthijssen> | 2013-12-14 21:37 | Install | 4 7 | <jthijssen> | 2013-12-14 21:35 | Install | 13 6 | <jthijssen> | 2013-12-14 21:34 | I, U | 11 < 5 | <jthijssen> | 2013-12-14 21:33 | Install | 1 > 4 | <jthijssen> | 2013-12-14 21:25 | Install | 1 3 | root <root> | 2013-12-14 21:16 | Install | 1 2 | root <root> | 2013-12-14 21:16 | Install | 9 1 | System <unset> | 2013-12-14 20:48 | Install | 217 23
  18. [jthijssen@centos65 ~]$ sudo yum history package-list tig Loaded plugins: downloadonly,

    fastestmirror ID | Action(s) | Package ------------------------------------------------------------------------------- 18 | Erase | tig-0.17-1.el6.x86_64 17 | Install | tig-0.17-1.el6.x86_64 history package-list 24
  19. [jthijssen@centos65 ~]$ sudo yum history info 17 Loaded plugins: downloadonly,

    fastestmirror Transaction ID : 17 Begin time : Mon Feb 3 13:05:11 2014 Begin rpmdb : 263:a2126d6ecaf16f8878c953baeef645c1e06ddf3c End time : 13:05:14 2014 (3 seconds) End rpmdb : 269:f9b58f8d062d3696ce529614b6c2a36f3e992f4b User : <jthijssen> Return-Code : Success Command Line : install tig Transaction performed with: Installed rpm-4.8.0-37.el6.x86_64 @anaconda-CentOS-201311272149.x86_64/6.5 Installed yum-3.2.29-40.el6.centos.noarch @anaconda-CentOS-201311272149.x86_64/6.5 Installed yum-plugin-fastestmirror-1.1.30-14.el6.noarch @anaconda-CentOS-201311272149.x86_64/6.5 Packages Altered: Dep-Install git-1.7.1-3.el6_4.1.x86_64 @base Dep-Install openssh-clients-5.3p1-94.el6.x86_64 @base Dep-Install perl-Error-1:0.17015-4.el6.noarch @base Dep-Install perl-Git-1.7.1-3.el6_4.1.noarch @base Dep-Install rsync-3.0.6-9.el6_4.1.x86_64 @base Install tig-0.17-1.el6.x86_64 @epel history info 25
  20. ➡ Sources ➡ Patch files ➡ Any other stuff you

    like to add (docs, examples, custom stuff) ➡ SPEC file 28
  21. ➡ Building is pretty easy, ➡ as long as you

    get your SPEC file correct :/ ➡ Build with “rpmbuild” ➡ Don’t build as root! 29
  22. ➡ The SPEC file is a “script / config” file

    that tells rpmbuild how to build the RPM files. ➡ Can also be used for building SOURCE RPM files (that can be used to build the RPMs yourself) 32
  23. 34 ➡ Copy your source-files into SOURCES (but probably want

    to use urls in your spec files) ➡ Copy your spec-files into SPECS ➡ If you install a SOURCE RPM, this will be done for you.
  24. Name: autobugfix Version: 1.0 Release: 1%{?dist} Summary: Fixes bugs automatically,

    so you won't have to Group: Development/Tools License: BSD URL: https://autobugfix.noxlogic.nl Source0: http://autobugfix.noxlogic.nl/download/%{name}-%{version}.tar.gz Patch1: http://autobugfix.noxlogic.nl/download/hotfix-001.patch BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildArch: noarch Packager: Joshua Thijssen <[email protected]> Requires: php-common %description This application will fix bugs while you type. Very useful when editting your code on your production platforms. .... 36
  25. ... %prep %setup -q %patch1 %build %install %{__rm} -rf %{buildroot}

    %{__mkdir} -p %{buildroot}/usr/local/noxlogic/bin %{__install} -m 755 bin/autobugfix %{buildroot}/usr/local/noxlogic/bin/autobugfix %{__mkdir} -p %{buildroot}%{_mandir}/man1 %{__cp} man/autobugfix.1 %{buildroot}%{_mandir}/man1 %clean %{__rm} -rf %{buildroot} ... 37
  26. ... %files %defattr(-,root,root,-) %doc doc/* %dir /usr/local %dir /usr/local/noxlogic %dir

    /usr/local/noxlogic/bin /usr/local/noxlogic/bin/autobugfix %{_mandir}/man1/autobugfix.1.gz %changelog 38
  27. [jthijssen@centos65 autobugfix]$ rpm -qip ~/rpmbuild/RPMS/noarch/autobugfix-1.0-1.el6.noarch.rpm Name : autobugfix Relocations: (not

    relocatable) Version : 1.0 Vendor: (none) Release : 1.el6 Build Date: Mon 03 Feb 2014 03:24:42 PM CET Install Date: (not installed) Build Host: centos65.virtualbox.local Group : Development/Tools Source RPM: autobugfix-1.0-1.el6.src.rpm Size : 1082 License: BSD Signature : (none) Packager : Joshua Thijssen <[email protected]> URL : https://autobugfix.noxlogic.nl Summary : Fixes bugs automatically, so you won't have to Description : This application will fix bugs while you type. Very useful when editting your code on your production platforms. 41
  28. 43 # %define nginx_home %{_localstatedir}/cache/nginx %define nginx_user nginx %define nginx_group

    nginx Summary: High performance web server Name: nginx Version: 1.4.5 Release: 1%{?dist}.ngx Vendor: nginx inc. URL: http://nginx.org/ Source0: http://nginx.org/download/%{name}-%{version}.tar.gz Source1: logrotate Source2: nginx.init Source3: nginx.sysconf Source4: nginx.conf Source5: nginx.vh.default.conf Source6: nginx.vh.example_ssl.conf Source7: nginx.suse.init License: 2-clause BSD-like license %if 0%{?suse_version} Group: Productivity/Networking/Web/Servers %else Group: System Environment/Daemons %endif BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: zlib-devel BuildRequires: pcre-devel BuildRequires: perl %if 0%{?suse_version} BuildRequires: libopenssl-devel Requires(pre): pwdutils %else BuildRequires: openssl-devel Requires: initscripts >= 8.36 Requires(pre): shadow-utils Requires(post): chkconfig %endif
  29. 44 %files debug %attr(0755,root,root) %{_sbindir}/nginx.debug %pre # Add the "nginx"

    user getent group %{nginx_group} >/dev/null || groupadd -r %{nginx_group} getent passwd %{nginx_user} >/dev/null || \ useradd -r -g %{nginx_group} -s /sbin/nologin \ -d %{nginx_home} -c "nginx user" %{nginx_user} exit 0 %post # Register the nginx service if [ $1 -eq 1 ]; then /sbin/chkconfig --add nginx # print site info cat <<BANNER ---------------------------------------------------------------------- Thanks for using nginx! Please find the official documentation for nginx here: * http://nginx.org/en/docs/ Commercial subscriptions for nginx are available on: * http://nginx.com/products/ ---------------------------------------------------------------------- BANNER
  30. 46 ➡ yum install createrepo ➡ create structure on public

    web dir ➡ copy files over ➡ “createrepo” on each directory
  31. 49 # # /etc/yum.repos.d/noxlogic # [noxlogic] name=NoxLogic Packages baseurl=http://repo.noxlogic.nl/noxlogic/RPMS/$basearch enabled=1

    gpgcheck=0 [noxlogic-source] name=NoxLogic Source Packages baseurl=http://repo.noxlogic.nl/noxlogic/SRPMS enabled=0 gpgcheck=0
  32. 50 [jthijssen@centos65 ~]$ sudo yum repolist Loaded plugins: downloadonly, fastestmirror

    Loading mirror speeds from cached hostfile * base: centos.weepeetelecom.nl * epel: mirror.proserve.nl * extras: centos.mirror1.spango.com * updates: mirror.widexs.nl * webtatic: nl.repo.webtatic.com repo id repo name status base CentOS-6 - Base 6,367 epel Extra Packages for Enterprise Linux 6 - x86_64 10,433 extras CentOS-6 - Extras 14 noxlogic NoxLogic Packages 2 updates CentOS-6 - Updates 414 webtatic Webtatic Repository EL6 - x86_64 166 repolist: 17,396
  33. 51 [jthijssen@centos65 ~]$ yum --disablerepo=* --enablerepo=noxlogic list available Loaded plugins:

    downloadonly, fastestmirror Loading mirror speeds from cached hostfile Available Packages autobugfix.noarch 1.0-2.el6 noxlogic phpmyadmin.noarch 2.11.9.6-1.rf noxlogic
  34. [root@centos65 noxlogic]# yum info autobugfix Loaded plugins: downloadonly, fastestmirror Loading

    mirror speeds from cached hostfile * base: mirror.colocenter.nl * epel: mirror.1000mbps.com * extras: mirror.colocenter.nl * updates: centos.mirror.transip.nl * webtatic: nl.repo.webtatic.com Available Packages Name : autobugfix Arch : noarch Version : 1.0 Release : 1.el6 Size : 3.9 k Repo : noxlogic Summary : Fixes bugs automatically, so you won't have to URL : https://autobugfix.noxlogic.nl License : BSD Description : This application will fix bugs while you type. Very useful when editting your code on your : production platforms. 52
  35. [root@centos65 noxlogic]# yum install autobugfix .... ================================================================================================================= Package Arch Version

    Repository Size ================================================================================================================= Installing: autobugfix noarch 1.0-1.el6 noxlogic 3.9 k Transaction Summary ================================================================================================================= Install 1 Package(s) Total size: 3.9 k Installed size: 1.1 k Is this ok [y/N]: y Downloading Packages: Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : autobugfix-1.0-1.el6.noarch 1/1 Verifying : autobugfix-1.0-1.el6.noarch 1/1 Installed: autobugfix.noarch 0:1.0-1.el6 Complete! 53
  36. ➡ Some tips & tricks: ➡ when “developing” to clear

    your yum cache: yum clean all ➡ Or wait (default) 90 minutes before new updates will be visible. ➡ Make sure you copy and “createrepo” after creating packages. 54
  37. ➡ You probably want / need to: ➡ create a

    “repopackage”. RPM that manually installs the repositories inside yum.repos.d ➡ Really sign your packages as well! 55