7. OBS: организация проектов и workflow
Раздел руководства по RPM-пакетированию для openSUSE.
Типовая иерархия:
home:LOGIN- личная зона, черновики, эксперименты.devel:*- тематические проекты, где пакет реально сопровождается.openSUSE:Factory- вход в Tumbleweed.openSUSE:Leap:16.0,openSUSE:Leap:16.0:Update,openSUSE:Leap:16.1- fixed release и update-проекты.
Базовый workflow:
osc branch openSUSE:Factory foo
cd home:LOGIN:branches:openSUSE:Factory/foo
osc build openSUSE_Tumbleweed x86_64 foo.spec
osc vc
osc ci -m "Update foo to 1.2.3"
osc sr devel:project foo
После принятия в devel project maintainer создаёт SR в Factory:
osc sr devel:project foo openSUSE:Factory
_link нужен, когда хочешь наследовать source package и наложить минимальные изменения. Патч в linked package:
<link project="openSUSE:Factory" package="foo">
<patches>
<add name="foo-fix-build.patch" popt="1"/>
</patches>
</link>
_aggregate копирует уже собранные binaries из другого проекта. Обычно лучше добавить repository path, чем агрегировать: aggregate увеличивает занимаемое место и может маскировать несовместимости.
Source services:
<services>
<service name="obs_scm" mode="manual">
<param name="url">https://github.com/openSUSE/osc.git</param>
<param name="scm">git</param>
<param name="revision">v1.2.3</param>
<param name="versionformat">@PARENT_TAG@</param>
</service>
<service name="tar" mode="manual"/>
<service name="recompress" mode="manual">
<param name="file">*.tar</param>
<param name="compression">zst</param>
</service>
<service name="set_version" mode="manual"/>
<service name="download_files" mode="manual"/>
<service name="format_spec_file" mode="manual"/>
</services>
tar_scm ещё встречается, но в OBS documentation есть пометка, что он discouraged in favor of obs_scm.
Multi-distro build: OBS умеет RPM/DEB для Fedora, RHEL, Debian, Ubuntu. В spec используй conditionals:
%if 0%{?suse_version}
BuildRequires: pkgconfig(systemd)
%else
BuildRequires: systemd-devel
%endif
CI/CD: GitHub Actions обычно запускает osc service runall, osc build --local-package, osc ci или osc sr. Не клади OBS credentials в workflow plain text; используй secrets и отдельного service account.
Локальный OBS: для теста используй appliance/docker из OBS project documentation. Для production нужны отдельные workers, publisher, scheduler, backend storage и backup source server.