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