RPM-Pakete pflegen
Siehe auch
KOJI
Dieses Kapitel beschreibt, wie man eigene RPM-Pakete unter RHEL erstellt und in einem Repository ablegt. Ausführliche Hilfe erhält man auf der Seite des Fedora-Projektes.
Build-Maschine bereitstellen
Eine separate Build-Maschine unter RHEL 7 richtet man wie folgt ein:
yum -y install prelink rpm-build rpmdevtools
useradd rpmbuild
usermod --comment="RPM Package Builder" --home=/home/rpmbuild rpmbuild
Erforderliche Struktur im Home-Verzeichnis des rpmbuild-Benutzers erstellen lassen:
su - rpmbuild
rpmdev-setuptree
Danach sieht /home/rpmbuild
wie folgt aus:
└── rpmbuild
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
SPEC-Datei definieren
Diese SPEC-Datei kopiert einfach nur einige Dateien aus dem RPM in die angegebenen Zielverzeichnisse. Im Beispiel heisst das Projekt mycompany-myproduct. Die Zielplattform ist auf i386 und Enterprise Linux 6 festgelegt. Vom Prinzip her erinnert die SPEC-Datei an eine Kickstart-Datei:
Name: mycompany-myproduct
Version: 2.1
#Release: 0%{?dist}
Release: 0.el6
Summary: MyCompany Package for MyProduct
Group: Applications/System
License: GPLv2+
Requires: java-1.7.0-openjdk,wget,mailx
%description
# nothing to do here
%files
%defattr(-,root,root,-)
# macros:
# %{_sysconfdir} = /etc
# /%{_lib} = /lib64 for x86_64, otherwise /lib
# %{_libdir} = /usr/lib
%{_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
%{_sysconfdir}/sysconfig/iptables
/%{_lib}/mydriver.so
%{_libdir}/another-driver.so
/root/myproduct-status-report.sh
/opt/mycompany/myproduct/*
%post
/sbin/ldconfig
service iptables restart
chmod +x /root/myproduct-status-report.sh
chmod +x /opt/mycompany/myproduct/bin/*
ln -s /lib/mydriver.so.5.00 /usr/lib/libeToken.so.5
# and more...
%changelog
* Wed Dec 18 2014 Linuxfabrik GmbH, Zurich, Switzerland <info (at) linuxfabrik (dot) ch> 2.1.0
- Bufix-Release; improved connection handling; ...
RPM erstellen und veröffentlichen
Nach der Erstellung/Anpassung der SPEC-Datei kann das RPM gebaut werden.
su - rpmbuild
rm -rf rpmbuild/BUILDROOT/*
Die gewünschten Dateien in /home/rpmbuild/rpmbuild/BUILDROOT
ablegen. Anschliessend die Binary-Pakete bauen (ohne Source-Package).
rpmbuild --target i386 -bb rpmbuild/SPECS/mycompany-myproduct.spec
Unter /home/rpmbuild/rpmbuild/RPMS
findet sich das erzeugte RPM, als Beispiel i386/mycompany-myproduct-2.1-0.el6.i386.rpm
. Dieses lässt sich entweder direkt - ohne Abhängigkeiten aufzulösen - per rpm --install --verbose mycompany-myproduct-2.1-0.el6.i386.rpm
oder mittels yum localinstall mycompany-myproduct-2.1-0.el6.i386.rpm
installieren.
Nach erfolgreichem Test kann man das RPM-Paket von der Build-Maschine auf den Repository-Server kopieren.
scp /home/rpmbuild/rpmbuild/RPMS/i386/* root@repo-server:/var/www/html/packages/rhel/6/i386
Auf dem Repository-Server muss anschliessend die Repository-„Datenbank“ per createrepo
aktualisiert werden, siehe Repo Server.
Built on 2024-09-30