Skip to main content
  1. Posts/

Create RPM Package from Source Code

2 mins
centos centos
Table of Contents

RPM adalah singkatan dari Red Hat Package Manager. Ini dikembangkan oleh Red Hat dan terutama digunakan pada sistem operasi Linux berbasis Red Hat (Fedora, CentOS, RHEL, dll.).

RPM package menggunakan ekstensi .rpm dan berisi kumpulan file seperti berikut:

  • Binary files (nmap, stat, xattr, ssh, sshd, and so on).
  • Configuration files (sshd.conf, updatedb.conf, logrotate.conf, etc.).
  • Documentation files (README, TODO, AUTHOR, etc.).

Membuat RPM package akan memudahkan dalam menginstal package seperti nginx beserta tambahan module yang telah di compile sebelumnya sehingga tidak harus compile secara berulang jika ingin diinstal di mesin atau server yang berbeda.

Install rpmdevtools
#

Instal rpmdevtools dan dependensinya

yum install rpmdevtools gcc gcc-c++ make automake autoconf rpm-build

Create rpmbuild structure
#

Untuk membuat package dengan rpmbuild, buat struktur direktori menggunakan perintah

rpmdev-setuptree
# tree ~/rpmbuild
/root/rpmbuild
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

Build RPM
#

Download source rpm.

yumdownloader --downloaddir /root/nginx-build nginx

Extract package RPM.

rpm2cpio nginx-1.24.0-1.el8.ngx.rpm | cpio -dium

Saya asumsikan Anda sudah menginstall tambahan modul mungkin seperti brotli, pagespeed, atau lainnya.

Lalu pindahkan file biner nginx beserta library modulenya ke /root/nginx-build

cp -p /usr/sbin/nginx /root/nginx-build/usr/sbin/nginx
cp -rp /usr/share/nginx/modules /root/nginx-build/usr/share/nginx/modules
Pastikan path biner, module, seluruh konfigurasi sudah sesuai dengan environment nginx Anda.

Buat file rpm spec seperti contoh berikut.

nano /root/rpmbuild/SPECS/nginx.spec
Name:                   nginx
Summary:                Nginx 1.24.0

Version:                1.24.0
Release:                1

Group:                  BisaCloud
License:                Not Applicable
URL:                    https://bisacloud.com
SOURCE0:                %{name}-%{version}-%{release}.tar.gz
BuildRoot:              %{_tmppath}/%{name}-%{version}-%{release}-root

%description
we are learning how to create rpm package in Linux

%global debug_package %{nil}

%prep
%setup -q

%build
#Empty

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}
cp -a * %{buildroot}


%clean
rm -rf %{buildroot}

%files
%defattr(-,root,root,-)
/usr/share/nginx/modules/ngx_http_brotli_filter_module.so
/usr/share/nginx/modules/ngx_http_brotli_static_module.so
/usr/share/nginx/modules/ngx_http_geoip2_module.so
/usr/share/nginx/modules/ngx_http_modsecurity_module.so
/usr/share/nginx/modules/ngx_http_passenger_module.so
/usr/share/nginx/modules/ngx_pagespeed.so
/usr/sbin/nginx

%changelog
* Mon Oct 16 2023 - v1.24.0-1
- Tambah module

Buat archive .tar.gz dari folder /root/nginx-build.

tar -czf /root/rpmbuild/SOURCES/nginx-1.24.0-1.tar.gz /root/nginx-build/*

Build RPM package.

rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec

Jika berhasil maka file RPM dapat ditemukan pada folder RPMS.

# tree ~/rpmbuild/
/root/rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
│   └── x86_64
│       └── nginx-1.24.0-1.x86_64.rpm
├── SOURCES
│   └── nginx-1.24.0-1.tar.gz
├── SPECS
│   └── nginx.spec
└── SRPMS
    └── nginx-1.24.0-1.src.rpm

Related

RPM-GPG-KEY-AlmaLinux Update Failure
1 min
centos centos almalinux
Configuring Networks on CentOS
1 min
centos centos
Create Bridges on Bonds with and without VLANs using NetworkManager
1 min
centos linux centos
Managing dnf Module Versions
1 min
centos centos
Configuring Network Teaming
2 mins
centos linux centos
Configuring Network Bonding
3 mins
centos linux centos