<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Best-Practice on Janik von Rotz</title>
    <link>https://janikvonrotz.ch/tags/best-practice/</link>
    <description>Recent content in Best-Practice on Janik von Rotz</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 12 Apr 2019 11:38:15 +0200</lastBuildDate>
    <atom:link href="https://janikvonrotz.ch/tags/best-practice/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Package Java Spring Boot service into rpm</title>
      <link>https://janikvonrotz.ch/2019/04/12/package-java-spring-boot-service-into-rpm/</link>
      <pubDate>Fri, 12 Apr 2019 11:38:15 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2019/04/12/package-java-spring-boot-service-into-rpm/</guid>
      <description>&lt;p&gt;This post is a follow-up to my last post &lt;a href=&#34;https://janikvonrotz.ch/2019/03/20/the-final-rpm-packaging-guide/&#34;&gt;The final rpm packaging guide&lt;/a&gt;. What I did not cover in the &amp;ldquo;final&amp;rdquo; guide was how to deal with the common case of packaging a service. In this post we are going to build a simple java spring boot application and package it as a &lt;a href=&#34;https://www.linux.com/learn/understanding-and-using-systemd&#34;&gt;systemd&lt;/a&gt; service into an rpm.&lt;/p&gt;&#xA;&lt;p&gt;To get started I recommend to walk through the test setup section of &lt;a href=&#34;https://janikvonrotz.ch/2019/03/20/the-final-rpm-packaging-guide#test-setup&#34;&gt;my last post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;p&gt;To accomplish this tutorial a few dev tools must be installed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://httpie.org&#34;&gt;httpie&lt;/a&gt; - Modern alternative to wget and curl.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install httpie&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://rpm.org/&#34;&gt;rpmbuild&lt;/a&gt; - Utility to build rpms.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install rpm-build&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/Rpmdevtools&#34;&gt;rpmdev&lt;/a&gt; - Dev utilities to build rpms.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install rpmdevtools&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/rpm-software-management/rpmlint&#34;&gt;rpmlint&lt;/a&gt; - Tool for checking common errors in rpm packages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install rpmlint&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;example-application&#34;&gt;Example Application&lt;/h1&gt;&#xA;&lt;p&gt;We assume that we want to deploy a spring boot application.&lt;/p&gt;&#xA;&lt;p&gt;Lets create one from the spring boot getting started source.&lt;/p&gt;&#xA;&lt;p&gt;Checkout the official getting started repository.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~ &amp;amp;&amp;amp; git clone https://github.com/spring-guides/gs-spring-starter.git&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Navigate into the project.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;gs-spring-starter/initial&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then build and run the jar file.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;./gradlew build &amp;amp;&amp;amp; java -jar build/libs/gs-spring-starter-0.1.0.jar&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Check if you get a response from the spring boot service.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;http GET localhost:8080&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;It should return:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HTTP/1.1 200 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Content-Length: 27&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Content-Type: text/plain;charset=UTF-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Date: Fri, 12 Apr 2019 07:28:37 GMT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Greetings from Spring Boot!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;project-setup&#34;&gt;Project Setup&lt;/h1&gt;&#xA;&lt;p&gt;Create the initial rpm folder structure.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~; mkdir rpmbuild; cd ~/rpmbuild; rpmdev-setuptree&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Copy the jar file into the source folder.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cp ../gs-spring-starter/initial/build/libs/gs-spring-starter-0.1.0.jar SOURCES/&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Our example service will be managed by systemd and thus we also have to package a service file into the rpm.&lt;/p&gt;&#xA;&lt;p&gt;Create the file &lt;code&gt;vim SOURCES/spring-starter.service&lt;/code&gt; with the following content:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Unit]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description=Spring Starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;After=network-online.target&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Service]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type=simple&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WorkingDirectory=/var/opt/spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStart=/usr/bin/java -jar /usr/local/spring-starter/gs-spring-boot.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Restart=on-abort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User=spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group=spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Install]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WantedBy=multi-user.target&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And thats it.&lt;/p&gt;&#xA;&lt;h1 id=&#34;write-the-spec&#34;&gt;Write the Spec&lt;/h1&gt;&#xA;&lt;p&gt;The spec file defines the rpm build process and installation procedure.&lt;/p&gt;&#xA;&lt;p&gt;Create a spec file for our spring starter application.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;vim SPECS/spring-starter.spec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And set the following content:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### HEADER SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name:           spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version:        0.1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Release:        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Summary:        Rpm package &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; Spring Starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;License:        ASL 2.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;URL:            https://spring.io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Source0:        gs-spring-boot-%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;version&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Source1:&#x9;&#x9;&#x9;&#x9;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Requires:       shadow-utils,bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BuildRequires:&#x9;systemd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;?systemd_requires&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BuildArch:      noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%description&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;summary&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# disable debuginfo, which is useless on binary-only packages&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%define debug_package %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;nil&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# do not repack jar files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%define __jar_repack %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;nil&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### PREPARATION SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%prep&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# empty section&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### BUILD SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# empty section&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### PREINSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%pre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create Spring Starter service group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;getent group spring-starter &amp;gt;/dev/null &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; groupadd -f -g &lt;span style=&#34;color:#ae81ff&#34;&gt;30000&lt;/span&gt; -r spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create Spring Starter service user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! getent passwd spring-starter &amp;gt;/dev/null ; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! getent passwd &lt;span style=&#34;color:#ae81ff&#34;&gt;30000&lt;/span&gt; &amp;gt;/dev/null ; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      useradd -r -u &lt;span style=&#34;color:#ae81ff&#34;&gt;30000&lt;/span&gt; -g spring-starter -d /home/spring-starter -s /sbin/nologin -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Spring Starter service account&amp;#34;&lt;/span&gt; spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      useradd -r -g spring-starter -d /home/spring-starter -s /sbin/nologin -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Spring Starter service account&amp;#34;&lt;/span&gt; spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### INSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/usr/local/spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/var/opt/spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;service_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;_unitdir&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# cleanup build root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p  %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create app folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create data folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p $data_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create service folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p $service_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# copy all files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;SOURCE0&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; $app_dir/gs-spring-boot.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;SOURCE1&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; $service_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### FILES SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# define default file attributes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%defattr&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;-,spring-starter,spring-starter,-&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of directories that are packaged&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%dir /usr/local/spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%dir %attr&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;660, -, -&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; /var/opt/spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of files that are packaged&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/local/spring-starter/gs-spring-boot.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/systemd/system/%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### POST INSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%post&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ensure Spring Starter service is enabled and running&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%systemd_post %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;_bindir&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/systemctl enable %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;_bindir&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/systemctl start %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### UNINSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%preun&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ensure Spring Starter service is disabled and stopped&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%systemd_preun %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%postun&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# This is a package remove&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# remove app and data folders&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;rm -rf /usr/local/spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;rm -rf /var/opt/spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# remove Spring Starter service user and group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;userdel spring-starter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# This is a package upgrade&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# do nothing&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;esac&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ensure Spring Starter service restartet if an upgrade is performed&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%systemd_postun_with_restart %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### CHANGELOG SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%changelog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Wed Mar &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2019&lt;/span&gt; Janik vonRotz &amp;lt;contact@janikvonrotz.ch&amp;gt; - 0.1.0-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- First spring-starter package&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I wont go into details about the spec as I already did that in my last post. Not much has changed.&#xA;However, one thing worth to mention is the &lt;code&gt;%define __jar_repack %{nil}&lt;/code&gt; definition. This options disables the compression for &lt;code&gt;.jar&lt;/code&gt; files. If the jar file is compressed it becomes inexecutable.&lt;/p&gt;&#xA;&lt;p&gt;Further, as you might have noticed there are systemd macros, which ensure the service is configured properly. In the post install section two additional commands have been added to enable and start the service. This was done because t the systemd macros do not enable or start service by default.&lt;/p&gt;&#xA;&lt;h1 id=&#34;build&#34;&gt;Build&lt;/h1&gt;&#xA;&lt;p&gt;Build the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;rpmbuild -ba SPECS/spring-starter.spec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lint the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;rpmlint RPMS/noarch/spring-starter-0.1.0-0.noarch.rpm&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Rpmlint is very verbose, most warnings can be ignored.&lt;/p&gt;&#xA;&lt;p&gt;Install the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install RPMS/noarch/spring-starter-0.1.0-0.noarch.rpm -y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Check if the spring starter service is running.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;systemctl status spring-starter&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And have a look at the interface.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;http GET localhost:8080&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;If the service responds you have accomplished the tutorial.&lt;/p&gt;&#xA;&lt;p&gt;Uninstall the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum remove spring-starter -y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And thats it.&lt;/p&gt;&#xA;&lt;p&gt;As usual feel free to ask any question in the comments.&lt;/p&gt;&#xA;&lt;p&gt;See ya 😄&lt;/p&gt;&#xA;&lt;h1 id=&#34;helpers&#34;&gt;Helpers&lt;/h1&gt;&#xA;&lt;p&gt;Output rpm scriptlets.&lt;br&gt;&#xA;&lt;code&gt;rpm -E %{_unitdir}&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;sources&#34;&gt;Sources&lt;/h1&gt;&#xA;&lt;p&gt;Sources that I used to build this tutorial.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_systemd&#34;&gt;Fedora Packaging Guidelines - Systemd&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/Packaging:Systemd&#34;&gt;Fedora Wiki - Packaging Systemd&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/systemd/systemd/blob/master/src/core/macros.systemd.in&#34;&gt;Github - Systemd Macros Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.golinuxhub.com/2018/05/how-to-execute-script-at-pre-post-preun-postun-spec-file-rpm.html&#34;&gt;Golinuxhub - How to execute a script at %pre, %post, %preun or %postun stage (spec file) while installing/upgrading an rpm&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The final rpm packaging guide</title>
      <link>https://janikvonrotz.ch/2019/03/20/the-final-rpm-packaging-guide/</link>
      <pubDate>Wed, 20 Mar 2019 14:22:16 +0100</pubDate>
      <guid>https://janikvonrotz.ch/2019/03/20/the-final-rpm-packaging-guide/</guid>
      <description>&lt;p&gt;A customer required that every component of a software project I worked for is delivered as rpm.&lt;/p&gt;&#xA;&lt;p&gt;This was problematic for &lt;a href=&#34;http://activemq.apache.org/artemis/&#34;&gt;Apache ActiveMQ Artemis&lt;/a&gt; as there is no rpm available.&lt;/p&gt;&#xA;&lt;p&gt;But, the maintainer publishes a binary tarball and this is all we need to build an rpm.&lt;/p&gt;&#xA;&lt;p&gt;So in this post I am going to show how to build an rpm from a tarball and explain the rpm build process in detail.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;I highly recommend to read the &lt;a href=&#34;https://rpm-packaging-guide.github.io/&#34;&gt;RPM Packaging Guide&lt;/a&gt; to get a basic understanding of the rpm build and packaging process.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;p&gt;Lets get started by installing some dev tools.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://httpie.org&#34;&gt;httpie&lt;/a&gt; - Modern alternative to wget and curl.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install httpie&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://rpm.org/&#34;&gt;rpmbuild&lt;/a&gt; - Utility to build rpms.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install rpm-build&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://fedoraproject.org/wiki/Rpmdevtools&#34;&gt;rpmdev&lt;/a&gt; - Dev utilities to build rpms.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install rpmdevtools&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/rpm-software-management/rpmlint&#34;&gt;rpmlint&lt;/a&gt; - Tool for checking common errors in rpm packages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install rpmlint&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;test-setup&#34;&gt;Test Setup&lt;/h1&gt;&#xA;&lt;p&gt;Before we setup the dev chain for the apache Artemis package, let&amp;rsquo;s get familiar with an hello world example.&lt;/p&gt;&#xA;&lt;p&gt;Create a working dir wherever you would like.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;mkdir rpmbuild&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Create a symbolic to the &lt;code&gt;rpmbuild&lt;/code&gt; folder from the home folder.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ln -s /path/to/rpmbuild ~/rpmbuild&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Add default directories to build the RPM&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~/rpmbuild; rpmdev-setuptree&lt;/code&gt;&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Macro Name&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Location&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Purpose&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;%_specdir&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Specification directory&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;~/rpmbuild/SPECS&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;RPM specifications (&lt;code&gt;.spec&lt;/code&gt;) files&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;%_sourcedir&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Source directory&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;~/rpmbuild/SOURCES&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Pristine source package (e.g. tarballs) and patches&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;%_builddir&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Build directory&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;~/rpmbuild/BUILD&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Source files are unpacked and compiled in a subdirectory underneath this.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;%_buildrootdir&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Build root directory&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;~/rpmbuild/BUILDROOT&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Files are installed under here during the &lt;code&gt;%install&lt;/code&gt; stage.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;%_rpmdir&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Binary RPM directory&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;~/rpmbuild/RPMS&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Binary rpms are created and stored under here.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;%_srcrpmdir&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Source RPM directory&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;~/rpmbuild/SRPMS&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Source rpms are created and stored here.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Create spec file for the hello world example.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;touch  ~/rpmbuild/SPECS/hello-world.spec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And set the following content.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name:       hello-world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version:    &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Release:    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Summary:    Most simple RPM package&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;License:    FIXME&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%description&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;This is my first RPM package, which does nothing.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%prep&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# we have no source, so nothing here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &amp;gt; hello-world.sh &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;&amp;lt;EOF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;#!/usr/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;echo Hello world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/usr/bin/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;install -m &lt;span style=&#34;color:#ae81ff&#34;&gt;755&lt;/span&gt; hello-world.sh %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/usr/bin/hello-world.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/bin/hello-world.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%changelog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# let skip this for now&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Build the hello world rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~/rpmbuild; rpmbuild -ba SPECS/hello-world.spec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Install the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install RPMS/x86_64/hello-world-1-0.x86_64.rpm -y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Run hello world.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;hello-world.sh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;If the installation was successful you should see now the output: &lt;code&gt;hello world&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Uninstall the hello world rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum remove hello-world -y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now the hello world command must not be available.&lt;/p&gt;&#xA;&lt;p&gt;I assume that the hello world spec file is easy to understand. The install section might be misleading, but I will cover that in the next chapter.&lt;/p&gt;&#xA;&lt;p&gt;Lets move with the more complex case.&lt;/p&gt;&#xA;&lt;h1 id=&#34;apache-artemis-spec-file&#34;&gt;Apache Artemis Spec File&lt;/h1&gt;&#xA;&lt;p&gt;Create the spec file for the apache Artemis.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;touch  ~/rpmbuild/SPECS/apache-artemis.spec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Navigate into the sources folder.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~/rpmbuild/SOURCES&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And download the apache Artemis binary.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;http -d http://www.pirbot.com/mirrors/apache/activemq/activemq-artemis/2.6.4/apache-artemis-2.6.4-bin.tar.gz&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;sections&#34;&gt;Sections&lt;/h2&gt;&#xA;&lt;p&gt;The spec file has been split into multiple sections. Copy and paste the snippet for every section and read the notes carefully.&lt;/p&gt;&#xA;&lt;h3 id=&#34;header&#34;&gt;Header&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### HEADER SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name:           apache-artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version:        2.6.4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Release:        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Summary:        Rpm package &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; Apache ActiveMQ Artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;License:        ASL 2.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;URL:            http://activemq.apache.org/artemis/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Source0:        %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;-%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;version&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;-bin.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Requires:       shadow-utils,bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BuildArch:      noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%description&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;summary&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# disable debuginfo, which is useless on binary-only packages&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%define debug_package %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;nil&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the header section metadata is defined for the build process and for the package itself.&lt;/p&gt;&#xA;&lt;h3 id=&#34;build&#34;&gt;Build&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### PREPARATION SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%prep&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# unpack tarball&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%setup -q&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### BUILD SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# empty section&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We use a tarball source, so no build step apart from unpacking the file is required. The &lt;code&gt;%setup&lt;/code&gt; is a macro that extracts the tarball.&lt;/p&gt;&#xA;&lt;h3 id=&#34;install&#34;&gt;Install&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### PREINSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%pre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create Apache Artemis service group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;getent group artemis &amp;gt;/dev/null &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; groupadd -f -g &lt;span style=&#34;color:#ae81ff&#34;&gt;30101&lt;/span&gt; -r artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create Apache Artemis service user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! getent passwd artemis &amp;gt;/dev/null ; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! getent passwd &lt;span style=&#34;color:#ae81ff&#34;&gt;30101&lt;/span&gt; &amp;gt;/dev/null ; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      useradd -r -u &lt;span style=&#34;color:#ae81ff&#34;&gt;30101&lt;/span&gt; -g artemis -d /home/artemis -s /sbin/nologin -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apache Artemis service account&amp;#34;&lt;/span&gt; artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      useradd -r -g artemis -d /home/artemis -s /sbin/nologin -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apache Artemis service account&amp;#34;&lt;/span&gt; artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### INSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/opt/app/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/opt/data/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# cleanup build root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p  %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create app folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create data folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p $data_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# copy all files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp LICENSE $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp README.html $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R bin $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R lib $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R schema $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R web $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here we create the Artemis service user and group and copy selected files from the build to buildroot folder.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;%install&lt;/code&gt; section of an rpm spec file is not run on rpm package installation.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;%install&lt;/code&gt; section is run during package creation to install the files that need to be packaged such that the rpmbuild process can package them up.&lt;/p&gt;&#xA;&lt;h3 id=&#34;file&#34;&gt;File&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### FILES SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# define default file attributes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%defattr&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;-,artemis,artemis,-&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of directories that are packaged&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%dir /opt/app/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/bin/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/lib/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/schema/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/web/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%dir %attr&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;660, -, -&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; /opt/data/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of files that are packaged&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%doc /opt/app/artemis/README.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%license /opt/app/artemis/LICENSE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;%files&lt;/code&gt; section lists all the files and directories that the package contains. The uninstallation process for an rpm is simply the removal of all the packaged files.&lt;/p&gt;&#xA;&lt;h3 id=&#34;uninstall&#34;&gt;Uninstall&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### UNINSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%postun&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# This is a package remove&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# remove app and data folders&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;rm -rf /opt/app/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;rm -rf /opt/data/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# remove Apache Artemis service user and group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#x9;&#x9;userdel artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# This is a package upgrade&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# do nothing&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;esac&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If additional work needs to be done before or after the files are removed the &lt;code&gt;%preun&lt;/code&gt; and &lt;code&gt;%postun&lt;/code&gt; scriptlets are available in the spec file for that work.&lt;/p&gt;&#xA;&lt;h3 id=&#34;changelog&#34;&gt;Changelog&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### CHANGELOG SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%changelog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Wed Mar &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2019&lt;/span&gt; Janik vonRotz &amp;lt;contact@janikvonrotz.ch&amp;gt; - 2.6.4-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- Init apache-artemis package&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Every time you make change, that is, whenever version or release of the package is incremented, add a comment to the changelog section&lt;/p&gt;&#xA;&lt;h2 id=&#34;full-spec-file&#34;&gt;Full Spec File&lt;/h2&gt;&#xA;&lt;p&gt;The final spec file should look like this.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### HEADER SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name:           apache-artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version:        2.6.4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Release:        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Summary:        Rpm package &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; Apache ActiveMQ Artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;License:        ASL 2.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;URL:            http://activemq.apache.org/artemis/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Source0:        %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;-%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;version&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;-bin.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Requires:       shadow-utils,bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BuildArch:      x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%description&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;summary&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# disable debuginfo, which is useless on binary-only packages&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%define debug_package %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;nil&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### PREPARATION SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%prep&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# unpack tarball&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%setup -q&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### BUILD SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# empty section&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### PREINSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%pre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create Apache Artemis service group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;getent group artemis &amp;gt;/dev/null &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; groupadd -f -g &lt;span style=&#34;color:#ae81ff&#34;&gt;30101&lt;/span&gt; -r artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create Apache Artemis service user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! getent passwd artemis &amp;gt;/dev/null ; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! getent passwd &lt;span style=&#34;color:#ae81ff&#34;&gt;30101&lt;/span&gt; &amp;gt;/dev/null ; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      useradd -r -u &lt;span style=&#34;color:#ae81ff&#34;&gt;30101&lt;/span&gt; -g artemis -d /home/artemis -s /sbin/nologin -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apache Artemis service account&amp;#34;&lt;/span&gt; artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      useradd -r -g artemis -d /home/artemis -s /sbin/nologin -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apache Artemis service account&amp;#34;&lt;/span&gt; artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### INSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/opt/app/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;/opt/data/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# cleanup build root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p  %&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;buildroot&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create app folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create data folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p $data_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# copy all files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp LICENSE $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp README.html $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R bin $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R lib $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R schema $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R web $app_dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### FILES SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# define default file attributes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%defattr&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;-,artemis,artemis,-&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of directories that are packaged&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%dir /opt/app/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/bin/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/lib/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/schema/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/app/artemis/web/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%dir %attr&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;660, -, -&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; /opt/data/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of files that are packaged&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%doc /opt/app/artemis/README.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%license /opt/app/artemis/LICENSE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### UNINSTALL SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%postun&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# This is a package remove&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# remove app and data folders&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;rm -rf /opt/app/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;rm -rf /opt/data/artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# remove Apache Artemis service user and group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#x9;&#x9;userdel artemis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# This is a package upgrade&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;# do nothing&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;esac&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##### CHANGELOG SECTION #####&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;%changelog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Wed Mar &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2019&lt;/span&gt; Janik vonRotz &amp;lt;contact@janikvonrotz.ch&amp;gt; - 2.6.4-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- Init apache-artemis package&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;Navigate to the rpm build directory&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~/rpmbuild&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Build the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;rpmbuild -ba SPECS/apache-artemis.spec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lint the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;rpmlint RPMS/x86_64/apache-artemis-2.6.4-0.x86_64.rpm &lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;There will be thousands of error and warnings. Ignore them for now.&lt;/p&gt;&#xA;&lt;p&gt;Install the rpm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum install RPMS/x86_64/apache-artemis-2.6.4-0.May.rpm  -y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Create a broker instance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo /opt/app/artemis/bin/artemis create broker /opt/data/artemis/broker --user artemis --password artemis --require-login&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Start the Artemis instance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo &amp;quot;/opt/data/artemis/broker/bin/artemis-service&amp;quot; start&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Open the browser to &lt;a href=&#34;localhost:8161/console&#34;&gt;localhost:8161/console&lt;/a&gt; and check if you can login with &lt;code&gt;artemis:artemis&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If everything worked you can stop the service.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo &amp;quot;/opt/data/artemis/broker/bin/artemis-service&amp;quot; stop&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;And check if there is really no Artemis service running.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ps aux | grep artemis&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Finally remove the package.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo yum remove apache-artemis -y&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h1&gt;&#xA;&lt;p&gt;Apache Artemis has been installed to &lt;code&gt;/opt/app/artemis&lt;/code&gt; and the instance has been created in &lt;code&gt;/opt/data/artemis&lt;/code&gt;. Note that this is not best practice. The &lt;a href=&#34;http://www.pathname.com/fhs/&#34;&gt;Filesystem Hierarchy Standard&lt;/a&gt; tells where to put what.&lt;/p&gt;&#xA;&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h1&gt;&#xA;&lt;p&gt;That&amp;rsquo;s it! Lets recap what we just learned.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First we created the rpmbuild folder structure&lt;/li&gt;&#xA;&lt;li&gt;Then created an example spec file for an hello world script&lt;/li&gt;&#xA;&lt;li&gt;Next we prepared the assets for the Apache Artemis package&lt;/li&gt;&#xA;&lt;li&gt;We defined the spec file for the rpm&lt;/li&gt;&#xA;&lt;li&gt;Following-up we installed the rpm&lt;/li&gt;&#xA;&lt;li&gt;Then created, started, tested and killed an Artemis instance&lt;/li&gt;&#xA;&lt;li&gt;Finally we uninstalled the Apache Artemis package&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is also resembles the life cycle of an rpm service.&lt;/p&gt;&#xA;&lt;p&gt;As usual if you have any questions, concerns or inputs feel free to make a comment.&lt;/p&gt;&#xA;&lt;h1 id=&#34;edits&#34;&gt;Edits&lt;/h1&gt;&#xA;&lt;h2 id=&#34;edit-1-upgrade&#34;&gt;Edit 1: Upgrade&lt;/h2&gt;&#xA;&lt;p&gt;I also investigated the behavior in an upgrade scenario.&lt;/p&gt;&#xA;&lt;p&gt;Assuming the following points apply:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Release or version is incremented&lt;/li&gt;&#xA;&lt;li&gt;A file e.g. README.html has been removed&lt;/li&gt;&#xA;&lt;li&gt;An rpm is already installed&lt;/li&gt;&#xA;&lt;li&gt;Yum does an rpm install&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The results are as followed:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Yum detects the upgrade&lt;/li&gt;&#xA;&lt;li&gt;The README file is removed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It behaves as expected.&lt;/p&gt;&#xA;&lt;h2 id=&#34;edit-2-gradle-project&#34;&gt;Edit 2: Gradle Project&lt;/h2&gt;&#xA;&lt;p&gt;I have created a gradle project to facilitate the build process.&lt;/p&gt;&#xA;&lt;p&gt;Link: &lt;a href=&#34;https://codeberg.org/janikvonrotz/apache-artemis-rpm&#34;&gt;GitHub - Apache Artemis RPM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;sources&#34;&gt;Sources&lt;/h1&gt;&#xA;&lt;p&gt;Sources I relied on to build this tutorials:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.fedoraproject.org/en-US/packaging-guidelines/&#34;&gt;Fedora Packaging Guidelines&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://rpm-packaging-guide.github.io/&#34;&gt;RPM Packaging Guide&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://superuser.com/questions/168461/managing-service-accounts-in-an-rpm-spec&#34;&gt;superuser - Managing service accounts in an RPM spec&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.packagecloud.io/rpm/rpmbuild/packaging/2015/06/29/building-rpm-packages-with-rpmbuild/&#34;&gt;packagecloud - Building RPM packages with rpmbuild&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
