====== 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