# Do not build with tests by default # Pass --with tests to rpmbuild to override %bcond_with tests # When --with relax_requires is specified osbuild-composer-tests # will require osbuild-composer only by name, excluding version/release # This is used internally during nightly pipeline testing! %bcond_with relax_requires %global goipath github.com/osbuild/osbuild-composer Version: 76.1 %gometa %global common_description %{expand: A service for building customized OS artifacts, such as VM images and OSTree commits, that uses osbuild under the hood. Besides building images for local usage, it can also upload images directly to cloud. It is compatible with composer-cli and cockpit-composer clients. } Name: osbuild-composer Release: 1.20250516182154143726.pr4719.1.gb29350ad4%{?dist} Summary: An image building service based on osbuild # osbuild-composer doesn't have support for building i686 and armv7hl images ExcludeArch: i686 armv7hl # Upstream license specification: Apache-2.0 License: Apache-2.0 URL: %{gourl} Source0: osbuild-composer-76.1.tar.gz BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang} BuildRequires: systemd BuildRequires: krb5-devel BuildRequires: python3-docutils BuildRequires: make # Build requirements of 'theproglottis/gpgme' package BuildRequires: gpgme-devel BuildRequires: libassuan-devel %if 0%{?fedora} BuildRequires: systemd-rpm-macros BuildRequires: git # DO NOT REMOVE the BUNDLE_START and BUNDLE_END markers as they are used by 'tools/rpm_spec_add_provides_bundle.sh' to generate the Provides: bundled list # BUNDLE_START Provides: bundled(golang(cloud.google.com/go)) = v0.104.0 Provides: bundled(golang(cloud.google.com/go/cloudbuild)) = v1.2.0 Provides: bundled(golang(cloud.google.com/go/compute)) = v1.10.0 Provides: bundled(golang(cloud.google.com/go/iam)) = v0.3.0 Provides: bundled(golang(cloud.google.com/go/storage)) = v1.27.0 Provides: bundled(golang(github.com/acarl005/stripansi)) = v0.0.0_20180116102854_5a71ef0e047d Provides: bundled(golang(github.com/aws/aws_sdk_go)) = v1.44.114 Provides: bundled(golang(github.com/aymerick/douceur)) = v0.2.0 Provides: bundled(golang(github.com/Azure/azure_pipeline_go)) = v0.2.3 Provides: bundled(golang(github.com/Azure/azure_sdk_for_go)) = v68.0.0+incompatible Provides: bundled(golang(github.com/Azure/azure_storage_blob_go)) = v0.13.0 Provides: bundled(golang(github.com/Azure/go_autorest)) = v14.2.0+incompatible Provides: bundled(golang(github.com/Azure/go_autorest/autorest)) = v0.11.28 Provides: bundled(golang(github.com/Azure/go_autorest/autorest/adal)) = v0.9.18 Provides: bundled(golang(github.com/Azure/go_autorest/autorest/azure/auth)) = v0.5.11 Provides: bundled(golang(github.com/Azure/go_autorest/autorest/azure/cli)) = v0.4.5 Provides: bundled(golang(github.com/Azure/go_autorest/autorest/date)) = v0.3.0 Provides: bundled(golang(github.com/Azure/go_autorest/autorest/to)) = v0.4.0 Provides: bundled(golang(github.com/Azure/go_autorest/autorest/validation)) = v0.3.1 Provides: bundled(golang(github.com/Azure/go_autorest/logger)) = v0.2.1 Provides: bundled(golang(github.com/Azure/go_autorest/tracing)) = v0.6.0 Provides: bundled(golang(github.com/beorn7/perks)) = v1.0.1 Provides: bundled(golang(github.com/BurntSushi/toml)) = v1.2.1 Provides: bundled(golang(github.com/cenkalti/backoff/v4)) = v4.1.3 Provides: bundled(golang(github.com/cespare/xxhash/v2)) = v2.1.2 Provides: bundled(golang(github.com/containers/common)) = v0.49.1 Provides: bundled(golang(github.com/containers/image/v5)) = v5.22.0 Provides: bundled(golang(github.com/containers/libtrust)) = v0.0.0_20200511145503_9c3a6c22cd9a Provides: bundled(golang(github.com/containers/ocicrypt)) = v1.1.5 Provides: bundled(golang(github.com/containers/storage)) = v1.42.0 Provides: bundled(golang(github.com/coreos/go_semver)) = v0.3.1 Provides: bundled(golang(github.com/coreos/go_systemd)) = v0.0.0_20190719114852_fd7a80b32e1f Provides: bundled(golang(github.com/davecgh/go_spew)) = v1.1.1 Provides: bundled(golang(github.com/deepmap/oapi_codegen)) = v1.8.2 Provides: bundled(golang(github.com/dimchansky/utfbom)) = v1.1.1 Provides: bundled(golang(github.com/docker/distribution)) = v2.8.1+incompatible Provides: bundled(golang(github.com/docker/docker)) = v20.10.17+incompatible Provides: bundled(golang(github.com/docker/docker_credential_helpers)) = v0.6.4 Provides: bundled(golang(github.com/docker/go_connections)) = v0.4.0 Provides: bundled(golang(github.com/docker/go_metrics)) = v0.0.1 Provides: bundled(golang(github.com/docker/go_units)) = v0.4.0 Provides: bundled(golang(github.com/dougm/pretty)) = v0.0.0_20171025230240_2ee9d7453c02 Provides: bundled(golang(github.com/getkin/kin_openapi)) = v0.93.0 Provides: bundled(golang(github.com/ghodss/yaml)) = v1.0.0 Provides: bundled(golang(github.com/go_openapi/jsonpointer)) = v0.19.5 Provides: bundled(golang(github.com/go_openapi/swag)) = v0.21.1 Provides: bundled(golang(github.com/gobwas/glob)) = v0.2.3 Provides: bundled(golang(github.com/golang_jwt/jwt)) = v3.2.2+incompatible Provides: bundled(golang(github.com/golang_jwt/jwt/v4)) = v4.5.2 Provides: bundled(golang(github.com/golang/glog)) = v1.0.0 Provides: bundled(golang(github.com/golang/groupcache)) = v0.0.0_20210331224755_41bb18bfe9da Provides: bundled(golang(github.com/golang/protobuf)) = v1.5.2 Provides: bundled(golang(github.com/google/go_cmp)) = v0.5.9 Provides: bundled(golang(github.com/google/go_containerregistry)) = v0.10.0 Provides: bundled(golang(github.com/google/uuid)) = v1.3.0 Provides: bundled(golang(github.com/googleapis/enterprise_certificate_proxy)) = v0.1.0 Provides: bundled(golang(github.com/googleapis/gax_go/v2)) = v2.5.1 Provides: bundled(golang(github.com/gophercloud/gophercloud)) = v1.0.0 Provides: bundled(golang(github.com/gorilla/css)) = v1.0.0 Provides: bundled(golang(github.com/gorilla/mux)) = v1.8.0 Provides: bundled(golang(github.com/hashicorp/errwrap)) = v1.1.0 Provides: bundled(golang(github.com/hashicorp/go_cleanhttp)) = v0.5.2 Provides: bundled(golang(github.com/hashicorp/go_multierror)) = v1.1.1 Provides: bundled(golang(github.com/hashicorp/go_retryablehttp)) = v0.7.1 Provides: bundled(golang(github.com/inconshreveable/mousetrap)) = v1.0.1 Provides: bundled(golang(github.com/jackc/chunkreader/v2)) = v2.0.1 Provides: bundled(golang(github.com/jackc/pgconn)) = v1.13.0 Provides: bundled(golang(github.com/jackc/pgio)) = v1.0.0 Provides: bundled(golang(github.com/jackc/pgpassfile)) = v1.0.0 Provides: bundled(golang(github.com/jackc/pgproto3/v2)) = v2.3.1 Provides: bundled(golang(github.com/jackc/pgservicefile)) = v0.0.0_20200714003250_2b9c44734f2b Provides: bundled(golang(github.com/jackc/pgtype)) = v1.12.0 Provides: bundled(golang(github.com/jackc/pgx/v4)) = v4.17.2 Provides: bundled(golang(github.com/jackc/puddle)) = v1.3.0 Provides: bundled(golang(github.com/jmespath/go_jmespath)) = v0.4.0 Provides: bundled(golang(github.com/josharian/intern)) = v1.0.0 Provides: bundled(golang(github.com/json_iterator/go)) = v1.1.12 Provides: bundled(golang(github.com/julienschmidt/httprouter)) = v1.3.0 Provides: bundled(golang(github.com/klauspost/compress)) = v1.15.9 Provides: bundled(golang(github.com/klauspost/pgzip)) = v1.2.5 Provides: bundled(golang(github.com/kolo/xmlrpc)) = v0.0.0_20201022064351_38db28db192b Provides: bundled(golang(github.com/kr/text)) = v0.2.0 Provides: bundled(golang(github.com/labstack/echo/v4)) = v4.10.0 Provides: bundled(golang(github.com/labstack/gommon)) = v0.4.0 Provides: bundled(golang(github.com/letsencrypt/boulder)) = v0.0.0_20220331220046_b23ab962616e Provides: bundled(golang(github.com/mailru/easyjson)) = v0.7.6 Provides: bundled(golang(github.com/mattn/go_colorable)) = v0.1.13 Provides: bundled(golang(github.com/mattn/go_ieproxy)) = v0.0.1 Provides: bundled(golang(github.com/mattn/go_isatty)) = v0.0.16 Provides: bundled(golang(github.com/mattn/go_runewidth)) = v0.0.13 Provides: bundled(golang(github.com/matttproud/golang_protobuf_extensions)) = v1.0.2_0.20181231171920_c182affec369 Provides: bundled(golang(github.com/microcosm_cc/bluemonday)) = v1.0.18 Provides: bundled(golang(github.com/Microsoft/go_winio)) = v0.5.2 Provides: bundled(golang(github.com/miekg/pkcs11)) = v1.1.1 Provides: bundled(golang(github.com/mitchellh/go_homedir)) = v1.1.0 Provides: bundled(golang(github.com/moby/sys/mountinfo)) = v0.6.2 Provides: bundled(golang(github.com/modern_go/concurrent)) = v0.0.0_20180306012644_bacd9c7ef1dd Provides: bundled(golang(github.com/modern_go/reflect2)) = v1.0.2 Provides: bundled(golang(github.com/opencontainers/go_digest)) = v1.0.0 Provides: bundled(golang(github.com/opencontainers/image_spec)) = v1.0.3_0.20220114050600_8b9d41f48198 Provides: bundled(golang(github.com/opencontainers/runc)) = v1.1.3 Provides: bundled(golang(github.com/opencontainers/runtime_spec)) = v1.0.3_0.20210326190908_1c3f411f0417 Provides: bundled(golang(github.com/openshift_online/ocm_sdk_go)) = v0.1.315 Provides: bundled(golang(github.com/oracle/oci_go_sdk/v54)) = v54.0.0 Provides: bundled(golang(github.com/pkg/errors)) = v0.9.1 Provides: bundled(golang(github.com/pmezard/go_difflib)) = v1.0.0 Provides: bundled(golang(github.com/proglottis/gpgme)) = v0.1.3 Provides: bundled(golang(github.com/prometheus/client_golang)) = v1.13.0 Provides: bundled(golang(github.com/prometheus/client_model)) = v0.2.0 Provides: bundled(golang(github.com/prometheus/common)) = v0.37.0 Provides: bundled(golang(github.com/prometheus/procfs)) = v0.8.0 Provides: bundled(golang(github.com/rivo/uniseg)) = v0.2.0 Provides: bundled(golang(github.com/segmentio/ksuid)) = v1.0.4 Provides: bundled(golang(github.com/sigstore/sigstore)) = v1.3.1_0.20220629021053_b95fc0d626c1 Provides: bundled(golang(github.com/sirupsen/logrus)) = v1.9.0 Provides: bundled(golang(github.com/sony/gobreaker)) = v0.4.2_0.20210216022020_dd874f9dd33b Provides: bundled(golang(github.com/spf13/cobra)) = v1.6.1 Provides: bundled(golang(github.com/spf13/pflag)) = v1.0.5 Provides: bundled(golang(github.com/stefanberger/go_pkcs11uri)) = v0.0.0_20201008174630_78d3cae3a980 Provides: bundled(golang(github.com/stretchr/testify)) = v1.8.1 Provides: bundled(golang(github.com/syndtr/gocapability)) = v0.0.0_20200815063812_42c35b437635 Provides: bundled(golang(github.com/theupdateframework/go_tuf)) = v0.3.2 Provides: bundled(golang(github.com/titanous/rocacheck)) = v0.0.0_20171023193734_afe73141d399 Provides: bundled(golang(github.com/ubccr/kerby)) = v0.0.0_20170626144437_201a958fc453 Provides: bundled(golang(github.com/ulikunitz/xz)) = v0.5.10 Provides: bundled(golang(github.com/valyala/bytebufferpool)) = v1.0.0 Provides: bundled(golang(github.com/valyala/fasttemplate)) = v1.2.2 Provides: bundled(golang(github.com/vbatts/tar_split)) = v0.11.2 Provides: bundled(golang(github.com/vbauerster/mpb/v7)) = v7.4.2 Provides: bundled(golang(github.com/VividCortex/ewma)) = v1.2.0 Provides: bundled(golang(github.com/vmware/govmomi)) = v0.29.0 Provides: bundled(golang(go.etcd.io/bbolt)) = v1.3.6 Provides: bundled(golang(go.mozilla.org/pkcs7)) = v0.0.0_20200128120323_432b2356ecb1 Provides: bundled(golang(go.opencensus.io)) = v0.23.0 Provides: bundled(golang(golang.org/x/crypto)) = v0.2.0 Provides: bundled(golang(golang.org/x/exp)) = v0.0.0_20230307190834_24139beb5833 Provides: bundled(golang(golang.org/x/mod)) = v0.6.0 Provides: bundled(golang(golang.org/x/net)) = v0.4.0 Provides: bundled(golang(golang.org/x/oauth2)) = v0.0.0_20220909003341_f21342109be1 Provides: bundled(golang(golang.org/x/sync)) = v0.0.0_20220722155255_886fb9371eb4 Provides: bundled(golang(golang.org/x/sys)) = v0.3.0 Provides: bundled(golang(golang.org/x/term)) = v0.3.0 Provides: bundled(golang(golang.org/x/text)) = v0.5.0 Provides: bundled(golang(golang.org/x/time)) = v0.2.0 Provides: bundled(golang(golang.org/x/tools)) = v0.2.0 Provides: bundled(golang(golang.org/x/xerrors)) = v0.0.0_20220609144429_65e65417b02f Provides: bundled(golang(google.golang.org/api)) = v0.98.0 Provides: bundled(golang(google.golang.org/appengine)) = v1.6.7 Provides: bundled(golang(google.golang.org/genproto)) = v0.0.0_20220920201722_2b89144ce006 Provides: bundled(golang(google.golang.org/grpc)) = v1.49.0 Provides: bundled(golang(google.golang.org/protobuf)) = v1.28.1 Provides: bundled(golang(gopkg.in/ini.v1)) = v1.67.0 Provides: bundled(golang(gopkg.in/square/go_jose.v2)) = v2.6.0 Provides: bundled(golang(gopkg.in/yaml.v2)) = v2.4.0 Provides: bundled(golang(gopkg.in/yaml.v3)) = v3.0.1 # BUNDLE_END %endif Requires: %{name}-core = %{version}-%{release} Requires: %{name}-worker = %{version}-%{release} Requires: systemd Provides: weldr %description %{common_description} %prep %if 0%{?rhel} %forgeautosetup -p1 %else %goprep -k %endif %build export GOFLAGS="-buildmode=pie" %if 0%{?rhel} GO_BUILD_PATH=$PWD/_build install -m 0755 -vd $(dirname $GO_BUILD_PATH/src/%{goipath}) ln -fs $PWD $GO_BUILD_PATH/src/%{goipath} cd $GO_BUILD_PATH/src/%{goipath} install -m 0755 -vd _bin export PATH=$PWD/_bin${PATH:+:$PATH} export GOPATH=$GO_BUILD_PATH:%{gopath} export GOFLAGS+=" -mod=vendor" %endif # Set the commit hash so that composer can report what source version # was used to build it. This has to be set explicitly when calling rpmbuild, # this script will not attempt to automatically discover it. %if %{?commit:1}0 export LDFLAGS="${LDFLAGS} -X 'github.com/osbuild/osbuild-composer/internal/common.GitRev=%{commit}'" %endif export LDFLAGS="${LDFLAGS} -X 'github.com/osbuild/osbuild-composer/internal/common.RpmVersion=%{name}-%{?epoch:%epoch:}%{version}-%{release}.%{_arch}'" %gobuild -o _bin/osbuild-composer %{goipath}/cmd/osbuild-composer %gobuild -o _bin/osbuild-worker %{goipath}/cmd/osbuild-worker make man %if %{with tests} || 0%{?rhel} # Build test binaries with `go test -c`, so that they can take advantage of # golang's testing package. The golang rpm macros don't support building them # directly. Thus, do it manually, taking care to also include a build id. # # On Fedora, also turn off go modules and set the path to the one into which # the golang-* packages install source code. %if 0%{?fedora} export GO111MODULE=off export GOPATH=%{gobuilddir}:%{gopath} %endif TEST_LDFLAGS="${LDFLAGS:-} -B 0x$(od -N 20 -An -tx1 -w100 /dev/urandom | tr -d ' ')" go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-composer-cli-tests %{goipath}/cmd/osbuild-composer-cli-tests go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-dnf-json-tests %{goipath}/cmd/osbuild-dnf-json-tests go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-weldr-tests %{goipath}/internal/client/ go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-image-tests %{goipath}/cmd/osbuild-image-tests go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-auth-tests %{goipath}/cmd/osbuild-auth-tests go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-koji-tests %{goipath}/cmd/osbuild-koji-tests go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-composer-dbjobqueue-tests %{goipath}/cmd/osbuild-composer-dbjobqueue-tests go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-composer-manifest-tests %{goipath}/cmd/osbuild-composer-manifest-tests go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-service-maintenance-tests %{goipath}/cmd/osbuild-service-maintenance go build -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-mock-openid-provider %{goipath}/cmd/osbuild-mock-openid-provider %endif %install install -m 0755 -vd %{buildroot}%{_libexecdir}/osbuild-composer install -m 0755 -vp _bin/osbuild-composer %{buildroot}%{_libexecdir}/osbuild-composer/ install -m 0755 -vp _bin/osbuild-worker %{buildroot}%{_libexecdir}/osbuild-composer/ install -m 0755 -vp dnf-json %{buildroot}%{_libexecdir}/osbuild-composer/ # Only include repositories for the distribution and release install -m 0755 -vd %{buildroot}%{_datadir}/osbuild-composer/repositories # CentOS also defines rhel so we check for centos first %if 0%{?centos} # CentOS 9 supports building for CentOS 8 and later %if 0%{?centos} >= 9 install -m 0644 -vp repositories/centos-* %{buildroot}%{_datadir}/osbuild-composer/repositories/ %else # CentOS 8 only supports building for CentOS 8 install -m 0644 -vp repositories/centos-%{centos}* %{buildroot}%{_datadir}/osbuild-composer/repositories/ install -m 0644 -vp repositories/centos-stream-%{centos}* %{buildroot}%{_datadir}/osbuild-composer/repositories/ %endif %else %if 0%{?rhel} # RHEL 9 supports building for RHEL 8 and later %if 0%{?rhel} >= 9 install -m 0644 -vp repositories/rhel-* %{buildroot}%{_datadir}/osbuild-composer/repositories/ %else # RHEL 8 only supports building for 8 install -m 0644 -vp repositories/rhel-%{rhel}* %{buildroot}%{_datadir}/osbuild-composer/repositories/ %endif %endif %endif # Fedora can build for all included fedora releases %if 0%{?fedora} install -m 0644 -vp repositories/fedora-* %{buildroot}%{_datadir}/osbuild-composer/repositories/ %endif install -m 0755 -vd %{buildroot}%{_unitdir} install -m 0644 -vp distribution/*.{service,socket} %{buildroot}%{_unitdir}/ install -m 0755 -vd %{buildroot}%{_sysusersdir} install -m 0644 -vp distribution/osbuild-composer.conf %{buildroot}%{_sysusersdir}/ install -m 0755 -vd %{buildroot}%{_localstatedir}/cache/osbuild-composer/dnf-cache install -m 0755 -vd %{buildroot}%{_mandir}/man7 install -m 0644 -vp docs/*.7 %{buildroot}%{_mandir}/man7/ %if %{with tests} || 0%{?rhel} install -m 0755 -vd %{buildroot}%{_libexecdir}/osbuild-composer-test install -m 0755 -vp _bin/osbuild-composer-cli-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-weldr-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-dnf-json-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-image-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-auth-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-koji-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-composer-dbjobqueue-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-composer-manifest-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-service-maintenance-tests %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp _bin/osbuild-mock-openid-provider %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/define-compose-url.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/provision.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/gen-certs.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/gen-ssh.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/image-info %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/run-koji-container.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/koji-compose.py %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/libvirt_test.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/s3_test.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/generic_s3_test.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/generic_s3_https_test.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/run-mock-auth-servers.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/set-env-variables.sh %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vp tools/test-case-generators/generate-test-cases %{buildroot}%{_libexecdir}/osbuild-composer-test/ install -m 0755 -vd %{buildroot}%{_libexecdir}/tests/osbuild-composer install -m 0755 -vp test/cases/*.sh %{buildroot}%{_libexecdir}/tests/osbuild-composer/ install -m 0755 -vd %{buildroot}%{_libexecdir}/tests/osbuild-composer/api install -m 0755 -vp test/cases/api/*.sh %{buildroot}%{_libexecdir}/tests/osbuild-composer/api/ install -m 0755 -vd %{buildroot}%{_libexecdir}/tests/osbuild-composer/api/common install -m 0755 -vp test/cases/api/common/*.sh %{buildroot}%{_libexecdir}/tests/osbuild-composer/api/common/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/ansible install -m 0644 -vp test/data/ansible/* %{buildroot}%{_datadir}/tests/osbuild-composer/ansible/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/azure install -m 0644 -vp test/data/azure/* %{buildroot}%{_datadir}/tests/osbuild-composer/azure/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/manifests install -m 0644 -vp test/data/manifests/* %{buildroot}%{_datadir}/tests/osbuild-composer/manifests/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/cloud-init install -m 0644 -vp test/data/cloud-init/* %{buildroot}%{_datadir}/tests/osbuild-composer/cloud-init/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/composer install -m 0644 -vp test/data/composer/* %{buildroot}%{_datadir}/tests/osbuild-composer/composer/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/worker install -m 0644 -vp test/data/worker/* %{buildroot}%{_datadir}/tests/osbuild-composer/worker/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/repositories install -m 0644 -vp test/data/repositories/* %{buildroot}%{_datadir}/tests/osbuild-composer/repositories/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/kerberos install -m 0644 -vp test/data/kerberos/* %{buildroot}%{_datadir}/tests/osbuild-composer/kerberos/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/keyring install -m 0644 -vp test/data/keyring/id_rsa.pub %{buildroot}%{_datadir}/tests/osbuild-composer/keyring/ install -m 0600 -vp test/data/keyring/id_rsa %{buildroot}%{_datadir}/tests/osbuild-composer/keyring/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/koji install -m 0644 -vp test/data/koji/* %{buildroot}%{_datadir}/tests/osbuild-composer/koji/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/x509 install -m 0644 -vp test/data/x509/* %{buildroot}%{_datadir}/tests/osbuild-composer/x509/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/schemas install -m 0644 -vp pkg/jobqueue/dbjobqueue/schemas/* %{buildroot}%{_datadir}/tests/osbuild-composer/schemas/ install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/upgrade8to9 install -m 0644 -vp test/data/upgrade8to9/* %{buildroot}%{_datadir}/tests/osbuild-composer/upgrade8to9/ %endif %check export GOFLAGS="-buildmode=pie" %if 0%{?rhel} export GOFLAGS+=" -mod=vendor" export GOPATH=$PWD/_build:%{gopath} # cd inside GOPATH, otherwise go with GO111MODULE=off ignores vendor directory cd $PWD/_build/src/%{goipath} %gotest ./... %else %gocheck %endif %post %systemd_post osbuild-composer.service osbuild-composer.socket osbuild-composer-api.socket osbuild-remote-worker.socket %preun %systemd_preun osbuild-composer.service osbuild-composer.socket osbuild-composer-api.socket osbuild-remote-worker.socket %postun %systemd_postun_with_restart osbuild-composer.service osbuild-composer.socket osbuild-composer-api.socket osbuild-remote-worker.socket %files %license LICENSE %doc README.md %{_mandir}/man7/%{name}.7* %{_unitdir}/osbuild-composer.service %{_unitdir}/osbuild-composer.socket %{_unitdir}/osbuild-composer-api.socket %{_unitdir}/osbuild-local-worker.socket %{_unitdir}/osbuild-remote-worker.socket %{_sysusersdir}/osbuild-composer.conf %package core Summary: The core osbuild-composer binary Requires: %{name}-dnf-json = %{version}-%{release} %description core The core osbuild-composer binary. This is suitable both for spawning in containers and by systemd. %files core %{_libexecdir}/osbuild-composer/osbuild-composer %{_datadir}/osbuild-composer/ %package worker Summary: The worker for osbuild-composer Requires: systemd Requires: qemu-img Requires: osbuild >= 83 Requires: osbuild-ostree >= 83 Requires: osbuild-lvm2 >= 83 Requires: osbuild-luks2 >= 83 Requires: %{name}-dnf-json = %{version}-%{release} %description worker The worker for osbuild-composer %files worker %{_libexecdir}/osbuild-composer/osbuild-worker %{_unitdir}/osbuild-worker@.service %{_unitdir}/osbuild-remote-worker@.service %post worker %systemd_post osbuild-worker@.service osbuild-remote-worker@.service %preun worker # systemd_preun uses systemctl disable --now which doesn't work well with template services. # See https://github.com/systemd/systemd/issues/15620 # The following lines mimicks its behaviour by running two commands. # The scriptlet is supposed to run only when the package is being removed. if [ $1 -eq 0 ] && [ -d /run/systemd/system ]; then # disable and stop all the worker services systemctl --no-reload disable osbuild-worker@.service osbuild-remote-worker@.service systemctl stop "osbuild-worker@*.service" "osbuild-remote-worker@*.service" fi %postun worker # restart all the worker services %systemd_postun_with_restart "osbuild-worker@*.service" "osbuild-remote-worker@*.service" %package dnf-json Summary: The dnf-json binary used by osbuild-composer and the workers # Conflicts with older versions of composer that provide the same files # this can be removed when RHEL 8 reaches EOL Conflicts: osbuild-composer <= 35 %description dnf-json The dnf-json binary used by osbuild-composer and the workers. %files dnf-json %{_libexecdir}/osbuild-composer/dnf-json %post dnf-json # Fix ownership of the rpmmd cache files from previous versions where it was owned by root:root if [ -e /var/cache/osbuild-composer/rpmmd ]; then chown -f -R --from root:root _osbuild-composer:_osbuild-composer /var/cache/osbuild-composer/rpmmd fi %if %{with tests} || 0%{?rhel} %package tests Summary: Integration tests %if %{with relax_requires} Requires: %{name} %else Requires: %{name} = %{version}-%{release} %endif Requires: composer-cli Requires: createrepo_c Requires: xorriso Requires: qemu-kvm-core Requires: systemd-container Requires: jq Requires: unzip Requires: container-selinux Requires: dnsmasq Requires: krb5-workstation Requires: podman Requires: python3 Requires: sssd-krb5 Requires: libvirt-client libvirt-daemon Requires: libvirt-daemon-config-network Requires: libvirt-daemon-config-nwfilter Requires: libvirt-daemon-driver-interface Requires: libvirt-daemon-driver-network Requires: libvirt-daemon-driver-nodedev Requires: libvirt-daemon-driver-nwfilter Requires: libvirt-daemon-driver-qemu Requires: libvirt-daemon-driver-secret Requires: libvirt-daemon-driver-storage Requires: libvirt-daemon-driver-storage-disk Requires: libvirt-daemon-kvm Requires: qemu-img Requires: qemu-kvm Requires: rpmdevtools Requires: virt-install Requires: expect Requires: python3-lxml Requires: httpd Requires: mod_ssl Requires: openssl Requires: firewalld Requires: podman-plugins Requires: dnf-plugins-core Requires: skopeo Requires: make Requires: python3-pip %if 0%{?fedora} # koji and ansible are not in RHEL repositories. Depending on them breaks RHEL # gating (see OSCI-1541). The test script must enable EPEL and install those # packages manually. Requires: koji Requires: ansible %endif %ifarch %{arm} Requires: edk2-aarch64 %endif %description tests Integration tests to be run on a pristine-dedicated system to test the osbuild-composer package. %files tests %{_libexecdir}/osbuild-composer-test/ %{_libexecdir}/tests/osbuild-composer/ %{_datadir}/tests/osbuild-composer/ %endif %changelog # the changelog is distribution-specific, therefore there's just one entry # to make rpmlint happy. * Fri May 16 2025 Packit - 76.1-1.20250516182154143726.pr4719.1.gb29350ad4 - tools: Adding an update feature to check-snapshots (John Castranio) * Wed Sep 11 2019 Image Builder team - 0-1 - On this day, this project was born.