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
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