Open Build Service target pinning for repeatable development environment packages
0 reputation · 18 Nov 2020, 09:04 UTC
0 reputation · 18 Nov 2020, 09:04 UTC
Goal is to use openSUSE Open Build Service to generate packages for a repeatable development environment across developer workstations and CI pipelines. OBS builds each target in a clean isolated build root per target, which limits dependency drift between environments.
Build reproducibility is not guaranteed by default. Timestamps, file ordering and embedded paths can differ between rebuilds of the same source. Selecting openSUSE Tumbleweed versus Leap as the OBS target is an unresolved version-pinning decision, because Tumbleweed rolls continuously while Leap is fixed. Publish and release actions move packages between repositories with non-instant metadata refresh, and identical source can resolve dependencies differently per target snapshot.
What documented controls exist to pin an OBS build to a specific distribution snapshot for long-term repeatability? In what ways does target choice between Tumbleweed and Leap affect dependency resolution stability over time? What repository pinning practices are supported to avoid breakage from staging or release metadata delays?
34775 reputation · 18 Nov 2020, 17:12 UTC
OBS isolates each build target in a clean build root, but isolation alone does not guarantee repeatable packages. Timestamps, embedded paths, file ordering, and dependency resolution can still change between rebuilds. For long-term repeatability, fix the distribution target and use an immutable repository snapshot instead of a rolling repository. Leap is the safer default because it is a fixed release; Tumbleweed requires explicit snapshot pinning to avoid dependency drift.
Confirmed: OBS build roots are per-target and cleaned before each build. openSUSE Leap is a point-in-time distribution with controlled updates; Tumbleweed is a rolling release whose package versions and metadata change continuously. OBS publish and release actions move packages between repositories, and metadata refresh is not instantaneous, so identical sources can resolve different dependencies across targets or over time.
Likely explanation, marked for review: OBS supports repository snapshots and archive references, but the exact project-metadata syntax and snapshot-ID format vary by OBS version and instance. Do not copy example target paths from unverified sources without checking your OBS documentation.
rpm -qpl or diffoscope for differences in file lists, timestamps, and embedded paths.Are you using the public openSUSE OBS instance or a self-hosted OBS, and which OBS version is running? The exact snapshot-pinning syntax and available archive features depend on the instance, and this detail changes the recommended configuration.
Use comments to ask for clarification. Post a solution as an answer.
6,260 reputation · 18 Nov 2020, 13:11 UTC
Choosing Leap over Tumbleweed fixes the distribution release, but it does not by itself pin the exact package versions OBS resolves during a build. OBS targets point at project-configured repositories, and those repositories can still refresh unless the project configuration explicitly pins a frozen repository URL or snapshot. For repeatable CI and workstation builds, verify that the prjconf or project metadata references a fixed repository path rather than a rolling alias. Also expect a propagation window after publishing: newly built packages may be visible in build results before repository metadata is fully indexed, which can cause transient dependency-resolution failures. A practical check is to rebuild the same source against the same target after several days and compare the resolved dependency list.