thelinux.pro/_posts/2019-09-23-building-simple-...

94 lines
2.0 KiB
Markdown

---
layout: post
title: "Building Simple RPM Packages"
date: 2019-09-23 15:00:00 -0400
tags: [linux, rpm, packaging, rpmbuild]
excerpt: "A very simple exercise to build a basic RPM package"
categories: linux rpm packaging
---
A very simple exercise to build a basic RPM package. We're not going to dive into package signing, or some of the lower level topics of packaging RPM's - rather, our objective for now is to simply generate a file and drop it on the filesystem.
In this case, we don't care about the platform, the OS release, or the architecture.
## Install dependencies
{% highlight bash %}
$ yum install gcc rpm-build \
rpm-devel rpmlint make python \
bash coreutils diffutils patch \
rpmdevtools
{% endhighlight %}
## Sample Spec File
{% highlight bash %}
Name: local-release
Version: 2019.09
Release: 8
Summary: local patching cycle release
License: GPL
URL: https://example.com
BuildArch: noarch
%description
Local release: 2019.09.2
%build
cat > local_release <<EOF
2019.09.8
EOF
%install
install -m 0775 -d $RPM_BUILD_ROOT/etc
install -m 0644 local_release $RPM_BUILD_ROOT/etc/local_release
%clean
rm -rf $RPM_BUILD_ROOT
%files
/etc/local_release
%doc
%changelog
* Mon Sep 23 2019 Linux Team <linux-team@example.com>
- Release cycle 2019.09
{% endhighlight %}
Save this file as `local-release.spec`
## Setup build tree
{% highlight bash %}
$ rpmdev-setuptree
{% endhighlight %}
This will result in a structure like this:
{% highlight bash %}
$ tree rpmbuild/
rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
{% endhighlight %}
## Build the RPM
{% highlight bash %}
$ rpmbuild -ba local-release.spec
{% endhighlight %}
This will result in:
{% highlight bash %}
rpmbuild/RPMS/noarch/local-release-2019.09-8.noarch.rpm
{% endhighlight %}
## Install & Validate
{% highlight bash %}
$ yum localinstall rpmbuild/RPMS/noarch/local-release-2019.09-8.noarch.rpm
$ cat /etc/local_release
{% endhighlight %}