9. Частые проблемы и отладка
Раздел руководства по RPM-пакетированию для openSUSE.
Нет сети внутри сборки. Это нормально. Используй _service, SourceN, vendor tarballs, download_files; не запускай curl, go get, npm install из сети в %build.
<services>
<service name="download_files" mode="manual"/>
<service name="verify_file" mode="manual">
<param name="file">foo-%{version}.tar.gz</param>
<param name="verifier">sha256</param>
<param name="checksum">SHA256_HERE</param>
</service>
</services>
GCC/binutils/kernel несовместимости: сначала убери -Werror, затем проверь upstream patches, затем добавь минимальный downstream patch. Для Leap 16.0 на SLFO/SLES 16 не предполагай те же версии toolchain, что в Tumbleweed.
Dependencies:
BuildRequires: pkgconfig(libssl)
BuildRequires: cmake(Qt6Core)
Requires: libfoo1 >= %{version}
Предпочитай pkgconfig(...)/cmake(...), когда upstream действительно ищет dependency через pkg-config/CMake. Не добавляй runtime Requires вручную, если auto dependency generator уже даёт корректный ELF/library dependency.
Опасные macro overrides:
# Плохо без очень сильной причины:
%define __arch_install_post %{nil}
%define __spec_install_post %{nil}
Такие overrides отключают brp/post-processing и почти всегда маскируют проблему. Исправляй root cause: rpath, permissions, stripping, misplaced files.
Ownership и permissions:
%install
install -D -m 0755 build/foo %{buildroot}%{_bindir}/foo
install -D -m 0644 packaging/foo.conf %{buildroot}%{_sysconfdir}/foo.conf
%files
%config(noreplace) %{_sysconfdir}/foo.conf
Не запускай chown в %install; ownership задаётся в %files или создаётся через sysusers/tmpfiles.
Патчи:
quilt setup foo.spec
cd foo-*/
quilt push -a
quilt new foo-fix-gcc16.patch
quilt edit src/foo.c
quilt refresh
В spec:
Patch0: foo-fix-gcc16.patch
%prep
%autosetup -p1
В .changes указывай patch names и bug/CVE:
- Add foo-fix-gcc16.patch: fix build with GCC 16 (boo#123456).