File microshift.spec of Package microshift
#
# spec file for package microshift
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
#######################################################################################################################
# openSUSE packaging
#######################################################################################################################
# - based on the spec file in packaging/rpm/microshift.spec
# - version is set by an obs service
# - git commit etc. are handled in the build section
# - BuildRequires were added to avoid rpm-lint errors for un-owned directories
# - systemd drop-ins are not being installed to /etc/systemd/system/foo.service.d/
# - BuildRequires on openvswitch added, to have the openvswitch user in the build environment
# - BuildRequires for systemd commented out, as openvswitch need udev-mini which needs systemd-mini
# which collides with systemd
# - greenboot has been disabled for now, see FIXME REMOVE greenboot
#######################################################################################################################
#######################################################################################################################
#######################################################################################################################
# SELinux specifics
%global selinuxtype targeted
%define selinux_policyver 3.14.3-67
%define microshift_relabel_files() \
mkdir -p /var/lib/kubelet/pods; \
mkdir -p /etc/microshift; \
mkdir -p /usr/lib/microshift; \
mkdir -p /var/lib/microshift-backups; # Creating folder to avoid GreenBoot race condition so that correct label is applied \
restorecon -R /var/lib/kubelet/pods; \
restorecon -R /var/lib/microshift-backups; \
restorecon -R /etc/microshift; \
restorecon -R /usr/lib/microshift
%define microshift_relabel_exes() \
restorecon -v /usr/bin/microshift; \
restorecon -v /usr/bin/microshift-etcd
# Don't build flannel subpackage by default
%{!?with_flannel: %global with_flannel 0}
# Don't build topolvm subpackage by default
%{!?with_topolvm: %global with_topolvm 0}
%define version_with_underscores %{gsub %{version} ~ _}
%define version_with_hyphens %{gsub %{version} ~ -}
%define microshift_version 4.18.0
%global embedded_git_tag 4.18.0-3
Name: microshift
Version: 4.18.0~rc.10~202502170426~p0
Release: 0
Summary: Small form factor OpenShift/Kubernetes optimized for edge computing
License: Apache-2.0
URL: https://github.com/openshift/microshift
Source0: %{name}-%{version}.tar.gz
ExclusiveArch: x86_64 aarch64
BuildRequires: gcc
BuildRequires: git-core
BuildRequires: curl
BuildRequires: yq
BuildRequires: make
BuildRequires: policycoreutils
# openSUSE BuildRequires: systemd
BuildRequires: golang(API) = 1.22
# openSUSE
BuildRequires: NetworkManager
BuildRequires: (cri-o >= 1.31.0 with cri-o < 1.32.0)
BuildRequires: (cri-tools >= 1.31.0 with cri-tools < 1.32.0)
BuildRequires: tuned
BuildRequires: sed
BuildRequires: fdupes
# openSUSE
Conflicts: micro-okd
#
Requires: (cri-o >= 1.31.0 with cri-o < 1.32.0)
Requires: (cri-tools >= 1.31.0 with cri-tools < 1.32.0)
Requires: iptables
Requires: microshift-selinux = %{version}
Requires: microshift-networking = %{version}
# FIXME REMOVE greenboot Requires: microshift-greenboot = %{version}
Requires: conntrack-tools
# openSUSE Requires: sos
Requires: crun
Requires: hostname
# openSUSE Requires: openshift-clients
Requires: oc
%{?systemd_requires}
%description
MicroShift is a project that optimizes OpenShift Kubernetes for small form
factor and edge computing.
Edge devices deployed out in the field pose very different operational,
environmental, and business challenges from those of cloud computing. These
motivate different engineering trade-offs for Kubernetes at the far edge than
for cloud or near-edge scenarios.
MicroShift design goals cater to this:
- make frugal use of system resources (CPU, memory, network, storage, etc.)
- tolerate severe networking constraints
- update securely, safely, speedily, and seamlessly (without disrupting workloads)
- build on and integrate cleanly with edge-optimized operating systems like
RHEL for Edge
- provide a consistent development and management experience with standard
OpenShift
These properties should also make MicroShift a great tool for other use cases
such as Kubernetes applications development on resource-constrained systems,
scale testing, and provisioning of lightweight Kubernetes control planes.
%package release-info
Summary: Release information for microshift
BuildArch: noarch
BuildRequires: jq
BuildRequires: gettext
%description release-info
The microshift-release package provides release information files for this
release. These files contain the list of container image references used by
microshift and can be used to embed those images into osbuilder blueprints.
An example of such osbuilder blueprints for x86_64 and aarch64 platforms are
also included in the package.
%package selinux
Summary: SELinux policies for microshift
BuildRequires: selinux-policy >= %{selinux_policyver}
BuildRequires: selinux-policy-devel >= %{selinux_policyver}
BuildRequires: container-selinux
Requires: container-selinux
BuildArch: noarch
Requires: microshift = %{version}
Requires: selinux-policy >= %{selinux_policyver}
%description selinux
The microshift-selinux package provides the SELinux policy modules required by microshift.
%package networking
Summary: Networking components for microshift
Requires: microshift = %{version}
# openSUSE Obsoletes: openvswitch3.1 < 3.3
# openSUSE Obsoletes: openvswitch3.3 < 3.4
# openSUSE Requires: (openvswitch3.4 or openvswitch >= 3.4)
BuildRequires: openvswitch >= 3.4.0
Requires: openvswitch >= 3.4.0
Requires: NetworkManager
Requires: NetworkManager-ovs
Requires: jq
%description networking
The microshift-networking package provides the networking components necessary
for the microshift default CNI driver.
# FIXME REMOVE greenboot %package greenboot
# FIXME REMOVE greenboot Summary: Greenboot components for microshift
# FIXME REMOVE greenboot BuildArch: noarch
# FIXME REMOVE greenboot Requires: microshift = %{version}
# FIXME REMOVE greenboot Requires: greenboot
# FIXME REMOVE greenboot Requires: python3-pyyaml
# FIXME REMOVE greenboot
# FIXME REMOVE greenboot %description greenboot
# FIXME REMOVE greenboot The microshift-greenboot package provides the Greenboot scripts used for
# FIXME REMOVE greenboot verifying that microshift is up and running.
%package olm
Summary: Operator Lifecycle Manager components for microshift
ExclusiveArch: x86_64 aarch64
Requires: microshift = %{version}
%description olm
The microshift-olm package provides the required manifests for the Operator
Lifecycle Manager to be installed on microshift.
%package olm-release-info
Summary: Release information for Operator Lifecycle Manager components for microshift
BuildArch: noarch
Requires: microshift-release-info = %{version}
%description olm-release-info
The microshift-olm-release-info package provides release information files for this
release. These files contain the list of container image references used by
the Operator Lifecycle Manager for microshift and can be used to embed those
images into osbuilder blueprints.
%package multus
Summary: Multus CNI for microshift
ExclusiveArch: x86_64 aarch64
Requires: microshift = %{version}
%description multus
The microshift-multus package provides the required manifests for the Multus CNI to be installed on microshift.
%package multus-release-info
Summary: Release information for Multus CNI for microshift
BuildArch: noarch
Requires: microshift-release-info = %{version}
%description multus-release-info
The microshift-multus-release-info package provides release information files for this
release. These files contain the list of container image references used by
the Multus CNI for microshift and can be used to embed those images into osbuilder blueprints.
%if %{with_flannel}
%package flannel
Summary: flannel CNI for microshift
ExclusiveArch: x86_64 aarch64
Requires: microshift = %{version}
%description flannel
The microshift-flannel package provides the required manifests for the flannel CNI and the dependent
kube-proxy to be installed on microshift.
%package flannel-release-info
Summary: Release information for flannel CNI for microshift
BuildArch: noarch
Requires: microshift-release-info = %{version}
%description flannel-release-info
The microshift-flannel-release-info package provides release information files for this
release. These files contain the list of container image references used by the flannel CNI
with the dependent kube-proxy for microshift and can be used to embed those images
into osbuilder blueprints.
%endif
%package low-latency
Summary: Baseline configuration for running low latency workload on microshift
BuildArch: noarch
Requires: microshift = %{version}
Requires: tuned-profiles-cpu-partitioning
Requires: python3-pyyaml
%description low-latency
The microshift-low-latency package provides a baseline configuration prepared for
running low latency workloads on microshift.
%package gateway-api
Summary: Gateway API for microshift
ExclusiveArch: x86_64 aarch64
Requires: microshift = %{version}
%description gateway-api
The microshift-gateway-api package provides the required manifests for the
Gateway API to be installed on microshift.
%package gateway-api-release-info
Summary: Release information for Gateway API for microshift
BuildArch: noarch
Requires: microshift = %{version}
%description gateway-api-release-info
The microshift-gateway-api-release-info package provides release information files for this
release. These files contain the list of container image references used by Gateway API
and can be used to embed those images into osbuilder blueprints or bootc containerfiles.
%prep
%autosetup -p 1
#######################################################################################################################
# SECTION build
#######################################################################################################################
%build
COMMIT_HASH="$(sed -n 's/commit: \(.*\)/\1/p' %_sourcedir/%{name}.obsinfo)"
DATE_FMT="+%%Y-%%m-%%dT%%H:%%M:%%SZ"
BUILD_DATE=$(date -u -d "@${SOURCE_DATE_EPOCH}" "${DATE_FMT}" 2>/dev/null || date -u -r "${SOURCE_DATE_EPOCH}" "${DATE_FMT}" 2>/dev/null || date -u "${DATE_FMT}")
GOOS=linux
%ifarch %{arm} aarch64
GOARCH=arm64
%endif
%ifarch x86_64
GOARCH=amd64
%endif
#
#
#
make \
_build_local \
GOOS=${GOOS} \
GOARCH=${GOARCH} \
EMBEDDED_GIT_COMMIT=${COMMIT_HASH:0:8} \
EMBEDDED_GIT_TAG=%{embedded_git_tag} \
EMBEDDED_GIT_TREE_STATE=clean \
MICROSHIFT_VERSION=%{microshift_version}
cp ./_output/bin/${GOOS}_${GOARCH}/microshift ./_output/microshift
cp ./_output/bin/${GOOS}_${GOARCH}/microshift-etcd ./_output/microshift-etcd
# SELinux modules build
make --directory packaging/selinux
# osbuilder sample blueprints build
function create_blueprint() {
local -r larch="$1"
REPLACE_USHIFT_VERSION="%{version}" \
REPLACE_USHIFT_ARCH="${larch}" \
envsubst < "packaging/blueprint/blueprint.toml.template" > "packaging/blueprint/blueprint-${larch}.toml"
jq -r \
'.images | .[] | ("[[containers]]\nsource = \"" + . + "\"\n")' \
"assets/release/release-${larch}.json" \
>> "packaging/blueprint/blueprint-${larch}.toml"
}
create_blueprint x86_64
create_blueprint aarch64
#######################################################################################################################
# SECTION install
#######################################################################################################################
%install
install -d %{buildroot}%{_bindir}
install -p -m755 ./_output/microshift %{buildroot}%{_bindir}/microshift
install -p -m755 ./_output/microshift-etcd %{buildroot}%{_bindir}/microshift-etcd
install -p -m755 scripts/microshift-cleanup-data.sh %{buildroot}%{_bindir}/microshift-cleanup-data
install -p -m755 scripts/microshift-sos-report.sh %{buildroot}%{_bindir}/microshift-sos-report
install -d -m755 %{buildroot}%{_sharedstatedir}/microshift
install -d -m755 %{buildroot}%{_sharedstatedir}/microshift-backups
install -d -m755 %{buildroot}%{_sysconfdir}/crio/crio.conf.d
install -p -m644 packaging/crio.conf.d/00-crio-crun.conf %{buildroot}%{_sysconfdir}/crio/crio.conf.d/00-crio-crun.conf
%ifarch %{arm} aarch64
install -p -m644 packaging/crio.conf.d/10-microshift_arm64.conf %{buildroot}%{_sysconfdir}/crio/crio.conf.d/10-microshift.conf
%endif
%ifarch x86_64
install -p -m644 packaging/crio.conf.d/10-microshift_amd64.conf %{buildroot}%{_sysconfdir}/crio/crio.conf.d/10-microshift.conf
%endif
install -p -m644 packaging/crio.conf.d/11-microshift-ovn.conf %{buildroot}%{_sysconfdir}/crio/crio.conf.d/11-microshift-ovn.conf
install -d -m755 %{buildroot}%{_sysconfdir}/NetworkManager/conf.d
install -p -m644 packaging/NetworkManager.conf.d/10-microshift-ignore-devices.conf %{buildroot}%{_sysconfdir}/NetworkManager/conf.d/10-microshift-ignore-devices.conf
install -d -m755 %{buildroot}/%{_unitdir}
install -p -m644 packaging/systemd/microshift.service %{buildroot}%{_unitdir}/microshift.service
install -d -m755 %{buildroot}/%{_sysconfdir}/microshift
install -d -m755 %{buildroot}/%{_sysconfdir}/microshift/manifests
install -d -m755 %{buildroot}/%{_sysconfdir}/microshift/manifests.d
install -d -m755 %{buildroot}/%{_sysconfdir}/microshift/config.d
install -p -m644 packaging/microshift/config.yaml %{buildroot}%{_sysconfdir}/microshift/config.yaml.default
install -p -m644 packaging/microshift/lvmd.yaml %{buildroot}%{_sysconfdir}/microshift/lvmd.yaml.default
install -p -m644 packaging/microshift/ovn.yaml %{buildroot}%{_sysconfdir}/microshift/ovn.yaml.default
# /usr/lib/microshift manifest directories for other packages to add to
install -d -m755 %{buildroot}/%{_prefix}/lib/microshift
install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests
install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d
# release-info files
mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release
# openSUSE
%ifarch %{arm} aarch64
install -p -m644 assets/release/release-aarch64.json %{buildroot}%{_datadir}/microshift/release
%endif
# openSUSE
%ifarch x86_64
install -p -m644 assets/release/release-x86_64.json %{buildroot}%{_datadir}/microshift/release
%endif
mkdir -p -m755 %{buildroot}%{_datadir}/microshift/blueprint
install -p -m644 packaging/blueprint/blueprint*.toml %{buildroot}%{_datadir}/microshift/blueprint
mkdir -p -m755 %{buildroot}%{_datadir}/microshift/kickstart
install -p -m644 packaging/kickstart/kickstart*.ks.template %{buildroot}%{_datadir}/microshift/kickstart
# spec validation files
mkdir -p -m755 %{buildroot}%{_datadir}/microshift/spec
install -p -m644 cmd/generate-config/config/config-openapi-spec.json %{buildroot}%{_datadir}/microshift/spec/config-openapi-spec.json
# Memory tweaks to the OpenvSwitch services
mkdir -p -m755 %{buildroot}%{_sysconfdir}/systemd/system/ovs-vswitchd.service.d
mkdir -p -m755 %{buildroot}%{_sysconfdir}/systemd/system/ovsdb-server.service.d
install -p -m644 packaging/systemd/microshift-ovs-vswitchd.conf %{buildroot}%{_sysconfdir}/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conf
install -p -m644 packaging/systemd/microshift-ovsdb-server.conf %{buildroot}%{_sysconfdir}/systemd/system/ovsdb-server.service.d/microshift-cpuaffinity.conf
# this script and systemd service configures openvswitch to properly operate with OVN
install -p -m644 packaging/systemd/microshift-ovs-init.service %{buildroot}%{_unitdir}/microshift-ovs-init.service
install -p -m755 packaging/systemd/configure-ovs.sh %{buildroot}%{_bindir}/configure-ovs.sh
install -p -m755 packaging/systemd/configure-ovs-microshift.sh %{buildroot}%{_bindir}/configure-ovs-microshift.sh
# Avoid firewalld manipulation and flushing of iptable rules,
# this is a workaround for https://issues.redhat.com/browse/NP-641
# It will trigger some warnings on the selinux audit log when restarting firewalld.
# In the future firewalld should stop flushing iptables unless we use any firewalld rule with direct
# iptables rules, once that's available in RHEL we can remove this workaround
# see https://github.com/firewalld/firewalld/issues/863#issuecomment-1407059938
mkdir -p -m755 %{buildroot}%{_sysconfdir}/systemd/system/firewalld.service.d
install -p -m644 packaging/systemd/firewalld-no-iptables.conf %{buildroot}%{_sysconfdir}/systemd/system/firewalld.service.d/firewalld-no-iptables.conf
mkdir -p -m755 %{buildroot}/var/lib/kubelet/pods
install -d %{buildroot}%{_datadir}/selinux/packages/%{selinuxtype}
install -m644 packaging/selinux/microshift.pp.bz2 %{buildroot}%{_datadir}/selinux/packages/%{selinuxtype}
# FIXME REMOVE greenboot # Greenboot scripts
# FIXME REMOVE greenboot install -d -m755 %{buildroot}%{_datadir}/microshift/functions
# FIXME REMOVE greenboot install -p -m644 packaging/greenboot/functions.sh %{buildroot}%{_datadir}/microshift/functions/greenboot.sh
# FIXME REMOVE greenboot
# FIXME REMOVE greenboot install -d -m755 %{buildroot}%{_sysconfdir}/greenboot/check/required.d
# FIXME REMOVE greenboot install -p -m755 packaging/greenboot/microshift-running-check.sh %{buildroot}%{_sysconfdir}/greenboot/check/required.d/40_microshift_running_check.sh
# FIXME REMOVE greenboot
# FIXME REMOVE greenboot install -d -m755 %{buildroot}%{_sysconfdir}/greenboot/red.d
# FIXME REMOVE greenboot install -p -m755 packaging/greenboot/microshift-pre-rollback.sh %{buildroot}%{_sysconfdir}/greenboot/red.d/40_microshift_pre_rollback.sh
# OLM manifests
install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/001-microshift-olm
# Copy all the OLM manifests except the arch specific ones
install -p -m644 assets/optional/operator-lifecycle-manager/0000* %{buildroot}/%{_prefix}/lib/microshift/manifests.d/001-microshift-olm
install -p -m644 assets/optional/operator-lifecycle-manager/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/001-microshift-olm
# FIXME REMOVE greenboot install -p -m755 packaging/greenboot/microshift-running-check-olm.sh %{buildroot}%{_sysconfdir}/greenboot/check/required.d/50_microshift_running_check_olm.sh
%ifarch %{arm} aarch64
cat assets/optional/operator-lifecycle-manager/kustomization.aarch64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/001-microshift-olm/kustomization.yaml
%endif
%ifarch x86_64
cat assets/optional/operator-lifecycle-manager/kustomization.x86_64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/001-microshift-olm/kustomization.yaml
%endif
# olm-release-info
mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release
install -p -m644 assets/optional/operator-lifecycle-manager/release-olm-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/
# multus
install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-multus
install -p -m644 assets/optional/multus/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-multus
# FIXME REMOVE greenboot install -p -m755 packaging/greenboot/microshift-running-check-multus.sh %{buildroot}%{_sysconfdir}/greenboot/check/required.d/41_microshift_running_check_multus.sh
install -p -m755 packaging/crio.conf.d/12-microshift-multus.conf %{buildroot}%{_sysconfdir}/crio/crio.conf.d/12-microshift-multus.conf
# multus-release-info
mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release
install -p -m644 assets/optional/multus/release-multus-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/
### %if %{with_flannel}
### # kube-proxy
### install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy
### # Copy all the manifests except the arch specific ones
### install -p -m644 assets/optional/kube-proxy/0* %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy
### install -p -m644 assets/optional/kube-proxy/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy
###
### %ifarch %{arm} aarch64
### cat assets/optional/kube-proxy/kustomization.aarch64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy/kustomization.yaml
### %endif
###
### %ifarch x86_64
### cat assets/optional/kube-proxy/kustomization.x86_64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy/kustomization.yaml
### %endif
###
### # kube-proxy-release-info
### mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release
### install -p -m644 assets/optional/kube-proxy/release-kube-proxy-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/
###
### # flannel
### install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel
### install -d -m755 %{buildroot}%{_sysconfdir}/systemd/system/
### # Copy all the manifests except the arch specific ones
### install -p -m644 assets/optional/flannel/0* %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel
### install -p -m644 assets/optional/flannel/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel
### install -p -m644 packaging/flannel/00-disableDefaultCNI.yaml %{buildroot}%{_sysconfdir}/microshift/config.d/00-disableDefaultCNI.yaml
### install -p -m644 packaging/flannel/microshift-flannel.service %{buildroot}%{_unitdir}/microshift.service
###
### %ifarch %{arm} aarch64
### cat assets/optional/flannel/kustomization.aarch64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel/kustomization.yaml
### %endif
###
### %ifarch x86_64
### cat assets/optional/flannel/kustomization.x86_64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel/kustomization.yaml
### %endif
###
### # flannel-release-info
### mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release
### install -p -m644 assets/optional/flannel/release-flannel-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/
### %endif
# cleanup kubelet
install -p -m644 packaging/tuned/microshift-cleanup-kubelet.service %{buildroot}%{_unitdir}/microshift-cleanup-kubelet.service
# low-latency
install -d -m755 %{buildroot}/%{_prefix}/lib/tuned/microshift-baseline
install -p -m644 packaging/tuned/profile/tuned.conf %{buildroot}/%{_prefix}/lib/tuned/microshift-baseline/tuned.conf
install -p -m755 packaging/tuned/profile/script.sh %{buildroot}/%{_prefix}/lib/tuned/microshift-baseline/script.sh
install -d -m755 %{buildroot}%{_sysconfdir}/tuned
install -p -m644 packaging/tuned/profile/variables.conf %{buildroot}%{_sysconfdir}/tuned/microshift-baseline-variables.conf
## low-latency: crio runtime & manifests to install runtime-class
install -p -m644 packaging/crio.conf.d/05-high-performance-runtime.conf %{buildroot}%{_sysconfdir}/crio/crio.conf.d/05-high-performance-runtime.conf
install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/002-microshift-low-latency
install -p -m644 packaging/tuned/runtime-class/runtime-class.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/002-microshift-low-latency/runtime-class.yaml
install -p -m644 packaging/tuned/runtime-class/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/002-microshift-low-latency/kustomization.yaml
## low-latency: microshift-tuned
install -p -m644 packaging/tuned/microshift-tuned.service %{buildroot}%{_unitdir}/microshift-tuned.service
install -p -m755 packaging/tuned/microshift-tuned.py %{buildroot}%{_bindir}/microshift-tuned
# gateway-api
install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-gateway-api
install -p -m644 assets/optional/gateway-api/0* %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-gateway-api
install -p -m644 assets/optional/gateway-api/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-gateway-api
# FIXME REMOVE greenboot install -p -m755 packaging/greenboot/microshift-running-check-gateway-api.sh %{buildroot}%{_sysconfdir}/greenboot/check/required.d/41_microshift_running_check_gateway_api.sh
%ifarch %{arm} aarch64
cat assets/optional/gateway-api/kustomization.aarch64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-gateway-api/kustomization.yaml
%endif
%ifarch x86_64
cat assets/optional/gateway-api/kustomization.x86_64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-gateway-api/kustomization.yaml
%endif
# gateway-api-release-info
mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release
install -p -m644 assets/optional/gateway-api/release-gateway-api-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/
# openSUSE
sed -i '/^#!/ s/env\ python.*$/python3/' %{buildroot}%{_bindir}/microshift-tuned
sed -i '/^#!/ s/env\ bash/bash/' %{buildroot}/%{_prefix}/lib/tuned/microshift-baseline/script.sh
%fdupes %{buildroot}%{_datadir}/microshift/
#######################################################################################################################
# SECTION pre/post/...
#######################################################################################################################
%pre networking
getent group hugetlbfs >/dev/null || groupadd -r hugetlbfs
usermod -a -G hugetlbfs openvswitch
%post
# This can be called only after microshift executable files are installed
%microshift_relabel_exes
%systemd_post microshift.service
# Restart crio and microshift services if they are active, both on installs and upgrades
# - Crio should pick up potential configuration updates
# - MicroShift should refresh running containers, pick up potential manifest updates, etc.
systemctl is-active --quiet crio && systemctl restart --quiet crio || true
systemctl is-active --quiet microshift && systemctl restart --quiet microshift || true
%pre selinux
%selinux_relabel_pre -s %{selinuxtype}
%post selinux
%selinux_modules_install -s %{selinuxtype} %{_datadir}/selinux/packages/%{selinuxtype}/microshift.pp.bz2
%microshift_relabel_files
%postun selinux
if [ $1 -eq 0 ]; then
%selinux_modules_uninstall -s %{selinuxtype} microshift
fi
%posttrans selinux
%selinux_relabel_post -s %{selinuxtype}
%post networking
# setup ovs / ovsdb optimization to avoid full pre-allocation of memory
sed -i -n -e '/^OPTIONS=/!p' -e '$aOPTIONS="--no-mlockall"' /etc/sysconfig/openvswitch
%systemd_post microshift-ovs-init.service
systemctl is-active --quiet NetworkManager && systemctl restart --quiet NetworkManager || true
systemctl enable --now --quiet openvswitch || true
%preun networking
%systemd_preun microshift-ovs-init.service
%preun
%systemd_preun microshift.service
%post multus
# only for install, not on upgrades
if [ $1 -eq 1 ]; then
# if crio was already started, restart it so it will catch /etc/crio/crio.conf.d/12-microshift-multus.conf
systemctl is-active --quiet crio && systemctl restart --quiet crio || true
fi
%files
%license LICENSE
%{_bindir}/microshift
%{_bindir}/microshift-etcd
%{_bindir}/microshift-cleanup-data
%{_bindir}/microshift-sos-report
%{_unitdir}/microshift.service
%{_unitdir}/microshift-cleanup-kubelet.service
%{_sysconfdir}/crio/crio.conf.d/00-crio-crun.conf
%{_sysconfdir}/crio/crio.conf.d/10-microshift.conf
%{_datadir}/microshift/spec/config-openapi-spec.json
%dir %{_sysconfdir}/microshift
%dir %{_sysconfdir}/microshift/config.d
%dir %{_sysconfdir}/microshift/manifests
%dir %{_sysconfdir}/microshift/manifests.d
%config(noreplace) %{_sysconfdir}/microshift/config.yaml.default
%config(noreplace) %{_sysconfdir}/microshift/lvmd.yaml.default
%config(noreplace) %{_sysconfdir}/microshift/ovn.yaml.default
%dir %{_datadir}/microshift
%dir %{_datadir}/microshift/spec
%dir %{_prefix}/lib/microshift
%dir %{_prefix}/lib/microshift/manifests
%dir %{_prefix}/lib/microshift/manifests.d
%dir /var/lib/kubelet/
%files release-info
%dir %{_datadir}/microshift
%dir %{_datadir}/microshift/release
%dir %{_datadir}/microshift/blueprint
%dir %{_datadir}/microshift/kickstart
%{_datadir}/microshift/release/release-{x86_64,aarch64}.json
%{_datadir}/microshift/blueprint/blueprint*.toml
%{_datadir}/microshift/kickstart/kickstart*.ks.template
%files selinux
/var/lib/kubelet/pods
%{_datadir}/selinux/packages/%{selinuxtype}/microshift.pp.bz2
%files networking
%{_sysconfdir}/NetworkManager/conf.d/10-microshift-ignore-devices.conf
%{_sysconfdir}/crio/crio.conf.d/11-microshift-ovn.conf
%dir %{_unitdir}/
%dir %{_sysconfdir}/systemd/system/ovs-vswitchd.service.d/
%dir %{_sysconfdir}/systemd/system/ovsdb-server.service.d/
%dir %{_sysconfdir}/systemd/system/firewalld.service.d/
%{_sysconfdir}/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conf
%{_sysconfdir}/systemd/system/ovsdb-server.service.d/microshift-cpuaffinity.conf
%{_sysconfdir}/systemd/system/firewalld.service.d/firewalld-no-iptables.conf
# OpensvSwitch oneshot configuration script which handles ovn-k8s gateway mode setup
%{_unitdir}/microshift-ovs-init.service
%{_bindir}/configure-ovs.sh
%{_bindir}/configure-ovs-microshift.sh
# FIXME REMOVE greenboot %files greenboot
# FIXME REMOVE greenboot %{_sysconfdir}/greenboot/check/required.d/40_microshift_running_check.sh
# FIXME REMOVE greenboot %{_sysconfdir}/greenboot/red.d/40_microshift_pre_rollback.sh
# FIXME REMOVE greenboot %{_datadir}/microshift/functions/greenboot.sh
# FIXME REMOVE greenboot %dir %{_datadir}/microshift
# FIXME REMOVE greenboot %dir %{_datadir}/microshift/functions
%files olm
%dir %{_prefix}/lib/microshift/manifests.d/001-microshift-olm
%{_prefix}/lib/microshift/manifests.d/001-microshift-olm/*
# FIXME REMOVE greenboot %{_sysconfdir}/greenboot/check/required.d/50_microshift_running_check_olm.sh
%files olm-release-info
%{_datadir}/microshift/release/release-olm-{x86_64,aarch64}.json
%files multus
%dir %{_prefix}/lib/microshift/manifests.d/000-microshift-multus
%{_prefix}/lib/microshift/manifests.d/000-microshift-multus/*
# FIXME REMOVE greenboot %{_sysconfdir}/greenboot/check/required.d/41_microshift_running_check_multus.sh
%{_sysconfdir}/crio/crio.conf.d/12-microshift-multus.conf
%files multus-release-info
%{_datadir}/microshift/release/release-multus-{x86_64,aarch64}.json
%if %{with_flannel}
%files flannel
%dir %{_prefix}/lib/microshift/manifests.d/000-microshift-flannel
%dir %{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy
%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel/*
%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy/*
%config(noreplace) %{_sysconfdir}/microshift/config.d/00-disableDefaultCNI.yaml
%{_unitdir}/microshift.service
%files flannel-release-info
%{_datadir}/microshift/release/release-flannel-{x86_64,aarch64}.json
%{_datadir}/microshift/release/release-kube-proxy-{x86_64,aarch64}.json
%endif
%if %{with_topolvm}
%files topolvm
%dir %{_prefix}/lib/microshift/manifests.d/001-microshift-topolvm
%{_prefix}/lib/microshift/manifests.d/001-microshift-topolvm/*
%config(noreplace) %{_sysconfdir}/microshift/config.d/01-disable-storage-csi.yaml
%endif
%files low-latency
%{_prefix}/lib/tuned/microshift-baseline
%config(noreplace) %{_sysconfdir}/tuned/microshift-baseline-variables.conf
%{_sysconfdir}/crio/crio.conf.d/05-high-performance-runtime.conf
%{_prefix}/lib/microshift/manifests.d/002-microshift-low-latency/
%{_unitdir}/microshift-tuned.service
%{_bindir}/microshift-tuned
%files gateway-api
%dir %{_prefix}/lib/microshift/manifests.d/000-microshift-gateway-api
%{_prefix}/lib/microshift/manifests.d/000-microshift-gateway-api/*
# FIXME REMOVE greenboot %{_sysconfdir}/greenboot/check/required.d/41_microshift_running_check_gateway_api.sh
%files gateway-api-release-info
%{_datadir}/microshift/release/release-gateway-api-{x86_64,aarch64}.json
%changelog