Типовая иерархия:

  • 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.

Где искать дополнительно