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

Install Specific Version of Package X with Yum Package Manager
·1 min
centos centos
Creating Custom Policy Modules SELinux
·1 min
centos linux centos
Install Repo Raven di CentOS
·1 min
centos linux centos
Find Linux Package That Provides Specific File
·1 min
linux linux ubuntu centos
Install Nginx dengan PHP-FPM dan Userdir
·9 mins
nginx centos linux php nginx
Create Multiple IP Addresses in Linux
·2 mins
linux centos ubuntu linux