on
RPM (.rpm) Paketi Nasıl Oluşturulur
rpmbuild aracını kullanarak RPM paketi derlemek için önce aşağıdaki kurulumlar yapılmalı.
Debian tabanlı dağıtımlar:
sudo apt-get install rpm
Fedora tabanlı dağıtımlar:
sudo yum install rpm-build
Kurulumdan sonra rpmbuild için home dizininde .rpmmacros isimli bir dosya oluşturarak rpmbuild aracına çeşitli ayarlar verilebilir. Paketi oluşturmak için gerekli bileşenleri bulabileceği klasörü rpmbuild aracına göstermek için %_topdir değişkeni kullanılır. .rpmmacros dosyası içerisine aşağıdaki satır eklenerek yapılabilir.
%_topdir    /home/username/rpmbuild
Yukarıda belirtilen klasörü ve içinde olması gerekenleri oluşturmak için:
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
Örnek olarak ilk adım paket için bir klasör oluşturalım.
mkdir ornek-1.0
cd ornek-1.0
Program ornek.py dosyamız olacak.
#!/usr/bin/python
print "Ornek Program"
Şimdi paket klasörünü sıkıştırıyoruz.
tar -czvf ornek-1.0.tar.gz ornek-1.0/
rpmbuild aracı SOURCES dizinine bakacaktır. Yukarıdaki gibi %_topdir makrosunu kullandıysanız dizin ~/rpmbuild/SOURCES olacak. Bu yüzden sıkıştırılan dosyayı bu dizine taşıyoruz.
mv ornek-1.0.tar.gz ~/rpmbuild/SOURCES
Şimdi bir .spec dosyası oluşturmalıyız. Bir SPEC dosyası, yazılımın nasıl oluşturulacağını ve paketleneceğini anlatır.
Name:           ornek
Version:        1.0
Release:        1%{?dist}
Summary:        Ornek program
License:        MIT
URL:            https://oguzhaninan.gitlab.io
Source0:        ornek-1.0.tar.gz
%description
Ornek bir program.
%prep
%setup
%install
mkdir -p %{buildroot}/usr/bin
install -m 0755 ornek.py %{buildroot}/usr/bin/ornek
%files
%{_bindir}/ornek
RPM paketini derlemek için SPEC dizininde aşağıdaki komutu çalıştırılır.
rpmbuild -ba ornek-1.0.spec
Derleme işlemi tamamlandıktan sonra ~/RPMS/x86_64/ornek-1.0-1.x86_64.rpm dizinindeki rpm paketi ile kurulum yapabiliriz.
SPEC dosyasında kullanılabilecek değişkenler:
%{_sysconfdir}        /etc
%{_prefix}            /usr
%{_exec_prefix}       %{_prefix}
%{_bindir}            %{_exec_prefix}/bin
%{_libdir}            %{_exec_prefix}/%{_lib}
%{_libexecdir}        %{_exec_prefix}/libexec
%{_sbindir}           %{_exec_prefix}/sbin
%{_sharedstatedir}    /var/lib
%{_datarootdir}       %{_prefix}/share
%{_datadir}           %{_datarootdir}
%{_includedir}        %{_prefix}/include
%{_infodir}           /usr/share/info
%{_mandir}            /usr/share/man
%{_localstatedir}     /var
%{_initddir}          %{_sysconfdir}/rc.d/init.d
%{_var}               /var
%{_tmppath}           %{_var}/tmp
%{_usr}               /usr
%{_usrsrc}            %{_usr}/src
%{_lib}               lib (lib64 on 64bit multilib systems)
%{_docdir}            %{_datadir}/doc
%{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
$RPM_BUILD_ROOT       %{buildroot}
.rpmmacros dosyasında kullanılabilecek değişkenler.
%{_topdir}            %{getenv:HOME}/rpmbuild
%{_builddir}          %{_topdir}/BUILD
%{_rpmdir}            %{_topdir}/RPMS
%{_sourcedir}         %{_topdir}/SOURCES
%{_specdir}           %{_topdir}/SPECS
%{_srcrpmdir}         %{_topdir}/SRPMS
%{_buildrootdir}      %{_topdir}/BUILDROOT