Pro build balicku je durazne doporuceno pouzivat jineho / specialniho dedikovaneho uzivatele!
$ sudo dnf install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils patch rpmdevtools
$ sudo useradd <user> $ sudo -iu <user>
$ rpmdev-setuptree
$ rpmdev-newspec [<jmeno projektu>]
$ ll /etc/rpmdevtools/
Vypise dostupne sablony, jde o soubory spectemplate-<jmeno>.spec. Zadave se pouze jmeno sablony.
$ rpmlint <*.spec>|<*.rpm>|<*.src.rpm>
a seznam nejcastejsich chyb zde: https://fedoraproject.org/wiki/Common_Rpmlint_issues
$ rpmbuild [-ba|-bb|-bs] <spec file>
Spec file se zadava pouze jako jmeno bez plne cesty. Ke jmenu se predradi cesta k RPM build root - ~/rpmbuild/SPECS/, vytvorena pomoci rpmdev-setuptree
$ rpmdev-bumpspec -c "blah blah" <*.spec>
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:
$ less /usr/lib/rpm/macros
https://docs.fedoraproject.org/en-US/packaging-guidelines/RPMMacros/
Mozne / nutne pouze v pripade pouziti maker %make_*.
Na vrch spec souboru pridame:
%global debug_package %{nil}
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}/<service>.d/override.conf
Ke zjisteni cesty na aktualnim systemu, lze pouzit prikaz rpm:
$ rpm -E %{_unitdir}
$ rpmbuild --rebuild <source-rpm> $ rpmbuild --rebuild *.src.rpm
%files %defattr(-,root,root) %doc %attr(0644,-,-) CREDITS %doc NEWS
%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/...
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
…