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-buildCreate rpmbuild structure #
Untuk membuat package dengan rpmbuild, buat struktur direktori menggunakan perintah
rpmdev-setuptree# tree ~/rpmbuild
/root/rpmbuild
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMSBuild RPM #
Download source rpm.
yumdownloader --downloaddir /root/nginx-build nginxExtract package RPM.
rpm2cpio nginx-1.24.0-1.el8.ngx.rpm | cpio -diumSaya 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/modulesBuat file rpm spec seperti contoh berikut.
nano /root/rpmbuild/SPECS/nginx.specName: 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 moduleBuat 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.specJika 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