<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Systemd on Janik von Rotz</title>
    <link>https://janikvonrotz.ch/tags/systemd/</link>
    <description>Recent content in Systemd 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/systemd/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>
  </channel>
</rss>
