From 916236832ceba26c669abb4b6f3d201d006c3d6b Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Thu, 3 Jul 2025 14:06:33 -0500 Subject: [PATCH 01/31] konflux: add build-args-file param using this passing build args to the container build as defined in build-args.txt Also changes the path to the Containerfile Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 4 +++- .tekton/rhceph-9-0-push.yaml | 4 +++- build-args.txt | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 build-args.txt diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index ce3c772854771..d03429a816b7f 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -31,9 +31,11 @@ spec: value: - linux/x86_64 - name: dockerfile - value: Dockerfile + value: container/Containerfile - name: path-context value: . + - name: build-args-file + value: build-args.txt pipelineSpec: description: | This pipeline is ideal for building multi-arch container images from a Containerfile while maintaining trust after pipeline customization. diff --git a/.tekton/rhceph-9-0-push.yaml b/.tekton/rhceph-9-0-push.yaml index ffcdead37b5e6..b15fa04849bab 100644 --- a/.tekton/rhceph-9-0-push.yaml +++ b/.tekton/rhceph-9-0-push.yaml @@ -28,9 +28,11 @@ spec: value: - linux/x86_64 - name: dockerfile - value: Dockerfile + value: container/Containerfile - name: path-context value: . + - name: build-args-file + value: build-args.txt pipelineSpec: description: | This pipeline is ideal for building multi-arch container images from a Containerfile while maintaining trust after pipeline customization. diff --git a/build-args.txt b/build-args.txt new file mode 100644 index 0000000000000..63d37add11da0 --- /dev/null +++ b/build-args.txt @@ -0,0 +1 @@ +CEPH_REF=main From db65b15ac2f1404ce4ca450ac342a8a7727e9872 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Thu, 3 Jul 2025 14:50:27 -0500 Subject: [PATCH 02/31] konflux: fix sbom generation failure Signed-off-by: Andrew Schoen --- src/pybind/mgr/requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pybind/mgr/requirements.txt b/src/pybind/mgr/requirements.txt index 044674f9be569..dfcec94ecb8f6 100644 --- a/src/pybind/mgr/requirements.txt +++ b/src/pybind/mgr/requirements.txt @@ -1,4 +1,3 @@ --rrequirements-required.txt asyncssh==2.9 kubernetes urllib3==1.26.15 From 152c1e26c89d1f347a317253cf1636a34d37abb9 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Mon, 7 Jul 2025 16:57:57 -0500 Subject: [PATCH 03/31] test; add rpm build pipeline Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 621 +-------------------------- 1 file changed, 22 insertions(+), 599 deletions(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index d03429a816b7f..b386d2be94e24 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -1,3 +1,4 @@ +--- apiVersion: tekton.dev/v1 kind: PipelineRun metadata: @@ -19,606 +20,28 @@ metadata: namespace: ceph-tenant spec: params: - - name: git-url - value: '{{source_url}}' - - name: revision - value: '{{revision}}' - - name: output-image - value: quay.io/rhceph-dev/rhceph:on-pr-{{revision}} - - name: image-expires-after - value: 5d - - name: build-platforms - value: - - linux/x86_64 - - name: dockerfile - value: container/Containerfile - - name: path-context - value: . - - name: build-args-file - value: build-args.txt - pipelineSpec: - description: | - This pipeline is ideal for building multi-arch container images from a Containerfile while maintaining trust after pipeline customization. - - _Uses `buildah` to create a multi-platform container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. This pipeline requires that the [multi platform controller](https://github.com/konflux-ci/multi-platform-controller) is deployed and configured on your Konflux instance. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. - This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-multi-platform-oci-ta?tab=tags)_ - finally: - - name: show-sbom - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - taskRef: - params: - - name: name - value: show-sbom - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-show-sbom:0.1@sha256:1b1df4da95966d08ac6a5b8198710e09e68b5c2cdc707c37d9d19769e65884b2 - - name: kind - value: task - resolver: bundles + - name: ociStorage + #value: quay.io/redhat-user-workloads/rpm-build-pipeline-tenant/rhceph-test-package:on-pr-{{ pull_request_number }}-{{revision}} + value: quay.io/rhceph-dev/rhceph:on-pr-{{revision}}-rpms + #value: quay.io/redhat-user-workloads/rhceph-rpms/rhceph:on-pr-{{revision}} + - name: package-name + value: rhceph + - name: git-url + value: "{{ source_url }}" + - name: revision + value: "{{ revision }}" + - name: target-branch + value: "{{ target_branch }}" + pipelineRef: + resolver: git params: - - description: Source Repository URL - name: git-url - type: string - - default: "" - description: Revision of the Source Repository - name: revision - type: string - - description: Fully Qualified Output Image - name: output-image - type: string - - default: . - description: Path to the source code of an application's component from where - to build image. - name: path-context - type: string - - default: Dockerfile - description: Path to the Dockerfile inside the context specified by parameter - path-context - name: dockerfile - type: string - - default: "false" - description: Force rebuild image - name: rebuild - type: string - - default: "false" - description: Skip checks against built image - name: skip-checks - type: string - - default: "false" - description: Execute the build with network isolation - name: hermetic - type: string - - default: "" - description: Build dependencies to be prefetched by Cachi2 - name: prefetch-input - type: string - - default: "" - description: Image tag expiration time, time values could be something like - 1h, 2d, 3w for hours, days, and weeks, respectively. - name: image-expires-after - type: string - - default: "false" - description: Build a source image. - name: build-source-image - type: string - - default: "true" - description: Add built image into an OCI image index - name: build-image-index - type: string - - default: [] - description: Array of --build-arg values ("arg=value" strings) for buildah - name: build-args - type: array - - default: "" - description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file - name: build-args-file - type: string - - default: "false" - description: Whether to enable privileged mode, should be used only with remote - VMs - name: privileged-nested - type: string - - default: - - linux/x86_64 - description: List of platforms to build the container images on. The available - set of values is determined by the configuration of the multi-platform-controller. - name: build-platforms - type: array - results: - - description: "" - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - description: "" - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - description: "" - name: CHAINS-GIT_URL - value: $(tasks.clone-repository.results.url) - - description: "" - name: CHAINS-GIT_COMMIT - value: $(tasks.clone-repository.results.commit) - tasks: - - name: init - params: - - name: image-url - value: $(params.output-image) - - name: rebuild - value: $(params.rebuild) - - name: skip-checks - value: $(params.skip-checks) - taskRef: - params: - - name: name - value: init - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:66e90d31e1386bf516fb548cd3e3f0082b5d0234b8b90dbf9e0d4684b70dbe1a - - name: kind - value: task - resolver: bundles - - name: clone-repository - params: - name: url - value: $(params.git-url) + value: "https://github.com/konflux-ci/rpmbuild-pipeline.git" - name: revision - value: $(params.revision) - - name: ociStorage - value: $(params.output-image).git - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - init - taskRef: - params: - - name: name - value: git-clone-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:d35e5d501cb5f5f88369511f76249857cb5ac30250e1dcf086939321964ff6b9 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - workspaces: - - name: basic-auth - workspace: git-auth - - name: prefetch-dependencies - params: - - name: input - value: $(params.prefetch-input) - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).prefetch - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: prefetch-dependencies-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:a1ddc34bf0a169bb2e64a98caf9027b66af8fc66a3a60f71bb451ce36af6a399 - - name: kind - value: task - resolver: bundles - workspaces: - - name: git-basic-auth - workspace: git-auth - - name: netrc - workspace: netrc - - matrix: - params: - - name: PLATFORM - value: - - $(params.build-platforms) - name: build-images - params: - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: PRIVILEGED_NESTED - value: $(params.privileged-nested) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - - name: IMAGE_APPEND_PLATFORM - value: "true" - runAfter: - - prefetch-dependencies - taskRef: - params: - - name: name - value: buildah-remote-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.4@sha256:5b8d51fa889cdac873750904c3fccc0cca1c4f65af16902ebb2b573151f80657 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-image-index - params: - - name: IMAGE - value: $(params.output-image) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: ALWAYS_BUILD_INDEX - value: $(params.build-image-index) - - name: IMAGES - value: - - $(tasks.build-images.results.IMAGE_REF[*]) - runAfter: - - build-images - taskRef: - params: - - name: name - value: build-image-index - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:846dc9975914f31380ec2712fdbac9df3b06c00a9cc7df678315a7f97145efc2 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - name: build-source-image - params: - - name: BINARY_IMAGE - value: $(params.output-image) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: source-build-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.2@sha256:b424894fc8e806c12658daa565b835fd2d66e7f7608afc47529eb7b410f030d7 - - name: kind - value: task - resolver: bundles - when: - - input: $(tasks.init.results.build) - operator: in - values: - - "true" - - input: $(params.build-source-image) - operator: in - values: - - "true" - - name: deprecated-base-image-check - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: deprecated-image-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:3c8b81fa868e27c6266e7660a4bfb4c822846dcf4304606e71e20893b0d3e515 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clair-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clair-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.2@sha256:d354939892f3a904223ec080cc3771bd11931085a5d202323ea491ee8e8c5e43 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: ecosystem-cert-preflight-checks - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: ecosystem-cert-preflight-checks - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:b550ff4f0b634512ce5200074be7afd7a5a6c05b783620c626e2a3035cd56448 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-snyk-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-snyk-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:e61f541189b30d14292ef8df36ccaf13f7feb2378fed5f74cb6293b3e79eb687 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: clamav-scan - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: clamav-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.2@sha256:9cab95ac9e833d77a63c079893258b73b8d5a298d93aaf9bdd6722471bc2f338 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-coverity-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE - value: $(params.output-image) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: HERMETIC - value: $(params.hermetic) - - name: PREFETCH_INPUT - value: $(params.prefetch-input) - - name: IMAGE_EXPIRES_AFTER - value: $(params.image-expires-after) - - name: COMMIT_SHA - value: $(tasks.clone-repository.results.commit) - - name: BUILD_ARGS - value: - - $(params.build-args[*]) - - name: BUILD_ARGS_FILE - value: $(params.build-args-file) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - coverity-availability-check - taskRef: - params: - - name: name - value: sast-coverity-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:d3fdca2f0072e1c40e0781ac4b8f16b977dc77fc6e80424087941465bc27d5eb - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - input: $(tasks.coverity-availability-check.results.STATUS) - operator: in - values: - - success - - name: coverity-availability-check - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: coverity-availability-check - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:db2b267dc15e4ed17f704ee91b8e9b38068e1a35b1018a328fdca621819d74c6 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-shell-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-shell-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:808bcaf75271db6a999f53fdefb973a385add94a277d37fbd3df68f8ac7dfaa3 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: sast-unicode-check - params: - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - - name: CACHI2_ARTIFACT - value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: sast-unicode-check-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.2@sha256:3ffa3ac35ad988767ae2202d1f2483ce3e8152b29b89e77620c26f32c1ad2e7e - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - - name: apply-tags - params: - - name: IMAGE_URL - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: apply-tags - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:517a51e260c0b59654a9d7b842e1ab07d76bce15ca7ce9c8fd2489a19be6463d - - name: kind - value: task - resolver: bundles - - name: push-dockerfile - params: - - name: IMAGE - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: IMAGE_DIGEST - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - - name: DOCKERFILE - value: $(params.dockerfile) - - name: CONTEXT - value: $(params.path-context) - - name: SOURCE_ARTIFACT - value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: push-dockerfile-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:5d8013b6a27bbc5e4ff261144616268f28417ed0950d583ef36349fcd59d3d3d - - name: kind - value: task - resolver: bundles - - name: rpms-signature-scan - params: - - name: image-url - value: $(tasks.build-image-index.results.IMAGE_URL) - - name: image-digest - value: $(tasks.build-image-index.results.IMAGE_DIGEST) - runAfter: - - build-image-index - taskRef: - params: - - name: name - value: rpms-signature-scan - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-rpms-signature-scan:0.2@sha256:1b6c20ab3dbfb0972803d3ebcb2fa72642e59400c77bd66dfd82028bdd09e120 - - name: kind - value: task - resolver: bundles - when: - - input: $(params.skip-checks) - operator: in - values: - - "false" - workspaces: - - name: git-auth - optional: true - - name: netrc - optional: true - taskRunTemplate: - serviceAccountName: build-pipeline-rhceph-9-0 + value: main + - name: pathInRepo + value: pipeline/build-rpm-package.yaml workspaces: - - name: git-auth - secret: - secretName: '{{ git_auth_secret }}' -status: {} + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' From 5b90ba32b125a7e1e834d16a5a1167aa7eed2aa6 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Mon, 28 Jul 2025 13:53:37 -0500 Subject: [PATCH 04/31] konflux: use quay.io/rhceph-ci/rhceph-rpms Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index b386d2be94e24..76bb8606f6c65 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -22,7 +22,7 @@ spec: params: - name: ociStorage #value: quay.io/redhat-user-workloads/rpm-build-pipeline-tenant/rhceph-test-package:on-pr-{{ pull_request_number }}-{{revision}} - value: quay.io/rhceph-dev/rhceph:on-pr-{{revision}}-rpms + value: quay.io/rhceph-ci/rhceph-rpms:on-pr-{{revision}}-rpms #value: quay.io/redhat-user-workloads/rhceph-rpms/rhceph:on-pr-{{revision}} - name: package-name value: rhceph From 0a4525cd27478b207600c8c725d2221269d4843c Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Mon, 28 Jul 2025 16:32:44 -0500 Subject: [PATCH 05/31] test: add rhceph.spec Signed-off-by: Andrew Schoen --- rhceph.spec | 2786 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2786 insertions(+) create mode 100644 rhceph.spec diff --git a/rhceph.spec b/rhceph.spec new file mode 100644 index 0000000000000..469d12f1690d4 --- /dev/null +++ b/rhceph.spec @@ -0,0 +1,2786 @@ + # +# spec file for package ceph +# +# Copyright (C) 2004-2019 The Ceph Project Developers. See COPYING file +# at the top-level directory of this distribution and at +# https://github.com/ceph/ceph/blob/master/COPYING +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. +# +# This file is under the GNU Lesser General Public License, version 2.1 +# +# Please submit bugfixes or comments via http://tracker.ceph.com/ +# + +# `rdopkg update-patches` will automatically update this macro: +%global commit e4cafe82fd26577be2b327c948130a6509c721af + + +################################################################################# +# conditional build section +# +# please read this for explanation of bcond syntax: +# https://rpm-software-management.github.io/rpm/manual/conditionalbuilds.html +################################################################################# +%bcond_with make_check +%bcond_with cmake_verbose_logging +%bcond_without ceph_test_package +%ifarch s390 +%bcond_with tcmalloc +%else +%bcond_without tcmalloc +%endif +%bcond_without rbd_ssd_cache +%ifarch x86_64 +%bcond_without rbd_rwl_cache +%else +%bcond_with rbd_rwl_cache +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%if 0%{?rhel} < 9 || 0%{?openEuler} +%bcond_with system_pmdk +%else +%ifarch s390x aarch64 +%bcond_with system_pmdk +%else +%bcond_without system_pmdk +%endif +%endif +%bcond_without selinux +%bcond_without amqp_endpoint +%bcond_without kafka_endpoint +%bcond_without lttng +%bcond_without libradosstriper +%bcond_without ocf +%global luarocks_package_name luarocks +%bcond_without lua_packages +%global _remote_tarball_prefix https://download.ceph.com/tarballs/ +%endif +%if 0%{?suse_version} +%ifarch s390x +%bcond_with system_pmdk +%else +%bcond_without system_pmdk +%endif +%bcond_with amqp_endpoint +%bcond_with cephfs_java +%bcond_with kafka_endpoint +%bcond_with libradosstriper +%ifarch x86_64 aarch64 ppc64le +%bcond_without lttng +%else +%bcond_with lttng +%endif +%bcond_with ocf +%bcond_with selinux +#Compat macro for _fillupdir macro introduced in Nov 2017 +%if ! %{defined _fillupdir} +%global _fillupdir /var/adm/fillup-templates +%endif +#luarocks +%if 0%{?is_opensuse} +# openSUSE +%bcond_without lua_packages +%if 0%{?sle_version} +# openSUSE Leap +%global luarocks_package_name lua53-luarocks +%else +# openSUSE Tumbleweed +%global luarocks_package_name lua54-luarocks +%endif +%else +# SLE +%bcond_with lua_packages +%endif +%endif +%bcond_with seastar +%if 0%{?suse_version} || 0%{?openEuler} +%bcond_with jaeger +%else +%bcond_without jaeger +%endif +%if 0%{?fedora} || 0%{?suse_version} >= 1500 || 0%{?rhel} >= 9 +# distros that ship cmd2 and/or colorama +%bcond_without cephfs_shell +%else +# distros that do _not_ ship cmd2/colorama +%bcond_with cephfs_shell +%endif +%if 0%{?fedora} || 0%{?rhel} >= 9 +%bcond_without system_arrow +%else +# for centos 8, utf8proc-devel comes from the subversion-devel module which isn't available in EPEL8 +# this is tracked in https://bugzilla.redhat.com/2152265 +%bcond_with system_arrow +%endif +# qat only supported for intel devices +%ifarch x86_64 +%if 0%{?fedora} || 0%{?rhel} >= 9 +%bcond_without system_qat +%else # not fedora/rhel +%bcond_with system_qat +%endif +%else # not x86_64 +%bcond_with system_qat +%endif +%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} >= 8 || 0%{?openEuler} +%global weak_deps 1 +%endif +%if %{with selinux} +# get selinux policy version +# Force 0.0.0 policy version for centos builds to avoid repository sync issues between rhel and centos +%if 0%{?centos} +%global _selinux_policy_version 0.0.0 +%else +%{!?_selinux_policy_version: %global _selinux_policy_version 0.0.0} +%endif +%endif +%bcond_without cephadm_bundling +%bcond_with cephadm_pip_deps + +%{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d} +%{!?tmpfiles_create: %global tmpfiles_create systemd-tmpfiles --create} +%{!?python3_pkgversion: %global python3_pkgversion 3} +%{!?python3_version_nodots: %global python3_version_nodots 3} +%{!?python3_version: %global python3_version 3} +%{!?gts_prefix: %global gts_prefix gcc-toolset-11} + +%if ! 0%{?suse_version} +# use multi-threaded xz compression: xz level 7 using ncpus threads +%global _source_payload w7T%{_smp_build_ncpus}.xzdio +%global _binary_payload w7T%{_smp_build_ncpus}.xzdio +%endif + +%define smp_limit_mem_per_job() %( \ + kb_per_job=%1 \ + kb_total=$(head -3 /proc/meminfo | sed -n 's/MemAvailable:\\s*\\(.*\\) kB.*/\\1/p') \ + jobs=$(( $kb_total / $kb_per_job )) \ + [ $jobs -lt 1 ] && jobs=1 \ + echo $jobs ) + +%if 0%{?_smp_ncpus_max} == 0 +%if 0%{?__isa_bits} == 32 +# 32-bit builds can use 3G memory max, which is not enough even for -j2 +%global _smp_ncpus_max 1 +%else +# 3.0 GiB mem per job +# SUSE distros use limit_build in the place of smp_limit_mem_per_job, please +# be sure to update it (in the build section, below) as well when changing this +# number. +%global _smp_ncpus_max %{smp_limit_mem_per_job 3200000} +%endif +%endif + +# disable -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1, as gcc-toolset-{10,11}-annobin +# do not provide gcc-annobin.so anymore, despite that they provide annobin.so. but +# redhat-rpm-config still passes -fplugin=gcc-annobin to the compiler. +%undefine _annotated_build +%if 0%{?rhel} == 8 && 0%{?enable_devtoolset11:1} +%enable_devtoolset11 +%endif + +################################################################################# +# main package definition +################################################################################# +Name: ceph +Version: 19.2.1 +Release: 237%{?dist} +%if 0%{?fedora} || 0%{?rhel} +Epoch: 2 +%endif + +# define _epoch_prefix macro which will expand to the empty string if epoch is +# undefined +%global _epoch_prefix %{?epoch:%{epoch}:} + +Summary: User space components of the Ceph file system +License: LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-3-Clause and MIT +%if 0%{?suse_version} +Group: System/Filesystems +%endif +URL: http://ceph.com/ +Source0: %{?_remote_tarball_prefix}%{name}-%{version}.tar.gz +Source1: %{name}-%{version}-%{commit}-changes.tar.gz +Source2: redhat_dashboard_frontend-%{version}-%{commit}.tar.gz +Source3: ibm_dashboard_frontend-%{version}-%{commit}.tar.gz +Source4: blake3-1.5.1-92e4cd71be48fdf9a79e88ef37b8f415ec5ac210.tar.bz2 +Source5: xxHash-0.8.2-bbb27a5efb85b92a0486cf361a8635715a53f6ba.tar.bz2 +Source6: s3select-0a0f6d4.patch +%if 0%{?suse_version} +# _insert_obs_source_lines_here +ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64 +%endif +################################################################################# +# dependencies that apply across all distro families +################################################################################# +Requires: ceph-osd = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mds = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mon = %{_epoch_prefix}%{version}-%{release} +Requires(post): binutils +%if 0%{with cephfs_java} +BuildRequires: java-devel +BuildRequires: jpackage-utils +BuildRequires: sharutils +%endif +%if 0%{with selinux} +BuildRequires: checkpolicy +BuildRequires: selinux-policy-devel +%endif +BuildRequires: gperf +BuildRequires: cmake > 3.5 +BuildRequires: fuse-devel +BuildRequires: git +BuildRequires: grpc-devel +%if 0%{?fedora} || 0%{?suse_version} > 1500 || 0%{?rhel} == 9 || 0%{?openEuler} +BuildRequires: gcc-c++ >= 11 +%endif +%if 0%{?suse_version} == 1500 +BuildRequires: gcc11-c++ +%endif +%if 0%{?rhel} == 8 +BuildRequires: %{gts_prefix}-gcc-c++ +BuildRequires: %{gts_prefix}-build +BuildRequires: %{gts_prefix}-libatomic-devel +%endif +%if 0%{?fedora} || 0%{?rhel} == 9 || 0%{?openEuler} +BuildRequires: libatomic +%endif +%if 0%{with tcmalloc} +# libprofiler did not build on ppc64le until 2.7.90 +%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} +BuildRequires: gperftools-devel >= 2.7.90 +%endif +%if 0%{?rhel} && 0%{?rhel} < 8 +BuildRequires: gperftools-devel >= 2.6.1 +%endif +%if 0%{?suse_version} +BuildRequires: gperftools-devel >= 2.4 +%endif +%endif +BuildRequires: libaio-devel +BuildRequires: libblkid-devel >= 2.17 +BuildRequires: cryptsetup-devel +BuildRequires: libnbd-devel +BuildRequires: libcurl-devel +BuildRequires: libcap-devel +BuildRequires: libcap-ng-devel +BuildRequires: fmt-devel >= 6.2.1 +BuildRequires: pkgconfig(libudev) +BuildRequires: libnl3-devel +BuildRequires: liboath-devel +BuildRequires: libtool +BuildRequires: libxml2-devel +BuildRequires: make +BuildRequires: ncurses-devel +BuildRequires: libicu-devel +BuildRequires: patch +BuildRequires: perl +BuildRequires: pkgconfig +BuildRequires: procps +BuildRequires: python%{python3_pkgversion} +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-setuptools +BuildRequires: python%{python3_pkgversion}-Cython +BuildRequires: snappy-devel +BuildRequires: sqlite-devel +BuildRequires: sudo +BuildRequires: pkgconfig(udev) +BuildRequires: valgrind-devel +BuildRequires: which +BuildRequires: xfsprogs-devel +BuildRequires: xmlstarlet +BuildRequires: nasm +BuildRequires: lua-devel +BuildRequires: lmdb-devel +%if 0%{with seastar} || 0%{with jaeger} +BuildRequires: yaml-cpp-devel >= 0.6 +%endif +%if 0%{with amqp_endpoint} +BuildRequires: librabbitmq-devel +%endif +%if 0%{with kafka_endpoint} +BuildRequires: librdkafka-devel +%endif +%if 0%{with lua_packages} +Requires: lua-devel +Requires: %{luarocks_package_name} +%endif +%if 0%{with make_check} +BuildRequires: hostname +BuildRequires: jq +BuildRequires: libuuid-devel +BuildRequires: python%{python3_pkgversion}-bcrypt +BuildRequires: python%{python3_pkgversion}-pecan +BuildRequires: python%{python3_pkgversion}-requests +BuildRequires: python%{python3_pkgversion}-dateutil +BuildRequires: python%{python3_pkgversion}-coverage +BuildRequires: python%{python3_pkgversion}-pyOpenSSL +BuildRequires: socat +BuildRequires: python%{python3_pkgversion}-asyncssh +BuildRequires: python%{python3_pkgversion}-natsort +%endif +%if 0%{?suse_version} +BuildRequires: libthrift-devel >= 0.13.0 +%else +BuildRequires: thrift-devel >= 0.13.0 +%endif +BuildRequires: re2-devel +%if 0%{with jaeger} +BuildRequires: bison +BuildRequires: flex +%if 0%{?fedora} || 0%{?rhel} +BuildRequires: json-devel +%endif +%if 0%{?suse_version} +BuildRequires: nlohmann_json-devel +%endif +BuildRequires: libevent-devel +%endif +%if 0%{with system_pmdk} +%if 0%{?suse_version} +BuildRequires: libndctl-devel >= 63 +%else +BuildRequires: ndctl-devel >= 63 +BuildRequires: daxctl-devel >= 63 +%endif +BuildRequires: libpmem-devel +BuildRequires: libpmemobj-devel >= 1.8 +%endif +%if 0%{with system_arrow} +BuildRequires: libarrow-devel +BuildRequires: parquet-libs-devel +BuildRequires: utf8proc-devel +%endif +%if 0%{with system_qat} +BuildRequires: qatlib-devel +BuildRequires: qatzip-devel +%endif +%if 0%{with seastar} +BuildRequires: c-ares-devel +BuildRequires: gnutls-devel +BuildRequires: hwloc-devel +BuildRequires: libpciaccess-devel +BuildRequires: lksctp-tools-devel +BuildRequires: ragel +BuildRequires: systemtap-sdt-devel +BuildRequires: libubsan +BuildRequires: libasan +BuildRequires: protobuf-devel +BuildRequires: protobuf-compiler +%if 0%{?rhel} == 8 +BuildRequires: %{gts_prefix}-annobin +BuildRequires: %{gts_prefix}-annobin-plugin-gcc +BuildRequires: %{gts_prefix}-libubsan-devel +BuildRequires: %{gts_prefix}-libasan-devel +%endif +%endif +################################################################################# +# distro-conditional dependencies +################################################################################# +%if 0%{?suse_version} +BuildRequires: pkgconfig(systemd) +BuildRequires: systemd-rpm-macros +%{?systemd_requires} +PreReq: %fillup_prereq +BuildRequires: fdupes +BuildRequires: memory-constraints +BuildRequires: net-tools +BuildRequires: libbz2-devel +BuildRequires: mozilla-nss-devel +BuildRequires: keyutils-devel +BuildRequires: libopenssl-devel +BuildRequires: ninja +BuildRequires: openldap2-devel +#BuildRequires: krb5 +#BuildRequires: krb5-devel +BuildRequires: cunit-devel +BuildRequires: python%{python3_pkgversion}-PrettyTable +BuildRequires: python%{python3_pkgversion}-PyYAML +BuildRequires: python%{python3_pkgversion}-Sphinx +BuildRequires: rdma-core-devel +BuildRequires: liblz4-devel >= 1.7 +# for prometheus-alerts +BuildRequires: golang-github-prometheus-prometheus +BuildRequires: jsonnet +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +Requires: systemd +BuildRequires: boost-random +BuildRequires: nss-devel +BuildRequires: keyutils-libs-devel +BuildRequires: libatomic +BuildRequires: libibverbs-devel +BuildRequires: librdmacm-devel +BuildRequires: ninja-build +BuildRequires: openldap-devel +#BuildRequires: krb5-devel +BuildRequires: openssl-devel +BuildRequires: CUnit-devel +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-prettytable +BuildRequires: python%{python3_pkgversion}-pyyaml +BuildRequires: python%{python3_pkgversion}-sphinx +BuildRequires: lz4-devel >= 1.7 +%endif +# distro-conditional make check dependencies +%if 0%{with make_check} +BuildRequires: golang +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +BuildRequires: golang-github-prometheus +BuildRequires: libtool-ltdl-devel +BuildRequires: xmlsec1 +BuildRequires: xmlsec1-devel +%ifarch x86_64 +BuildRequires: xmlsec1-nss +%endif +BuildRequires: xmlsec1-openssl +BuildRequires: xmlsec1-openssl-devel +BuildRequires: python%{python3_pkgversion}-cherrypy +BuildRequires: python%{python3_pkgversion}-jwt +BuildRequires: python%{python3_pkgversion}-routes +BuildRequires: python%{python3_pkgversion}-scipy +BuildRequires: python%{python3_pkgversion}-werkzeug +BuildRequires: python%{python3_pkgversion}-zstandard +BuildRequires: python%{python3_pkgversion}-pyOpenSSL +%endif +%if 0%{?suse_version} +BuildRequires: golang-github-prometheus-prometheus +BuildRequires: jsonnet +BuildRequires: libxmlsec1-1 +BuildRequires: libxmlsec1-nss1 +BuildRequires: libxmlsec1-openssl1 +BuildRequires: python%{python3_pkgversion}-CherryPy +BuildRequires: python%{python3_pkgversion}-Routes +BuildRequires: python%{python3_pkgversion}-Werkzeug +BuildRequires: python%{python3_pkgversion}-numpy-devel +BuildRequires: xmlsec1-devel +BuildRequires: xmlsec1-openssl-devel +%endif +%endif +# lttng and babeltrace for rbd-replay-prep +%if %{with lttng} +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +BuildRequires: lttng-ust-devel +BuildRequires: libbabeltrace-devel +%endif +%if 0%{?suse_version} +BuildRequires: lttng-ust-devel +BuildRequires: babeltrace-devel +%endif +%endif +%if 0%{?suse_version} +BuildRequires: libexpat-devel +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +BuildRequires: expat-devel +%endif +#hardened-cc1 +%if 0%{?fedora} || 0%{?rhel} +BuildRequires: redhat-rpm-config +%endif +%if 0%{?openEuler} +BuildRequires: openEuler-rpm-config +%endif +%if 0%{with seastar} +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +BuildRequires: cryptopp-devel +BuildRequires: numactl-devel +%endif +%if 0%{?suse_version} +BuildRequires: libcryptopp-devel +BuildRequires: libnuma-devel +%endif +%endif +%if 0%{?rhel} >= 8 +BuildRequires: /usr/bin/pathfix.py +%endif + +%description +Ceph is a massively scalable, open-source, distributed storage system that runs +on commodity hardware and delivers object, block and file system storage. + + +################################################################################# +# subpackages +################################################################################# +%package base +Summary: Ceph Base Package +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Provides: ceph-test:/usr/bin/ceph-kvstore-tool +Requires: ceph-common = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +%if 0%{with selinux} +Requires: ceph-selinux = %{_epoch_prefix}%{version}-%{release} +%endif +Requires: findutils +Requires: grep +Requires: logrotate +Requires: psmisc +Requires: util-linux +Requires: which +%if 0%{?rhel} && 0%{?rhel} < 8 +# The following is necessary due to tracker 36508 and can be removed once the +# associated upstream bugs are resolved. +%if 0%{with tcmalloc} +Requires: gperftools-libs >= 2.6.1 +%endif +%endif +%if 0%{?weak_deps} +Recommends: chrony +Recommends: nvme-cli +%if 0%{?suse_version} +Requires: smartmontools +%else +Recommends: smartmontools +%endif +%endif +%description base +Base is the package that includes all the files shared amongst ceph servers + +%package -n cephadm +Summary: Utility to bootstrap Ceph clusters +BuildArch: noarch +Requires: lvm2 +Requires: python%{python3_pkgversion} +Requires: openssh-server +Requires: which +%if 0%{?weak_deps} +Recommends: podman >= 2.0.2 +%endif +%if 0%{with cephadm_bundling} +%if 0%{without cephadm_pip_deps} +BuildRequires: python3-jinja2 >= 2.10 +%endif +%else +Requires: python3-jinja2 >= 2.10 +%endif +%description -n cephadm +Utility to bootstrap a Ceph cluster and manage Ceph daemons deployed +with systemd and podman. + +%package -n ceph-common +Summary: Ceph Common +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rbd = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-cephfs = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rgw = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-ceph-argparse = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release} +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +Requires: python%{python3_pkgversion}-prettytable +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-PrettyTable +%endif +%if 0%{with libradosstriper} +Requires: libradosstriper1 = %{_epoch_prefix}%{version}-%{release} +%endif +%{?systemd_requires} +%if 0%{?suse_version} +Requires(pre): pwdutils +%endif +%description -n ceph-common +Common utilities to mount and interact with a ceph storage cluster. +Comprised of files that are common to Ceph clients and servers. + +%package mds +Summary: Ceph Metadata Server Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%description mds +ceph-mds is the metadata server daemon for the Ceph distributed file system. +One or more instances of ceph-mds collectively manage the file system +namespace, coordinating access to the shared OSD cluster. + +%package mon +Summary: Ceph Monitor Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Provides: ceph-test:/usr/bin/ceph-monstore-tool +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%description mon +ceph-mon is the cluster monitor daemon for the Ceph distributed file +system. One or more instances of ceph-mon form a Paxos part-time +parliament cluster that provides extremely reliable and durable storage +of cluster membership, configuration, and state. + +%package mon-client-nvmeof +Summary: Ceph NVMeoF Gateway Monitor Client +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Provides: ceph-test:/usr/bin/ceph-nvmeof-monitor-client +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description mon-client-nvmeof +Ceph NVMeoF Gateway Monitor Client distributes Paxos ANA info +to NVMeoF Gateway and provides beacons to the monitor daemo + +%package mgr +Summary: Ceph Manager Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mgr-modules-core = %{_epoch_prefix}%{version}-%{release} +Requires: libcephsqlite = %{_epoch_prefix}%{version}-%{release} +%if 0%{?weak_deps} +Recommends: ceph-mgr-dashboard = %{_epoch_prefix}%{version}-%{release} +Recommends: ceph-mgr-diskprediction-local = %{_epoch_prefix}%{version}-%{release} +Recommends: ceph-mgr-k8sevents = %{_epoch_prefix}%{version}-%{release} +Recommends: ceph-mgr-cephadm = %{_epoch_prefix}%{version}-%{release} +Recommends: python%{python3_pkgversion}-influxdb +%endif +%description mgr +ceph-mgr enables python modules that provide services (such as the REST +module derived from Calamari) and expose CLI hooks. ceph-mgr gathers +the cluster maps, the daemon metadata, and performance counters, and +exposes all these to the python modules. + +%package mgr-dashboard +Summary: Ceph Dashboard +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-grafana-dashboards = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-prometheus-alerts = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-setuptools +%if 0%{?fedora} || 0%{?rhel} >= 9 +Requires: python%{python3_pkgversion}-grpcio +Requires: python%{python3_pkgversion}-grpcio-tools +Requires: python%{python3_pkgversion}-jmespath +Requires: python%{python3_pkgversion}-xmltodict +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +Requires: python%{python3_pkgversion}-cherrypy +Requires: python%{python3_pkgversion}-routes +Requires: python%{python3_pkgversion}-werkzeug +%if 0%{?weak_deps} +Recommends: python%{python3_pkgversion}-saml +%if 0%{?fedora} || 0%{?rhel} <= 8 +Recommends: python%{python3_pkgversion}-grpcio +Recommends: python%{python3_pkgversion}-grpcio-tools +%endif +%endif +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-CherryPy +Requires: python%{python3_pkgversion}-Routes +Requires: python%{python3_pkgversion}-Werkzeug +Recommends: python%{python3_pkgversion}-python3-saml +%endif +%description mgr-dashboard +ceph-mgr-dashboard is a manager module, providing a web-based application +to monitor and manage many aspects of a Ceph cluster and related components. +See the Dashboard documentation at http://docs.ceph.com/ for details and a +detailed feature overview. + +%package mgr-diskprediction-local +Summary: Ceph Manager module for predicting disk failures +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-numpy +%if 0%{?fedora} || 0%{?suse_version} || 0%{?openEuler} +Requires: python%{python3_pkgversion}-scikit-learn +%endif +Requires: python3-scipy +%description mgr-diskprediction-local +ceph-mgr-diskprediction-local is a ceph-mgr module that tries to predict +disk failures using local algorithms and machine-learning databases. + +%package mgr-modules-core +Summary: Ceph Manager modules which are always enabled +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: python%{python3_pkgversion}-bcrypt +Requires: python%{python3_pkgversion}-pecan +Requires: python%{python3_pkgversion}-pyOpenSSL +Requires: python%{python3_pkgversion}-requests +Requires: python%{python3_pkgversion}-dateutil +Requires: python%{python3_pkgversion}-setuptools +%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} +Requires: python%{python3_pkgversion}-cherrypy +Requires: python%{python3_pkgversion}-pyyaml +Requires: python%{python3_pkgversion}-werkzeug +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-CherryPy +Requires: python%{python3_pkgversion}-PyYAML +Requires: python%{python3_pkgversion}-Werkzeug +%endif +# RHEL8 has python 3.6 and that lacks dataclasses in the stdlib, so pull in the +# backport dataclasses module instead. +%if 0%{?rhel} <= 8 +Requires: python%{python3_pkgversion}-dataclasses +%endif +%if 0%{?weak_deps} +Recommends: ceph-mgr-rook = %{_epoch_prefix}%{version}-%{release} +%endif +%description mgr-modules-core +ceph-mgr-modules-core provides a set of modules which are always +enabled by ceph-mgr. + +%package mgr-rook +BuildArch: noarch +Summary: Ceph Manager module for Rook-based orchestration +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-kubernetes +Requires: python%{python3_pkgversion}-jsonpatch +%description mgr-rook +ceph-mgr-rook is a ceph-mgr module for orchestration functions using +a Rook backend. + +%package mgr-k8sevents +BuildArch: noarch +Summary: Ceph Manager module to orchestrate ceph-events to kubernetes' events API +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-kubernetes +%description mgr-k8sevents +ceph-mgr-k8sevents is a ceph-mgr module that sends every ceph-events +to kubernetes' events API + +%package mgr-cephadm +Summary: Ceph Manager module for cephadm-based orchestration +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-asyncssh +Requires: python%{python3_pkgversion}-natsort +Requires: cephadm = %{_epoch_prefix}%{version}-%{release} +%if 0%{?suse_version} +Requires: openssh +Requires: python%{python3_pkgversion}-CherryPy +Requires: python%{python3_pkgversion}-Jinja2 +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Requires: openssh-clients +Requires: python%{python3_pkgversion}-cherrypy +Requires: python%{python3_pkgversion}-jinja2 +%endif +%description mgr-cephadm +ceph-mgr-cephadm is a ceph-mgr module for orchestration functions using +the integrated cephadm deployment tool management operations. + +%package mgr-callhome +Summary: Ceph Manager module for monitoring clusters in IBM environments +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-jwt +Requires: python%{python3_pkgversion}-zstandard +%description mgr-callhome +ceph-mgr-callhome is a ceph.mgr module which sends data about the Ceph + cluster to IBM systems like IBM Call Home or IBM storage Insights. + +%package fuse +Summary: Ceph fuse-based client +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: fuse +Requires: python%{python3_pkgversion} +%description fuse +FUSE based client for Ceph distributed network file system + +%package -n cephfs-mirror +Summary: Ceph daemon for mirroring CephFS snapshots +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +%description -n cephfs-mirror +Daemon for mirroring CephFS snapshots between Ceph clusters. + +%package -n ceph-exporter +Summary: Daemon for exposing perf counters as Prometheus metrics +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%description -n ceph-exporter +Daemon for exposing perf counters as Prometheus metrics + +%package -n rbd-fuse +Summary: Ceph fuse-based client +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +%description -n rbd-fuse +FUSE based client to map Ceph rbd images to files + +%package -n rbd-mirror +Summary: Ceph daemon for mirroring RBD images +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +%description -n rbd-mirror +Daemon for mirroring RBD images between Ceph clusters, streaming +changes asynchronously. + +%package immutable-object-cache +Summary: Ceph daemon for immutable object cache +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description immutable-object-cache +Daemon for immutable object cache. + +%package -n rbd-nbd +Summary: Ceph RBD client base on NBD +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +%description -n rbd-nbd +NBD based client to map Ceph rbd images to local device + +%package radosgw +Summary: Rados REST gateway +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%if 0%{with selinux} +Requires: ceph-selinux = %{_epoch_prefix}%{version}-%{release} +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Requires: mailcap +%endif +%if 0%{?weak_deps} +Recommends: gawk +%endif +%description radosgw +RADOS is a distributed object store used by the Ceph distributed +storage system. This package provides a REST gateway to the +object store that aims to implement a superset of Amazon's S3 +service as well as the OpenStack Object Storage ("Swift") API. + +%package -n cephfs-top +Summary: top(1) like utility for Ceph Filesystem +BuildArch: noarch +Requires: python%{python3_pkgversion}-rados +%description -n cephfs-top +This package provides a top(1) like utility to display Ceph Filesystem metrics +in realtime. + +%if %{with ocf} +%package resource-agents +Summary: OCF-compliant resource agents for Ceph daemons +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version} +Requires: resource-agents +%description resource-agents +Resource agents for monitoring and managing Ceph daemons +under Open Cluster Framework (OCF) compliant resource +managers such as Pacemaker. +%endif + +%package osd +Summary: Ceph Object Storage Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Provides: ceph-test:/usr/bin/ceph-osdomap-tool +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: sudo +Requires: libstoragemgmt +%if 0%{with seastar} +Requires: protobuf +%endif +%if 0%{?weak_deps} +Recommends: ceph-volume = %{_epoch_prefix}%{version}-%{release} +%endif +%description osd +ceph-osd is the object storage daemon for the Ceph distributed file +system. It is responsible for storing objects on a local file system +and providing access to them over the network. + +%if 0%{with seastar} +%package crimson-osd +Summary: Ceph Object Storage Daemon (crimson) +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-osd = %{_epoch_prefix}%{version}-%{release} +Requires: binutils +%description crimson-osd +crimson-osd is the object storage daemon for the Ceph distributed file +system. It is responsible for storing objects on a local file system +and providing access to them over the network. +%endif + +%package volume +Summary: Ceph OSD deployment and inspection tool +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-osd = %{_epoch_prefix}%{version}-%{release} +Requires: cryptsetup +Requires: e2fsprogs +Requires: lvm2 +Requires: parted +Requires: util-linux +Requires: xfsprogs +Requires: python%{python3_pkgversion}-setuptools +Requires: python%{python3_pkgversion}-packaging +Requires: python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release} +%description volume +This package contains a tool to deploy OSD with different devices like +lvm or physical disks, and trying to follow a predictable, and robust +way of preparing, activating, and starting the deployed OSD. + +%package -n librados2 +Summary: RADOS distributed object store client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} +%endif +%description -n librados2 +RADOS is a reliable, autonomic distributed object storage cluster +developed as part of the Ceph distributed storage system. This is a +shared library allowing applications to access the distributed object +store using a simple file-like interface. + +%package -n librados-devel +Summary: RADOS headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: librados2-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: librados2-devel < %{_epoch_prefix}%{version}-%{release} +%description -n librados-devel +This package contains C libraries and headers needed to develop programs +that use RADOS object store. + +%package -n libradospp-devel +Summary: RADOS headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +%description -n libradospp-devel +This package contains C++ libraries and headers needed to develop programs +that use RADOS object store. + +%package -n librgw2 +Summary: RADOS gateway client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description -n librgw2 +This package provides a library implementation of the RADOS gateway +(distributed object store with S3 and Swift personalities). + +%package -n librgw-devel +Summary: RADOS gateway client library +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +Provides: librgw2-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: librgw2-devel < %{_epoch_prefix}%{version}-%{release} +%description -n librgw-devel +This package contains libraries and headers needed to develop programs +that use RADOS gateway client library. + +%package -n python%{python3_pkgversion}-rgw +Summary: Python 3 libraries for the RADOS gateway +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-rgw} +Provides: python-rgw = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-rgw < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-rgw +This package contains Python 3 libraries for interacting with Ceph RADOS +gateway. + +%package -n python%{python3_pkgversion}-rados +Summary: Python 3 libraries for the RADOS object store +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: python%{python3_pkgversion} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-rados} +Provides: python-rados = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-rados < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-rados +This package contains Python 3 libraries for interacting with Ceph RADOS +object store. + +%package -n libcephsqlite +Summary: SQLite3 VFS for Ceph +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephsqlite +A SQLite3 VFS for storing and manipulating databases stored on Ceph's RADOS +distributed object store. + +%package -n libcephsqlite-devel +Summary: SQLite3 VFS for Ceph headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: sqlite-devel +Requires: libcephsqlite = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libcephsqlite-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libcephsqlite-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libcephsqlite-devel +A SQLite3 VFS for storing and manipulating databases stored on Ceph's RADOS +distributed object store. + +%if 0%{with libradosstriper} +%package -n libradosstriper1 +Summary: RADOS striping interface +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description -n libradosstriper1 +Striping interface built on top of the rados library, allowing +to stripe bigger objects onto several standard rados objects using +an interface very similar to the rados one. + +%package -n libradosstriper-devel +Summary: RADOS striping interface headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: libradosstriper1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libradosstriper1-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libradosstriper1-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libradosstriper-devel +This package contains libraries and headers needed to develop programs +that use RADOS striping interface. +%endif + +%package -n librbd1 +Summary: RADOS block device client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%if 0%{?suse_version} +Requires(post): coreutils +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} +%endif +%description -n librbd1 +RBD is a block device striped across multiple distributed objects in +RADOS, a reliable, autonomic distributed object storage cluster +developed as part of the Ceph distributed storage system. This is a +shared library allowing applications to manage these block devices. + +%package -n librbd-devel +Summary: RADOS block device headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: librbd1-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: librbd1-devel < %{_epoch_prefix}%{version}-%{release} +%description -n librbd-devel +This package contains libraries and headers needed to develop programs +that use RADOS block device. + +%package -n python%{python3_pkgversion}-rbd +Summary: Python 3 libraries for the RADOS block device +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-rbd} +Provides: python-rbd = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-rbd < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-rbd +This package contains Python 3 libraries for interacting with Ceph RADOS +block device. + +%package -n libcephfs2 +Summary: Ceph distributed file system client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +Obsoletes: libcephfs1 < %{_epoch_prefix}%{version}-%{release} +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-libcephfs +%endif +Recommends: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs2 +Ceph is a distributed network file system designed to provide excellent +performance, reliability, and scalability. This is a shared library +allowing applications to access a Ceph distributed file system via a +POSIX-like interface. + +%package -n libcephfs-proxy2 +Summary: Proxy for libcephfs +%if 0%{?suse_version} +Group: System/Libraries +%endif +Recommends: libcephfs-daemon = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs-proxy2 +This package contains the libcephfs_proxy.so library that allow applications +to share cephfs mounts to reduce resource consumption. + +%package -n libcephfs-daemon +Summary: Daemon for the libcephfs proxy +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs-daemon +This package contains the libcephfsd daemon that allows applications to share +cephfs mounts to reduce resource consumption. + +%package -n libcephfs-devel +Summary: Ceph distributed file system headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libcephfs2-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libcephfs2-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs-devel +This package contains libraries and headers needed to develop programs +that use Ceph distributed file system. + +%package -n python%{python3_pkgversion}-cephfs +Summary: Python 3 libraries for Ceph distributed file system +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-ceph-argparse = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-cephfs} +Provides: python-cephfs = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-cephfs < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-cephfs +This package contains Python 3 libraries for interacting with Ceph distributed +file system. + +%package -n python%{python3_pkgversion}-ceph-argparse +Summary: Python 3 utility libraries for Ceph CLI +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +%{?python_provide:%python_provide python%{python3_pkgversion}-ceph-argparse} +%description -n python%{python3_pkgversion}-ceph-argparse +This package contains types and routines for Python 3 used by the Ceph CLI as +well as the RESTful interface. These have to do with querying the daemons for +command-description information, validating user command input against those +descriptions, and submitting the command to the appropriate daemon. + +%package -n python%{python3_pkgversion}-ceph-common +Summary: Python 3 utility libraries for Ceph +%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} +Requires: python%{python3_pkgversion}-pyyaml +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-PyYAML +%endif +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +%{?python_provide:%python_provide python%{python3_pkgversion}-ceph-common} +%description -n python%{python3_pkgversion}-ceph-common +This package contains data structures, classes and functions used by Ceph. +It also contains utilities used for the cephadm orchestrator. + +%if 0%{with cephfs_shell} +%package -n cephfs-shell +Summary: Interactive shell for Ceph file system +Requires: python%{python3_pkgversion}-cmd2 +Requires: python%{python3_pkgversion}-colorama +Requires: python%{python3_pkgversion}-cephfs +%description -n cephfs-shell +This package contains an interactive tool that allows accessing a Ceph +file system without mounting it by providing a nice pseudo-shell which +works like an FTP client. +%endif + +%if 0%{with ceph_test_package} +%package -n ceph-test +Summary: Ceph benchmarks and test tools +%if 0%{?suse_version} +Group: System/Benchmark +%endif +Requires: ceph-common = %{_epoch_prefix}%{version}-%{release} +Requires: xmlstarlet +Requires: jq +Requires: socat +%description -n ceph-test +This package contains Ceph benchmarks and test tools. +%endif + +%if 0%{with cephfs_java} + +%package -n libcephfs_jni1 +Summary: Java Native Interface library for CephFS Java bindings +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: java +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs_jni1 +This package contains the Java Native Interface library for CephFS Java +bindings. + +%package -n libcephfs_jni-devel +Summary: Development files for CephFS Java Native Interface library +%if 0%{?suse_version} +Group: Development/Libraries/Java +%endif +Requires: java +Requires: libcephfs_jni1 = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libcephfs_jni1-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libcephfs_jni1-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs_jni-devel +This package contains the development files for CephFS Java Native Interface +library. + +%package -n cephfs-java +Summary: Java libraries for the Ceph File System +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: java +Requires: libcephfs_jni1 = %{_epoch_prefix}%{version}-%{release} +Requires: junit +BuildRequires: junit +%description -n cephfs-java +This package contains the Java libraries for the Ceph File System. + +%endif + +%package -n rados-objclass-devel +Summary: RADOS object class development kit +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +%description -n rados-objclass-devel +This package contains libraries and headers needed to develop RADOS object +class plugins. + +%if 0%{with selinux} + +%package selinux +Summary: SELinux support for Ceph MON, OSD and MDS +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: policycoreutils, libselinux-utils +Requires(post): ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires(post): selinux-policy-base >= %{_selinux_policy_version}, policycoreutils, gawk +Requires(postun): policycoreutils +%description selinux +This package contains SELinux support for Ceph MON, OSD and MDS. The package +also performs file-system relabelling which can take a long time on heavily +populated file-systems. + +%endif + +%package grafana-dashboards +Summary: The set of Grafana dashboards for monitoring purposes +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +%description grafana-dashboards +This package provides a set of Grafana dashboards for monitoring of +Ceph clusters. The dashboards require a Prometheus server setup +collecting data from Ceph Manager "prometheus" module and Prometheus +project "node_exporter" module. The dashboards are designed to be +integrated with the Ceph Manager Dashboard web UI. + +%package prometheus-alerts +Summary: Prometheus alerts for a Ceph deployment +BuildArch: noarch +Group: System/Monitoring +%description prometheus-alerts +This package provides Ceph default alerts for Prometheus. + +%package mib +Summary: MIB for SNMP alerts +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Monitoring +%endif +%description mib +This package provides a Ceph MIB for SNMP traps. + +%package node-proxy +Summary: hw monitoring agent for Ceph +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Monitoring +%endif +%description node-proxy +This package provides a Ceph hardware monitoring agent. + +################################################################################# +# common +################################################################################# +%prep +%autosetup -p1 +# Apply the rdopkg-tar patches +%autosetup -T -D -b 1 +# Remove the old dashboard dist +rm -rf src/pybind/mgr/dashboard/frontend/dist +# Apply new dashboard dists +%autosetup -T -D -a 2 +%autosetup -T -D -a 3 +%autosetup -T -D -a 4 # BLAKE3 +%autosetup -T -D -a 5 # xxHash +# submodule patches must be handled separately +# https://github.com/redhat-openstack/rdopkg/issues/16 +pushd src/s3select + patch -p1 --fuzz=0 -i %{SOURCE6} +popd + +# Rewrite .git_version file. +echo %{commit} > src/.git_version +echo %{version}-%{release} >> src/.git_version + +%build +# Disable lto on systems that do not support symver attribute +# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200 for details +%if ( 0%{?rhel} && 0%{?rhel} < 9 ) || ( 0%{?suse_version} && 0%{?suse_version} <= 1500 ) +%define _lto_cflags %{nil} +%endif + +%if 0%{with cephfs_java} +# Find jni.h +for i in /usr/{lib64,lib}/jvm/java/include{,/linux}; do + [ -d $i ] && java_inc="$java_inc -I$i" +done +%endif + +%if 0%{?suse_version} +%limit_build -m 3000 +%endif + +export CPPFLAGS="$java_inc" +export CFLAGS="$RPM_OPT_FLAGS" +export CXXFLAGS="$RPM_OPT_FLAGS" +export LDFLAGS="$RPM_LD_FLAGS" + +%if 0%{with seastar} +# seastar uses longjmp() to implement coroutine. and this annoys longjmp_chk() +export CXXFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g') +# remove from CFLAGS too because it causes the arrow submodule to fail with: +# warning _FORTIFY_SOURCE requires compiling with optimization (-O) +export CFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g') +%endif + +env | sort + +%{?!_vpath_builddir:%global _vpath_builddir %{_target_platform}} + +# TODO: drop this step once we can use `cmake -B` +mkdir -p %{_vpath_builddir} +pushd %{_vpath_builddir} +cmake .. \ +%if 0%{?suse_version} == 1500 + -DCMAKE_C_COMPILER=gcc-11 \ + -DCMAKE_CXX_COMPILER=g++-11 \ +%endif + -DCMAKE_INSTALL_PREFIX=%{_prefix} \ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \ + -DCMAKE_INSTALL_LIBEXECDIR:PATH=%{_libexecdir} \ + -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=%{_localstatedir} \ + -DCMAKE_INSTALL_SYSCONFDIR:PATH=%{_sysconfdir} \ + -DCMAKE_INSTALL_MANDIR:PATH=%{_mandir} \ + -DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/ceph \ + -DCMAKE_INSTALL_INCLUDEDIR:PATH=%{_includedir} \ + -DSYSTEMD_SYSTEM_UNIT_DIR:PATH=%{_unitdir} \ + -DWITH_MANPAGE:BOOL=ON \ + -DWITH_PYTHON3:STRING=%{python3_version} \ + -DWITH_MGR_DASHBOARD_FRONTEND:BOOL=OFF \ +%if 0%{?suse_version} + -DWITH_RADOSGW_SELECT_PARQUET:BOOL=OFF \ +%endif +%if 0%{without ceph_test_package} + -DWITH_TESTS:BOOL=OFF \ +%endif +%if 0%{with cephfs_java} + -DJAVA_HOME=%{java_home} \ + -DJAVA_LIB_INSTALL_DIR=%{_jnidir} \ + -DWITH_CEPHFS_JAVA:BOOL=ON \ +%endif +%if 0%{with selinux} + -DWITH_SELINUX:BOOL=ON \ +%endif +%if %{with lttng} + -DWITH_LTTNG:BOOL=ON \ + -DWITH_BABELTRACE:BOOL=ON \ +%else + -DWITH_LTTNG:BOOL=OFF \ + -DWITH_BABELTRACE:BOOL=OFF \ +%endif + $CEPH_EXTRA_CMAKE_ARGS \ +%if 0%{with ocf} + -DWITH_OCF:BOOL=ON \ +%endif +%if 0%{with cephfs_shell} + -DWITH_CEPHFS_SHELL:BOOL=ON \ +%endif +%if 0%{with libradosstriper} + -DWITH_LIBRADOSSTRIPER:BOOL=ON \ +%else + -DWITH_LIBRADOSSTRIPER:BOOL=OFF \ +%endif +%if 0%{with amqp_endpoint} + -DWITH_RADOSGW_AMQP_ENDPOINT:BOOL=ON \ +%else + -DWITH_RADOSGW_AMQP_ENDPOINT:BOOL=OFF \ +%endif +%if 0%{with kafka_endpoint} + -DWITH_RADOSGW_KAFKA_ENDPOINT:BOOL=ON \ +%else + -DWITH_RADOSGW_KAFKA_ENDPOINT:BOOL=OFF \ +%endif +%if 0%{without lua_packages} + -DWITH_RADOSGW_LUA_PACKAGES:BOOL=OFF \ +%endif +%if 0%{with cmake_verbose_logging} + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ +%endif +%if 0%{with rbd_rwl_cache} + -DWITH_RBD_RWL:BOOL=ON \ +%endif +%if 0%{with rbd_ssd_cache} + -DWITH_RBD_SSD_CACHE:BOOL=ON \ +%endif +%if 0%{with system_pmdk} + -DWITH_SYSTEM_PMDK:BOOL=ON \ +%endif +%if 0%{without jaeger} + -DWITH_JAEGER:BOOL=OFF \ +%endif +%if 0%{?suse_version} + -DBOOST_J:STRING=%{jobs} \ +%else + -DBOOST_J:STRING=%{_smp_build_ncpus} \ +%endif +%if 0%{?rhel} + -DWITH_FMT_HEADER_ONLY:BOOL=ON \ +%endif +%if 0%{with system_arrow} + -DWITH_SYSTEM_ARROW:BOOL=ON \ + -DWITH_SYSTEM_UTF8PROC:BOOL=ON \ +%endif +%if 0%{with system_qat} + -DWITH_SYSTEM_QATLIB:BOOL=ON \ + -DWITH_SYSTEM_QATZIP:BOOL=ON \ +%endif +%if 0%{with seastar} + -DWITH_SEASTAR:BOOL=ON \ + -DWITH_JAEGER:BOOL=OFF \ +%endif + -DWITH_GRAFANA:BOOL=ON \ +%if 0%{with cephadm_bundling} +%if 0%{with cephadm_pip_deps} + -DCEPHADM_BUNDLED_DEPENDENCIES=pip +%else + -DCEPHADM_BUNDLED_DEPENDENCIES=rpm +%endif +%else + -DCEPHADM_BUNDLED_DEPENDENCIES=none +%endif + +%if %{with cmake_verbose_logging} +cat ./CMakeFiles/CMakeOutput.log +cat ./CMakeFiles/CMakeError.log +%endif + +%if 0%{?suse_version} +make %{_smp_mflags} +%else +%make_build +%endif + +popd + +%if 0%{with make_check} +%check +# run in-tree unittests +pushd %{_vpath_builddir} +ctest %{_smp_mflags} +popd +%endif + + +%install + +pushd %{_vpath_builddir} +%make_install +# we have dropped sysvinit bits +rm -f %{buildroot}/%{_sysconfdir}/init.d/ceph +popd + +%if 0%{with seastar} +# package crimson-osd with the name of ceph-osd +install -m 0755 %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd +%endif + +install -m 0644 -D src/etc-rbdmap %{buildroot}%{_sysconfdir}/ceph/rbdmap +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +install -m 0644 -D etc/sysconfig/ceph %{buildroot}%{_sysconfdir}/sysconfig/ceph +%endif +%if 0%{?suse_version} +install -m 0644 -D etc/sysconfig/ceph %{buildroot}%{_fillupdir}/sysconfig.%{name} +%endif +install -m 0644 -D systemd/ceph.tmpfiles.d %{buildroot}%{_tmpfilesdir}/ceph-common.conf +install -m 0644 -D systemd/50-ceph.preset %{buildroot}%{_presetdir}/50-ceph.preset +mkdir -p %{buildroot}%{_sbindir} +install -m 0644 -D src/logrotate.conf %{buildroot}%{_sysconfdir}/logrotate.d/ceph +chmod 0644 %{buildroot}%{_docdir}/ceph/sample.ceph.conf +install -m 0644 -D COPYING %{buildroot}%{_docdir}/ceph/COPYING +install -m 0644 -D etc/sysctl/90-ceph-osd.conf %{buildroot}%{_sysctldir}/90-ceph-osd.conf +install -m 0755 -D src/tools/rbd_nbd/rbd-nbd_quiesce %{buildroot}%{_libexecdir}/rbd-nbd/rbd-nbd_quiesce + +mkdir -p %{buildroot}%{_sharedstatedir}/cephadm +chmod 0700 %{buildroot}%{_sharedstatedir}/cephadm +mkdir -p %{buildroot}%{_sharedstatedir}/cephadm/.ssh +chmod 0700 %{buildroot}%{_sharedstatedir}/cephadm/.ssh +touch %{buildroot}%{_sharedstatedir}/cephadm/.ssh/authorized_keys +chmod 0600 %{buildroot}%{_sharedstatedir}/cephadm/.ssh/authorized_keys + +# firewall templates and /sbin/mount.ceph symlink +%if 0%{?suse_version} && 0%{?suse_version} < 1550 +mkdir -p %{buildroot}/sbin +ln -sf %{_sbindir}/mount.ceph %{buildroot}/sbin/mount.ceph +%endif + +# udev rules +install -m 0644 -D udev/50-rbd.rules %{buildroot}%{_udevrulesdir}/50-rbd.rules + +# sudoers.d +install -m 0440 -D sudoers.d/ceph-smartctl %{buildroot}%{_sysconfdir}/sudoers.d/ceph-smartctl + +%if 0%{?rhel} >= 8 || 0%{?openEuler} +pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{_bindir}/* +pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{_sbindir}/* +%endif + +#set up placeholder directories +mkdir -p %{buildroot}%{_sysconfdir}/ceph +mkdir -p %{buildroot}%{_localstatedir}/run/ceph +mkdir -p %{buildroot}%{_localstatedir}/log/ceph +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/tmp +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mon +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/osd +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mds +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mgr +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/crash +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/crash/posted +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/radosgw +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-osd +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-mds +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rgw +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-mgr +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rbd +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rbd-mirror + +# prometheus alerts +install -m 644 -D monitoring/ceph-mixin/prometheus_alerts.yml %{buildroot}/etc/prometheus/ceph/ceph_default_alerts.yml + +# grafana charts +install -m 644 -D monitoring/ceph-mixin/dashboards_out/* %{buildroot}/etc/grafana/dashboards/ceph-dashboard/ + +# SNMP MIB +install -m 644 -D -t %{buildroot}%{_datadir}/snmp/mibs monitoring/snmp/CEPH-MIB.txt + +%if 0%{?suse_version} +# create __pycache__ directories and their contents +%py3_compile %{buildroot}%{python3_sitelib} +# hardlink duplicate files under /usr to save space +%fdupes %{buildroot}%{_prefix} +%endif + +%if 0%{?rhel} == 8 || 0%{?openEuler} +%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib} +%endif + +%clean +rm -rf %{buildroot} +# built binaries are no longer necessary at this point, +# but are consuming ~17GB of disk in the build environment +rm -rf %{_vpath_builddir} + +################################################################################# +# files and systemd scriptlets +################################################################################# +%files + +%files base +%{_bindir}/ceph-crash +%{_bindir}/crushtool +%{_bindir}/monmaptool +%{_bindir}/osdmaptool +%{_bindir}/ceph-kvstore-tool +%{_bindir}/ceph-run +%{_presetdir}/50-ceph.preset +%{_sbindir}/ceph-create-keys +%dir %{_libexecdir}/ceph +%{_libexecdir}/ceph/ceph_common.sh +%dir %{_libdir}/rados-classes +%{_libdir}/rados-classes/* +%dir %{_libdir}/ceph +%dir %{_libdir}/ceph/erasure-code +%{_libdir}/ceph/erasure-code/libec_*.so* +%dir %{_libdir}/ceph/extblkdev +%{_libdir}/ceph/extblkdev/libceph_*.so* +%dir %{_libdir}/ceph/compressor +%{_libdir}/ceph/compressor/libceph_*.so* +%{_unitdir}/ceph-crash.service +%dir %{_libdir}/ceph/crypto +%{_libdir}/ceph/crypto/libceph_*.so* +%if %{with lttng} +%{_libdir}/libos_tp.so* +%{_libdir}/libosd_tp.so* +%{_libdir}/libmgr_op_tp.so* +%endif +%config(noreplace) %{_sysconfdir}/logrotate.d/ceph +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%config(noreplace) %{_sysconfdir}/sysconfig/ceph +%endif +%if 0%{?suse_version} +%{_fillupdir}/sysconfig.* +%endif +%{_unitdir}/ceph.target +%{_mandir}/man8/ceph-create-keys.8* +%{_mandir}/man8/ceph-run.8* +%{_mandir}/man8/crushtool.8* +%{_mandir}/man8/osdmaptool.8* +%{_mandir}/man8/monmaptool.8* +%{_mandir}/man8/ceph-kvstore-tool.8* +#set up placeholder directories +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/crash +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/crash/posted +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/tmp +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-osd +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-mds +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-rgw +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-mgr +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-rbd +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-rbd-mirror +%{_sysconfdir}/sudoers.d/ceph-smartctl + +%post base +/sbin/ldconfig +%if 0%{?suse_version} +%fillup_only +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl preset ceph.target ceph-crash.service >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph.target ceph-crash.service +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph.target ceph-crash.service >/dev/null 2>&1 || : +fi + +%preun base +%if 0%{?suse_version} +%service_del_preun ceph.target ceph-crash.service +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph.target ceph-crash.service +%endif + +%postun base +/sbin/ldconfig +%systemd_postun ceph.target + +%pre -n cephadm +getent group cephadm >/dev/null || groupadd -r cephadm +getent passwd cephadm >/dev/null || useradd -r -g cephadm -s /bin/bash -c "cephadm user for mgr/cephadm" -d %{_sharedstatedir}/cephadm cephadm +exit 0 + +%if ! 0%{?suse_version} +%postun -n cephadm +[ $1 -ne 0 ] || userdel cephadm || : +%endif + +%files -n cephadm +%{_sbindir}/cephadm +%{_mandir}/man8/cephadm.8* +%attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm +%attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm/.ssh +%config(noreplace) %attr(0600,cephadm,cephadm) %{_sharedstatedir}/cephadm/.ssh/authorized_keys + +%files common +%dir %{_docdir}/ceph +%doc %{_docdir}/ceph/sample.ceph.conf +%license %{_docdir}/ceph/COPYING +%{_bindir}/ceph +%{_bindir}/ceph-authtool +%{_bindir}/ceph-conf +%{_bindir}/ceph-dencoder +%{_bindir}/ceph-diff-sorted +%{_bindir}/ceph-rbdnamer +%{_bindir}/ceph-syn +%{_bindir}/cephfs-data-scan +%{_bindir}/cephfs-journal-tool +%{_bindir}/cephfs-table-tool +%{_bindir}/crushdiff +%{_bindir}/rados +%{_bindir}/radosgw-admin +%{_bindir}/rbd +%{_bindir}/rbd-replay +%{_bindir}/rbd-replay-many +%{_bindir}/rbdmap +%{_bindir}/rgw-gap-list +%{_bindir}/rgw-gap-list-comparator +%{_bindir}/rgw-orphan-list +%{_bindir}/rgw-restore-bucket-index +%{_sbindir}/mount.ceph +%if 0%{?suse_version} && 0%{?suse_version} < 1550 +/sbin/mount.ceph +%endif +%if %{with lttng} +%{_bindir}/rbd-replay-prep +%endif +%{_bindir}/ceph-post-file +%dir %{_libdir}/ceph/denc +%{_libdir}/ceph/denc/denc-mod-*.so +%{_tmpfilesdir}/ceph-common.conf +%{_mandir}/man8/ceph-authtool.8* +%{_mandir}/man8/ceph-conf.8* +%{_mandir}/man8/ceph-dencoder.8* +%{_mandir}/man8/ceph-diff-sorted.8* +%{_mandir}/man8/ceph-rbdnamer.8* +%{_mandir}/man8/ceph-syn.8* +%{_mandir}/man8/ceph-post-file.8* +%{_mandir}/man8/ceph.8* +%{_mandir}/man8/crushdiff.8* +%{_mandir}/man8/mount.ceph.8* +%{_mandir}/man8/rados.8* +%{_mandir}/man8/radosgw-admin.8* +%{_mandir}/man8/rbd.8* +%{_mandir}/man8/rbdmap.8* +%{_mandir}/man8/rbd-replay.8* +%{_mandir}/man8/rbd-replay-many.8* +%{_mandir}/man8/rbd-replay-prep.8* +%{_mandir}/man8/rgw-orphan-list.8* +%{_mandir}/man8/rgw-restore-bucket-index.8* +%dir %{_datadir}/ceph/ +%{_datadir}/ceph/known_hosts_drop.ceph.com +%{_datadir}/ceph/id_rsa_drop.ceph.com +%{_datadir}/ceph/id_rsa_drop.ceph.com.pub +%dir %{_sysconfdir}/ceph/ +%config %{_sysconfdir}/bash_completion.d/ceph +%config %{_sysconfdir}/bash_completion.d/rados +%config %{_sysconfdir}/bash_completion.d/rbd +%config %{_sysconfdir}/bash_completion.d/radosgw-admin +%config(noreplace) %{_sysconfdir}/ceph/rbdmap +%{_unitdir}/rbdmap.service +%dir %{_udevrulesdir} +%{_udevrulesdir}/50-rbd.rules +%attr(3770,ceph,ceph) %dir %{_localstatedir}/log/ceph/ +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/ + +%pre common +CEPH_GROUP_ID=167 +CEPH_USER_ID=167 +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +/usr/sbin/groupadd ceph -g $CEPH_GROUP_ID -o -r 2>/dev/null || : +/usr/sbin/useradd ceph -u $CEPH_USER_ID -o -r -g ceph -s /sbin/nologin -c "Ceph daemons" -d %{_localstatedir}/lib/ceph 2>/dev/null || : +%endif +%if 0%{?suse_version} +if ! getent group ceph >/dev/null ; then + CEPH_GROUP_ID_OPTION="" + getent group $CEPH_GROUP_ID >/dev/null || CEPH_GROUP_ID_OPTION="-g $CEPH_GROUP_ID" + groupadd ceph $CEPH_GROUP_ID_OPTION -r 2>/dev/null || : +fi +if ! getent passwd ceph >/dev/null ; then + CEPH_USER_ID_OPTION="" + getent passwd $CEPH_USER_ID >/dev/null || CEPH_USER_ID_OPTION="-u $CEPH_USER_ID" + useradd ceph $CEPH_USER_ID_OPTION -r -g ceph -s /sbin/nologin 2>/dev/null || : +fi +usermod -c "Ceph storage service" \ + -d %{_localstatedir}/lib/ceph \ + -g ceph \ + -s /sbin/nologin \ + ceph +%endif +exit 0 + +%post common +%tmpfiles_create %{_tmpfilesdir}/ceph-common.conf + +%files mds +%{_bindir}/ceph-mds +%{_mandir}/man8/ceph-mds.8* +%{_unitdir}/ceph-mds@.service +%{_unitdir}/ceph-mds.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/mds + +%post mds +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-mds@\*.service ceph-mds.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-mds@\*.service ceph-mds.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-mds.target >/dev/null 2>&1 || : +fi + +%preun mds +%if 0%{?suse_version} +%service_del_preun ceph-mds@\*.service ceph-mds.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-mds@\*.service ceph-mds.target +%endif + +%postun mds +%systemd_postun ceph-mds@\*.service ceph-mds.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-mds@\*.service > /dev/null 2>&1 || : + fi +fi + +%files mgr +%{_bindir}/ceph-mgr +%dir %{_datadir}/ceph/mgr +%{_datadir}/ceph/mgr/mgr_module.* +%{_datadir}/ceph/mgr/mgr_util.* +%{_datadir}/ceph/mgr/object_format.* +%{_unitdir}/ceph-mgr@.service +%{_unitdir}/ceph-mgr.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/mgr + +%post mgr +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-mgr@\*.service ceph-mgr.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-mgr@\*.service ceph-mgr.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-mgr.target >/dev/null 2>&1 || : +fi + +%preun mgr +%if 0%{?suse_version} +%service_del_preun ceph-mgr@\*.service ceph-mgr.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-mgr@\*.service ceph-mgr.target +%endif + +%postun mgr +%systemd_postun ceph-mgr@\*.service ceph-mgr.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-mgr@\*.service > /dev/null 2>&1 || : + fi +fi + +%files mgr-dashboard +%{_datadir}/ceph/mgr/dashboard + +%post mgr-dashboard +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-dashboard +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-diskprediction-local +%{_datadir}/ceph/mgr/diskprediction_local + +%post mgr-diskprediction-local +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-diskprediction-local +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-modules-core +%dir %{_datadir}/ceph/mgr +%{_datadir}/ceph/mgr/alerts +%{_datadir}/ceph/mgr/balancer +%{_datadir}/ceph/mgr/crash +%{_datadir}/ceph/mgr/devicehealth +%{_datadir}/ceph/mgr/influx +%{_datadir}/ceph/mgr/insights +%{_datadir}/ceph/mgr/iostat +%{_datadir}/ceph/mgr/localpool +%{_datadir}/ceph/mgr/mds_autoscaler +%{_datadir}/ceph/mgr/mirroring +%{_datadir}/ceph/mgr/nfs +%{_datadir}/ceph/mgr/orchestrator +%{_datadir}/ceph/mgr/osd_perf_query +%{_datadir}/ceph/mgr/osd_support +%{_datadir}/ceph/mgr/pg_autoscaler +%{_datadir}/ceph/mgr/progress +%{_datadir}/ceph/mgr/prometheus +%{_datadir}/ceph/mgr/rbd_support +%{_datadir}/ceph/mgr/restful +%{_datadir}/ceph/mgr/rgw +%{_datadir}/ceph/mgr/selftest +%{_datadir}/ceph/mgr/smb +%{_datadir}/ceph/mgr/snap_schedule +%{_datadir}/ceph/mgr/stats +%{_datadir}/ceph/mgr/status +%{_datadir}/ceph/mgr/telegraf +%{_datadir}/ceph/mgr/telemetry +%{_datadir}/ceph/mgr/test_orchestrator +%{_datadir}/ceph/mgr/volumes +%{_datadir}/ceph/mgr/zabbix + +%files mgr-rook +%{_datadir}/ceph/mgr/rook + +%post mgr-rook +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-rook +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-k8sevents +%{_datadir}/ceph/mgr/k8sevents + +%post mgr-k8sevents +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-k8sevents +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-cephadm +%{_datadir}/ceph/mgr/cephadm + +%post mgr-cephadm +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-cephadm +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mon +%{_bindir}/ceph-mon +%{_bindir}/ceph-monstore-tool +%{_mandir}/man8/ceph-mon.8* +%{_unitdir}/ceph-mon@.service +%{_unitdir}/ceph-mon.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/mon + +%post mon +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-mon@\*.service ceph-mon.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-mon@\*.service ceph-mon.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-mon.target >/dev/null 2>&1 || : +fi + +%preun mon +%if 0%{?suse_version} +%service_del_preun ceph-mon@\*.service ceph-mon.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-mon@\*.service ceph-mon.target +%endif + +%postun mon +%systemd_postun ceph-mon@\*.service ceph-mon.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-mon@\*.service > /dev/null 2>&1 || : + fi +fi + +%files mon-client-nvmeof +%{_bindir}/ceph-nvmeof-monitor-client + +%files fuse +%{_bindir}/ceph-fuse +%{_mandir}/man8/ceph-fuse.8* +%{_sbindir}/mount.fuse.ceph +%{_mandir}/man8/mount.fuse.ceph.8* +%{_unitdir}/ceph-fuse@.service +%{_unitdir}/ceph-fuse.target + +%files -n cephfs-mirror +%{_bindir}/cephfs-mirror +%{_mandir}/man8/cephfs-mirror.8* +%{_unitdir}/cephfs-mirror@.service +%{_unitdir}/cephfs-mirror.target + +%post -n cephfs-mirror +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset cephfs-mirror@\*.service cephfs-mirror.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post cephfs-mirror@\*.service cephfs-mirror.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start cephfs-mirror.target >/dev/null 2>&1 || : +fi + +%preun -n cephfs-mirror +%if 0%{?suse_version} +%service_del_preun cephfs-mirror@\*.service cephfs-mirror.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun cephfs-mirror@\*.service cephfs-mirror.target +%endif + +%postun -n cephfs-mirror +%systemd_postun cephfs-mirror@\*.service cephfs-mirror.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart cephfs-mirror@\*.service > /dev/null 2>&1 || : + fi +fi + +%files -n ceph-exporter +%{_bindir}/ceph-exporter + +%files -n rbd-fuse +%{_bindir}/rbd-fuse +%{_mandir}/man8/rbd-fuse.8* + +%files -n rbd-mirror +%{_bindir}/rbd-mirror +%{_mandir}/man8/rbd-mirror.8* +%{_unitdir}/ceph-rbd-mirror@.service +%{_unitdir}/ceph-rbd-mirror.target + +%post -n rbd-mirror +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-rbd-mirror@\*.service ceph-rbd-mirror.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-rbd-mirror.target >/dev/null 2>&1 || : +fi + +%preun -n rbd-mirror +%if 0%{?suse_version} +%service_del_preun ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +%endif + +%postun -n rbd-mirror +%systemd_postun ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-rbd-mirror@\*.service > /dev/null 2>&1 || : + fi +fi + +%files immutable-object-cache +%{_bindir}/ceph-immutable-object-cache +%{_mandir}/man8/ceph-immutable-object-cache.8* +%{_unitdir}/ceph-immutable-object-cache@.service +%{_unitdir}/ceph-immutable-object-cache.target + +%post immutable-object-cache +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-immutable-object-cache.target >/dev/null 2>&1 || : +fi + +%preun immutable-object-cache +%if 0%{?suse_version} +%service_del_preun ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +%endif + +%postun immutable-object-cache +%systemd_postun ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-immutable-object-cache@\*.service > /dev/null 2>&1 || : + fi +fi + +%files -n rbd-nbd +%{_bindir}/rbd-nbd +%{_mandir}/man8/rbd-nbd.8* +%dir %{_libexecdir}/rbd-nbd +%{_libexecdir}/rbd-nbd/rbd-nbd_quiesce + +%files radosgw +%{_bindir}/ceph-diff-sorted +%{_bindir}/radosgw +%{_bindir}/radosgw-token +%{_bindir}/radosgw-es +%{_bindir}/radosgw-object-expirer +%{_bindir}/rgw-gap-list +%{_bindir}/rgw-gap-list-comparator +%{_bindir}/rgw-orphan-list +%{_bindir}/rgw-policy-check +%{_bindir}/rgw-restore-bucket-index +%{_mandir}/man8/radosgw.8* +%{_mandir}/man8/rgw-policy-check.8* +%dir %{_localstatedir}/lib/ceph/radosgw +%{_unitdir}/ceph-radosgw@.service +%{_unitdir}/ceph-radosgw.target + +%post radosgw +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-radosgw@\*.service ceph-radosgw.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-radosgw@\*.service ceph-radosgw.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-radosgw.target >/dev/null 2>&1 || : +fi + +%preun radosgw +%if 0%{?suse_version} +%service_del_preun ceph-radosgw@\*.service ceph-radosgw.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-radosgw@\*.service ceph-radosgw.target +%endif + +%postun radosgw +%systemd_postun ceph-radosgw@\*.service ceph-radosgw.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-radosgw@\*.service > /dev/null 2>&1 || : + fi +fi + +%files osd +%{_bindir}/ceph-clsinfo +%{_bindir}/ceph-bluestore-tool +%{_bindir}/ceph-erasure-code-tool +%{_bindir}/ceph-objectstore-tool +%{_bindir}/ceph-osdomap-tool +%{_bindir}/ceph-osd +%{_libexecdir}/ceph/ceph-osd-prestart.sh +%{_mandir}/man8/ceph-clsinfo.8* +%{_mandir}/man8/ceph-osd.8* +%{_mandir}/man8/ceph-bluestore-tool.8* +%{_unitdir}/ceph-osd@.service +%{_unitdir}/ceph-osd.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/osd +%config(noreplace) %{_sysctldir}/90-ceph-osd.conf + +%post osd +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-osd@\*.service ceph-osd.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-osd@\*.service ceph-osd.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-osd.target >/dev/null 2>&1 || : +fi +%if 0%{?sysctl_apply} + %sysctl_apply 90-ceph-osd.conf +%else + /usr/lib/systemd/systemd-sysctl %{_sysctldir}/90-ceph-osd.conf > /dev/null 2>&1 || : +%endif + +%preun osd +%if 0%{?suse_version} +%service_del_preun ceph-osd@\*.service ceph-osd.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-osd@\*.service ceph-osd.target +%endif + +%postun osd +%systemd_postun ceph-osd@\*.service ceph-volume@\*.service ceph-osd.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-osd@\*.service ceph-volume@\*.service > /dev/null 2>&1 || : + fi +fi + +%if 0%{with seastar} +%files crimson-osd +%{_bindir}/crimson-osd +%endif + +%files volume +%{_sbindir}/ceph-volume +%{_sbindir}/ceph-volume-systemd +%dir %{python3_sitelib}/ceph_volume +%{python3_sitelib}/ceph_volume/* +%{python3_sitelib}/ceph_volume-* +%{_mandir}/man8/ceph-volume.8* +%{_mandir}/man8/ceph-volume-systemd.8* +%{_unitdir}/ceph-volume@.service + +%post volume +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-volume@\*.service >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-volume@\*.service +%endif + +%preun volume +%if 0%{?suse_version} +%service_del_preun ceph-volume@\*.service +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-volume@\*.service +%endif + +%postun volume +%systemd_postun ceph-volume@\*.service +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-volume@\*.service > /dev/null 2>&1 || : + fi +fi + +%if %{with ocf} + +%files resource-agents +%dir %{_prefix}/lib/ocf +%dir %{_prefix}/lib/ocf/resource.d +%dir %{_prefix}/lib/ocf/resource.d/ceph +%attr(0755,-,-) %{_prefix}/lib/ocf/resource.d/ceph/rbd + +%endif + +%files -n librados2 +%{_libdir}/librados.so.* +%dir %{_libdir}/ceph +%{_libdir}/ceph/libceph-common.so.* +%if %{with lttng} +%{_libdir}/librados_tp.so.* +%endif +%dir %{_sysconfdir}/ceph + +%post -n librados2 -p /sbin/ldconfig + +%postun -n librados2 -p /sbin/ldconfig + +%files -n librados-devel +%dir %{_includedir}/rados +%{_includedir}/rados/librados.h +%{_includedir}/rados/rados_types.h +%{_libdir}/librados.so +%if %{with lttng} +%{_libdir}/librados_tp.so +%endif +%{_bindir}/librados-config +%{_mandir}/man8/librados-config.8* + +%files -n libradospp-devel +%dir %{_includedir}/rados +%{_includedir}/rados/buffer.h +%{_includedir}/rados/buffer_fwd.h +%{_includedir}/rados/crc32c.h +%{_includedir}/rados/inline_memory.h +%{_includedir}/rados/librados.hpp +%{_includedir}/rados/librados_fwd.hpp +%{_includedir}/rados/page.h +%{_includedir}/rados/rados_types.hpp + +%files -n python%{python3_pkgversion}-rados +%{python3_sitearch}/rados.cpython*.so +%{python3_sitearch}/rados-*.egg-info + +%files -n libcephsqlite +%{_libdir}/libcephsqlite.so + +%post -n libcephsqlite -p /sbin/ldconfig + +%postun -n libcephsqlite -p /sbin/ldconfig + +%files -n libcephsqlite-devel +%{_includedir}/libcephsqlite.h + +%if 0%{with libradosstriper} +%files -n libradosstriper1 +%{_libdir}/libradosstriper.so.* + +%post -n libradosstriper1 -p /sbin/ldconfig + +%postun -n libradosstriper1 -p /sbin/ldconfig + +%files -n libradosstriper-devel +%dir %{_includedir}/radosstriper +%{_includedir}/radosstriper/libradosstriper.h +%{_includedir}/radosstriper/libradosstriper.hpp +%{_libdir}/libradosstriper.so +%endif + +%files -n librbd1 +%{_libdir}/librbd.so.* +%if %{with lttng} +%{_libdir}/librbd_tp.so.* +%endif +%dir %{_libdir}/ceph/librbd +%{_libdir}/ceph/librbd/libceph_*.so* + +%post -n librbd1 -p /sbin/ldconfig + +%postun -n librbd1 -p /sbin/ldconfig + +%files -n librbd-devel +%dir %{_includedir}/rbd +%{_includedir}/rbd/librbd.h +%{_includedir}/rbd/librbd.hpp +%{_includedir}/rbd/features.h +%{_libdir}/librbd.so +%if %{with lttng} +%{_libdir}/librbd_tp.so +%endif + +%files -n librgw2 +%{_libdir}/librgw.so.* +%if %{with lttng} +%{_libdir}/librgw_op_tp.so.* +%{_libdir}/librgw_rados_tp.so.* +%endif + +%post -n librgw2 -p /sbin/ldconfig + +%postun -n librgw2 -p /sbin/ldconfig + +%files -n librgw-devel +%dir %{_includedir}/rados +%{_includedir}/rados/librgw.h +%{_includedir}/rados/rgw_file.h +%{_libdir}/librgw.so +%if %{with lttng} +%{_libdir}/librgw_op_tp.so +%{_libdir}/librgw_rados_tp.so +%endif + +%files -n python%{python3_pkgversion}-rgw +%{python3_sitearch}/rgw.cpython*.so +%{python3_sitearch}/rgw-*.egg-info + +%files -n python%{python3_pkgversion}-rbd +%{python3_sitearch}/rbd.cpython*.so +%{python3_sitearch}/rbd-*.egg-info + +%files -n libcephfs2 +%{_libdir}/libcephfs.so.* +%dir %{_sysconfdir}/ceph + +%post -n libcephfs2 -p /sbin/ldconfig + +%postun -n libcephfs2 -p /sbin/ldconfig + +%files -n libcephfs-proxy2 +%{_libdir}/libcephfs_proxy.so.* + +%post -n libcephfs-proxy2 -p /sbin/ldconfig + +%postun -n libcephfs-proxy2 -p /sbin/ldconfig + +%files -n libcephfs-daemon +%{_sbindir}/libcephfsd + +%files -n libcephfs-devel +%dir %{_includedir}/cephfs +%{_includedir}/cephfs/libcephfs.h +%{_includedir}/cephfs/ceph_ll_client.h +%{_includedir}/cephfs/types.h +%dir %{_includedir}/cephfs/metrics +%{_includedir}/cephfs/metrics/Types.h +%{_libdir}/libcephfs.so +%{_libdir}/libcephfs_proxy.so + +%files -n python%{python3_pkgversion}-cephfs +%{python3_sitearch}/cephfs.cpython*.so +%{python3_sitearch}/cephfs-*.egg-info + +%files -n python%{python3_pkgversion}-ceph-argparse +%{python3_sitelib}/ceph_argparse.py +%{python3_sitelib}/__pycache__/ceph_argparse.cpython*.py* +%{python3_sitelib}/ceph_daemon.py +%{python3_sitelib}/__pycache__/ceph_daemon.cpython*.py* + +%files -n python%{python3_pkgversion}-ceph-common +%{python3_sitelib}/ceph +%{python3_sitelib}/ceph-*.egg-info + +%if 0%{with cephfs_shell} +%files -n cephfs-shell +%{python3_sitelib}/cephfs_shell-*.egg-info +%{_bindir}/cephfs-shell +%{_mandir}/man8/cephfs-shell.8* +%endif + +%files -n cephfs-top +%{python3_sitelib}/cephfs_top-*.egg-info +%{_bindir}/cephfs-top +%{_mandir}/man8/cephfs-top.8* + +%if 0%{with ceph_test_package} +%files -n ceph-test +%{_bindir}/ceph-client-debug +%{_bindir}/ceph_bench_log +%{_bindir}/ceph_multi_stress_watch +%{_bindir}/ceph_erasure_code_benchmark +%{_bindir}/ceph_omapbench +%{_bindir}/ceph_objectstore_bench +%{_bindir}/ceph_perf_objectstore +%{_bindir}/ceph_perf_local +%{_bindir}/ceph_perf_msgr_client +%{_bindir}/ceph_perf_msgr_server +%{_bindir}/ceph_psim +%{_bindir}/ceph_radosacl +%{_bindir}/ceph_rgw_jsonparser +%{_bindir}/ceph_rgw_multiparser +%{_bindir}/ceph_scratchtool +%{_bindir}/ceph_scratchtoolpp +%{_bindir}/ceph_test_* +%{_bindir}/ceph-coverage +%{_bindir}/ceph-debugpack +%{_bindir}/ceph-dedup-tool +%if 0%{with seastar} +%{_bindir}/crimson-store-nbd +%endif +%{_mandir}/man8/ceph-debugpack.8* +%dir %{_libdir}/ceph +%{_libdir}/ceph/ceph-monstore-update-crush.sh +%endif + +%if 0%{with cephfs_java} +%files -n libcephfs_jni1 +%{_libdir}/libcephfs_jni.so.* + +%post -n libcephfs_jni1 -p /sbin/ldconfig + +%postun -n libcephfs_jni1 -p /sbin/ldconfig + +%files -n libcephfs_jni-devel +%{_libdir}/libcephfs_jni.so + +%files -n cephfs-java +%{_javadir}/libcephfs.jar +%{_javadir}/libcephfs-test.jar +%endif + +%files -n rados-objclass-devel +%dir %{_includedir}/rados +%{_includedir}/rados/objclass.h + +%if 0%{with selinux} +%files selinux +%attr(0600,root,root) %{_datadir}/selinux/packages/ceph.pp +%{_datadir}/selinux/devel/include/contrib/ceph.if +%{_mandir}/man8/ceph_selinux.8* + +%post selinux +# backup file_contexts before update +. /etc/selinux/config +FILE_CONTEXT=/etc/selinux/${SELINUXTYPE}/contexts/files/file_contexts +cp ${FILE_CONTEXT} ${FILE_CONTEXT}.pre + +# Install the policy +/usr/sbin/semodule -i %{_datadir}/selinux/packages/ceph.pp + +# Load the policy if SELinux is enabled +if ! /usr/sbin/selinuxenabled; then + # Do not relabel if selinux is not enabled + exit 0 +fi + +if diff ${FILE_CONTEXT} ${FILE_CONTEXT}.pre > /dev/null 2>&1; then + # Do not relabel if file contexts did not change + exit 0 +fi + +# Stop ceph.target while relabeling if CEPH_AUTO_RESTART_ON_UPGRADE=yes +SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph +if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH +fi + +# Check whether the daemons are running +/usr/bin/systemctl status ceph.target > /dev/null 2>&1 +STATUS=$? + +# Stop the daemons if they were running +if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl stop ceph.target > /dev/null 2>&1 + fi +fi + +# Relabel the files fix for first package install +/usr/sbin/fixfiles -C ${FILE_CONTEXT}.pre restore 2> /dev/null + +rm -f ${FILE_CONTEXT}.pre +# The fixfiles command won't fix label for /var/run/ceph +/usr/sbin/restorecon -R /var/run/ceph > /dev/null 2>&1 + +# Start the daemons iff they were running before +if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl start ceph.target > /dev/null 2>&1 || : + fi +fi +exit 0 + +%postun selinux +if [ $1 -eq 0 ]; then + # backup file_contexts before update + . /etc/selinux/config + FILE_CONTEXT=/etc/selinux/${SELINUXTYPE}/contexts/files/file_contexts + cp ${FILE_CONTEXT} ${FILE_CONTEXT}.pre + + # Remove the module + /usr/sbin/semodule -n -r ceph > /dev/null 2>&1 + + # Reload the policy if SELinux is enabled + if ! /usr/sbin/selinuxenabled ; then + # Do not relabel if SELinux is not enabled + exit 0 + fi + + # Stop ceph.target while relabeling if CEPH_AUTO_RESTART_ON_UPGRADE=yes + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + + # Check whether the daemons are running + /usr/bin/systemctl status ceph.target > /dev/null 2>&1 + STATUS=$? + + # Stop the daemons if they were running + if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl stop ceph.target > /dev/null 2>&1 + fi + fi + + /usr/sbin/fixfiles -C ${FILE_CONTEXT}.pre restore 2> /dev/null + rm -f ${FILE_CONTEXT}.pre + # The fixfiles command won't fix label for /var/run/ceph + /usr/sbin/restorecon -R /var/run/ceph > /dev/null 2>&1 + + # Start the daemons if they were running before + if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl start ceph.target > /dev/null 2>&1 || : + fi + fi +fi +exit 0 +%endif + +%files grafana-dashboards +%if 0%{?suse_version} +%attr(0755,root,root) %dir %{_sysconfdir}/grafana +%attr(0755,root,root) %dir %{_sysconfdir}/grafana/dashboards +%endif +%attr(0755,root,root) %dir %{_sysconfdir}/grafana/dashboards/ceph-dashboard +%config %{_sysconfdir}/grafana/dashboards/ceph-dashboard/* + +%files prometheus-alerts +%if 0%{?suse_version} +%attr(0755,root,root) %dir %{_sysconfdir}/prometheus +%endif +%attr(0755,root,root) %dir %{_sysconfdir}/prometheus/ceph +%config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml + +%files mib +%attr(0755,root,root) %dir %{_datadir}/snmp +%{_datadir}/snmp/mibs + +%files mgr-callhome +%{_datadir}/ceph/mgr/call_home_agent + +%files node-proxy +%{_sbindir}/ceph-node-proxy +%dir %{python3_sitelib}/ceph_node_proxy +%{python3_sitelib}/ceph_node_proxy/* +%{python3_sitelib}/ceph_node_proxy-* +#%{_mandir}/man8/ceph-node-proxy.8* From 0fc5e1ae41a419d62e10536f83a96498bea258d6 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Mon, 28 Jul 2025 16:43:34 -0500 Subject: [PATCH 06/31] konflux: add service account name Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 2 + .tekton/rhceph-9-0-pull-request.yaml.bak | 624 +++++++++++++++++++++++ 2 files changed, 626 insertions(+) create mode 100644 .tekton/rhceph-9-0-pull-request.yaml.bak diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 76bb8606f6c65..fef8537807cc0 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -41,6 +41,8 @@ spec: value: main - name: pathInRepo value: pipeline/build-rpm-package.yaml + taskRunTemplate: + serviceAccountName: build-pipeline-rhceph-9-0 workspaces: - name: git-auth secret: diff --git a/.tekton/rhceph-9-0-pull-request.yaml.bak b/.tekton/rhceph-9-0-pull-request.yaml.bak new file mode 100644 index 0000000000000..d03429a816b7f --- /dev/null +++ b/.tekton/rhceph-9-0-pull-request.yaml.bak @@ -0,0 +1,624 @@ +apiVersion: tekton.dev/v1 +kind: PipelineRun +metadata: + annotations: + build.appstudio.openshift.io/repo: https://github.com/ibmstorage/ceph?rev={{revision}} + build.appstudio.redhat.com/commit_sha: '{{revision}}' + build.appstudio.redhat.com/pull_request_number: '{{pull_request_number}}' + build.appstudio.redhat.com/target_branch: '{{target_branch}}' + pipelinesascode.tekton.dev/cancel-in-progress: "true" + pipelinesascode.tekton.dev/max-keep-runs: "3" + pipelinesascode.tekton.dev/on-cel-expression: event == "pull_request" && target_branch + == "release-9.0" + creationTimestamp: null + labels: + appstudio.openshift.io/application: ceph-9-0 + appstudio.openshift.io/component: rhceph-9-0 + pipelines.appstudio.openshift.io/type: build + name: rhceph-9-0-on-pull-request + namespace: ceph-tenant +spec: + params: + - name: git-url + value: '{{source_url}}' + - name: revision + value: '{{revision}}' + - name: output-image + value: quay.io/rhceph-dev/rhceph:on-pr-{{revision}} + - name: image-expires-after + value: 5d + - name: build-platforms + value: + - linux/x86_64 + - name: dockerfile + value: container/Containerfile + - name: path-context + value: . + - name: build-args-file + value: build-args.txt + pipelineSpec: + description: | + This pipeline is ideal for building multi-arch container images from a Containerfile while maintaining trust after pipeline customization. + + _Uses `buildah` to create a multi-platform container image leveraging [trusted artifacts](https://konflux-ci.dev/architecture/ADR/0036-trusted-artifacts.html). It also optionally creates a source image and runs some build-time tests. This pipeline requires that the [multi platform controller](https://github.com/konflux-ci/multi-platform-controller) is deployed and configured on your Konflux instance. Information is shared between tasks using OCI artifacts instead of PVCs. EC will pass the [`trusted_task.trusted`](https://conforma.dev/docs/policy/packages/release_trusted_task.html#trusted_task__trusted) policy as long as all data used to build the artifact is generated from trusted tasks. + This pipeline is pushed as a Tekton bundle to [quay.io](https://quay.io/repository/konflux-ci/tekton-catalog/pipeline-docker-build-multi-platform-oci-ta?tab=tags)_ + finally: + - name: show-sbom + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + taskRef: + params: + - name: name + value: show-sbom + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-show-sbom:0.1@sha256:1b1df4da95966d08ac6a5b8198710e09e68b5c2cdc707c37d9d19769e65884b2 + - name: kind + value: task + resolver: bundles + params: + - description: Source Repository URL + name: git-url + type: string + - default: "" + description: Revision of the Source Repository + name: revision + type: string + - description: Fully Qualified Output Image + name: output-image + type: string + - default: . + description: Path to the source code of an application's component from where + to build image. + name: path-context + type: string + - default: Dockerfile + description: Path to the Dockerfile inside the context specified by parameter + path-context + name: dockerfile + type: string + - default: "false" + description: Force rebuild image + name: rebuild + type: string + - default: "false" + description: Skip checks against built image + name: skip-checks + type: string + - default: "false" + description: Execute the build with network isolation + name: hermetic + type: string + - default: "" + description: Build dependencies to be prefetched by Cachi2 + name: prefetch-input + type: string + - default: "" + description: Image tag expiration time, time values could be something like + 1h, 2d, 3w for hours, days, and weeks, respectively. + name: image-expires-after + type: string + - default: "false" + description: Build a source image. + name: build-source-image + type: string + - default: "true" + description: Add built image into an OCI image index + name: build-image-index + type: string + - default: [] + description: Array of --build-arg values ("arg=value" strings) for buildah + name: build-args + type: array + - default: "" + description: Path to a file with build arguments for buildah, see https://www.mankier.com/1/buildah-build#--build-arg-file + name: build-args-file + type: string + - default: "false" + description: Whether to enable privileged mode, should be used only with remote + VMs + name: privileged-nested + type: string + - default: + - linux/x86_64 + description: List of platforms to build the container images on. The available + set of values is determined by the configuration of the multi-platform-controller. + name: build-platforms + type: array + results: + - description: "" + name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - description: "" + name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - description: "" + name: CHAINS-GIT_URL + value: $(tasks.clone-repository.results.url) + - description: "" + name: CHAINS-GIT_COMMIT + value: $(tasks.clone-repository.results.commit) + tasks: + - name: init + params: + - name: image-url + value: $(params.output-image) + - name: rebuild + value: $(params.rebuild) + - name: skip-checks + value: $(params.skip-checks) + taskRef: + params: + - name: name + value: init + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:66e90d31e1386bf516fb548cd3e3f0082b5d0234b8b90dbf9e0d4684b70dbe1a + - name: kind + value: task + resolver: bundles + - name: clone-repository + params: + - name: url + value: $(params.git-url) + - name: revision + value: $(params.revision) + - name: ociStorage + value: $(params.output-image).git + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - init + taskRef: + params: + - name: name + value: git-clone-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:d35e5d501cb5f5f88369511f76249857cb5ac30250e1dcf086939321964ff6b9 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + workspaces: + - name: basic-auth + workspace: git-auth + - name: prefetch-dependencies + params: + - name: input + value: $(params.prefetch-input) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).prefetch + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: prefetch-dependencies-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:a1ddc34bf0a169bb2e64a98caf9027b66af8fc66a3a60f71bb451ce36af6a399 + - name: kind + value: task + resolver: bundles + workspaces: + - name: git-basic-auth + workspace: git-auth + - name: netrc + workspace: netrc + - matrix: + params: + - name: PLATFORM + value: + - $(params.build-platforms) + name: build-images + params: + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: PRIVILEGED_NESTED + value: $(params.privileged-nested) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + - name: IMAGE_APPEND_PLATFORM + value: "true" + runAfter: + - prefetch-dependencies + taskRef: + params: + - name: name + value: buildah-remote-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.4@sha256:5b8d51fa889cdac873750904c3fccc0cca1c4f65af16902ebb2b573151f80657 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-image-index + params: + - name: IMAGE + value: $(params.output-image) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: ALWAYS_BUILD_INDEX + value: $(params.build-image-index) + - name: IMAGES + value: + - $(tasks.build-images.results.IMAGE_REF[*]) + runAfter: + - build-images + taskRef: + params: + - name: name + value: build-image-index + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.1@sha256:846dc9975914f31380ec2712fdbac9df3b06c00a9cc7df678315a7f97145efc2 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - name: build-source-image + params: + - name: BINARY_IMAGE + value: $(params.output-image) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: source-build-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-source-build-oci-ta:0.2@sha256:b424894fc8e806c12658daa565b835fd2d66e7f7608afc47529eb7b410f030d7 + - name: kind + value: task + resolver: bundles + when: + - input: $(tasks.init.results.build) + operator: in + values: + - "true" + - input: $(params.build-source-image) + operator: in + values: + - "true" + - name: deprecated-base-image-check + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: deprecated-image-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:3c8b81fa868e27c6266e7660a4bfb4c822846dcf4304606e71e20893b0d3e515 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clair-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clair-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.2@sha256:d354939892f3a904223ec080cc3771bd11931085a5d202323ea491ee8e8c5e43 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: ecosystem-cert-preflight-checks + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: ecosystem-cert-preflight-checks + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:b550ff4f0b634512ce5200074be7afd7a5a6c05b783620c626e2a3035cd56448 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-snyk-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-snyk-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:e61f541189b30d14292ef8df36ccaf13f7feb2378fed5f74cb6293b3e79eb687 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: clamav-scan + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: clamav-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.2@sha256:9cab95ac9e833d77a63c079893258b73b8d5a298d93aaf9bdd6722471bc2f338 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-coverity-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE + value: $(params.output-image) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: HERMETIC + value: $(params.hermetic) + - name: PREFETCH_INPUT + value: $(params.prefetch-input) + - name: IMAGE_EXPIRES_AFTER + value: $(params.image-expires-after) + - name: COMMIT_SHA + value: $(tasks.clone-repository.results.commit) + - name: BUILD_ARGS + value: + - $(params.build-args[*]) + - name: BUILD_ARGS_FILE + value: $(params.build-args-file) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - coverity-availability-check + taskRef: + params: + - name: name + value: sast-coverity-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:d3fdca2f0072e1c40e0781ac4b8f16b977dc77fc6e80424087941465bc27d5eb + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - input: $(tasks.coverity-availability-check.results.STATUS) + operator: in + values: + - success + - name: coverity-availability-check + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: coverity-availability-check + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:db2b267dc15e4ed17f704ee91b8e9b38068e1a35b1018a328fdca621819d74c6 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-shell-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-shell-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:808bcaf75271db6a999f53fdefb973a385add94a277d37fbd3df68f8ac7dfaa3 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: sast-unicode-check + params: + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + - name: CACHI2_ARTIFACT + value: $(tasks.prefetch-dependencies.results.CACHI2_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: sast-unicode-check-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.2@sha256:3ffa3ac35ad988767ae2202d1f2483ce3e8152b29b89e77620c26f32c1ad2e7e + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + - name: apply-tags + params: + - name: IMAGE_URL + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: apply-tags + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:517a51e260c0b59654a9d7b842e1ab07d76bce15ca7ce9c8fd2489a19be6463d + - name: kind + value: task + resolver: bundles + - name: push-dockerfile + params: + - name: IMAGE + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: IMAGE_DIGEST + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + - name: DOCKERFILE + value: $(params.dockerfile) + - name: CONTEXT + value: $(params.path-context) + - name: SOURCE_ARTIFACT + value: $(tasks.prefetch-dependencies.results.SOURCE_ARTIFACT) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: push-dockerfile-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-push-dockerfile-oci-ta:0.1@sha256:5d8013b6a27bbc5e4ff261144616268f28417ed0950d583ef36349fcd59d3d3d + - name: kind + value: task + resolver: bundles + - name: rpms-signature-scan + params: + - name: image-url + value: $(tasks.build-image-index.results.IMAGE_URL) + - name: image-digest + value: $(tasks.build-image-index.results.IMAGE_DIGEST) + runAfter: + - build-image-index + taskRef: + params: + - name: name + value: rpms-signature-scan + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-rpms-signature-scan:0.2@sha256:1b6c20ab3dbfb0972803d3ebcb2fa72642e59400c77bd66dfd82028bdd09e120 + - name: kind + value: task + resolver: bundles + when: + - input: $(params.skip-checks) + operator: in + values: + - "false" + workspaces: + - name: git-auth + optional: true + - name: netrc + optional: true + taskRunTemplate: + serviceAccountName: build-pipeline-rhceph-9-0 + workspaces: + - name: git-auth + secret: + secretName: '{{ git_auth_secret }}' +status: {} From 1e4826040f37e1a6e2c166dae96f0c0dada990aa Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Mon, 28 Jul 2025 17:04:52 -0500 Subject: [PATCH 07/31] test: use upstream spec file Signed-off-by: Andrew Schoen --- rhceph.spec | 223 +++++++++++++++++++++++++--------------------------- 1 file changed, 106 insertions(+), 117 deletions(-) diff --git a/rhceph.spec b/rhceph.spec index 469d12f1690d4..69c7501b7cc8b 100644 --- a/rhceph.spec +++ b/rhceph.spec @@ -1,4 +1,4 @@ - # +# # spec file for package ceph # # Copyright (C) 2004-2019 The Ceph Project Developers. See COPYING file @@ -14,10 +14,6 @@ # Please submit bugfixes or comments via http://tracker.ceph.com/ # -# `rdopkg update-patches` will automatically update this macro: -%global commit e4cafe82fd26577be2b327c948130a6509c721af - - ################################################################################# # conditional build section # @@ -95,7 +91,7 @@ %bcond_with lua_packages %endif %endif -%bcond_with seastar +%bcond_with crimson %if 0%{?suse_version} || 0%{?openEuler} %bcond_with jaeger %else @@ -119,10 +115,12 @@ %ifarch x86_64 %if 0%{?fedora} || 0%{?rhel} >= 9 %bcond_without system_qat -%else # not fedora/rhel +%else +# not fedora/rhel %bcond_with system_qat %endif -%else # not x86_64 +%else +# not x86_64 %bcond_with system_qat %endif %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} >= 8 || 0%{?openEuler} @@ -138,14 +136,40 @@ %endif %endif %bcond_without cephadm_bundling -%bcond_with cephadm_pip_deps +%bcond_without cephadm_pip_deps +%bcond_without dwz +%if %{with dwz} +%else +# disable dwz for 50% speedup at the cost of ~33% space +%global _find_debuginfo_dwz_opts %{nil} +%endif +%bcond_with sccache %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d} %{!?tmpfiles_create: %global tmpfiles_create systemd-tmpfiles --create} %{!?python3_pkgversion: %global python3_pkgversion 3} %{!?python3_version_nodots: %global python3_version_nodots 3} %{!?python3_version: %global python3_version 3} -%{!?gts_prefix: %global gts_prefix gcc-toolset-11} +%if 0%{with crimson} +%{!?gts_version: %global gts_version 13} +%else +%if 0%{?rhel} == 8 +%{!?gts_version: %global gts_version 11} +%endif +%endif + +# gcc-toolset-13 seems to trigger a linker bug resulting in a segfault in SafeTimer +# and perhaps elsewhere. For now, let's just disable it. See +# ceph bug https://tracker.ceph.com/issues/63867 +# and +# gcc bug https://bugzilla.redhat.com/show_bug.cgi?id=2241339 +# for details. +# +# Also disable lto on systems that do not support symver attribute +# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200 for details +%if 0%{?gts_version} == 13 || (0%{?rhel} && 0%{?rhel} < 9) || ( 0%{?suse_version} && 0%{?suse_version} <= 1500 ) +%define _lto_cflags %{nil} +%endif %if ! 0%{?suse_version} # use multi-threaded xz compression: xz level 7 using ncpus threads @@ -169,7 +193,7 @@ # SUSE distros use limit_build in the place of smp_limit_mem_per_job, please # be sure to update it (in the build section, below) as well when changing this # number. -%global _smp_ncpus_max %{smp_limit_mem_per_job 3200000} +%global _smp_ncpus_max %{smp_limit_mem_per_job 3000000} %endif %endif @@ -177,16 +201,24 @@ # do not provide gcc-annobin.so anymore, despite that they provide annobin.so. but # redhat-rpm-config still passes -fplugin=gcc-annobin to the compiler. %undefine _annotated_build -%if 0%{?rhel} == 8 && 0%{?enable_devtoolset11:1} +%if 0%{?gts_version} > 0 +%if 0%{gts_version} == 13 +%if 0%{?enable_devtoolset13:1} +%enable_devtoolset13 +%endif +%else +%if 0%{?enable_devtoolset11:1} %enable_devtoolset11 %endif +%endif +%endif ################################################################################# # main package definition ################################################################################# Name: ceph -Version: 19.2.1 -Release: 237%{?dist} +Version: 20.0.0 +Release: 0%{?dist} %if 0%{?fedora} || 0%{?rhel} Epoch: 2 %endif @@ -201,13 +233,7 @@ License: LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD- Group: System/Filesystems %endif URL: http://ceph.com/ -Source0: %{?_remote_tarball_prefix}%{name}-%{version}.tar.gz -Source1: %{name}-%{version}-%{commit}-changes.tar.gz -Source2: redhat_dashboard_frontend-%{version}-%{commit}.tar.gz -Source3: ibm_dashboard_frontend-%{version}-%{commit}.tar.gz -Source4: blake3-1.5.1-92e4cd71be48fdf9a79e88ef37b8f415ec5ac210.tar.bz2 -Source5: xxHash-0.8.2-bbb27a5efb85b92a0486cf361a8635715a53f6ba.tar.bz2 -Source6: s3select-0a0f6d4.patch +Source0: %{?_remote_tarball_prefix}@TARBALL_BASENAME@.tar.bz2 %if 0%{?suse_version} # _insert_obs_source_lines_here ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64 @@ -233,17 +259,21 @@ BuildRequires: gperf BuildRequires: cmake > 3.5 BuildRequires: fuse-devel BuildRequires: git -BuildRequires: grpc-devel +BuildRequires: grpc-devel %if 0%{?fedora} || 0%{?suse_version} > 1500 || 0%{?rhel} == 9 || 0%{?openEuler} BuildRequires: gcc-c++ >= 11 %endif %if 0%{?suse_version} == 1500 BuildRequires: gcc11-c++ %endif -%if 0%{?rhel} == 8 -BuildRequires: %{gts_prefix}-gcc-c++ -BuildRequires: %{gts_prefix}-build -BuildRequires: %{gts_prefix}-libatomic-devel +%if 0%{?gts_version} > 0 +BuildRequires: gcc-toolset-%{gts_version}-gcc-c++ +%if 0%{?gts_version} >= 12 +BuildRequires: gcc-toolset-%{gts_version}-runtime +%else +BuildRequires: gcc-toolset-%{gts_version}-build +%endif +BuildRequires: gcc-toolset-%{gts_version}-libatomic-devel %endif %if 0%{?fedora} || 0%{?rhel} == 9 || 0%{?openEuler} BuildRequires: libatomic @@ -295,7 +325,7 @@ BuildRequires: xmlstarlet BuildRequires: nasm BuildRequires: lua-devel BuildRequires: lmdb-devel -%if 0%{with seastar} || 0%{with jaeger} +%if 0%{with crimson} || 0%{with jaeger} BuildRequires: yaml-cpp-devel >= 0.6 %endif %if 0%{with amqp_endpoint} @@ -313,7 +343,6 @@ BuildRequires: hostname BuildRequires: jq BuildRequires: libuuid-devel BuildRequires: python%{python3_pkgversion}-bcrypt -BuildRequires: python%{python3_pkgversion}-pecan BuildRequires: python%{python3_pkgversion}-requests BuildRequires: python%{python3_pkgversion}-dateutil BuildRequires: python%{python3_pkgversion}-coverage @@ -358,7 +387,7 @@ BuildRequires: utf8proc-devel BuildRequires: qatlib-devel BuildRequires: qatzip-devel %endif -%if 0%{with seastar} +%if 0%{with crimson} BuildRequires: c-ares-devel BuildRequires: gnutls-devel BuildRequires: hwloc-devel @@ -370,11 +399,15 @@ BuildRequires: libubsan BuildRequires: libasan BuildRequires: protobuf-devel BuildRequires: protobuf-compiler -%if 0%{?rhel} == 8 -BuildRequires: %{gts_prefix}-annobin -BuildRequires: %{gts_prefix}-annobin-plugin-gcc -BuildRequires: %{gts_prefix}-libubsan-devel -BuildRequires: %{gts_prefix}-libasan-devel +%if 0%{?gts_version} > 0 +%if 0%{?gts_version} >= 12 +BuildRequires: gcc-toolset-%{gts_version}-gcc-plugin-annobin +%else +BuildRequires: gcc-toolset-%{gts_version}-annobin +BuildRequires: gcc-toolset-%{gts_version}-annobin-plugin-gcc +%endif +BuildRequires: gcc-toolset-%{gts_version}-libubsan-devel +BuildRequires: gcc-toolset-%{gts_version}-libasan-devel %endif %endif ################################################################################# @@ -416,6 +449,7 @@ BuildRequires: libibverbs-devel BuildRequires: librdmacm-devel BuildRequires: ninja-build BuildRequires: openldap-devel +BuildRequires: numactl-devel #BuildRequires: krb5-devel BuildRequires: openssl-devel BuildRequires: CUnit-devel @@ -439,22 +473,18 @@ BuildRequires: xmlsec1-nss BuildRequires: xmlsec1-openssl BuildRequires: xmlsec1-openssl-devel BuildRequires: python%{python3_pkgversion}-cherrypy -BuildRequires: python%{python3_pkgversion}-jwt BuildRequires: python%{python3_pkgversion}-routes BuildRequires: python%{python3_pkgversion}-scipy -BuildRequires: python%{python3_pkgversion}-werkzeug -BuildRequires: python%{python3_pkgversion}-zstandard BuildRequires: python%{python3_pkgversion}-pyOpenSSL %endif +BuildRequires: jsonnet %if 0%{?suse_version} BuildRequires: golang-github-prometheus-prometheus -BuildRequires: jsonnet BuildRequires: libxmlsec1-1 BuildRequires: libxmlsec1-nss1 BuildRequires: libxmlsec1-openssl1 BuildRequires: python%{python3_pkgversion}-CherryPy BuildRequires: python%{python3_pkgversion}-Routes -BuildRequires: python%{python3_pkgversion}-Werkzeug BuildRequires: python%{python3_pkgversion}-numpy-devel BuildRequires: xmlsec1-devel BuildRequires: xmlsec1-openssl-devel @@ -484,10 +514,9 @@ BuildRequires: redhat-rpm-config %if 0%{?openEuler} BuildRequires: openEuler-rpm-config %endif -%if 0%{with seastar} +%if 0%{with crimson} %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} BuildRequires: cryptopp-devel -BuildRequires: numactl-devel %endif %if 0%{?suse_version} BuildRequires: libcryptopp-devel @@ -630,7 +659,7 @@ Provides: ceph-test:/usr/bin/ceph-nvmeof-monitor-client Requires: librados2 = %{_epoch_prefix}%{version}-%{release} %description mon-client-nvmeof Ceph NVMeoF Gateway Monitor Client distributes Paxos ANA info -to NVMeoF Gateway and provides beacons to the monitor daemo +to NVMeoF Gateway and provides beacons to the monitor daemon %package mgr Summary: Ceph Manager Daemon @@ -662,7 +691,6 @@ Group: System/Filesystems Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} Requires: ceph-grafana-dashboards = %{_epoch_prefix}%{version}-%{release} Requires: ceph-prometheus-alerts = %{_epoch_prefix}%{version}-%{release} -Requires: python%{python3_pkgversion}-setuptools %if 0%{?fedora} || 0%{?rhel} >= 9 Requires: python%{python3_pkgversion}-grpcio Requires: python%{python3_pkgversion}-grpcio-tools @@ -672,7 +700,6 @@ Requires: python%{python3_pkgversion}-xmltodict %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} Requires: python%{python3_pkgversion}-cherrypy Requires: python%{python3_pkgversion}-routes -Requires: python%{python3_pkgversion}-werkzeug %if 0%{?weak_deps} Recommends: python%{python3_pkgversion}-saml %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -684,7 +711,6 @@ Recommends: python%{python3_pkgversion}-grpcio-tools %if 0%{?suse_version} Requires: python%{python3_pkgversion}-CherryPy Requires: python%{python3_pkgversion}-Routes -Requires: python%{python3_pkgversion}-Werkzeug Recommends: python%{python3_pkgversion}-python3-saml %endif %description mgr-dashboard @@ -716,7 +742,7 @@ BuildArch: noarch Group: System/Filesystems %endif Requires: python%{python3_pkgversion}-bcrypt -Requires: python%{python3_pkgversion}-pecan +Requires: python%{python3_pkgversion}-packaging Requires: python%{python3_pkgversion}-pyOpenSSL Requires: python%{python3_pkgversion}-requests Requires: python%{python3_pkgversion}-dateutil @@ -724,12 +750,10 @@ Requires: python%{python3_pkgversion}-setuptools %if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} Requires: python%{python3_pkgversion}-cherrypy Requires: python%{python3_pkgversion}-pyyaml -Requires: python%{python3_pkgversion}-werkzeug %endif %if 0%{?suse_version} Requires: python%{python3_pkgversion}-CherryPy Requires: python%{python3_pkgversion}-PyYAML -Requires: python%{python3_pkgversion}-Werkzeug %endif # RHEL8 has python 3.6 and that lacks dataclasses in the stdlib, so pull in the # backport dataclasses module instead. @@ -792,19 +816,6 @@ Requires: python%{python3_pkgversion}-jinja2 ceph-mgr-cephadm is a ceph-mgr module for orchestration functions using the integrated cephadm deployment tool management operations. -%package mgr-callhome -Summary: Ceph Manager module for monitoring clusters in IBM environments -BuildArch: noarch -%if 0%{?suse_version} -Group: System/Filesystems -%endif -Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} -Requires: python%{python3_pkgversion}-jwt -Requires: python%{python3_pkgversion}-zstandard -%description mgr-callhome -ceph-mgr-callhome is a ceph.mgr module which sends data about the Ceph - cluster to IBM systems like IBM Call Home or IBM storage Insights. - %package fuse Summary: Ceph fuse-based client %if 0%{?suse_version} @@ -928,11 +939,10 @@ Summary: Ceph Object Storage Daemon %if 0%{?suse_version} Group: System/Filesystems %endif -Provides: ceph-test:/usr/bin/ceph-osdomap-tool Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} Requires: sudo Requires: libstoragemgmt -%if 0%{with seastar} +%if 0%{with crimson} Requires: protobuf %endif %if 0%{?weak_deps} @@ -943,7 +953,7 @@ ceph-osd is the object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network. -%if 0%{with seastar} +%if 0%{with crimson} %package crimson-osd Summary: Ceph Object Storage Daemon (crimson) %if 0%{?suse_version} @@ -971,7 +981,6 @@ Requires: parted Requires: util-linux Requires: xfsprogs Requires: python%{python3_pkgversion}-setuptools -Requires: python%{python3_pkgversion}-packaging Requires: python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release} %description volume This package contains a tool to deploy OSD with different devices like @@ -1176,9 +1185,9 @@ Group: System/Libraries Obsoletes: libcephfs1 < %{_epoch_prefix}%{version}-%{release} %if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} -Obsoletes: ceph-libcephfs +Obsoletes: ceph-libcephfs < %{_epoch_prefix}%{version}-%{release} %endif -Recommends: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} +Recommends: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} %description -n libcephfs2 Ceph is a distributed network file system designed to provide excellent performance, reliability, and scalability. This is a shared library @@ -1196,11 +1205,11 @@ This package contains the libcephfs_proxy.so library that allow applications to share cephfs mounts to reduce resource consumption. %package -n libcephfs-daemon -Summary: Daemon for the libcephfs proxy +Summary: Deamon for the libcephfs proxy %if 0%{?suse_version} -Group: System/Filesystems +Group: System/Filesystems %endif -Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} %description -n libcephfs-daemon This package contains the libcephfsd daemon that allows applications to share cephfs mounts to reduce resource consumption. @@ -1401,32 +1410,9 @@ This package provides a Ceph hardware monitoring agent. # common ################################################################################# %prep -%autosetup -p1 -# Apply the rdopkg-tar patches -%autosetup -T -D -b 1 -# Remove the old dashboard dist -rm -rf src/pybind/mgr/dashboard/frontend/dist -# Apply new dashboard dists -%autosetup -T -D -a 2 -%autosetup -T -D -a 3 -%autosetup -T -D -a 4 # BLAKE3 -%autosetup -T -D -a 5 # xxHash -# submodule patches must be handled separately -# https://github.com/redhat-openstack/rdopkg/issues/16 -pushd src/s3select - patch -p1 --fuzz=0 -i %{SOURCE6} -popd - -# Rewrite .git_version file. -echo %{commit} > src/.git_version -echo %{version}-%{release} >> src/.git_version +%autosetup -p1 -n @TARBALL_BASENAME@ %build -# Disable lto on systems that do not support symver attribute -# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200 for details -%if ( 0%{?rhel} && 0%{?rhel} < 9 ) || ( 0%{?suse_version} && 0%{?suse_version} <= 1500 ) -%define _lto_cflags %{nil} -%endif %if 0%{with cephfs_java} # Find jni.h @@ -1444,7 +1430,7 @@ export CFLAGS="$RPM_OPT_FLAGS" export CXXFLAGS="$RPM_OPT_FLAGS" export LDFLAGS="$RPM_LD_FLAGS" -%if 0%{with seastar} +%if 0%{with crimson} # seastar uses longjmp() to implement coroutine. and this annoys longjmp_chk() export CXXFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g') # remove from CFLAGS too because it causes the arrow submodule to fail with: @@ -1463,6 +1449,9 @@ cmake .. \ %if 0%{?suse_version} == 1500 -DCMAKE_C_COMPILER=gcc-11 \ -DCMAKE_CXX_COMPILER=g++-11 \ +%endif +%if 0%{?gts_version} == 13 + -DCMAKE_EXE_LINKER_FLAGS=-lstdc++ \ %endif -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \ @@ -1553,11 +1542,14 @@ cmake .. \ -DWITH_SYSTEM_QATLIB:BOOL=ON \ -DWITH_SYSTEM_QATZIP:BOOL=ON \ %endif -%if 0%{with seastar} - -DWITH_SEASTAR:BOOL=ON \ +%if 0%{with crimson} + -DWITH_CRIMSON:BOOL=ON \ -DWITH_JAEGER:BOOL=OFF \ %endif -DWITH_GRAFANA:BOOL=ON \ +%if %{with sccache} + -DWITH_SCCACHE=ON \ +%endif %if 0%{with cephadm_bundling} %if 0%{with cephadm_pip_deps} -DCEPHADM_BUNDLED_DEPENDENCIES=pip @@ -1598,7 +1590,7 @@ pushd %{_vpath_builddir} rm -f %{buildroot}/%{_sysconfdir}/init.d/ceph popd -%if 0%{with seastar} +%if 0%{with crimson} # package crimson-osd with the name of ceph-osd install -m 0755 %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd %endif @@ -1799,7 +1791,6 @@ exit 0 %{_bindir}/ceph-authtool %{_bindir}/ceph-conf %{_bindir}/ceph-dencoder -%{_bindir}/ceph-diff-sorted %{_bindir}/ceph-rbdnamer %{_bindir}/ceph-syn %{_bindir}/cephfs-data-scan @@ -1845,6 +1836,7 @@ exit 0 %{_mandir}/man8/rbd-replay-many.8* %{_mandir}/man8/rbd-replay-prep.8* %{_mandir}/man8/rgw-orphan-list.8* +%{_mandir}/man8/rgw-gap-list.8* %{_mandir}/man8/rgw-restore-bucket-index.8* %dir %{_datadir}/ceph/ %{_datadir}/ceph/known_hosts_drop.ceph.com @@ -1891,6 +1883,13 @@ exit 0 %post common %tmpfiles_create %{_tmpfilesdir}/ceph-common.conf +%postun common +# Package removal cleanup +if [ "$1" -eq "0" ] ; then + rm -rf %{_localstatedir}/log/ceph + rm -rf %{_sysconfdir}/ceph +fi + %files mds %{_bindir}/ceph-mds %{_mandir}/man8/ceph-mds.8* @@ -2024,7 +2023,6 @@ fi %{_datadir}/ceph/mgr/progress %{_datadir}/ceph/mgr/prometheus %{_datadir}/ceph/mgr/rbd_support -%{_datadir}/ceph/mgr/restful %{_datadir}/ceph/mgr/rgw %{_datadir}/ceph/mgr/selftest %{_datadir}/ceph/mgr/smb @@ -2035,7 +2033,6 @@ fi %{_datadir}/ceph/mgr/telemetry %{_datadir}/ceph/mgr/test_orchestrator %{_datadir}/ceph/mgr/volumes -%{_datadir}/ceph/mgr/zabbix %files mgr-rook %{_datadir}/ceph/mgr/rook @@ -2173,6 +2170,7 @@ fi %files -n ceph-exporter %{_bindir}/ceph-exporter +%{_unitdir}/ceph-exporter.service %files -n rbd-fuse %{_bindir}/rbd-fuse @@ -2272,11 +2270,7 @@ fi %{_bindir}/radosgw-token %{_bindir}/radosgw-es %{_bindir}/radosgw-object-expirer -%{_bindir}/rgw-gap-list -%{_bindir}/rgw-gap-list-comparator -%{_bindir}/rgw-orphan-list %{_bindir}/rgw-policy-check -%{_bindir}/rgw-restore-bucket-index %{_mandir}/man8/radosgw.8* %{_mandir}/man8/rgw-policy-check.8* %dir %{_localstatedir}/lib/ceph/radosgw @@ -2323,7 +2317,6 @@ fi %{_bindir}/ceph-bluestore-tool %{_bindir}/ceph-erasure-code-tool %{_bindir}/ceph-objectstore-tool -%{_bindir}/ceph-osdomap-tool %{_bindir}/ceph-osd %{_libexecdir}/ceph/ceph-osd-prestart.sh %{_mandir}/man8/ceph-clsinfo.8* @@ -2346,11 +2339,7 @@ fi if [ $1 -eq 1 ] ; then /usr/bin/systemctl start ceph-osd.target >/dev/null 2>&1 || : fi -%if 0%{?sysctl_apply} - %sysctl_apply 90-ceph-osd.conf -%else - /usr/lib/systemd/systemd-sysctl %{_sysctldir}/90-ceph-osd.conf > /dev/null 2>&1 || : -%endif +%sysctl_apply 90-ceph-osd.conf %preun osd %if 0%{?suse_version} @@ -2374,7 +2363,7 @@ if [ $1 -ge 1 ] ; then fi fi -%if 0%{with seastar} +%if 0%{with crimson} %files crimson-osd %{_bindir}/crimson-osd %endif @@ -2573,6 +2562,7 @@ fi %{_includedir}/cephfs/metrics/Types.h %{_libdir}/libcephfs.so %{_libdir}/libcephfs_proxy.so +%{_libdir}/pkgconfig/cephfs.pc %files -n python%{python3_pkgversion}-cephfs %{python3_sitearch}/cephfs.cpython*.so @@ -2622,7 +2612,8 @@ fi %{_bindir}/ceph-coverage %{_bindir}/ceph-debugpack %{_bindir}/ceph-dedup-tool -%if 0%{with seastar} +%{_bindir}/ceph-dedup-daemon +%if 0%{with crimson} %{_bindir}/crimson-store-nbd %endif %{_mandir}/man8/ceph-debugpack.8* @@ -2775,12 +2766,10 @@ exit 0 %attr(0755,root,root) %dir %{_datadir}/snmp %{_datadir}/snmp/mibs -%files mgr-callhome -%{_datadir}/ceph/mgr/call_home_agent - %files node-proxy %{_sbindir}/ceph-node-proxy %dir %{python3_sitelib}/ceph_node_proxy %{python3_sitelib}/ceph_node_proxy/* %{python3_sitelib}/ceph_node_proxy-* -#%{_mandir}/man8/ceph-node-proxy.8* + +%changelog From 7652bcbefb4b9a5c796c392d2062de80a9d7eb6a Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Mon, 28 Jul 2025 17:55:20 -0500 Subject: [PATCH 08/31] konflux: use downstream rpm build pipeline Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index fef8537807cc0..834a2eb83c25d 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -36,11 +36,12 @@ spec: resolver: git params: - name: url - value: "https://github.com/konflux-ci/rpmbuild-pipeline.git" + #value: "https://github.com/konflux-ci/rpmbuild-pipeline.git" + value: "https://gitlab.cee.redhat.com/rhel-on-konflux/rpmbuild-pipeline.git" - name: revision value: main - name: pathInRepo - value: pipeline/build-rpm-package.yaml + value: pipeline/build-rhel-package.yaml taskRunTemplate: serviceAccountName: build-pipeline-rhceph-9-0 workspaces: From fb276ecd0272608b0fc856299c7ee5d41f1ac41b Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 10:07:24 -0500 Subject: [PATCH 09/31] konflux: add koji-target Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 834a2eb83c25d..ebe1f6825d534 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -26,6 +26,8 @@ spec: #value: quay.io/redhat-user-workloads/rhceph-rpms/rhceph:on-pr-{{revision}} - name: package-name value: rhceph + - name: koji-target + value: ceph-9-rhel-10 - name: git-url value: "{{ source_url }}" - name: revision @@ -42,6 +44,8 @@ spec: value: main - name: pathInRepo value: pipeline/build-rhel-package.yaml + - name: koji-target + value: ceph-9-rhel-10 taskRunTemplate: serviceAccountName: build-pipeline-rhceph-9-0 workspaces: From 26d9baa65c41d39f145f67189750269aecbdcb83 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 11:06:03 -0500 Subject: [PATCH 10/31] add sources file and update Source0 in spec file I uploaded the tarball defined in sources using `rhpkg upload` from manga004 Signed-off-by: Andrew Schoen --- rhceph.spec | 3 ++- sources | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 sources diff --git a/rhceph.spec b/rhceph.spec index 69c7501b7cc8b..1bc20fadabecf 100644 --- a/rhceph.spec +++ b/rhceph.spec @@ -233,7 +233,8 @@ License: LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD- Group: System/Filesystems %endif URL: http://ceph.com/ -Source0: %{?_remote_tarball_prefix}@TARBALL_BASENAME@.tar.bz2 +# Source0: %{?_remote_tarball_prefix}@TARBALL_BASENAME@.tar.bz2 +Source0: ceph-20.0.0-pre.ibm-0-g3d911bce7d6.tar.bz2 %if 0%{?suse_version} # _insert_obs_source_lines_here ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64 diff --git a/sources b/sources new file mode 100644 index 0000000000000..bfdb97c0f5da0 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (ceph-20.0.0-pre.ibm-0-g3d911bce7d6.tar.bz2) = 54d704012b4f6ce1159d2c597daa3ec4d906897667b7e135bd30ec13e524844b2b6587bf205905bb1acd71097741c5e3ad687f94103995b3192f6330be306d40 From 76edbbe8d26e2c0d1073d11951d6e3fd6b2a9af0 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 11:28:29 -0500 Subject: [PATCH 11/31] test: change name and spec file to ceph Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 2 +- ceph.spec | 2776 ++++++++++++++++++++++++++ 2 files changed, 2777 insertions(+), 1 deletion(-) create mode 100644 ceph.spec diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index ebe1f6825d534..3d022c8e5a15d 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -25,7 +25,7 @@ spec: value: quay.io/rhceph-ci/rhceph-rpms:on-pr-{{revision}}-rpms #value: quay.io/redhat-user-workloads/rhceph-rpms/rhceph:on-pr-{{revision}} - name: package-name - value: rhceph + value: ceph - name: koji-target value: ceph-9-rhel-10 - name: git-url diff --git a/ceph.spec b/ceph.spec new file mode 100644 index 0000000000000..1bc20fadabecf --- /dev/null +++ b/ceph.spec @@ -0,0 +1,2776 @@ +# +# spec file for package ceph +# +# Copyright (C) 2004-2019 The Ceph Project Developers. See COPYING file +# at the top-level directory of this distribution and at +# https://github.com/ceph/ceph/blob/master/COPYING +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. +# +# This file is under the GNU Lesser General Public License, version 2.1 +# +# Please submit bugfixes or comments via http://tracker.ceph.com/ +# + +################################################################################# +# conditional build section +# +# please read this for explanation of bcond syntax: +# https://rpm-software-management.github.io/rpm/manual/conditionalbuilds.html +################################################################################# +%bcond_with make_check +%bcond_with cmake_verbose_logging +%bcond_without ceph_test_package +%ifarch s390 +%bcond_with tcmalloc +%else +%bcond_without tcmalloc +%endif +%bcond_without rbd_ssd_cache +%ifarch x86_64 +%bcond_without rbd_rwl_cache +%else +%bcond_with rbd_rwl_cache +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%if 0%{?rhel} < 9 || 0%{?openEuler} +%bcond_with system_pmdk +%else +%ifarch s390x aarch64 +%bcond_with system_pmdk +%else +%bcond_without system_pmdk +%endif +%endif +%bcond_without selinux +%bcond_without amqp_endpoint +%bcond_without kafka_endpoint +%bcond_without lttng +%bcond_without libradosstriper +%bcond_without ocf +%global luarocks_package_name luarocks +%bcond_without lua_packages +%global _remote_tarball_prefix https://download.ceph.com/tarballs/ +%endif +%if 0%{?suse_version} +%ifarch s390x +%bcond_with system_pmdk +%else +%bcond_without system_pmdk +%endif +%bcond_with amqp_endpoint +%bcond_with cephfs_java +%bcond_with kafka_endpoint +%bcond_with libradosstriper +%ifarch x86_64 aarch64 ppc64le +%bcond_without lttng +%else +%bcond_with lttng +%endif +%bcond_with ocf +%bcond_with selinux +#Compat macro for _fillupdir macro introduced in Nov 2017 +%if ! %{defined _fillupdir} +%global _fillupdir /var/adm/fillup-templates +%endif +#luarocks +%if 0%{?is_opensuse} +# openSUSE +%bcond_without lua_packages +%if 0%{?sle_version} +# openSUSE Leap +%global luarocks_package_name lua53-luarocks +%else +# openSUSE Tumbleweed +%global luarocks_package_name lua54-luarocks +%endif +%else +# SLE +%bcond_with lua_packages +%endif +%endif +%bcond_with crimson +%if 0%{?suse_version} || 0%{?openEuler} +%bcond_with jaeger +%else +%bcond_without jaeger +%endif +%if 0%{?fedora} || 0%{?suse_version} >= 1500 || 0%{?rhel} >= 9 +# distros that ship cmd2 and/or colorama +%bcond_without cephfs_shell +%else +# distros that do _not_ ship cmd2/colorama +%bcond_with cephfs_shell +%endif +%if 0%{?fedora} || 0%{?rhel} >= 9 +%bcond_without system_arrow +%else +# for centos 8, utf8proc-devel comes from the subversion-devel module which isn't available in EPEL8 +# this is tracked in https://bugzilla.redhat.com/2152265 +%bcond_with system_arrow +%endif +# qat only supported for intel devices +%ifarch x86_64 +%if 0%{?fedora} || 0%{?rhel} >= 9 +%bcond_without system_qat +%else +# not fedora/rhel +%bcond_with system_qat +%endif +%else +# not x86_64 +%bcond_with system_qat +%endif +%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} >= 8 || 0%{?openEuler} +%global weak_deps 1 +%endif +%if %{with selinux} +# get selinux policy version +# Force 0.0.0 policy version for centos builds to avoid repository sync issues between rhel and centos +%if 0%{?centos} +%global _selinux_policy_version 0.0.0 +%else +%{!?_selinux_policy_version: %global _selinux_policy_version 0.0.0} +%endif +%endif +%bcond_without cephadm_bundling +%bcond_without cephadm_pip_deps +%bcond_without dwz +%if %{with dwz} +%else +# disable dwz for 50% speedup at the cost of ~33% space +%global _find_debuginfo_dwz_opts %{nil} +%endif +%bcond_with sccache + +%{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d} +%{!?tmpfiles_create: %global tmpfiles_create systemd-tmpfiles --create} +%{!?python3_pkgversion: %global python3_pkgversion 3} +%{!?python3_version_nodots: %global python3_version_nodots 3} +%{!?python3_version: %global python3_version 3} +%if 0%{with crimson} +%{!?gts_version: %global gts_version 13} +%else +%if 0%{?rhel} == 8 +%{!?gts_version: %global gts_version 11} +%endif +%endif + +# gcc-toolset-13 seems to trigger a linker bug resulting in a segfault in SafeTimer +# and perhaps elsewhere. For now, let's just disable it. See +# ceph bug https://tracker.ceph.com/issues/63867 +# and +# gcc bug https://bugzilla.redhat.com/show_bug.cgi?id=2241339 +# for details. +# +# Also disable lto on systems that do not support symver attribute +# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200 for details +%if 0%{?gts_version} == 13 || (0%{?rhel} && 0%{?rhel} < 9) || ( 0%{?suse_version} && 0%{?suse_version} <= 1500 ) +%define _lto_cflags %{nil} +%endif + +%if ! 0%{?suse_version} +# use multi-threaded xz compression: xz level 7 using ncpus threads +%global _source_payload w7T%{_smp_build_ncpus}.xzdio +%global _binary_payload w7T%{_smp_build_ncpus}.xzdio +%endif + +%define smp_limit_mem_per_job() %( \ + kb_per_job=%1 \ + kb_total=$(head -3 /proc/meminfo | sed -n 's/MemAvailable:\\s*\\(.*\\) kB.*/\\1/p') \ + jobs=$(( $kb_total / $kb_per_job )) \ + [ $jobs -lt 1 ] && jobs=1 \ + echo $jobs ) + +%if 0%{?_smp_ncpus_max} == 0 +%if 0%{?__isa_bits} == 32 +# 32-bit builds can use 3G memory max, which is not enough even for -j2 +%global _smp_ncpus_max 1 +%else +# 3.0 GiB mem per job +# SUSE distros use limit_build in the place of smp_limit_mem_per_job, please +# be sure to update it (in the build section, below) as well when changing this +# number. +%global _smp_ncpus_max %{smp_limit_mem_per_job 3000000} +%endif +%endif + +# disable -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1, as gcc-toolset-{10,11}-annobin +# do not provide gcc-annobin.so anymore, despite that they provide annobin.so. but +# redhat-rpm-config still passes -fplugin=gcc-annobin to the compiler. +%undefine _annotated_build +%if 0%{?gts_version} > 0 +%if 0%{gts_version} == 13 +%if 0%{?enable_devtoolset13:1} +%enable_devtoolset13 +%endif +%else +%if 0%{?enable_devtoolset11:1} +%enable_devtoolset11 +%endif +%endif +%endif + +################################################################################# +# main package definition +################################################################################# +Name: ceph +Version: 20.0.0 +Release: 0%{?dist} +%if 0%{?fedora} || 0%{?rhel} +Epoch: 2 +%endif + +# define _epoch_prefix macro which will expand to the empty string if epoch is +# undefined +%global _epoch_prefix %{?epoch:%{epoch}:} + +Summary: User space components of the Ceph file system +License: LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-3-Clause and MIT +%if 0%{?suse_version} +Group: System/Filesystems +%endif +URL: http://ceph.com/ +# Source0: %{?_remote_tarball_prefix}@TARBALL_BASENAME@.tar.bz2 +Source0: ceph-20.0.0-pre.ibm-0-g3d911bce7d6.tar.bz2 +%if 0%{?suse_version} +# _insert_obs_source_lines_here +ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64 +%endif +################################################################################# +# dependencies that apply across all distro families +################################################################################# +Requires: ceph-osd = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mds = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mon = %{_epoch_prefix}%{version}-%{release} +Requires(post): binutils +%if 0%{with cephfs_java} +BuildRequires: java-devel +BuildRequires: jpackage-utils +BuildRequires: sharutils +%endif +%if 0%{with selinux} +BuildRequires: checkpolicy +BuildRequires: selinux-policy-devel +%endif +BuildRequires: gperf +BuildRequires: cmake > 3.5 +BuildRequires: fuse-devel +BuildRequires: git +BuildRequires: grpc-devel +%if 0%{?fedora} || 0%{?suse_version} > 1500 || 0%{?rhel} == 9 || 0%{?openEuler} +BuildRequires: gcc-c++ >= 11 +%endif +%if 0%{?suse_version} == 1500 +BuildRequires: gcc11-c++ +%endif +%if 0%{?gts_version} > 0 +BuildRequires: gcc-toolset-%{gts_version}-gcc-c++ +%if 0%{?gts_version} >= 12 +BuildRequires: gcc-toolset-%{gts_version}-runtime +%else +BuildRequires: gcc-toolset-%{gts_version}-build +%endif +BuildRequires: gcc-toolset-%{gts_version}-libatomic-devel +%endif +%if 0%{?fedora} || 0%{?rhel} == 9 || 0%{?openEuler} +BuildRequires: libatomic +%endif +%if 0%{with tcmalloc} +# libprofiler did not build on ppc64le until 2.7.90 +%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} +BuildRequires: gperftools-devel >= 2.7.90 +%endif +%if 0%{?rhel} && 0%{?rhel} < 8 +BuildRequires: gperftools-devel >= 2.6.1 +%endif +%if 0%{?suse_version} +BuildRequires: gperftools-devel >= 2.4 +%endif +%endif +BuildRequires: libaio-devel +BuildRequires: libblkid-devel >= 2.17 +BuildRequires: cryptsetup-devel +BuildRequires: libnbd-devel +BuildRequires: libcurl-devel +BuildRequires: libcap-devel +BuildRequires: libcap-ng-devel +BuildRequires: fmt-devel >= 6.2.1 +BuildRequires: pkgconfig(libudev) +BuildRequires: libnl3-devel +BuildRequires: liboath-devel +BuildRequires: libtool +BuildRequires: libxml2-devel +BuildRequires: make +BuildRequires: ncurses-devel +BuildRequires: libicu-devel +BuildRequires: patch +BuildRequires: perl +BuildRequires: pkgconfig +BuildRequires: procps +BuildRequires: python%{python3_pkgversion} +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-setuptools +BuildRequires: python%{python3_pkgversion}-Cython +BuildRequires: snappy-devel +BuildRequires: sqlite-devel +BuildRequires: sudo +BuildRequires: pkgconfig(udev) +BuildRequires: valgrind-devel +BuildRequires: which +BuildRequires: xfsprogs-devel +BuildRequires: xmlstarlet +BuildRequires: nasm +BuildRequires: lua-devel +BuildRequires: lmdb-devel +%if 0%{with crimson} || 0%{with jaeger} +BuildRequires: yaml-cpp-devel >= 0.6 +%endif +%if 0%{with amqp_endpoint} +BuildRequires: librabbitmq-devel +%endif +%if 0%{with kafka_endpoint} +BuildRequires: librdkafka-devel +%endif +%if 0%{with lua_packages} +Requires: lua-devel +Requires: %{luarocks_package_name} +%endif +%if 0%{with make_check} +BuildRequires: hostname +BuildRequires: jq +BuildRequires: libuuid-devel +BuildRequires: python%{python3_pkgversion}-bcrypt +BuildRequires: python%{python3_pkgversion}-requests +BuildRequires: python%{python3_pkgversion}-dateutil +BuildRequires: python%{python3_pkgversion}-coverage +BuildRequires: python%{python3_pkgversion}-pyOpenSSL +BuildRequires: socat +BuildRequires: python%{python3_pkgversion}-asyncssh +BuildRequires: python%{python3_pkgversion}-natsort +%endif +%if 0%{?suse_version} +BuildRequires: libthrift-devel >= 0.13.0 +%else +BuildRequires: thrift-devel >= 0.13.0 +%endif +BuildRequires: re2-devel +%if 0%{with jaeger} +BuildRequires: bison +BuildRequires: flex +%if 0%{?fedora} || 0%{?rhel} +BuildRequires: json-devel +%endif +%if 0%{?suse_version} +BuildRequires: nlohmann_json-devel +%endif +BuildRequires: libevent-devel +%endif +%if 0%{with system_pmdk} +%if 0%{?suse_version} +BuildRequires: libndctl-devel >= 63 +%else +BuildRequires: ndctl-devel >= 63 +BuildRequires: daxctl-devel >= 63 +%endif +BuildRequires: libpmem-devel +BuildRequires: libpmemobj-devel >= 1.8 +%endif +%if 0%{with system_arrow} +BuildRequires: libarrow-devel +BuildRequires: parquet-libs-devel +BuildRequires: utf8proc-devel +%endif +%if 0%{with system_qat} +BuildRequires: qatlib-devel +BuildRequires: qatzip-devel +%endif +%if 0%{with crimson} +BuildRequires: c-ares-devel +BuildRequires: gnutls-devel +BuildRequires: hwloc-devel +BuildRequires: libpciaccess-devel +BuildRequires: lksctp-tools-devel +BuildRequires: ragel +BuildRequires: systemtap-sdt-devel +BuildRequires: libubsan +BuildRequires: libasan +BuildRequires: protobuf-devel +BuildRequires: protobuf-compiler +%if 0%{?gts_version} > 0 +%if 0%{?gts_version} >= 12 +BuildRequires: gcc-toolset-%{gts_version}-gcc-plugin-annobin +%else +BuildRequires: gcc-toolset-%{gts_version}-annobin +BuildRequires: gcc-toolset-%{gts_version}-annobin-plugin-gcc +%endif +BuildRequires: gcc-toolset-%{gts_version}-libubsan-devel +BuildRequires: gcc-toolset-%{gts_version}-libasan-devel +%endif +%endif +################################################################################# +# distro-conditional dependencies +################################################################################# +%if 0%{?suse_version} +BuildRequires: pkgconfig(systemd) +BuildRequires: systemd-rpm-macros +%{?systemd_requires} +PreReq: %fillup_prereq +BuildRequires: fdupes +BuildRequires: memory-constraints +BuildRequires: net-tools +BuildRequires: libbz2-devel +BuildRequires: mozilla-nss-devel +BuildRequires: keyutils-devel +BuildRequires: libopenssl-devel +BuildRequires: ninja +BuildRequires: openldap2-devel +#BuildRequires: krb5 +#BuildRequires: krb5-devel +BuildRequires: cunit-devel +BuildRequires: python%{python3_pkgversion}-PrettyTable +BuildRequires: python%{python3_pkgversion}-PyYAML +BuildRequires: python%{python3_pkgversion}-Sphinx +BuildRequires: rdma-core-devel +BuildRequires: liblz4-devel >= 1.7 +# for prometheus-alerts +BuildRequires: golang-github-prometheus-prometheus +BuildRequires: jsonnet +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +Requires: systemd +BuildRequires: boost-random +BuildRequires: nss-devel +BuildRequires: keyutils-libs-devel +BuildRequires: libatomic +BuildRequires: libibverbs-devel +BuildRequires: librdmacm-devel +BuildRequires: ninja-build +BuildRequires: openldap-devel +BuildRequires: numactl-devel +#BuildRequires: krb5-devel +BuildRequires: openssl-devel +BuildRequires: CUnit-devel +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-prettytable +BuildRequires: python%{python3_pkgversion}-pyyaml +BuildRequires: python%{python3_pkgversion}-sphinx +BuildRequires: lz4-devel >= 1.7 +%endif +# distro-conditional make check dependencies +%if 0%{with make_check} +BuildRequires: golang +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +BuildRequires: golang-github-prometheus +BuildRequires: libtool-ltdl-devel +BuildRequires: xmlsec1 +BuildRequires: xmlsec1-devel +%ifarch x86_64 +BuildRequires: xmlsec1-nss +%endif +BuildRequires: xmlsec1-openssl +BuildRequires: xmlsec1-openssl-devel +BuildRequires: python%{python3_pkgversion}-cherrypy +BuildRequires: python%{python3_pkgversion}-routes +BuildRequires: python%{python3_pkgversion}-scipy +BuildRequires: python%{python3_pkgversion}-pyOpenSSL +%endif +BuildRequires: jsonnet +%if 0%{?suse_version} +BuildRequires: golang-github-prometheus-prometheus +BuildRequires: libxmlsec1-1 +BuildRequires: libxmlsec1-nss1 +BuildRequires: libxmlsec1-openssl1 +BuildRequires: python%{python3_pkgversion}-CherryPy +BuildRequires: python%{python3_pkgversion}-Routes +BuildRequires: python%{python3_pkgversion}-numpy-devel +BuildRequires: xmlsec1-devel +BuildRequires: xmlsec1-openssl-devel +%endif +%endif +# lttng and babeltrace for rbd-replay-prep +%if %{with lttng} +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +BuildRequires: lttng-ust-devel +BuildRequires: libbabeltrace-devel +%endif +%if 0%{?suse_version} +BuildRequires: lttng-ust-devel +BuildRequires: babeltrace-devel +%endif +%endif +%if 0%{?suse_version} +BuildRequires: libexpat-devel +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +BuildRequires: expat-devel +%endif +#hardened-cc1 +%if 0%{?fedora} || 0%{?rhel} +BuildRequires: redhat-rpm-config +%endif +%if 0%{?openEuler} +BuildRequires: openEuler-rpm-config +%endif +%if 0%{with crimson} +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +BuildRequires: cryptopp-devel +%endif +%if 0%{?suse_version} +BuildRequires: libcryptopp-devel +BuildRequires: libnuma-devel +%endif +%endif +%if 0%{?rhel} >= 8 +BuildRequires: /usr/bin/pathfix.py +%endif + +%description +Ceph is a massively scalable, open-source, distributed storage system that runs +on commodity hardware and delivers object, block and file system storage. + + +################################################################################# +# subpackages +################################################################################# +%package base +Summary: Ceph Base Package +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Provides: ceph-test:/usr/bin/ceph-kvstore-tool +Requires: ceph-common = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +%if 0%{with selinux} +Requires: ceph-selinux = %{_epoch_prefix}%{version}-%{release} +%endif +Requires: findutils +Requires: grep +Requires: logrotate +Requires: psmisc +Requires: util-linux +Requires: which +%if 0%{?rhel} && 0%{?rhel} < 8 +# The following is necessary due to tracker 36508 and can be removed once the +# associated upstream bugs are resolved. +%if 0%{with tcmalloc} +Requires: gperftools-libs >= 2.6.1 +%endif +%endif +%if 0%{?weak_deps} +Recommends: chrony +Recommends: nvme-cli +%if 0%{?suse_version} +Requires: smartmontools +%else +Recommends: smartmontools +%endif +%endif +%description base +Base is the package that includes all the files shared amongst ceph servers + +%package -n cephadm +Summary: Utility to bootstrap Ceph clusters +BuildArch: noarch +Requires: lvm2 +Requires: python%{python3_pkgversion} +Requires: openssh-server +Requires: which +%if 0%{?weak_deps} +Recommends: podman >= 2.0.2 +%endif +%if 0%{with cephadm_bundling} +%if 0%{without cephadm_pip_deps} +BuildRequires: python3-jinja2 >= 2.10 +%endif +%else +Requires: python3-jinja2 >= 2.10 +%endif +%description -n cephadm +Utility to bootstrap a Ceph cluster and manage Ceph daemons deployed +with systemd and podman. + +%package -n ceph-common +Summary: Ceph Common +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rbd = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-cephfs = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rgw = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-ceph-argparse = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release} +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +Requires: python%{python3_pkgversion}-prettytable +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-PrettyTable +%endif +%if 0%{with libradosstriper} +Requires: libradosstriper1 = %{_epoch_prefix}%{version}-%{release} +%endif +%{?systemd_requires} +%if 0%{?suse_version} +Requires(pre): pwdutils +%endif +%description -n ceph-common +Common utilities to mount and interact with a ceph storage cluster. +Comprised of files that are common to Ceph clients and servers. + +%package mds +Summary: Ceph Metadata Server Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%description mds +ceph-mds is the metadata server daemon for the Ceph distributed file system. +One or more instances of ceph-mds collectively manage the file system +namespace, coordinating access to the shared OSD cluster. + +%package mon +Summary: Ceph Monitor Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Provides: ceph-test:/usr/bin/ceph-monstore-tool +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%description mon +ceph-mon is the cluster monitor daemon for the Ceph distributed file +system. One or more instances of ceph-mon form a Paxos part-time +parliament cluster that provides extremely reliable and durable storage +of cluster membership, configuration, and state. + +%package mon-client-nvmeof +Summary: Ceph NVMeoF Gateway Monitor Client +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Provides: ceph-test:/usr/bin/ceph-nvmeof-monitor-client +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description mon-client-nvmeof +Ceph NVMeoF Gateway Monitor Client distributes Paxos ANA info +to NVMeoF Gateway and provides beacons to the monitor daemon + +%package mgr +Summary: Ceph Manager Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-mgr-modules-core = %{_epoch_prefix}%{version}-%{release} +Requires: libcephsqlite = %{_epoch_prefix}%{version}-%{release} +%if 0%{?weak_deps} +Recommends: ceph-mgr-dashboard = %{_epoch_prefix}%{version}-%{release} +Recommends: ceph-mgr-diskprediction-local = %{_epoch_prefix}%{version}-%{release} +Recommends: ceph-mgr-k8sevents = %{_epoch_prefix}%{version}-%{release} +Recommends: ceph-mgr-cephadm = %{_epoch_prefix}%{version}-%{release} +Recommends: python%{python3_pkgversion}-influxdb +%endif +%description mgr +ceph-mgr enables python modules that provide services (such as the REST +module derived from Calamari) and expose CLI hooks. ceph-mgr gathers +the cluster maps, the daemon metadata, and performance counters, and +exposes all these to the python modules. + +%package mgr-dashboard +Summary: Ceph Dashboard +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-grafana-dashboards = %{_epoch_prefix}%{version}-%{release} +Requires: ceph-prometheus-alerts = %{_epoch_prefix}%{version}-%{release} +%if 0%{?fedora} || 0%{?rhel} >= 9 +Requires: python%{python3_pkgversion}-grpcio +Requires: python%{python3_pkgversion}-grpcio-tools +Requires: python%{python3_pkgversion}-jmespath +Requires: python%{python3_pkgversion}-xmltodict +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +Requires: python%{python3_pkgversion}-cherrypy +Requires: python%{python3_pkgversion}-routes +%if 0%{?weak_deps} +Recommends: python%{python3_pkgversion}-saml +%if 0%{?fedora} || 0%{?rhel} <= 8 +Recommends: python%{python3_pkgversion}-grpcio +Recommends: python%{python3_pkgversion}-grpcio-tools +%endif +%endif +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-CherryPy +Requires: python%{python3_pkgversion}-Routes +Recommends: python%{python3_pkgversion}-python3-saml +%endif +%description mgr-dashboard +ceph-mgr-dashboard is a manager module, providing a web-based application +to monitor and manage many aspects of a Ceph cluster and related components. +See the Dashboard documentation at http://docs.ceph.com/ for details and a +detailed feature overview. + +%package mgr-diskprediction-local +Summary: Ceph Manager module for predicting disk failures +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-numpy +%if 0%{?fedora} || 0%{?suse_version} || 0%{?openEuler} +Requires: python%{python3_pkgversion}-scikit-learn +%endif +Requires: python3-scipy +%description mgr-diskprediction-local +ceph-mgr-diskprediction-local is a ceph-mgr module that tries to predict +disk failures using local algorithms and machine-learning databases. + +%package mgr-modules-core +Summary: Ceph Manager modules which are always enabled +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: python%{python3_pkgversion}-bcrypt +Requires: python%{python3_pkgversion}-packaging +Requires: python%{python3_pkgversion}-pyOpenSSL +Requires: python%{python3_pkgversion}-requests +Requires: python%{python3_pkgversion}-dateutil +Requires: python%{python3_pkgversion}-setuptools +%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} +Requires: python%{python3_pkgversion}-cherrypy +Requires: python%{python3_pkgversion}-pyyaml +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-CherryPy +Requires: python%{python3_pkgversion}-PyYAML +%endif +# RHEL8 has python 3.6 and that lacks dataclasses in the stdlib, so pull in the +# backport dataclasses module instead. +%if 0%{?rhel} <= 8 +Requires: python%{python3_pkgversion}-dataclasses +%endif +%if 0%{?weak_deps} +Recommends: ceph-mgr-rook = %{_epoch_prefix}%{version}-%{release} +%endif +%description mgr-modules-core +ceph-mgr-modules-core provides a set of modules which are always +enabled by ceph-mgr. + +%package mgr-rook +BuildArch: noarch +Summary: Ceph Manager module for Rook-based orchestration +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-kubernetes +Requires: python%{python3_pkgversion}-jsonpatch +%description mgr-rook +ceph-mgr-rook is a ceph-mgr module for orchestration functions using +a Rook backend. + +%package mgr-k8sevents +BuildArch: noarch +Summary: Ceph Manager module to orchestrate ceph-events to kubernetes' events API +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-kubernetes +%description mgr-k8sevents +ceph-mgr-k8sevents is a ceph-mgr module that sends every ceph-events +to kubernetes' events API + +%package mgr-cephadm +Summary: Ceph Manager module for cephadm-based orchestration +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-asyncssh +Requires: python%{python3_pkgversion}-natsort +Requires: cephadm = %{_epoch_prefix}%{version}-%{release} +%if 0%{?suse_version} +Requires: openssh +Requires: python%{python3_pkgversion}-CherryPy +Requires: python%{python3_pkgversion}-Jinja2 +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Requires: openssh-clients +Requires: python%{python3_pkgversion}-cherrypy +Requires: python%{python3_pkgversion}-jinja2 +%endif +%description mgr-cephadm +ceph-mgr-cephadm is a ceph-mgr module for orchestration functions using +the integrated cephadm deployment tool management operations. + +%package fuse +Summary: Ceph fuse-based client +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: fuse +Requires: python%{python3_pkgversion} +%description fuse +FUSE based client for Ceph distributed network file system + +%package -n cephfs-mirror +Summary: Ceph daemon for mirroring CephFS snapshots +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +%description -n cephfs-mirror +Daemon for mirroring CephFS snapshots between Ceph clusters. + +%package -n ceph-exporter +Summary: Daemon for exposing perf counters as Prometheus metrics +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%description -n ceph-exporter +Daemon for exposing perf counters as Prometheus metrics + +%package -n rbd-fuse +Summary: Ceph fuse-based client +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +%description -n rbd-fuse +FUSE based client to map Ceph rbd images to files + +%package -n rbd-mirror +Summary: Ceph daemon for mirroring RBD images +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +%description -n rbd-mirror +Daemon for mirroring RBD images between Ceph clusters, streaming +changes asynchronously. + +%package immutable-object-cache +Summary: Ceph daemon for immutable object cache +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description immutable-object-cache +Daemon for immutable object cache. + +%package -n rbd-nbd +Summary: Ceph RBD client base on NBD +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +%description -n rbd-nbd +NBD based client to map Ceph rbd images to local device + +%package radosgw +Summary: Rados REST gateway +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +%if 0%{with selinux} +Requires: ceph-selinux = %{_epoch_prefix}%{version}-%{release} +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Requires: mailcap +%endif +%if 0%{?weak_deps} +Recommends: gawk +%endif +%description radosgw +RADOS is a distributed object store used by the Ceph distributed +storage system. This package provides a REST gateway to the +object store that aims to implement a superset of Amazon's S3 +service as well as the OpenStack Object Storage ("Swift") API. + +%package -n cephfs-top +Summary: top(1) like utility for Ceph Filesystem +BuildArch: noarch +Requires: python%{python3_pkgversion}-rados +%description -n cephfs-top +This package provides a top(1) like utility to display Ceph Filesystem metrics +in realtime. + +%if %{with ocf} +%package resource-agents +Summary: OCF-compliant resource agents for Ceph daemons +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version} +Requires: resource-agents +%description resource-agents +Resource agents for monitoring and managing Ceph daemons +under Open Cluster Framework (OCF) compliant resource +managers such as Pacemaker. +%endif + +%package osd +Summary: Ceph Object Storage Daemon +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: sudo +Requires: libstoragemgmt +%if 0%{with crimson} +Requires: protobuf +%endif +%if 0%{?weak_deps} +Recommends: ceph-volume = %{_epoch_prefix}%{version}-%{release} +%endif +%description osd +ceph-osd is the object storage daemon for the Ceph distributed file +system. It is responsible for storing objects on a local file system +and providing access to them over the network. + +%if 0%{with crimson} +%package crimson-osd +Summary: Ceph Object Storage Daemon (crimson) +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-osd = %{_epoch_prefix}%{version}-%{release} +Requires: binutils +%description crimson-osd +crimson-osd is the object storage daemon for the Ceph distributed file +system. It is responsible for storing objects on a local file system +and providing access to them over the network. +%endif + +%package volume +Summary: Ceph OSD deployment and inspection tool +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-osd = %{_epoch_prefix}%{version}-%{release} +Requires: cryptsetup +Requires: e2fsprogs +Requires: lvm2 +Requires: parted +Requires: util-linux +Requires: xfsprogs +Requires: python%{python3_pkgversion}-setuptools +Requires: python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release} +%description volume +This package contains a tool to deploy OSD with different devices like +lvm or physical disks, and trying to follow a predictable, and robust +way of preparing, activating, and starting the deployed OSD. + +%package -n librados2 +Summary: RADOS distributed object store client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} +%endif +%description -n librados2 +RADOS is a reliable, autonomic distributed object storage cluster +developed as part of the Ceph distributed storage system. This is a +shared library allowing applications to access the distributed object +store using a simple file-like interface. + +%package -n librados-devel +Summary: RADOS headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: librados2-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: librados2-devel < %{_epoch_prefix}%{version}-%{release} +%description -n librados-devel +This package contains C libraries and headers needed to develop programs +that use RADOS object store. + +%package -n libradospp-devel +Summary: RADOS headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +%description -n libradospp-devel +This package contains C++ libraries and headers needed to develop programs +that use RADOS object store. + +%package -n librgw2 +Summary: RADOS gateway client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description -n librgw2 +This package provides a library implementation of the RADOS gateway +(distributed object store with S3 and Swift personalities). + +%package -n librgw-devel +Summary: RADOS gateway client library +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +Provides: librgw2-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: librgw2-devel < %{_epoch_prefix}%{version}-%{release} +%description -n librgw-devel +This package contains libraries and headers needed to develop programs +that use RADOS gateway client library. + +%package -n python%{python3_pkgversion}-rgw +Summary: Python 3 libraries for the RADOS gateway +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: librgw2 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-rgw} +Provides: python-rgw = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-rgw < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-rgw +This package contains Python 3 libraries for interacting with Ceph RADOS +gateway. + +%package -n python%{python3_pkgversion}-rados +Summary: Python 3 libraries for the RADOS object store +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: python%{python3_pkgversion} +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-rados} +Provides: python-rados = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-rados < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-rados +This package contains Python 3 libraries for interacting with Ceph RADOS +object store. + +%package -n libcephsqlite +Summary: SQLite3 VFS for Ceph +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephsqlite +A SQLite3 VFS for storing and manipulating databases stored on Ceph's RADOS +distributed object store. + +%package -n libcephsqlite-devel +Summary: SQLite3 VFS for Ceph headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: sqlite-devel +Requires: libcephsqlite = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libcephsqlite-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libcephsqlite-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libcephsqlite-devel +A SQLite3 VFS for storing and manipulating databases stored on Ceph's RADOS +distributed object store. + +%if 0%{with libradosstriper} +%package -n libradosstriper1 +Summary: RADOS striping interface +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%description -n libradosstriper1 +Striping interface built on top of the rados library, allowing +to stripe bigger objects onto several standard rados objects using +an interface very similar to the rados one. + +%package -n libradosstriper-devel +Summary: RADOS striping interface headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: libradosstriper1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libradosstriper1-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libradosstriper1-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libradosstriper-devel +This package contains libraries and headers needed to develop programs +that use RADOS striping interface. +%endif + +%package -n librbd1 +Summary: RADOS block device client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: librados2 = %{_epoch_prefix}%{version}-%{release} +%if 0%{?suse_version} +Requires(post): coreutils +%endif +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} +%endif +%description -n librbd1 +RBD is a block device striped across multiple distributed objects in +RADOS, a reliable, autonomic distributed object storage cluster +developed as part of the Ceph distributed storage system. This is a +shared library allowing applications to manage these block devices. + +%package -n librbd-devel +Summary: RADOS block device headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: librbd1-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: librbd1-devel < %{_epoch_prefix}%{version}-%{release} +%description -n librbd-devel +This package contains libraries and headers needed to develop programs +that use RADOS block device. + +%package -n python%{python3_pkgversion}-rbd +Summary: Python 3 libraries for the RADOS block device +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: librbd1 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-rbd} +Provides: python-rbd = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-rbd < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-rbd +This package contains Python 3 libraries for interacting with Ceph RADOS +block device. + +%package -n libcephfs2 +Summary: Ceph distributed file system client library +%if 0%{?suse_version} +Group: System/Libraries +%endif +Obsoletes: libcephfs1 < %{_epoch_prefix}%{version}-%{release} +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-libcephfs < %{_epoch_prefix}%{version}-%{release} +%endif +Recommends: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs2 +Ceph is a distributed network file system designed to provide excellent +performance, reliability, and scalability. This is a shared library +allowing applications to access a Ceph distributed file system via a +POSIX-like interface. + +%package -n libcephfs-proxy2 +Summary: Proxy for libcephfs +%if 0%{?suse_version} +Group: System/Libraries +%endif +Recommends: libcephfs-daemon = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs-proxy2 +This package contains the libcephfs_proxy.so library that allow applications +to share cephfs mounts to reduce resource consumption. + +%package -n libcephfs-daemon +Summary: Deamon for the libcephfs proxy +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs-daemon +This package contains the libcephfsd daemon that allows applications to share +cephfs mounts to reduce resource consumption. + +%package -n libcephfs-devel +Summary: Ceph distributed file system headers +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} +Requires: librados-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libcephfs2-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libcephfs2-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs-devel +This package contains libraries and headers needed to develop programs +that use Ceph distributed file system. + +%package -n python%{python3_pkgversion}-cephfs +Summary: Python 3 libraries for Ceph distributed file system +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-rados = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-ceph-argparse = %{_epoch_prefix}%{version}-%{release} +%{?python_provide:%python_provide python%{python3_pkgversion}-cephfs} +Provides: python-cephfs = %{_epoch_prefix}%{version}-%{release} +Obsoletes: python-cephfs < %{_epoch_prefix}%{version}-%{release} +%description -n python%{python3_pkgversion}-cephfs +This package contains Python 3 libraries for interacting with Ceph distributed +file system. + +%package -n python%{python3_pkgversion}-ceph-argparse +Summary: Python 3 utility libraries for Ceph CLI +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +%{?python_provide:%python_provide python%{python3_pkgversion}-ceph-argparse} +%description -n python%{python3_pkgversion}-ceph-argparse +This package contains types and routines for Python 3 used by the Ceph CLI as +well as the RESTful interface. These have to do with querying the daemons for +command-description information, validating user command input against those +descriptions, and submitting the command to the appropriate daemon. + +%package -n python%{python3_pkgversion}-ceph-common +Summary: Python 3 utility libraries for Ceph +%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} +Requires: python%{python3_pkgversion}-pyyaml +%endif +%if 0%{?suse_version} +Requires: python%{python3_pkgversion}-PyYAML +%endif +%if 0%{?suse_version} +Group: Development/Libraries/Python +%endif +%{?python_provide:%python_provide python%{python3_pkgversion}-ceph-common} +%description -n python%{python3_pkgversion}-ceph-common +This package contains data structures, classes and functions used by Ceph. +It also contains utilities used for the cephadm orchestrator. + +%if 0%{with cephfs_shell} +%package -n cephfs-shell +Summary: Interactive shell for Ceph file system +Requires: python%{python3_pkgversion}-cmd2 +Requires: python%{python3_pkgversion}-colorama +Requires: python%{python3_pkgversion}-cephfs +%description -n cephfs-shell +This package contains an interactive tool that allows accessing a Ceph +file system without mounting it by providing a nice pseudo-shell which +works like an FTP client. +%endif + +%if 0%{with ceph_test_package} +%package -n ceph-test +Summary: Ceph benchmarks and test tools +%if 0%{?suse_version} +Group: System/Benchmark +%endif +Requires: ceph-common = %{_epoch_prefix}%{version}-%{release} +Requires: xmlstarlet +Requires: jq +Requires: socat +%description -n ceph-test +This package contains Ceph benchmarks and test tools. +%endif + +%if 0%{with cephfs_java} + +%package -n libcephfs_jni1 +Summary: Java Native Interface library for CephFS Java bindings +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: java +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs_jni1 +This package contains the Java Native Interface library for CephFS Java +bindings. + +%package -n libcephfs_jni-devel +Summary: Development files for CephFS Java Native Interface library +%if 0%{?suse_version} +Group: Development/Libraries/Java +%endif +Requires: java +Requires: libcephfs_jni1 = %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-devel < %{_epoch_prefix}%{version}-%{release} +Provides: libcephfs_jni1-devel = %{_epoch_prefix}%{version}-%{release} +Obsoletes: libcephfs_jni1-devel < %{_epoch_prefix}%{version}-%{release} +%description -n libcephfs_jni-devel +This package contains the development files for CephFS Java Native Interface +library. + +%package -n cephfs-java +Summary: Java libraries for the Ceph File System +%if 0%{?suse_version} +Group: System/Libraries +%endif +Requires: java +Requires: libcephfs_jni1 = %{_epoch_prefix}%{version}-%{release} +Requires: junit +BuildRequires: junit +%description -n cephfs-java +This package contains the Java libraries for the Ceph File System. + +%endif + +%package -n rados-objclass-devel +Summary: RADOS object class development kit +%if 0%{?suse_version} +Group: Development/Libraries/C and C++ +%endif +Requires: libradospp-devel = %{_epoch_prefix}%{version}-%{release} +%description -n rados-objclass-devel +This package contains libraries and headers needed to develop RADOS object +class plugins. + +%if 0%{with selinux} + +%package selinux +Summary: SELinux support for Ceph MON, OSD and MDS +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires: policycoreutils, libselinux-utils +Requires(post): ceph-base = %{_epoch_prefix}%{version}-%{release} +Requires(post): selinux-policy-base >= %{_selinux_policy_version}, policycoreutils, gawk +Requires(postun): policycoreutils +%description selinux +This package contains SELinux support for Ceph MON, OSD and MDS. The package +also performs file-system relabelling which can take a long time on heavily +populated file-systems. + +%endif + +%package grafana-dashboards +Summary: The set of Grafana dashboards for monitoring purposes +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +%description grafana-dashboards +This package provides a set of Grafana dashboards for monitoring of +Ceph clusters. The dashboards require a Prometheus server setup +collecting data from Ceph Manager "prometheus" module and Prometheus +project "node_exporter" module. The dashboards are designed to be +integrated with the Ceph Manager Dashboard web UI. + +%package prometheus-alerts +Summary: Prometheus alerts for a Ceph deployment +BuildArch: noarch +Group: System/Monitoring +%description prometheus-alerts +This package provides Ceph default alerts for Prometheus. + +%package mib +Summary: MIB for SNMP alerts +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Monitoring +%endif +%description mib +This package provides a Ceph MIB for SNMP traps. + +%package node-proxy +Summary: hw monitoring agent for Ceph +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Monitoring +%endif +%description node-proxy +This package provides a Ceph hardware monitoring agent. + +################################################################################# +# common +################################################################################# +%prep +%autosetup -p1 -n @TARBALL_BASENAME@ + +%build + +%if 0%{with cephfs_java} +# Find jni.h +for i in /usr/{lib64,lib}/jvm/java/include{,/linux}; do + [ -d $i ] && java_inc="$java_inc -I$i" +done +%endif + +%if 0%{?suse_version} +%limit_build -m 3000 +%endif + +export CPPFLAGS="$java_inc" +export CFLAGS="$RPM_OPT_FLAGS" +export CXXFLAGS="$RPM_OPT_FLAGS" +export LDFLAGS="$RPM_LD_FLAGS" + +%if 0%{with crimson} +# seastar uses longjmp() to implement coroutine. and this annoys longjmp_chk() +export CXXFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g') +# remove from CFLAGS too because it causes the arrow submodule to fail with: +# warning _FORTIFY_SOURCE requires compiling with optimization (-O) +export CFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g') +%endif + +env | sort + +%{?!_vpath_builddir:%global _vpath_builddir %{_target_platform}} + +# TODO: drop this step once we can use `cmake -B` +mkdir -p %{_vpath_builddir} +pushd %{_vpath_builddir} +cmake .. \ +%if 0%{?suse_version} == 1500 + -DCMAKE_C_COMPILER=gcc-11 \ + -DCMAKE_CXX_COMPILER=g++-11 \ +%endif +%if 0%{?gts_version} == 13 + -DCMAKE_EXE_LINKER_FLAGS=-lstdc++ \ +%endif + -DCMAKE_INSTALL_PREFIX=%{_prefix} \ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \ + -DCMAKE_INSTALL_LIBEXECDIR:PATH=%{_libexecdir} \ + -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=%{_localstatedir} \ + -DCMAKE_INSTALL_SYSCONFDIR:PATH=%{_sysconfdir} \ + -DCMAKE_INSTALL_MANDIR:PATH=%{_mandir} \ + -DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/ceph \ + -DCMAKE_INSTALL_INCLUDEDIR:PATH=%{_includedir} \ + -DSYSTEMD_SYSTEM_UNIT_DIR:PATH=%{_unitdir} \ + -DWITH_MANPAGE:BOOL=ON \ + -DWITH_PYTHON3:STRING=%{python3_version} \ + -DWITH_MGR_DASHBOARD_FRONTEND:BOOL=OFF \ +%if 0%{?suse_version} + -DWITH_RADOSGW_SELECT_PARQUET:BOOL=OFF \ +%endif +%if 0%{without ceph_test_package} + -DWITH_TESTS:BOOL=OFF \ +%endif +%if 0%{with cephfs_java} + -DJAVA_HOME=%{java_home} \ + -DJAVA_LIB_INSTALL_DIR=%{_jnidir} \ + -DWITH_CEPHFS_JAVA:BOOL=ON \ +%endif +%if 0%{with selinux} + -DWITH_SELINUX:BOOL=ON \ +%endif +%if %{with lttng} + -DWITH_LTTNG:BOOL=ON \ + -DWITH_BABELTRACE:BOOL=ON \ +%else + -DWITH_LTTNG:BOOL=OFF \ + -DWITH_BABELTRACE:BOOL=OFF \ +%endif + $CEPH_EXTRA_CMAKE_ARGS \ +%if 0%{with ocf} + -DWITH_OCF:BOOL=ON \ +%endif +%if 0%{with cephfs_shell} + -DWITH_CEPHFS_SHELL:BOOL=ON \ +%endif +%if 0%{with libradosstriper} + -DWITH_LIBRADOSSTRIPER:BOOL=ON \ +%else + -DWITH_LIBRADOSSTRIPER:BOOL=OFF \ +%endif +%if 0%{with amqp_endpoint} + -DWITH_RADOSGW_AMQP_ENDPOINT:BOOL=ON \ +%else + -DWITH_RADOSGW_AMQP_ENDPOINT:BOOL=OFF \ +%endif +%if 0%{with kafka_endpoint} + -DWITH_RADOSGW_KAFKA_ENDPOINT:BOOL=ON \ +%else + -DWITH_RADOSGW_KAFKA_ENDPOINT:BOOL=OFF \ +%endif +%if 0%{without lua_packages} + -DWITH_RADOSGW_LUA_PACKAGES:BOOL=OFF \ +%endif +%if 0%{with cmake_verbose_logging} + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ +%endif +%if 0%{with rbd_rwl_cache} + -DWITH_RBD_RWL:BOOL=ON \ +%endif +%if 0%{with rbd_ssd_cache} + -DWITH_RBD_SSD_CACHE:BOOL=ON \ +%endif +%if 0%{with system_pmdk} + -DWITH_SYSTEM_PMDK:BOOL=ON \ +%endif +%if 0%{without jaeger} + -DWITH_JAEGER:BOOL=OFF \ +%endif +%if 0%{?suse_version} + -DBOOST_J:STRING=%{jobs} \ +%else + -DBOOST_J:STRING=%{_smp_build_ncpus} \ +%endif +%if 0%{?rhel} + -DWITH_FMT_HEADER_ONLY:BOOL=ON \ +%endif +%if 0%{with system_arrow} + -DWITH_SYSTEM_ARROW:BOOL=ON \ + -DWITH_SYSTEM_UTF8PROC:BOOL=ON \ +%endif +%if 0%{with system_qat} + -DWITH_SYSTEM_QATLIB:BOOL=ON \ + -DWITH_SYSTEM_QATZIP:BOOL=ON \ +%endif +%if 0%{with crimson} + -DWITH_CRIMSON:BOOL=ON \ + -DWITH_JAEGER:BOOL=OFF \ +%endif + -DWITH_GRAFANA:BOOL=ON \ +%if %{with sccache} + -DWITH_SCCACHE=ON \ +%endif +%if 0%{with cephadm_bundling} +%if 0%{with cephadm_pip_deps} + -DCEPHADM_BUNDLED_DEPENDENCIES=pip +%else + -DCEPHADM_BUNDLED_DEPENDENCIES=rpm +%endif +%else + -DCEPHADM_BUNDLED_DEPENDENCIES=none +%endif + +%if %{with cmake_verbose_logging} +cat ./CMakeFiles/CMakeOutput.log +cat ./CMakeFiles/CMakeError.log +%endif + +%if 0%{?suse_version} +make %{_smp_mflags} +%else +%make_build +%endif + +popd + +%if 0%{with make_check} +%check +# run in-tree unittests +pushd %{_vpath_builddir} +ctest %{_smp_mflags} +popd +%endif + + +%install + +pushd %{_vpath_builddir} +%make_install +# we have dropped sysvinit bits +rm -f %{buildroot}/%{_sysconfdir}/init.d/ceph +popd + +%if 0%{with crimson} +# package crimson-osd with the name of ceph-osd +install -m 0755 %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd +%endif + +install -m 0644 -D src/etc-rbdmap %{buildroot}%{_sysconfdir}/ceph/rbdmap +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +install -m 0644 -D etc/sysconfig/ceph %{buildroot}%{_sysconfdir}/sysconfig/ceph +%endif +%if 0%{?suse_version} +install -m 0644 -D etc/sysconfig/ceph %{buildroot}%{_fillupdir}/sysconfig.%{name} +%endif +install -m 0644 -D systemd/ceph.tmpfiles.d %{buildroot}%{_tmpfilesdir}/ceph-common.conf +install -m 0644 -D systemd/50-ceph.preset %{buildroot}%{_presetdir}/50-ceph.preset +mkdir -p %{buildroot}%{_sbindir} +install -m 0644 -D src/logrotate.conf %{buildroot}%{_sysconfdir}/logrotate.d/ceph +chmod 0644 %{buildroot}%{_docdir}/ceph/sample.ceph.conf +install -m 0644 -D COPYING %{buildroot}%{_docdir}/ceph/COPYING +install -m 0644 -D etc/sysctl/90-ceph-osd.conf %{buildroot}%{_sysctldir}/90-ceph-osd.conf +install -m 0755 -D src/tools/rbd_nbd/rbd-nbd_quiesce %{buildroot}%{_libexecdir}/rbd-nbd/rbd-nbd_quiesce + +mkdir -p %{buildroot}%{_sharedstatedir}/cephadm +chmod 0700 %{buildroot}%{_sharedstatedir}/cephadm +mkdir -p %{buildroot}%{_sharedstatedir}/cephadm/.ssh +chmod 0700 %{buildroot}%{_sharedstatedir}/cephadm/.ssh +touch %{buildroot}%{_sharedstatedir}/cephadm/.ssh/authorized_keys +chmod 0600 %{buildroot}%{_sharedstatedir}/cephadm/.ssh/authorized_keys + +# firewall templates and /sbin/mount.ceph symlink +%if 0%{?suse_version} && 0%{?suse_version} < 1550 +mkdir -p %{buildroot}/sbin +ln -sf %{_sbindir}/mount.ceph %{buildroot}/sbin/mount.ceph +%endif + +# udev rules +install -m 0644 -D udev/50-rbd.rules %{buildroot}%{_udevrulesdir}/50-rbd.rules + +# sudoers.d +install -m 0440 -D sudoers.d/ceph-smartctl %{buildroot}%{_sysconfdir}/sudoers.d/ceph-smartctl + +%if 0%{?rhel} >= 8 || 0%{?openEuler} +pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{_bindir}/* +pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{_sbindir}/* +%endif + +#set up placeholder directories +mkdir -p %{buildroot}%{_sysconfdir}/ceph +mkdir -p %{buildroot}%{_localstatedir}/run/ceph +mkdir -p %{buildroot}%{_localstatedir}/log/ceph +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/tmp +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mon +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/osd +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mds +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/mgr +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/crash +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/crash/posted +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/radosgw +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-osd +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-mds +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rgw +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-mgr +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rbd +mkdir -p %{buildroot}%{_localstatedir}/lib/ceph/bootstrap-rbd-mirror + +# prometheus alerts +install -m 644 -D monitoring/ceph-mixin/prometheus_alerts.yml %{buildroot}/etc/prometheus/ceph/ceph_default_alerts.yml + +# grafana charts +install -m 644 -D monitoring/ceph-mixin/dashboards_out/* %{buildroot}/etc/grafana/dashboards/ceph-dashboard/ + +# SNMP MIB +install -m 644 -D -t %{buildroot}%{_datadir}/snmp/mibs monitoring/snmp/CEPH-MIB.txt + +%if 0%{?suse_version} +# create __pycache__ directories and their contents +%py3_compile %{buildroot}%{python3_sitelib} +# hardlink duplicate files under /usr to save space +%fdupes %{buildroot}%{_prefix} +%endif + +%if 0%{?rhel} == 8 || 0%{?openEuler} +%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib} +%endif + +%clean +rm -rf %{buildroot} +# built binaries are no longer necessary at this point, +# but are consuming ~17GB of disk in the build environment +rm -rf %{_vpath_builddir} + +################################################################################# +# files and systemd scriptlets +################################################################################# +%files + +%files base +%{_bindir}/ceph-crash +%{_bindir}/crushtool +%{_bindir}/monmaptool +%{_bindir}/osdmaptool +%{_bindir}/ceph-kvstore-tool +%{_bindir}/ceph-run +%{_presetdir}/50-ceph.preset +%{_sbindir}/ceph-create-keys +%dir %{_libexecdir}/ceph +%{_libexecdir}/ceph/ceph_common.sh +%dir %{_libdir}/rados-classes +%{_libdir}/rados-classes/* +%dir %{_libdir}/ceph +%dir %{_libdir}/ceph/erasure-code +%{_libdir}/ceph/erasure-code/libec_*.so* +%dir %{_libdir}/ceph/extblkdev +%{_libdir}/ceph/extblkdev/libceph_*.so* +%dir %{_libdir}/ceph/compressor +%{_libdir}/ceph/compressor/libceph_*.so* +%{_unitdir}/ceph-crash.service +%dir %{_libdir}/ceph/crypto +%{_libdir}/ceph/crypto/libceph_*.so* +%if %{with lttng} +%{_libdir}/libos_tp.so* +%{_libdir}/libosd_tp.so* +%{_libdir}/libmgr_op_tp.so* +%endif +%config(noreplace) %{_sysconfdir}/logrotate.d/ceph +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%config(noreplace) %{_sysconfdir}/sysconfig/ceph +%endif +%if 0%{?suse_version} +%{_fillupdir}/sysconfig.* +%endif +%{_unitdir}/ceph.target +%{_mandir}/man8/ceph-create-keys.8* +%{_mandir}/man8/ceph-run.8* +%{_mandir}/man8/crushtool.8* +%{_mandir}/man8/osdmaptool.8* +%{_mandir}/man8/monmaptool.8* +%{_mandir}/man8/ceph-kvstore-tool.8* +#set up placeholder directories +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/crash +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/crash/posted +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/tmp +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-osd +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-mds +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-rgw +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-mgr +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-rbd +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/bootstrap-rbd-mirror +%{_sysconfdir}/sudoers.d/ceph-smartctl + +%post base +/sbin/ldconfig +%if 0%{?suse_version} +%fillup_only +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl preset ceph.target ceph-crash.service >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph.target ceph-crash.service +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph.target ceph-crash.service >/dev/null 2>&1 || : +fi + +%preun base +%if 0%{?suse_version} +%service_del_preun ceph.target ceph-crash.service +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph.target ceph-crash.service +%endif + +%postun base +/sbin/ldconfig +%systemd_postun ceph.target + +%pre -n cephadm +getent group cephadm >/dev/null || groupadd -r cephadm +getent passwd cephadm >/dev/null || useradd -r -g cephadm -s /bin/bash -c "cephadm user for mgr/cephadm" -d %{_sharedstatedir}/cephadm cephadm +exit 0 + +%if ! 0%{?suse_version} +%postun -n cephadm +[ $1 -ne 0 ] || userdel cephadm || : +%endif + +%files -n cephadm +%{_sbindir}/cephadm +%{_mandir}/man8/cephadm.8* +%attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm +%attr(0700,cephadm,cephadm) %dir %{_sharedstatedir}/cephadm/.ssh +%config(noreplace) %attr(0600,cephadm,cephadm) %{_sharedstatedir}/cephadm/.ssh/authorized_keys + +%files common +%dir %{_docdir}/ceph +%doc %{_docdir}/ceph/sample.ceph.conf +%license %{_docdir}/ceph/COPYING +%{_bindir}/ceph +%{_bindir}/ceph-authtool +%{_bindir}/ceph-conf +%{_bindir}/ceph-dencoder +%{_bindir}/ceph-rbdnamer +%{_bindir}/ceph-syn +%{_bindir}/cephfs-data-scan +%{_bindir}/cephfs-journal-tool +%{_bindir}/cephfs-table-tool +%{_bindir}/crushdiff +%{_bindir}/rados +%{_bindir}/radosgw-admin +%{_bindir}/rbd +%{_bindir}/rbd-replay +%{_bindir}/rbd-replay-many +%{_bindir}/rbdmap +%{_bindir}/rgw-gap-list +%{_bindir}/rgw-gap-list-comparator +%{_bindir}/rgw-orphan-list +%{_bindir}/rgw-restore-bucket-index +%{_sbindir}/mount.ceph +%if 0%{?suse_version} && 0%{?suse_version} < 1550 +/sbin/mount.ceph +%endif +%if %{with lttng} +%{_bindir}/rbd-replay-prep +%endif +%{_bindir}/ceph-post-file +%dir %{_libdir}/ceph/denc +%{_libdir}/ceph/denc/denc-mod-*.so +%{_tmpfilesdir}/ceph-common.conf +%{_mandir}/man8/ceph-authtool.8* +%{_mandir}/man8/ceph-conf.8* +%{_mandir}/man8/ceph-dencoder.8* +%{_mandir}/man8/ceph-diff-sorted.8* +%{_mandir}/man8/ceph-rbdnamer.8* +%{_mandir}/man8/ceph-syn.8* +%{_mandir}/man8/ceph-post-file.8* +%{_mandir}/man8/ceph.8* +%{_mandir}/man8/crushdiff.8* +%{_mandir}/man8/mount.ceph.8* +%{_mandir}/man8/rados.8* +%{_mandir}/man8/radosgw-admin.8* +%{_mandir}/man8/rbd.8* +%{_mandir}/man8/rbdmap.8* +%{_mandir}/man8/rbd-replay.8* +%{_mandir}/man8/rbd-replay-many.8* +%{_mandir}/man8/rbd-replay-prep.8* +%{_mandir}/man8/rgw-orphan-list.8* +%{_mandir}/man8/rgw-gap-list.8* +%{_mandir}/man8/rgw-restore-bucket-index.8* +%dir %{_datadir}/ceph/ +%{_datadir}/ceph/known_hosts_drop.ceph.com +%{_datadir}/ceph/id_rsa_drop.ceph.com +%{_datadir}/ceph/id_rsa_drop.ceph.com.pub +%dir %{_sysconfdir}/ceph/ +%config %{_sysconfdir}/bash_completion.d/ceph +%config %{_sysconfdir}/bash_completion.d/rados +%config %{_sysconfdir}/bash_completion.d/rbd +%config %{_sysconfdir}/bash_completion.d/radosgw-admin +%config(noreplace) %{_sysconfdir}/ceph/rbdmap +%{_unitdir}/rbdmap.service +%dir %{_udevrulesdir} +%{_udevrulesdir}/50-rbd.rules +%attr(3770,ceph,ceph) %dir %{_localstatedir}/log/ceph/ +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/ + +%pre common +CEPH_GROUP_ID=167 +CEPH_USER_ID=167 +%if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} +/usr/sbin/groupadd ceph -g $CEPH_GROUP_ID -o -r 2>/dev/null || : +/usr/sbin/useradd ceph -u $CEPH_USER_ID -o -r -g ceph -s /sbin/nologin -c "Ceph daemons" -d %{_localstatedir}/lib/ceph 2>/dev/null || : +%endif +%if 0%{?suse_version} +if ! getent group ceph >/dev/null ; then + CEPH_GROUP_ID_OPTION="" + getent group $CEPH_GROUP_ID >/dev/null || CEPH_GROUP_ID_OPTION="-g $CEPH_GROUP_ID" + groupadd ceph $CEPH_GROUP_ID_OPTION -r 2>/dev/null || : +fi +if ! getent passwd ceph >/dev/null ; then + CEPH_USER_ID_OPTION="" + getent passwd $CEPH_USER_ID >/dev/null || CEPH_USER_ID_OPTION="-u $CEPH_USER_ID" + useradd ceph $CEPH_USER_ID_OPTION -r -g ceph -s /sbin/nologin 2>/dev/null || : +fi +usermod -c "Ceph storage service" \ + -d %{_localstatedir}/lib/ceph \ + -g ceph \ + -s /sbin/nologin \ + ceph +%endif +exit 0 + +%post common +%tmpfiles_create %{_tmpfilesdir}/ceph-common.conf + +%postun common +# Package removal cleanup +if [ "$1" -eq "0" ] ; then + rm -rf %{_localstatedir}/log/ceph + rm -rf %{_sysconfdir}/ceph +fi + +%files mds +%{_bindir}/ceph-mds +%{_mandir}/man8/ceph-mds.8* +%{_unitdir}/ceph-mds@.service +%{_unitdir}/ceph-mds.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/mds + +%post mds +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-mds@\*.service ceph-mds.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-mds@\*.service ceph-mds.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-mds.target >/dev/null 2>&1 || : +fi + +%preun mds +%if 0%{?suse_version} +%service_del_preun ceph-mds@\*.service ceph-mds.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-mds@\*.service ceph-mds.target +%endif + +%postun mds +%systemd_postun ceph-mds@\*.service ceph-mds.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-mds@\*.service > /dev/null 2>&1 || : + fi +fi + +%files mgr +%{_bindir}/ceph-mgr +%dir %{_datadir}/ceph/mgr +%{_datadir}/ceph/mgr/mgr_module.* +%{_datadir}/ceph/mgr/mgr_util.* +%{_datadir}/ceph/mgr/object_format.* +%{_unitdir}/ceph-mgr@.service +%{_unitdir}/ceph-mgr.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/mgr + +%post mgr +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-mgr@\*.service ceph-mgr.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-mgr@\*.service ceph-mgr.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-mgr.target >/dev/null 2>&1 || : +fi + +%preun mgr +%if 0%{?suse_version} +%service_del_preun ceph-mgr@\*.service ceph-mgr.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-mgr@\*.service ceph-mgr.target +%endif + +%postun mgr +%systemd_postun ceph-mgr@\*.service ceph-mgr.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-mgr@\*.service > /dev/null 2>&1 || : + fi +fi + +%files mgr-dashboard +%{_datadir}/ceph/mgr/dashboard + +%post mgr-dashboard +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-dashboard +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-diskprediction-local +%{_datadir}/ceph/mgr/diskprediction_local + +%post mgr-diskprediction-local +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-diskprediction-local +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-modules-core +%dir %{_datadir}/ceph/mgr +%{_datadir}/ceph/mgr/alerts +%{_datadir}/ceph/mgr/balancer +%{_datadir}/ceph/mgr/crash +%{_datadir}/ceph/mgr/devicehealth +%{_datadir}/ceph/mgr/influx +%{_datadir}/ceph/mgr/insights +%{_datadir}/ceph/mgr/iostat +%{_datadir}/ceph/mgr/localpool +%{_datadir}/ceph/mgr/mds_autoscaler +%{_datadir}/ceph/mgr/mirroring +%{_datadir}/ceph/mgr/nfs +%{_datadir}/ceph/mgr/orchestrator +%{_datadir}/ceph/mgr/osd_perf_query +%{_datadir}/ceph/mgr/osd_support +%{_datadir}/ceph/mgr/pg_autoscaler +%{_datadir}/ceph/mgr/progress +%{_datadir}/ceph/mgr/prometheus +%{_datadir}/ceph/mgr/rbd_support +%{_datadir}/ceph/mgr/rgw +%{_datadir}/ceph/mgr/selftest +%{_datadir}/ceph/mgr/smb +%{_datadir}/ceph/mgr/snap_schedule +%{_datadir}/ceph/mgr/stats +%{_datadir}/ceph/mgr/status +%{_datadir}/ceph/mgr/telegraf +%{_datadir}/ceph/mgr/telemetry +%{_datadir}/ceph/mgr/test_orchestrator +%{_datadir}/ceph/mgr/volumes + +%files mgr-rook +%{_datadir}/ceph/mgr/rook + +%post mgr-rook +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-rook +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-k8sevents +%{_datadir}/ceph/mgr/k8sevents + +%post mgr-k8sevents +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-k8sevents +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mgr-cephadm +%{_datadir}/ceph/mgr/cephadm + +%post mgr-cephadm +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%postun mgr-cephadm +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl try-restart ceph-mgr.target >/dev/null 2>&1 || : +fi + +%files mon +%{_bindir}/ceph-mon +%{_bindir}/ceph-monstore-tool +%{_mandir}/man8/ceph-mon.8* +%{_unitdir}/ceph-mon@.service +%{_unitdir}/ceph-mon.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/mon + +%post mon +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-mon@\*.service ceph-mon.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-mon@\*.service ceph-mon.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-mon.target >/dev/null 2>&1 || : +fi + +%preun mon +%if 0%{?suse_version} +%service_del_preun ceph-mon@\*.service ceph-mon.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-mon@\*.service ceph-mon.target +%endif + +%postun mon +%systemd_postun ceph-mon@\*.service ceph-mon.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-mon@\*.service > /dev/null 2>&1 || : + fi +fi + +%files mon-client-nvmeof +%{_bindir}/ceph-nvmeof-monitor-client + +%files fuse +%{_bindir}/ceph-fuse +%{_mandir}/man8/ceph-fuse.8* +%{_sbindir}/mount.fuse.ceph +%{_mandir}/man8/mount.fuse.ceph.8* +%{_unitdir}/ceph-fuse@.service +%{_unitdir}/ceph-fuse.target + +%files -n cephfs-mirror +%{_bindir}/cephfs-mirror +%{_mandir}/man8/cephfs-mirror.8* +%{_unitdir}/cephfs-mirror@.service +%{_unitdir}/cephfs-mirror.target + +%post -n cephfs-mirror +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset cephfs-mirror@\*.service cephfs-mirror.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post cephfs-mirror@\*.service cephfs-mirror.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start cephfs-mirror.target >/dev/null 2>&1 || : +fi + +%preun -n cephfs-mirror +%if 0%{?suse_version} +%service_del_preun cephfs-mirror@\*.service cephfs-mirror.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun cephfs-mirror@\*.service cephfs-mirror.target +%endif + +%postun -n cephfs-mirror +%systemd_postun cephfs-mirror@\*.service cephfs-mirror.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart cephfs-mirror@\*.service > /dev/null 2>&1 || : + fi +fi + +%files -n ceph-exporter +%{_bindir}/ceph-exporter +%{_unitdir}/ceph-exporter.service + +%files -n rbd-fuse +%{_bindir}/rbd-fuse +%{_mandir}/man8/rbd-fuse.8* + +%files -n rbd-mirror +%{_bindir}/rbd-mirror +%{_mandir}/man8/rbd-mirror.8* +%{_unitdir}/ceph-rbd-mirror@.service +%{_unitdir}/ceph-rbd-mirror.target + +%post -n rbd-mirror +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-rbd-mirror@\*.service ceph-rbd-mirror.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-rbd-mirror.target >/dev/null 2>&1 || : +fi + +%preun -n rbd-mirror +%if 0%{?suse_version} +%service_del_preun ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +%endif + +%postun -n rbd-mirror +%systemd_postun ceph-rbd-mirror@\*.service ceph-rbd-mirror.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-rbd-mirror@\*.service > /dev/null 2>&1 || : + fi +fi + +%files immutable-object-cache +%{_bindir}/ceph-immutable-object-cache +%{_mandir}/man8/ceph-immutable-object-cache.8* +%{_unitdir}/ceph-immutable-object-cache@.service +%{_unitdir}/ceph-immutable-object-cache.target + +%post immutable-object-cache +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-immutable-object-cache.target >/dev/null 2>&1 || : +fi + +%preun immutable-object-cache +%if 0%{?suse_version} +%service_del_preun ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +%endif + +%postun immutable-object-cache +%systemd_postun ceph-immutable-object-cache@\*.service ceph-immutable-object-cache.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-immutable-object-cache@\*.service > /dev/null 2>&1 || : + fi +fi + +%files -n rbd-nbd +%{_bindir}/rbd-nbd +%{_mandir}/man8/rbd-nbd.8* +%dir %{_libexecdir}/rbd-nbd +%{_libexecdir}/rbd-nbd/rbd-nbd_quiesce + +%files radosgw +%{_bindir}/ceph-diff-sorted +%{_bindir}/radosgw +%{_bindir}/radosgw-token +%{_bindir}/radosgw-es +%{_bindir}/radosgw-object-expirer +%{_bindir}/rgw-policy-check +%{_mandir}/man8/radosgw.8* +%{_mandir}/man8/rgw-policy-check.8* +%dir %{_localstatedir}/lib/ceph/radosgw +%{_unitdir}/ceph-radosgw@.service +%{_unitdir}/ceph-radosgw.target + +%post radosgw +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-radosgw@\*.service ceph-radosgw.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-radosgw@\*.service ceph-radosgw.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-radosgw.target >/dev/null 2>&1 || : +fi + +%preun radosgw +%if 0%{?suse_version} +%service_del_preun ceph-radosgw@\*.service ceph-radosgw.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-radosgw@\*.service ceph-radosgw.target +%endif + +%postun radosgw +%systemd_postun ceph-radosgw@\*.service ceph-radosgw.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-radosgw@\*.service > /dev/null 2>&1 || : + fi +fi + +%files osd +%{_bindir}/ceph-clsinfo +%{_bindir}/ceph-bluestore-tool +%{_bindir}/ceph-erasure-code-tool +%{_bindir}/ceph-objectstore-tool +%{_bindir}/ceph-osd +%{_libexecdir}/ceph/ceph-osd-prestart.sh +%{_mandir}/man8/ceph-clsinfo.8* +%{_mandir}/man8/ceph-osd.8* +%{_mandir}/man8/ceph-bluestore-tool.8* +%{_unitdir}/ceph-osd@.service +%{_unitdir}/ceph-osd.target +%attr(750,ceph,ceph) %dir %{_localstatedir}/lib/ceph/osd +%config(noreplace) %{_sysctldir}/90-ceph-osd.conf + +%post osd +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-osd@\*.service ceph-osd.target >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-osd@\*.service ceph-osd.target +%endif +if [ $1 -eq 1 ] ; then +/usr/bin/systemctl start ceph-osd.target >/dev/null 2>&1 || : +fi +%sysctl_apply 90-ceph-osd.conf + +%preun osd +%if 0%{?suse_version} +%service_del_preun ceph-osd@\*.service ceph-osd.target +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-osd@\*.service ceph-osd.target +%endif + +%postun osd +%systemd_postun ceph-osd@\*.service ceph-volume@\*.service ceph-osd.target +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-osd@\*.service ceph-volume@\*.service > /dev/null 2>&1 || : + fi +fi + +%if 0%{with crimson} +%files crimson-osd +%{_bindir}/crimson-osd +%endif + +%files volume +%{_sbindir}/ceph-volume +%{_sbindir}/ceph-volume-systemd +%dir %{python3_sitelib}/ceph_volume +%{python3_sitelib}/ceph_volume/* +%{python3_sitelib}/ceph_volume-* +%{_mandir}/man8/ceph-volume.8* +%{_mandir}/man8/ceph-volume-systemd.8* +%{_unitdir}/ceph-volume@.service + +%post volume +%if 0%{?suse_version} +if [ $1 -eq 1 ] ; then + /usr/bin/systemctl preset ceph-volume@\*.service >/dev/null 2>&1 || : +fi +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_post ceph-volume@\*.service +%endif + +%preun volume +%if 0%{?suse_version} +%service_del_preun ceph-volume@\*.service +%endif +%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} +%systemd_preun ceph-volume@\*.service +%endif + +%postun volume +%systemd_postun ceph-volume@\*.service +if [ $1 -ge 1 ] ; then + # Restart on upgrade, but only if "CEPH_AUTO_RESTART_ON_UPGRADE" is set to + # "yes". In any case: if units are not running, do not touch them. + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl try-restart ceph-volume@\*.service > /dev/null 2>&1 || : + fi +fi + +%if %{with ocf} + +%files resource-agents +%dir %{_prefix}/lib/ocf +%dir %{_prefix}/lib/ocf/resource.d +%dir %{_prefix}/lib/ocf/resource.d/ceph +%attr(0755,-,-) %{_prefix}/lib/ocf/resource.d/ceph/rbd + +%endif + +%files -n librados2 +%{_libdir}/librados.so.* +%dir %{_libdir}/ceph +%{_libdir}/ceph/libceph-common.so.* +%if %{with lttng} +%{_libdir}/librados_tp.so.* +%endif +%dir %{_sysconfdir}/ceph + +%post -n librados2 -p /sbin/ldconfig + +%postun -n librados2 -p /sbin/ldconfig + +%files -n librados-devel +%dir %{_includedir}/rados +%{_includedir}/rados/librados.h +%{_includedir}/rados/rados_types.h +%{_libdir}/librados.so +%if %{with lttng} +%{_libdir}/librados_tp.so +%endif +%{_bindir}/librados-config +%{_mandir}/man8/librados-config.8* + +%files -n libradospp-devel +%dir %{_includedir}/rados +%{_includedir}/rados/buffer.h +%{_includedir}/rados/buffer_fwd.h +%{_includedir}/rados/crc32c.h +%{_includedir}/rados/inline_memory.h +%{_includedir}/rados/librados.hpp +%{_includedir}/rados/librados_fwd.hpp +%{_includedir}/rados/page.h +%{_includedir}/rados/rados_types.hpp + +%files -n python%{python3_pkgversion}-rados +%{python3_sitearch}/rados.cpython*.so +%{python3_sitearch}/rados-*.egg-info + +%files -n libcephsqlite +%{_libdir}/libcephsqlite.so + +%post -n libcephsqlite -p /sbin/ldconfig + +%postun -n libcephsqlite -p /sbin/ldconfig + +%files -n libcephsqlite-devel +%{_includedir}/libcephsqlite.h + +%if 0%{with libradosstriper} +%files -n libradosstriper1 +%{_libdir}/libradosstriper.so.* + +%post -n libradosstriper1 -p /sbin/ldconfig + +%postun -n libradosstriper1 -p /sbin/ldconfig + +%files -n libradosstriper-devel +%dir %{_includedir}/radosstriper +%{_includedir}/radosstriper/libradosstriper.h +%{_includedir}/radosstriper/libradosstriper.hpp +%{_libdir}/libradosstriper.so +%endif + +%files -n librbd1 +%{_libdir}/librbd.so.* +%if %{with lttng} +%{_libdir}/librbd_tp.so.* +%endif +%dir %{_libdir}/ceph/librbd +%{_libdir}/ceph/librbd/libceph_*.so* + +%post -n librbd1 -p /sbin/ldconfig + +%postun -n librbd1 -p /sbin/ldconfig + +%files -n librbd-devel +%dir %{_includedir}/rbd +%{_includedir}/rbd/librbd.h +%{_includedir}/rbd/librbd.hpp +%{_includedir}/rbd/features.h +%{_libdir}/librbd.so +%if %{with lttng} +%{_libdir}/librbd_tp.so +%endif + +%files -n librgw2 +%{_libdir}/librgw.so.* +%if %{with lttng} +%{_libdir}/librgw_op_tp.so.* +%{_libdir}/librgw_rados_tp.so.* +%endif + +%post -n librgw2 -p /sbin/ldconfig + +%postun -n librgw2 -p /sbin/ldconfig + +%files -n librgw-devel +%dir %{_includedir}/rados +%{_includedir}/rados/librgw.h +%{_includedir}/rados/rgw_file.h +%{_libdir}/librgw.so +%if %{with lttng} +%{_libdir}/librgw_op_tp.so +%{_libdir}/librgw_rados_tp.so +%endif + +%files -n python%{python3_pkgversion}-rgw +%{python3_sitearch}/rgw.cpython*.so +%{python3_sitearch}/rgw-*.egg-info + +%files -n python%{python3_pkgversion}-rbd +%{python3_sitearch}/rbd.cpython*.so +%{python3_sitearch}/rbd-*.egg-info + +%files -n libcephfs2 +%{_libdir}/libcephfs.so.* +%dir %{_sysconfdir}/ceph + +%post -n libcephfs2 -p /sbin/ldconfig + +%postun -n libcephfs2 -p /sbin/ldconfig + +%files -n libcephfs-proxy2 +%{_libdir}/libcephfs_proxy.so.* + +%post -n libcephfs-proxy2 -p /sbin/ldconfig + +%postun -n libcephfs-proxy2 -p /sbin/ldconfig + +%files -n libcephfs-daemon +%{_sbindir}/libcephfsd + +%files -n libcephfs-devel +%dir %{_includedir}/cephfs +%{_includedir}/cephfs/libcephfs.h +%{_includedir}/cephfs/ceph_ll_client.h +%{_includedir}/cephfs/types.h +%dir %{_includedir}/cephfs/metrics +%{_includedir}/cephfs/metrics/Types.h +%{_libdir}/libcephfs.so +%{_libdir}/libcephfs_proxy.so +%{_libdir}/pkgconfig/cephfs.pc + +%files -n python%{python3_pkgversion}-cephfs +%{python3_sitearch}/cephfs.cpython*.so +%{python3_sitearch}/cephfs-*.egg-info + +%files -n python%{python3_pkgversion}-ceph-argparse +%{python3_sitelib}/ceph_argparse.py +%{python3_sitelib}/__pycache__/ceph_argparse.cpython*.py* +%{python3_sitelib}/ceph_daemon.py +%{python3_sitelib}/__pycache__/ceph_daemon.cpython*.py* + +%files -n python%{python3_pkgversion}-ceph-common +%{python3_sitelib}/ceph +%{python3_sitelib}/ceph-*.egg-info + +%if 0%{with cephfs_shell} +%files -n cephfs-shell +%{python3_sitelib}/cephfs_shell-*.egg-info +%{_bindir}/cephfs-shell +%{_mandir}/man8/cephfs-shell.8* +%endif + +%files -n cephfs-top +%{python3_sitelib}/cephfs_top-*.egg-info +%{_bindir}/cephfs-top +%{_mandir}/man8/cephfs-top.8* + +%if 0%{with ceph_test_package} +%files -n ceph-test +%{_bindir}/ceph-client-debug +%{_bindir}/ceph_bench_log +%{_bindir}/ceph_multi_stress_watch +%{_bindir}/ceph_erasure_code_benchmark +%{_bindir}/ceph_omapbench +%{_bindir}/ceph_objectstore_bench +%{_bindir}/ceph_perf_objectstore +%{_bindir}/ceph_perf_local +%{_bindir}/ceph_perf_msgr_client +%{_bindir}/ceph_perf_msgr_server +%{_bindir}/ceph_psim +%{_bindir}/ceph_radosacl +%{_bindir}/ceph_rgw_jsonparser +%{_bindir}/ceph_rgw_multiparser +%{_bindir}/ceph_scratchtool +%{_bindir}/ceph_scratchtoolpp +%{_bindir}/ceph_test_* +%{_bindir}/ceph-coverage +%{_bindir}/ceph-debugpack +%{_bindir}/ceph-dedup-tool +%{_bindir}/ceph-dedup-daemon +%if 0%{with crimson} +%{_bindir}/crimson-store-nbd +%endif +%{_mandir}/man8/ceph-debugpack.8* +%dir %{_libdir}/ceph +%{_libdir}/ceph/ceph-monstore-update-crush.sh +%endif + +%if 0%{with cephfs_java} +%files -n libcephfs_jni1 +%{_libdir}/libcephfs_jni.so.* + +%post -n libcephfs_jni1 -p /sbin/ldconfig + +%postun -n libcephfs_jni1 -p /sbin/ldconfig + +%files -n libcephfs_jni-devel +%{_libdir}/libcephfs_jni.so + +%files -n cephfs-java +%{_javadir}/libcephfs.jar +%{_javadir}/libcephfs-test.jar +%endif + +%files -n rados-objclass-devel +%dir %{_includedir}/rados +%{_includedir}/rados/objclass.h + +%if 0%{with selinux} +%files selinux +%attr(0600,root,root) %{_datadir}/selinux/packages/ceph.pp +%{_datadir}/selinux/devel/include/contrib/ceph.if +%{_mandir}/man8/ceph_selinux.8* + +%post selinux +# backup file_contexts before update +. /etc/selinux/config +FILE_CONTEXT=/etc/selinux/${SELINUXTYPE}/contexts/files/file_contexts +cp ${FILE_CONTEXT} ${FILE_CONTEXT}.pre + +# Install the policy +/usr/sbin/semodule -i %{_datadir}/selinux/packages/ceph.pp + +# Load the policy if SELinux is enabled +if ! /usr/sbin/selinuxenabled; then + # Do not relabel if selinux is not enabled + exit 0 +fi + +if diff ${FILE_CONTEXT} ${FILE_CONTEXT}.pre > /dev/null 2>&1; then + # Do not relabel if file contexts did not change + exit 0 +fi + +# Stop ceph.target while relabeling if CEPH_AUTO_RESTART_ON_UPGRADE=yes +SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph +if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH +fi + +# Check whether the daemons are running +/usr/bin/systemctl status ceph.target > /dev/null 2>&1 +STATUS=$? + +# Stop the daemons if they were running +if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl stop ceph.target > /dev/null 2>&1 + fi +fi + +# Relabel the files fix for first package install +/usr/sbin/fixfiles -C ${FILE_CONTEXT}.pre restore 2> /dev/null + +rm -f ${FILE_CONTEXT}.pre +# The fixfiles command won't fix label for /var/run/ceph +/usr/sbin/restorecon -R /var/run/ceph > /dev/null 2>&1 + +# Start the daemons iff they were running before +if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl start ceph.target > /dev/null 2>&1 || : + fi +fi +exit 0 + +%postun selinux +if [ $1 -eq 0 ]; then + # backup file_contexts before update + . /etc/selinux/config + FILE_CONTEXT=/etc/selinux/${SELINUXTYPE}/contexts/files/file_contexts + cp ${FILE_CONTEXT} ${FILE_CONTEXT}.pre + + # Remove the module + /usr/sbin/semodule -n -r ceph > /dev/null 2>&1 + + # Reload the policy if SELinux is enabled + if ! /usr/sbin/selinuxenabled ; then + # Do not relabel if SELinux is not enabled + exit 0 + fi + + # Stop ceph.target while relabeling if CEPH_AUTO_RESTART_ON_UPGRADE=yes + SYSCONF_CEPH=%{_sysconfdir}/sysconfig/ceph + if [ -f $SYSCONF_CEPH -a -r $SYSCONF_CEPH ] ; then + source $SYSCONF_CEPH + fi + + # Check whether the daemons are running + /usr/bin/systemctl status ceph.target > /dev/null 2>&1 + STATUS=$? + + # Stop the daemons if they were running + if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl stop ceph.target > /dev/null 2>&1 + fi + fi + + /usr/sbin/fixfiles -C ${FILE_CONTEXT}.pre restore 2> /dev/null + rm -f ${FILE_CONTEXT}.pre + # The fixfiles command won't fix label for /var/run/ceph + /usr/sbin/restorecon -R /var/run/ceph > /dev/null 2>&1 + + # Start the daemons if they were running before + if test $STATUS -eq 0; then + if [ "X$CEPH_AUTO_RESTART_ON_UPGRADE" = "Xyes" ] ; then + /usr/bin/systemctl start ceph.target > /dev/null 2>&1 || : + fi + fi +fi +exit 0 +%endif + +%files grafana-dashboards +%if 0%{?suse_version} +%attr(0755,root,root) %dir %{_sysconfdir}/grafana +%attr(0755,root,root) %dir %{_sysconfdir}/grafana/dashboards +%endif +%attr(0755,root,root) %dir %{_sysconfdir}/grafana/dashboards/ceph-dashboard +%config %{_sysconfdir}/grafana/dashboards/ceph-dashboard/* + +%files prometheus-alerts +%if 0%{?suse_version} +%attr(0755,root,root) %dir %{_sysconfdir}/prometheus +%endif +%attr(0755,root,root) %dir %{_sysconfdir}/prometheus/ceph +%config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml + +%files mib +%attr(0755,root,root) %dir %{_datadir}/snmp +%{_datadir}/snmp/mibs + +%files node-proxy +%{_sbindir}/ceph-node-proxy +%dir %{python3_sitelib}/ceph_node_proxy +%{python3_sitelib}/ceph_node_proxy/* +%{python3_sitelib}/ceph_node_proxy-* + +%changelog From e1dc2badd50d2c14c50a3432679e227d9e043a86 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 15:37:08 -0500 Subject: [PATCH 12/31] test: rename ceph.spec Signed-off-by: Andrew Schoen --- ceph.spec => ceph.spec.bak | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ceph.spec => ceph.spec.bak (100%) diff --git a/ceph.spec b/ceph.spec.bak similarity index 100% rename from ceph.spec rename to ceph.spec.bak From a7064566db80c6d34b6dc3148555b20e7bf87377 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 16:07:48 -0500 Subject: [PATCH 13/31] konflux: use ceph-9.0-rhel-10-build koji target Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 3d022c8e5a15d..bb01d6c0146fb 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -27,7 +27,7 @@ spec: - name: package-name value: ceph - name: koji-target - value: ceph-9-rhel-10 + value: ceph-9.0-rhel-10-build - name: git-url value: "{{ source_url }}" - name: revision From 963fad24cf6b89207fdcf6c341a7037569fdc29b Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 16:09:56 -0500 Subject: [PATCH 14/31] test: use ceph-9.0-rhel-10-candidate tag Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index bb01d6c0146fb..3e29b6d97073d 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -27,7 +27,7 @@ spec: - name: package-name value: ceph - name: koji-target - value: ceph-9.0-rhel-10-build + value: ceph-9.0-rhel-10-candidate - name: git-url value: "{{ source_url }}" - name: revision From 2aca2c058ec5d229d61d841725408186c86a6fb8 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 16:31:40 -0500 Subject: [PATCH 15/31] f; add bakc ceph.spec Signed-off-by: Andrew Schoen --- ceph.spec.bak => ceph.spec | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ceph.spec.bak => ceph.spec (100%) diff --git a/ceph.spec.bak b/ceph.spec similarity index 100% rename from ceph.spec.bak rename to ceph.spec From b987f027aaa58e27feef832baba2ed0c36a863a0 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 16:35:35 -0500 Subject: [PATCH 16/31] konflux: only use x86_64 Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 3e29b6d97073d..22eea6ee16ecc 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -34,6 +34,9 @@ spec: value: "{{ revision }}" - name: target-branch value: "{{ target_branch }}" + - name: build-architectures + value: + - x86_64 pipelineRef: resolver: git params: From ce9ce7a0f6478c9af54e58153fb860d0a1202541 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 17:12:55 -0500 Subject: [PATCH 17/31] f; rename ceph.spec to ceph.spec.bak Signed-off-by: Andrew Schoen --- ceph.spec => ceph.spec.bak | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ceph.spec => ceph.spec.bak (100%) diff --git a/ceph.spec b/ceph.spec.bak similarity index 100% rename from ceph.spec rename to ceph.spec.bak From 90563cd8e381463fbba9c793c7a28e1c0ab2c56d Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 17:27:03 -0500 Subject: [PATCH 18/31] test: add koji-build-target param Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 22eea6ee16ecc..96f22439fa548 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -28,6 +28,8 @@ spec: value: ceph - name: koji-target value: ceph-9.0-rhel-10-candidate + - name: koji-build-target + value: ceph-9.0-rhel-10-candidate - name: git-url value: "{{ source_url }}" - name: revision @@ -47,8 +49,6 @@ spec: value: main - name: pathInRepo value: pipeline/build-rhel-package.yaml - - name: koji-target - value: ceph-9-rhel-10 taskRunTemplate: serviceAccountName: build-pipeline-rhceph-9-0 workspaces: From fcb1c08753a52ad9f01bae5b69212fdad9799887 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 17:48:53 -0500 Subject: [PATCH 19/31] add sources tarball without ceph.spec Signed-off-by: Andrew Schoen --- sources | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources b/sources index bfdb97c0f5da0..cc4b6eee1091c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ceph-20.0.0-pre.ibm-0-g3d911bce7d6.tar.bz2) = 54d704012b4f6ce1159d2c597daa3ec4d906897667b7e135bd30ec13e524844b2b6587bf205905bb1acd71097741c5e3ad687f94103995b3192f6330be306d40 +SHA512 (ceph-20.0.0-pre.ibm-0-g3d911bce7d6.tar.bz2) = 00ef31162ab068c4d9c6151e7584e34ebec338f8181bfd34ce6e63dba3d67050c39725c3bd533153ef14e23391ca7ec7cd454eaf54c6b3f198ffb2f30c3cb5ae From 8484f15a04b79d5777369bdcf6ed6a667280a538 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 17:50:50 -0500 Subject: [PATCH 20/31] add back ceph.spec Signed-off-by: Andrew Schoen --- ceph.spec.bak => ceph.spec | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ceph.spec.bak => ceph.spec (100%) diff --git a/ceph.spec.bak b/ceph.spec similarity index 100% rename from ceph.spec.bak rename to ceph.spec From de7eff43c5741f36da74f2819a773ccb47eff08d Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 29 Jul 2025 18:07:44 -0500 Subject: [PATCH 21/31] remove ceph.spec again Signed-off-by: Andrew Schoen --- ceph.spec => ceph.spec.bak | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ceph.spec => ceph.spec.bak (100%) diff --git a/ceph.spec b/ceph.spec.bak similarity index 100% rename from ceph.spec rename to ceph.spec.bak From 1ec2b4e707def912eae6f3eb639a946fbb13896d Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 11:34:25 -0500 Subject: [PATCH 22/31] konflux: use ceph fork of rpmbuild-pipeline Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 96f22439fa548..ff6581d42918a 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -44,9 +44,10 @@ spec: params: - name: url #value: "https://github.com/konflux-ci/rpmbuild-pipeline.git" - value: "https://gitlab.cee.redhat.com/rhel-on-konflux/rpmbuild-pipeline.git" + #value: "https://gitlab.cee.redhat.com/rhel-on-konflux/rpmbuild-pipeline.git" + value: "https://gitlab.cee.redhat.com/ceph/rpmbuild-pipeline.git" - name: revision - value: main + value: ceph-9.0 - name: pathInRepo value: pipeline/build-rhel-package.yaml taskRunTemplate: From 8d09e51a42ade3dbd84f993e960fc3d2479e0572 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 11:50:17 -0500 Subject: [PATCH 23/31] test: rename rhceph.spec to rhceph.spec.bak Signed-off-by: Andrew Schoen --- rhceph.spec => rhceph.spec.bak | 224 +++++++++++++++++---------------- 1 file changed, 117 insertions(+), 107 deletions(-) rename rhceph.spec => rhceph.spec.bak (95%) diff --git a/rhceph.spec b/rhceph.spec.bak similarity index 95% rename from rhceph.spec rename to rhceph.spec.bak index 1bc20fadabecf..469d12f1690d4 100644 --- a/rhceph.spec +++ b/rhceph.spec.bak @@ -1,4 +1,4 @@ -# + # # spec file for package ceph # # Copyright (C) 2004-2019 The Ceph Project Developers. See COPYING file @@ -14,6 +14,10 @@ # Please submit bugfixes or comments via http://tracker.ceph.com/ # +# `rdopkg update-patches` will automatically update this macro: +%global commit e4cafe82fd26577be2b327c948130a6509c721af + + ################################################################################# # conditional build section # @@ -91,7 +95,7 @@ %bcond_with lua_packages %endif %endif -%bcond_with crimson +%bcond_with seastar %if 0%{?suse_version} || 0%{?openEuler} %bcond_with jaeger %else @@ -115,12 +119,10 @@ %ifarch x86_64 %if 0%{?fedora} || 0%{?rhel} >= 9 %bcond_without system_qat -%else -# not fedora/rhel +%else # not fedora/rhel %bcond_with system_qat %endif -%else -# not x86_64 +%else # not x86_64 %bcond_with system_qat %endif %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} >= 8 || 0%{?openEuler} @@ -136,40 +138,14 @@ %endif %endif %bcond_without cephadm_bundling -%bcond_without cephadm_pip_deps -%bcond_without dwz -%if %{with dwz} -%else -# disable dwz for 50% speedup at the cost of ~33% space -%global _find_debuginfo_dwz_opts %{nil} -%endif -%bcond_with sccache +%bcond_with cephadm_pip_deps %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d} %{!?tmpfiles_create: %global tmpfiles_create systemd-tmpfiles --create} %{!?python3_pkgversion: %global python3_pkgversion 3} %{!?python3_version_nodots: %global python3_version_nodots 3} %{!?python3_version: %global python3_version 3} -%if 0%{with crimson} -%{!?gts_version: %global gts_version 13} -%else -%if 0%{?rhel} == 8 -%{!?gts_version: %global gts_version 11} -%endif -%endif - -# gcc-toolset-13 seems to trigger a linker bug resulting in a segfault in SafeTimer -# and perhaps elsewhere. For now, let's just disable it. See -# ceph bug https://tracker.ceph.com/issues/63867 -# and -# gcc bug https://bugzilla.redhat.com/show_bug.cgi?id=2241339 -# for details. -# -# Also disable lto on systems that do not support symver attribute -# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200 for details -%if 0%{?gts_version} == 13 || (0%{?rhel} && 0%{?rhel} < 9) || ( 0%{?suse_version} && 0%{?suse_version} <= 1500 ) -%define _lto_cflags %{nil} -%endif +%{!?gts_prefix: %global gts_prefix gcc-toolset-11} %if ! 0%{?suse_version} # use multi-threaded xz compression: xz level 7 using ncpus threads @@ -193,7 +169,7 @@ # SUSE distros use limit_build in the place of smp_limit_mem_per_job, please # be sure to update it (in the build section, below) as well when changing this # number. -%global _smp_ncpus_max %{smp_limit_mem_per_job 3000000} +%global _smp_ncpus_max %{smp_limit_mem_per_job 3200000} %endif %endif @@ -201,24 +177,16 @@ # do not provide gcc-annobin.so anymore, despite that they provide annobin.so. but # redhat-rpm-config still passes -fplugin=gcc-annobin to the compiler. %undefine _annotated_build -%if 0%{?gts_version} > 0 -%if 0%{gts_version} == 13 -%if 0%{?enable_devtoolset13:1} -%enable_devtoolset13 -%endif -%else -%if 0%{?enable_devtoolset11:1} +%if 0%{?rhel} == 8 && 0%{?enable_devtoolset11:1} %enable_devtoolset11 %endif -%endif -%endif ################################################################################# # main package definition ################################################################################# Name: ceph -Version: 20.0.0 -Release: 0%{?dist} +Version: 19.2.1 +Release: 237%{?dist} %if 0%{?fedora} || 0%{?rhel} Epoch: 2 %endif @@ -233,8 +201,13 @@ License: LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD- Group: System/Filesystems %endif URL: http://ceph.com/ -# Source0: %{?_remote_tarball_prefix}@TARBALL_BASENAME@.tar.bz2 -Source0: ceph-20.0.0-pre.ibm-0-g3d911bce7d6.tar.bz2 +Source0: %{?_remote_tarball_prefix}%{name}-%{version}.tar.gz +Source1: %{name}-%{version}-%{commit}-changes.tar.gz +Source2: redhat_dashboard_frontend-%{version}-%{commit}.tar.gz +Source3: ibm_dashboard_frontend-%{version}-%{commit}.tar.gz +Source4: blake3-1.5.1-92e4cd71be48fdf9a79e88ef37b8f415ec5ac210.tar.bz2 +Source5: xxHash-0.8.2-bbb27a5efb85b92a0486cf361a8635715a53f6ba.tar.bz2 +Source6: s3select-0a0f6d4.patch %if 0%{?suse_version} # _insert_obs_source_lines_here ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64 @@ -260,21 +233,17 @@ BuildRequires: gperf BuildRequires: cmake > 3.5 BuildRequires: fuse-devel BuildRequires: git -BuildRequires: grpc-devel +BuildRequires: grpc-devel %if 0%{?fedora} || 0%{?suse_version} > 1500 || 0%{?rhel} == 9 || 0%{?openEuler} BuildRequires: gcc-c++ >= 11 %endif %if 0%{?suse_version} == 1500 BuildRequires: gcc11-c++ %endif -%if 0%{?gts_version} > 0 -BuildRequires: gcc-toolset-%{gts_version}-gcc-c++ -%if 0%{?gts_version} >= 12 -BuildRequires: gcc-toolset-%{gts_version}-runtime -%else -BuildRequires: gcc-toolset-%{gts_version}-build -%endif -BuildRequires: gcc-toolset-%{gts_version}-libatomic-devel +%if 0%{?rhel} == 8 +BuildRequires: %{gts_prefix}-gcc-c++ +BuildRequires: %{gts_prefix}-build +BuildRequires: %{gts_prefix}-libatomic-devel %endif %if 0%{?fedora} || 0%{?rhel} == 9 || 0%{?openEuler} BuildRequires: libatomic @@ -326,7 +295,7 @@ BuildRequires: xmlstarlet BuildRequires: nasm BuildRequires: lua-devel BuildRequires: lmdb-devel -%if 0%{with crimson} || 0%{with jaeger} +%if 0%{with seastar} || 0%{with jaeger} BuildRequires: yaml-cpp-devel >= 0.6 %endif %if 0%{with amqp_endpoint} @@ -344,6 +313,7 @@ BuildRequires: hostname BuildRequires: jq BuildRequires: libuuid-devel BuildRequires: python%{python3_pkgversion}-bcrypt +BuildRequires: python%{python3_pkgversion}-pecan BuildRequires: python%{python3_pkgversion}-requests BuildRequires: python%{python3_pkgversion}-dateutil BuildRequires: python%{python3_pkgversion}-coverage @@ -388,7 +358,7 @@ BuildRequires: utf8proc-devel BuildRequires: qatlib-devel BuildRequires: qatzip-devel %endif -%if 0%{with crimson} +%if 0%{with seastar} BuildRequires: c-ares-devel BuildRequires: gnutls-devel BuildRequires: hwloc-devel @@ -400,15 +370,11 @@ BuildRequires: libubsan BuildRequires: libasan BuildRequires: protobuf-devel BuildRequires: protobuf-compiler -%if 0%{?gts_version} > 0 -%if 0%{?gts_version} >= 12 -BuildRequires: gcc-toolset-%{gts_version}-gcc-plugin-annobin -%else -BuildRequires: gcc-toolset-%{gts_version}-annobin -BuildRequires: gcc-toolset-%{gts_version}-annobin-plugin-gcc -%endif -BuildRequires: gcc-toolset-%{gts_version}-libubsan-devel -BuildRequires: gcc-toolset-%{gts_version}-libasan-devel +%if 0%{?rhel} == 8 +BuildRequires: %{gts_prefix}-annobin +BuildRequires: %{gts_prefix}-annobin-plugin-gcc +BuildRequires: %{gts_prefix}-libubsan-devel +BuildRequires: %{gts_prefix}-libasan-devel %endif %endif ################################################################################# @@ -450,7 +416,6 @@ BuildRequires: libibverbs-devel BuildRequires: librdmacm-devel BuildRequires: ninja-build BuildRequires: openldap-devel -BuildRequires: numactl-devel #BuildRequires: krb5-devel BuildRequires: openssl-devel BuildRequires: CUnit-devel @@ -474,18 +439,22 @@ BuildRequires: xmlsec1-nss BuildRequires: xmlsec1-openssl BuildRequires: xmlsec1-openssl-devel BuildRequires: python%{python3_pkgversion}-cherrypy +BuildRequires: python%{python3_pkgversion}-jwt BuildRequires: python%{python3_pkgversion}-routes BuildRequires: python%{python3_pkgversion}-scipy +BuildRequires: python%{python3_pkgversion}-werkzeug +BuildRequires: python%{python3_pkgversion}-zstandard BuildRequires: python%{python3_pkgversion}-pyOpenSSL %endif -BuildRequires: jsonnet %if 0%{?suse_version} BuildRequires: golang-github-prometheus-prometheus +BuildRequires: jsonnet BuildRequires: libxmlsec1-1 BuildRequires: libxmlsec1-nss1 BuildRequires: libxmlsec1-openssl1 BuildRequires: python%{python3_pkgversion}-CherryPy BuildRequires: python%{python3_pkgversion}-Routes +BuildRequires: python%{python3_pkgversion}-Werkzeug BuildRequires: python%{python3_pkgversion}-numpy-devel BuildRequires: xmlsec1-devel BuildRequires: xmlsec1-openssl-devel @@ -515,9 +484,10 @@ BuildRequires: redhat-rpm-config %if 0%{?openEuler} BuildRequires: openEuler-rpm-config %endif -%if 0%{with crimson} +%if 0%{with seastar} %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} BuildRequires: cryptopp-devel +BuildRequires: numactl-devel %endif %if 0%{?suse_version} BuildRequires: libcryptopp-devel @@ -660,7 +630,7 @@ Provides: ceph-test:/usr/bin/ceph-nvmeof-monitor-client Requires: librados2 = %{_epoch_prefix}%{version}-%{release} %description mon-client-nvmeof Ceph NVMeoF Gateway Monitor Client distributes Paxos ANA info -to NVMeoF Gateway and provides beacons to the monitor daemon +to NVMeoF Gateway and provides beacons to the monitor daemo %package mgr Summary: Ceph Manager Daemon @@ -692,6 +662,7 @@ Group: System/Filesystems Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} Requires: ceph-grafana-dashboards = %{_epoch_prefix}%{version}-%{release} Requires: ceph-prometheus-alerts = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-setuptools %if 0%{?fedora} || 0%{?rhel} >= 9 Requires: python%{python3_pkgversion}-grpcio Requires: python%{python3_pkgversion}-grpcio-tools @@ -701,6 +672,7 @@ Requires: python%{python3_pkgversion}-xmltodict %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} Requires: python%{python3_pkgversion}-cherrypy Requires: python%{python3_pkgversion}-routes +Requires: python%{python3_pkgversion}-werkzeug %if 0%{?weak_deps} Recommends: python%{python3_pkgversion}-saml %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -712,6 +684,7 @@ Recommends: python%{python3_pkgversion}-grpcio-tools %if 0%{?suse_version} Requires: python%{python3_pkgversion}-CherryPy Requires: python%{python3_pkgversion}-Routes +Requires: python%{python3_pkgversion}-Werkzeug Recommends: python%{python3_pkgversion}-python3-saml %endif %description mgr-dashboard @@ -743,7 +716,7 @@ BuildArch: noarch Group: System/Filesystems %endif Requires: python%{python3_pkgversion}-bcrypt -Requires: python%{python3_pkgversion}-packaging +Requires: python%{python3_pkgversion}-pecan Requires: python%{python3_pkgversion}-pyOpenSSL Requires: python%{python3_pkgversion}-requests Requires: python%{python3_pkgversion}-dateutil @@ -751,10 +724,12 @@ Requires: python%{python3_pkgversion}-setuptools %if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?openEuler} Requires: python%{python3_pkgversion}-cherrypy Requires: python%{python3_pkgversion}-pyyaml +Requires: python%{python3_pkgversion}-werkzeug %endif %if 0%{?suse_version} Requires: python%{python3_pkgversion}-CherryPy Requires: python%{python3_pkgversion}-PyYAML +Requires: python%{python3_pkgversion}-Werkzeug %endif # RHEL8 has python 3.6 and that lacks dataclasses in the stdlib, so pull in the # backport dataclasses module instead. @@ -817,6 +792,19 @@ Requires: python%{python3_pkgversion}-jinja2 ceph-mgr-cephadm is a ceph-mgr module for orchestration functions using the integrated cephadm deployment tool management operations. +%package mgr-callhome +Summary: Ceph Manager module for monitoring clusters in IBM environments +BuildArch: noarch +%if 0%{?suse_version} +Group: System/Filesystems +%endif +Requires: ceph-mgr = %{_epoch_prefix}%{version}-%{release} +Requires: python%{python3_pkgversion}-jwt +Requires: python%{python3_pkgversion}-zstandard +%description mgr-callhome +ceph-mgr-callhome is a ceph.mgr module which sends data about the Ceph + cluster to IBM systems like IBM Call Home or IBM storage Insights. + %package fuse Summary: Ceph fuse-based client %if 0%{?suse_version} @@ -940,10 +928,11 @@ Summary: Ceph Object Storage Daemon %if 0%{?suse_version} Group: System/Filesystems %endif +Provides: ceph-test:/usr/bin/ceph-osdomap-tool Requires: ceph-base = %{_epoch_prefix}%{version}-%{release} Requires: sudo Requires: libstoragemgmt -%if 0%{with crimson} +%if 0%{with seastar} Requires: protobuf %endif %if 0%{?weak_deps} @@ -954,7 +943,7 @@ ceph-osd is the object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network. -%if 0%{with crimson} +%if 0%{with seastar} %package crimson-osd Summary: Ceph Object Storage Daemon (crimson) %if 0%{?suse_version} @@ -982,6 +971,7 @@ Requires: parted Requires: util-linux Requires: xfsprogs Requires: python%{python3_pkgversion}-setuptools +Requires: python%{python3_pkgversion}-packaging Requires: python%{python3_pkgversion}-ceph-common = %{_epoch_prefix}%{version}-%{release} %description volume This package contains a tool to deploy OSD with different devices like @@ -1186,9 +1176,9 @@ Group: System/Libraries Obsoletes: libcephfs1 < %{_epoch_prefix}%{version}-%{release} %if 0%{?rhel} || 0%{?fedora} || 0%{?openEuler} Obsoletes: ceph-libs < %{_epoch_prefix}%{version}-%{release} -Obsoletes: ceph-libcephfs < %{_epoch_prefix}%{version}-%{release} +Obsoletes: ceph-libcephfs %endif -Recommends: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} +Recommends: libcephfs-proxy2 = %{_epoch_prefix}%{version}-%{release} %description -n libcephfs2 Ceph is a distributed network file system designed to provide excellent performance, reliability, and scalability. This is a shared library @@ -1206,11 +1196,11 @@ This package contains the libcephfs_proxy.so library that allow applications to share cephfs mounts to reduce resource consumption. %package -n libcephfs-daemon -Summary: Deamon for the libcephfs proxy +Summary: Daemon for the libcephfs proxy %if 0%{?suse_version} -Group: System/Filesystems +Group: System/Filesystems %endif -Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} +Requires: libcephfs2 = %{_epoch_prefix}%{version}-%{release} %description -n libcephfs-daemon This package contains the libcephfsd daemon that allows applications to share cephfs mounts to reduce resource consumption. @@ -1411,9 +1401,32 @@ This package provides a Ceph hardware monitoring agent. # common ################################################################################# %prep -%autosetup -p1 -n @TARBALL_BASENAME@ +%autosetup -p1 +# Apply the rdopkg-tar patches +%autosetup -T -D -b 1 +# Remove the old dashboard dist +rm -rf src/pybind/mgr/dashboard/frontend/dist +# Apply new dashboard dists +%autosetup -T -D -a 2 +%autosetup -T -D -a 3 +%autosetup -T -D -a 4 # BLAKE3 +%autosetup -T -D -a 5 # xxHash +# submodule patches must be handled separately +# https://github.com/redhat-openstack/rdopkg/issues/16 +pushd src/s3select + patch -p1 --fuzz=0 -i %{SOURCE6} +popd + +# Rewrite .git_version file. +echo %{commit} > src/.git_version +echo %{version}-%{release} >> src/.git_version %build +# Disable lto on systems that do not support symver attribute +# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200 for details +%if ( 0%{?rhel} && 0%{?rhel} < 9 ) || ( 0%{?suse_version} && 0%{?suse_version} <= 1500 ) +%define _lto_cflags %{nil} +%endif %if 0%{with cephfs_java} # Find jni.h @@ -1431,7 +1444,7 @@ export CFLAGS="$RPM_OPT_FLAGS" export CXXFLAGS="$RPM_OPT_FLAGS" export LDFLAGS="$RPM_LD_FLAGS" -%if 0%{with crimson} +%if 0%{with seastar} # seastar uses longjmp() to implement coroutine. and this annoys longjmp_chk() export CXXFLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g') # remove from CFLAGS too because it causes the arrow submodule to fail with: @@ -1450,9 +1463,6 @@ cmake .. \ %if 0%{?suse_version} == 1500 -DCMAKE_C_COMPILER=gcc-11 \ -DCMAKE_CXX_COMPILER=g++-11 \ -%endif -%if 0%{?gts_version} == 13 - -DCMAKE_EXE_LINKER_FLAGS=-lstdc++ \ %endif -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \ @@ -1543,14 +1553,11 @@ cmake .. \ -DWITH_SYSTEM_QATLIB:BOOL=ON \ -DWITH_SYSTEM_QATZIP:BOOL=ON \ %endif -%if 0%{with crimson} - -DWITH_CRIMSON:BOOL=ON \ +%if 0%{with seastar} + -DWITH_SEASTAR:BOOL=ON \ -DWITH_JAEGER:BOOL=OFF \ %endif -DWITH_GRAFANA:BOOL=ON \ -%if %{with sccache} - -DWITH_SCCACHE=ON \ -%endif %if 0%{with cephadm_bundling} %if 0%{with cephadm_pip_deps} -DCEPHADM_BUNDLED_DEPENDENCIES=pip @@ -1591,7 +1598,7 @@ pushd %{_vpath_builddir} rm -f %{buildroot}/%{_sysconfdir}/init.d/ceph popd -%if 0%{with crimson} +%if 0%{with seastar} # package crimson-osd with the name of ceph-osd install -m 0755 %{buildroot}%{_bindir}/crimson-osd %{buildroot}%{_bindir}/ceph-osd %endif @@ -1792,6 +1799,7 @@ exit 0 %{_bindir}/ceph-authtool %{_bindir}/ceph-conf %{_bindir}/ceph-dencoder +%{_bindir}/ceph-diff-sorted %{_bindir}/ceph-rbdnamer %{_bindir}/ceph-syn %{_bindir}/cephfs-data-scan @@ -1837,7 +1845,6 @@ exit 0 %{_mandir}/man8/rbd-replay-many.8* %{_mandir}/man8/rbd-replay-prep.8* %{_mandir}/man8/rgw-orphan-list.8* -%{_mandir}/man8/rgw-gap-list.8* %{_mandir}/man8/rgw-restore-bucket-index.8* %dir %{_datadir}/ceph/ %{_datadir}/ceph/known_hosts_drop.ceph.com @@ -1884,13 +1891,6 @@ exit 0 %post common %tmpfiles_create %{_tmpfilesdir}/ceph-common.conf -%postun common -# Package removal cleanup -if [ "$1" -eq "0" ] ; then - rm -rf %{_localstatedir}/log/ceph - rm -rf %{_sysconfdir}/ceph -fi - %files mds %{_bindir}/ceph-mds %{_mandir}/man8/ceph-mds.8* @@ -2024,6 +2024,7 @@ fi %{_datadir}/ceph/mgr/progress %{_datadir}/ceph/mgr/prometheus %{_datadir}/ceph/mgr/rbd_support +%{_datadir}/ceph/mgr/restful %{_datadir}/ceph/mgr/rgw %{_datadir}/ceph/mgr/selftest %{_datadir}/ceph/mgr/smb @@ -2034,6 +2035,7 @@ fi %{_datadir}/ceph/mgr/telemetry %{_datadir}/ceph/mgr/test_orchestrator %{_datadir}/ceph/mgr/volumes +%{_datadir}/ceph/mgr/zabbix %files mgr-rook %{_datadir}/ceph/mgr/rook @@ -2171,7 +2173,6 @@ fi %files -n ceph-exporter %{_bindir}/ceph-exporter -%{_unitdir}/ceph-exporter.service %files -n rbd-fuse %{_bindir}/rbd-fuse @@ -2271,7 +2272,11 @@ fi %{_bindir}/radosgw-token %{_bindir}/radosgw-es %{_bindir}/radosgw-object-expirer +%{_bindir}/rgw-gap-list +%{_bindir}/rgw-gap-list-comparator +%{_bindir}/rgw-orphan-list %{_bindir}/rgw-policy-check +%{_bindir}/rgw-restore-bucket-index %{_mandir}/man8/radosgw.8* %{_mandir}/man8/rgw-policy-check.8* %dir %{_localstatedir}/lib/ceph/radosgw @@ -2318,6 +2323,7 @@ fi %{_bindir}/ceph-bluestore-tool %{_bindir}/ceph-erasure-code-tool %{_bindir}/ceph-objectstore-tool +%{_bindir}/ceph-osdomap-tool %{_bindir}/ceph-osd %{_libexecdir}/ceph/ceph-osd-prestart.sh %{_mandir}/man8/ceph-clsinfo.8* @@ -2340,7 +2346,11 @@ fi if [ $1 -eq 1 ] ; then /usr/bin/systemctl start ceph-osd.target >/dev/null 2>&1 || : fi -%sysctl_apply 90-ceph-osd.conf +%if 0%{?sysctl_apply} + %sysctl_apply 90-ceph-osd.conf +%else + /usr/lib/systemd/systemd-sysctl %{_sysctldir}/90-ceph-osd.conf > /dev/null 2>&1 || : +%endif %preun osd %if 0%{?suse_version} @@ -2364,7 +2374,7 @@ if [ $1 -ge 1 ] ; then fi fi -%if 0%{with crimson} +%if 0%{with seastar} %files crimson-osd %{_bindir}/crimson-osd %endif @@ -2563,7 +2573,6 @@ fi %{_includedir}/cephfs/metrics/Types.h %{_libdir}/libcephfs.so %{_libdir}/libcephfs_proxy.so -%{_libdir}/pkgconfig/cephfs.pc %files -n python%{python3_pkgversion}-cephfs %{python3_sitearch}/cephfs.cpython*.so @@ -2613,8 +2622,7 @@ fi %{_bindir}/ceph-coverage %{_bindir}/ceph-debugpack %{_bindir}/ceph-dedup-tool -%{_bindir}/ceph-dedup-daemon -%if 0%{with crimson} +%if 0%{with seastar} %{_bindir}/crimson-store-nbd %endif %{_mandir}/man8/ceph-debugpack.8* @@ -2767,10 +2775,12 @@ exit 0 %attr(0755,root,root) %dir %{_datadir}/snmp %{_datadir}/snmp/mibs +%files mgr-callhome +%{_datadir}/ceph/mgr/call_home_agent + %files node-proxy %{_sbindir}/ceph-node-proxy %dir %{python3_sitelib}/ceph_node_proxy %{python3_sitelib}/ceph_node_proxy/* %{python3_sitelib}/ceph_node_proxy-* - -%changelog +#%{_mandir}/man8/ceph-node-proxy.8* From 89ba226c0475100b77bb08add9d1fa7bcd984f3e Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 11:52:27 -0500 Subject: [PATCH 24/31] add back ceph.spec Signed-off-by: Andrew Schoen --- ceph.spec.bak => ceph.spec | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ceph.spec.bak => ceph.spec (100%) diff --git a/ceph.spec.bak b/ceph.spec similarity index 100% rename from ceph.spec.bak rename to ceph.spec From 3753e0db38c470294ae60fac6c8b036ee15139e6 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 12:27:25 -0500 Subject: [PATCH 25/31] ceph.spec: set release to 0.pre.ibm Signed-off-by: Andrew Schoen --- ceph.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ceph.spec b/ceph.spec index 1bc20fadabecf..e6750d768b48e 100644 --- a/ceph.spec +++ b/ceph.spec @@ -218,7 +218,7 @@ ################################################################################# Name: ceph Version: 20.0.0 -Release: 0%{?dist} +Release: 0.pre.ibm%{?dist} %if 0%{?fedora} || 0%{?rhel} Epoch: 2 %endif From faad0f8e5be282e309db119306d03c230a9d98a7 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 12:50:11 -0500 Subject: [PATCH 26/31] konflux: add all build archs Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index ff6581d42918a..9cdb5b153c7cf 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -39,6 +39,9 @@ spec: - name: build-architectures value: - x86_64 + - aarch64 + - s390x + - ppc64le pipelineRef: resolver: git params: From dfc297f3778272f935f71ce60bc9f074416b6368 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 15:16:08 -0500 Subject: [PATCH 27/31] konflux: set koji-target to -buildrequires; remove koji-build-target Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 9cdb5b153c7cf..a89caf6cca774 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -27,9 +27,7 @@ spec: - name: package-name value: ceph - name: koji-target - value: ceph-9.0-rhel-10-candidate - - name: koji-build-target - value: ceph-9.0-rhel-10-candidate + value: ceph-9.0-rhel-10-buildrequires - name: git-url value: "{{ source_url }}" - name: revision From 988b874d72a19eb5c4006af1d9200fa90e7619f3 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 15:50:50 -0500 Subject: [PATCH 28/31] konflux: use cpeh-9.0-rhel-10 koji-target; only build x86_64 Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index a89caf6cca774..cb873e18e7d7c 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -27,7 +27,7 @@ spec: - name: package-name value: ceph - name: koji-target - value: ceph-9.0-rhel-10-buildrequires + value: ceph-9.0-rhel-10 - name: git-url value: "{{ source_url }}" - name: revision @@ -37,9 +37,6 @@ spec: - name: build-architectures value: - x86_64 - - aarch64 - - s390x - - ppc64le pipelineRef: resolver: git params: From 578da3a3e1454f225f6e81e439064a5ea4775844 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Wed, 30 Jul 2025 17:14:22 -0500 Subject: [PATCH 29/31] konflux: use ceph-9.0-rhel-10-candidate as koji-target Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index cb873e18e7d7c..25b0cd8b03406 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -27,7 +27,7 @@ spec: - name: package-name value: ceph - name: koji-target - value: ceph-9.0-rhel-10 + value: ceph-9.0-rhel-10-candidate - name: git-url value: "{{ source_url }}" - name: revision From 6693c9bf94902e6804bc716b43cdaafbe8a4c247 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Mon, 4 Aug 2025 09:29:33 -0500 Subject: [PATCH 30/31] ceph.spec: add new path to pathfix.py for rhel10 Signed-off-by: Andrew Schoen --- ceph.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ceph.spec b/ceph.spec index e6750d768b48e..272d3361ff40f 100644 --- a/ceph.spec +++ b/ceph.spec @@ -524,9 +524,12 @@ BuildRequires: libcryptopp-devel BuildRequires: libnuma-devel %endif %endif -%if 0%{?rhel} >= 8 +%if 0%{?rhel} >= 8 && 0%{?rhel} < 10 BuildRequires: /usr/bin/pathfix.py %endif +%if 0%{?rhel} >= 10 +BuildRequires: /usr/lib/rpm/redhat/pathfix.py +%endif %description Ceph is a massively scalable, open-source, distributed storage system that runs From ea607efe002dac9c49dfd3e075c6f99b8b933705 Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Thu, 7 Aug 2025 11:07:37 -0500 Subject: [PATCH 31/31] konflux: do not use our fork of rpmbuild-pipeline Signed-off-by: Andrew Schoen --- .tekton/rhceph-9-0-pull-request.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tekton/rhceph-9-0-pull-request.yaml b/.tekton/rhceph-9-0-pull-request.yaml index 25b0cd8b03406..1a465407574b3 100644 --- a/.tekton/rhceph-9-0-pull-request.yaml +++ b/.tekton/rhceph-9-0-pull-request.yaml @@ -42,10 +42,10 @@ spec: params: - name: url #value: "https://github.com/konflux-ci/rpmbuild-pipeline.git" - #value: "https://gitlab.cee.redhat.com/rhel-on-konflux/rpmbuild-pipeline.git" - value: "https://gitlab.cee.redhat.com/ceph/rpmbuild-pipeline.git" + value: "https://gitlab.cee.redhat.com/rhel-on-konflux/rpmbuild-pipeline.git" + #value: "https://gitlab.cee.redhat.com/ceph/rpmbuild-pipeline.git" - name: revision - value: ceph-9.0 + value: main - name: pathInRepo value: pipeline/build-rhel-package.yaml taskRunTemplate: