SLIDE 1
RPM Packaging How software delivery works and why RPM packaging is - - PowerPoint PPT Presentation
RPM Packaging How software delivery works and why RPM packaging is - - PowerPoint PPT Presentation
RPM Packaging How software delivery works and why RPM packaging is more current than ever Fabio Alessandro Locati 26 October 2016 Outline Intro Deployments RPM Processes RPM and Docker 1 Intro About me RPM user since 2001 IT
SLIDE 2
SLIDE 3
Intro
SLIDE 4
About me
- RPM user since 2001
- IT Consultant since 2004
- RPMs creator since 2013
2
SLIDE 5
About me
- RPM user since 2001
- IT Consultant since 2004
- RPMs creator since 2013
2
SLIDE 6
About me
- RPM user since 2001
- IT Consultant since 2004
- RPMs creator since 2013
2
SLIDE 7
About me
- RPM user since 2001
- IT Consultant since 2004
- RPMs creator since 2013
2
SLIDE 8
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 9
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 10
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 11
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 12
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 13
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 14
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 15
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 16
Deployment in the past
- Mayority of application needed to be deployed on a single system
- Annual/Bi-annual
- All hands on deck
- Devs ready to patch
- Ops ready to deploy work-around
- Usually performed during night-time
- Hours of downtime
- Very expensive deployments
3
SLIDE 17
Today expectations
- Deploy multiple times every day
- Cheap deployments
- No down time
- Need of mass deployment (tens/hundreds/thousands of systems)
- Horizontal (dynamic) scalability
4
SLIDE 18
Today expectations
- Deploy multiple times every day
- Cheap deployments
- No down time
- Need of mass deployment (tens/hundreds/thousands of systems)
- Horizontal (dynamic) scalability
4
SLIDE 19
Today expectations
- Deploy multiple times every day
- Cheap deployments
- No down time
- Need of mass deployment (tens/hundreds/thousands of systems)
- Horizontal (dynamic) scalability
4
SLIDE 20
Today expectations
- Deploy multiple times every day
- Cheap deployments
- No down time
- Need of mass deployment (tens/hundreds/thousands of systems)
- Horizontal (dynamic) scalability
4
SLIDE 21
Today expectations
- Deploy multiple times every day
- Cheap deployments
- No down time
- Need of mass deployment (tens/hundreds/thousands of systems)
- Horizontal (dynamic) scalability
4
SLIDE 22
Today expectations
- Deploy multiple times every day
- Cheap deployments
- No down time
- Need of mass deployment (tens/hundreds/thousands of systems)
- Horizontal (dynamic) scalability
4
SLIDE 23
Deployments
SLIDE 24
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 25
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 26
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 27
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 28
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 29
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 30
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 31
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 32
Items that could be involved in deployments
- Code
- Source Control System (SCM): git, hg, svn, cvs
- Build system: Koji, Jenkins, Shell
- Software packaging system: RPM, DEB, Docker, WAR, generic archive
- Test system: Bodhi, Jenkins
- Environment packaging system: Docker, PyEnv
- Orchestration tool: Ansible, Puppet, Salt, Chef, Kubernetes
- Execution environment: Native OS, OpenStack, OpenShift, Docker, runc
5
SLIDE 33
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 34
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 35
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 36
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 37
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 38
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 39
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 40
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 41
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 42
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 43
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 44
RPM as software packaging system
- Advantages
- Very well known format
- Open Standard
- Clear distinction between compile environment and run environment
- Easy to integrate with any kind of environment
- Very good at resolving dependencies
- Checksum of all files
- Very rigid policies
- Disadvantages
- Heavily connected with RPM-based distro (Fedora, RHEL, OEL, SLES, OpenSUSE,
CentOS, SL)
- Very rigid policies
6
SLIDE 45
RPM components
- SPEC file
- Sources files (at least 1)
- Patches (eventually)
7
SLIDE 46
RPM components
- SPEC file
- Sources files (at least 1)
- Patches (eventually)
7
SLIDE 47
RPM components
- SPEC file
- Sources files (at least 1)
- Patches (eventually)
7
SLIDE 48
RPM components
- SPEC file
- Sources files (at least 1)
- Patches (eventually)
7
SLIDE 49
RPM Processes
SLIDE 50
RPM build process
- Fetch of the SPEC file
- Fetch of sources/patches
- Creation of the .src.rpm file
- Creation of binaries .rpm files
8
SLIDE 51
RPM build process
- Fetch of the SPEC file
- Fetch of sources/patches
- Creation of the .src.rpm file
- Creation of binaries .rpm files
8
SLIDE 52
RPM build process
- Fetch of the SPEC file
- Fetch of sources/patches
- Creation of the .src.rpm file
- Creation of binaries .rpm files
8
SLIDE 53
RPM build process
- Fetch of the SPEC file
- Fetch of sources/patches
- Creation of the .src.rpm file
- Creation of binaries .rpm files
8
SLIDE 54
RPM build process
- Fetch of the SPEC file
- Fetch of sources/patches
- Creation of the .src.rpm file
- Creation of binaries .rpm files
8
SLIDE 55
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 56
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 57
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 58
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 59
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 60
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 61
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 62
Fedora pipeline
- SPEC file, additional sources, and patches in git repo
- Upstream source in cache system
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
9
SLIDE 63
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 64
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 65
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 66
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 67
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 68
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 69
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 70
Example RPM pipeline 1
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Promotion to Bodhi testing branch
- Automated tests by Bodhi and AutoQA
- Manual testing
- Promotion to Bodhi stable branch
- Simple upgrade of live system (yum update -y PACKAGE)
10
SLIDE 71
Example RPM pipeline 2
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Creation of a Docker image
- Automated tests
- Manual testing
- Propagate the new Docker image
11
SLIDE 72
Example RPM pipeline 2
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Creation of a Docker image
- Automated tests
- Manual testing
- Propagate the new Docker image
11
SLIDE 73
Example RPM pipeline 2
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Creation of a Docker image
- Automated tests
- Manual testing
- Propagate the new Docker image
11
SLIDE 74
Example RPM pipeline 2
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Creation of a Docker image
- Automated tests
- Manual testing
- Propagate the new Docker image
11
SLIDE 75
Example RPM pipeline 2
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Creation of a Docker image
- Automated tests
- Manual testing
- Propagate the new Docker image
11
SLIDE 76
Example RPM pipeline 2
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Creation of a Docker image
- Automated tests
- Manual testing
- Propagate the new Docker image
11
SLIDE 77
Example RPM pipeline 2
- SPEC file, additional sources, and patches in git repo
- Build in Koji
- Creation of a Docker image
- Automated tests
- Manual testing
- Propagate the new Docker image
11
SLIDE 78
RPM and Docker
SLIDE 79
RPM and Docker
- RPM work very well in Docker environments
- Installing RPMs allow a cleaner Docker file and image
- RPMs can be deployed within or without Docker
12
SLIDE 80
RPM and Docker
- RPM work very well in Docker environments
- Installing RPMs allow a cleaner Docker file and image
- RPMs can be deployed within or without Docker
12
SLIDE 81
RPM and Docker
- RPM work very well in Docker environments
- Installing RPMs allow a cleaner Docker file and image
- RPMs can be deployed within or without Docker
12
SLIDE 82
RPM and Docker
- RPM work very well in Docker environments
- Installing RPMs allow a cleaner Docker file and image
- RPMs can be deployed within or without Docker
12
SLIDE 83
Docker example
RUN dnf install -y tar make gcc ruby ruby-devel rubygems graphviz \ rubygem-nokogiri unzip findutils which wget python-devel \ zlib-devel libjpeg-devel redhat-rpm-config patch \ && dnf clean packages \ && gem install --no-ri --no-rdoc asciidoctor --version \ $ASCIIDOCTOR_VERSION \ && gem install --no-ri --no-rdoc asciidoctor-pdf --version \ 1.5.0.alpha.11 \ && gem install --no-ri --no-rdoc slim \ && (curl -LkSs https://api.github.com/repos/asciidoctor \ | tar xfz - -C $BACKENDS --strip-components=1) \ && wget https://bitbucket.org/pypa/setuptools/raw/bootstrap \
- O - | python \
&& easy_install actdiag
13
SLIDE 84
Docker example with RPM
RUN dnf install -y rubygem-asciidoctor-pdf \ && dnf clean packages
14
SLIDE 85
Size of the images
- Fedora base image: 204MB
- First image: 776MB
- Second image: 238MB
15
SLIDE 86
Size of the images
- Fedora base image: 204MB
- First image: 776MB
- Second image: 238MB
15
SLIDE 87
Size of the images
- Fedora base image: 204MB
- First image: 776MB
- Second image: 238MB
15
SLIDE 88
Additional resources
- Laboratorio ICT, 14:00 - Come pacchettizzare applicazioni in formato RPM
- Slides: https://slides.fale.io/20161026-en-rpm.pdf
- Official website: http://rpm.org
- Fedora guide:
https://fedoraproject.org/wiki/How_to_create_an_RPM_package
- RPM Guide: http://rpm-guide.readthedocs.io