====== RPM balicky ======
===== Inicializace prostredi =====
Pro build balicku je durazne doporuceno pouzivat jineho / specialniho dedikovaneho uzivatele!
- Nejdrive je nutne nainstalovat potrebne zavislosti
$ sudo dnf install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils patch rpmdevtools
- Vytvorime a prepneme se na noveho uzivatele
$ sudo useradd
$ sudo -iu
- Pote vytvorime adresare a nastavime promenne pro vybraneho uzivatele
$ rpmdev-setuptree
===== Novy *.spec =====
$ rpmdev-newspec []
$ ll /etc/rpmdevtools/
Vypise dostupne sablony, jde o soubory //spectemplate-.spec//. Zadave se pouze //jmeno// sablony.
===== Overeni / Linting =====
$ rpmlint <*.spec>|<*.rpm>|<*.src.rpm>
a seznam nejcastejsich chyb zde: https://fedoraproject.org/wiki/Common_Rpmlint_issues
===== Build balicku =====
$ rpmbuild [-ba|-bb|-bs]
//Spec file// se zadava pouze jako jmeno bez plne cesty. Ke jmenu se predradi cesta k //RPM build root// - //~/rpmbuild/SPECS///, vytvorena pomoci [[#inicializace_prostredi|rpmdev-setuptree]]
===== Zvysovani verze balicku =====
$ rpmdev-bumpspec -c "blah blah" <*.spec>
===== COPR deploy =====
https://copr.fedorainfracloud.org
#!/bin/bash
#
# Used to upload packages to COPR [ and that triggers build ]
#
set -eu
LOCAL_BUILD=""
function log {
echo "BUILD.SH | $(date +"%Y/%m/%d %H:%M:%S") | $@"
}
function help {
echo ""
echo "Usage: ./build.sh [-h] [-l]"
echo ""
echo "Options:"
echo "-h show help"
echo "-l builds localy"
}
while getopts ":hl" opt; do
case ${opt} in
h ) # process option h
help
exit 0
;;
l ) # process option l
LOCAL_BUILD="1"
;;
\? )
echo "Unknown option: $OPTARG" 1>&2
help
exit 1
;;
esac
done
# exit when uncommited changes are present
if ! git diff-index --quiet HEAD --; then
log "Uncomitted changes detected. Aborting..." 1>&2
exit 1
fi
# run linter on spec
log "Running linter..."
rpkg lint
if [ -n "$LOCAL_BUILD" ]; then
log "Trying to build locally..."
rpkg compile
else
log "Tagging release..."
rpkg tag
log "Building in COPR..."
#copr-cli build opentyrian "$PACKAGE"
rpkg build -w nost23/opentyrian
fi
# vim: set ff=unix expandtab ts=4:
===== Tips =====
==== Vsechna preddefinovana makra ====
$ less /usr/lib/rpm/macros
https://docs.fedoraproject.org/en-US/packaging-guidelines/RPMMacros/
==== Potlaceni debug balicku ====
Mozne / nutne pouze v pripade pouziti maker //%make_*//.
Na vrch //spec// souboru pridame:
%global debug_package %{nil}
==== SystemD ====
//Systemd units// nepatri do ///etc///, proto pouzijeme ve //spec file// v ceste promenou **%{_unitdir}**. Aby tato promena byla definovana, je nutne take uvest **BuildRequires: systemd**
BuildRequires: systemd
...
%{_unitdir}/.d/override.conf
Ke zjisteni cesty na aktualnim systemu, lze pouzit prikaz //rpm//:
$ rpm -E %{_unitdir}
https://fedoraproject.org/wiki/Packaging:Systemd
==== Rebuild *.src.rpm ====
$ rpmbuild --rebuild
$ rpmbuild --rebuild *.src.rpm
==== %files nastaveni opravneni / vlastnika ====
%files
%defattr(-,root,root)
%doc %attr(0644,-,-) CREDITS
%doc NEWS
==== %find_lang makro ====
%install
...
%find_lang %{name} # generate a special file list
...
%files -f %{name}.lang # use the special file list
%defattr(-,root,root) # list the other files
%doc README
...
nebo jazyky rucne
%files
%doc %lang(cs_CZ) %{_datadir}/%{name}/lang/cs-CZ/LC_MESSAGES/...
==== docasne soubory ====
aby doslo k odstraneni docasnych souboru spolecne s balickem, je nutne je oznacit jako **//%ghost//**
%install
touch $RPM_BUILD_ROOT%{_localstatedir}/log/blather.log
…
%files
…
%ghost %{_localstatedir}/log/blather.log
…
===== Links =====
https://rpm-packaging-guide.github.io
https://rpm-software-management.github.io/rpm/manual/macros.html