I wanted to learn how to build an RPM package out of a Python module so, now that I’m playing a bit with OpenStack, I decided to pick up a log merger for OpenStack files and build the corresponding package on my Fedora 24.
First thing is to setup the distribution with the right packages:
[root@localhost ~]$ dnf install @development-tools fedora-packager
[dani@localhost ~]$ rpmdev-setuptree [dani@localhost ~]$ ls rpmbuild/ BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
Now, under the SPECS directory, we need to create the spec file which will include the necessary info to build the RPM:
%global srcname os-log-merger
%global sum OpenStack Log Merger
Name: python-%{srcname}
Version: 1.0.6
Release: 1%{?dist}
Summary: %{sum}
License: Apache
URL: https://github.com/mangelajo/os-log-merger/
Source: https://pypi.python.org/packages/6f/f1/b2a46907086c29725dd0e2296d6f45e7965670a05b43626abc1c81a098a0/os-log-merger-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{srcname}-%{version}-build
BuildArch: noarch
BuildRequires: python2
%description
A tool designed to take a bunch of openstack logs across different projects, and merge them in a single file, ordered by time entries
%package -n %{srcname}
Summary: %{sum}
%{?python_provide:%python_provide python2-%{srcname}}
%description -n %{srcname}
A tool designed to take a bunch of openstack logs across different projects, and merge them in a single file, ordered by time entries
%prep
%autosetup -n %{srcname}-%{version}
%install
%py2_install
%check
%{__python2} setup.py test
%files -n %{srcname}
#%license LICENSE
%doc README.rst
%{python2_sitelib}/*
%{_bindir}/os-log-merger
%{_bindir}/oslogmerger
%{_bindir}/netprobe
%changelog
* Tue Jul 19 2016 dani - 1.0.6-1
- First version of the os-log-merger-package
Once the file is created, it’s time to build the RPM package:
[dani@localhost SPECS]$ rpmbuild -bb os-log-merger.spec .... + umask 022 + cd /home/dani/rpmbuild/BUILD + cd os-log-merger-1.0.6 + /usr/bin/rm -rf /home/dani/rpmbuild/BUILDROOT/python-os-log-merger-1.0.6-1.fc24.x86_64 + exit 0 [dani@localhost SPECS]$ ls -alh ../RPMS/noarch/ total 44K drwxr-xr-x. 2 dani dani 4,0K jul 19 20:35 . drwxr-xr-x. 3 dani dani 4,0K jul 19 20:35 .. -rw-rw-r--. 1 dani dani 34K jul 19 20:47 os-log-merger-1.0.6-1.fc24.noarch.rpm
We can see that the rpmbuild command produced the RPM file inside ~/rpmbuild/RPMS/noarch. Let’s pull the info from it and check whether it’s correct:
[dani@localhost SPECS]$ rpm -qip ../RPMS/noarch/os-log-merger-1.0.6-1.fc24.noarch.rpm Name : os-log-merger Version : 1.0.6 Release : 1.fc24 Architecture: noarch Install Date: (not installed) Group : Unspecified Size : 85356 License : Apache Signature : (none) Source RPM : python-os-log-merger-1.0.6-1.fc24.src.rpm Build Date : mar 19 jul 2016 20:47:42 CEST Build Host : localhost Relocations : (not relocatable) URL : https://github.com/mangelajo/os-log-merger/ Summary : OpenStack Log Merger Description : A tool designed to take a bunch of openstack logs across different projects, and merge them in a single file, ordered by time entries
The last step is trying to install the actual file and execute the module to see if everything went fine:
[root@localhost noarch]$ rpm -qa | grep os-log-merger
[root@localhost noarch]$ rpm -i os-log-merger-1.0.6-1.fc24.noarch.rpm
[root@localhost noarch]$ oslogmerger
usage: oslogmerger [-h] [-v] [--log-base LOG_BASE]
[--log-postfix LOG_POSTFIX] [--alias-level ALIAS_LEVEL]
[--min-memory] [--msg-logs file[:ALIAS] [file[:ALIAS] ...]]
[--timestamp-logs file[:ALIAS] [file[:ALIAS] ...]]
log_file[:ALIAS] [log_file[:ALIAS] ...]
References:
https://fedoraproject.org/wiki/How_to_create_a_GNU_Hello_RPM_package
https://fedoraproject.org/wiki/Packaging:Python