Dit is een oude revisie van het document!
voor deze acties heb je de volgende tools nodig; tar, gzip, rpmbuild. Installeer die door:
sudo yum install -y rpm-build redhat-rpm-config rpmdevtools tar gzip
de rpmbuild tool verwacht een bepaalde directory structuur waarin de files voor de te bouwen rpm zich bevinden, maak deze door:
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
rpmbiuld haalt een aantal instellingen uit de file .rpmmacros leg de basis hiervoor door:
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
rpmbuild verwacht een tar.gz file met daarin de directory structuur en files zoals deze op het root filesysteem moeten worden geplaatst.
In dit voorbeeld, een simpele agent:
mkdir -p ~/appagent-1.0/usr/sbin/
mkdir -p ~/appagent-1.0/usr/lib/systemd/system/
plaats vervolgens de binary en de systemd unit file daar:
cp appagent ~/appagent-1.0/usr/sbin/
cp appagent.service ~/appagent-1.0/usr/lib/systemd/system/
zet de permissies zoals die in de eindsituatie moeten zijn:
chmod 755 ~/appagent-1.0/usr/sbin/appagent
chmod 644 ~/appagent-1.0/usr/lib/systemd/system/appagent.service
maak er een tarball van:
cd ~/
tar -zcvf appagent-1.0.tar.gz ./appagent-1.0
en plaats die in de rpmbuild filestructuur:
cp appagent-1.0.tar.gz ~/rpmbuild/SOURCES/
Van het hele proces is dit het meest ingewikkeld, documentatie hierover is vaak gemaakt voor complete compilaties of niet up to date voor de laatste versie van rpm.
maak in de directory ~/rpmbuild/SPECS de file appagent.spec aan met daarin:
# Something that need for rpm-4.1 since we have no docs
%define _missing_doc_files_terminate_build 0
Name: appagent
Version: 1.0
Release: 1%{?dist}
Summary: An agent for app
License: Commercial
Source0: appagent-1.0.tar.gz
Requires(post): info
Requires(preun): info
Requires: systemd
%description
An agent for the app program.
%prep
%setup -q #unpack tarball
%build
%install
cp -rfa * %{buildroot}
%files
%attr(0755, root, root) "/usr/sbin/appagent"
%attr(0644, root, root) "/usr/lib/systemd/system/appagent.service"
#/*
%post
#%systemd_post %{name}.service
%systemd_post appagent.service
%changelog
* Wed Jan 05 2022 Pietje Puk <pietje.puk@nergens.nl> 1.0.0
dir doe je simpel door:
rpmbuild -ba appagent.spec
https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment
https://blog.packagecloud.io/rpm/rpmbuild/packaging/2015/06/29/building-rpm-packages-with-rpmbuild/
https://fedoraproject.org/wiki/RPMGroups
https://stackoverflow.com/questions/5613954/extract-the-spec-file-from-rpm-package
http://aerostitch.github.io/linux_and_unix/RedHat/build_sample_rpm.html