File cri-o.spec of Package cri-o

#
# spec file for package cri-o
#
# 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/
#

%define executable_name crio

Name:           cri-o
Version:        1.31.8
Release:        0
Summary:        OCI-based implementation of Kubernetes Container Runtime Interface
License:        Apache-2.0
Url:            https://github.com/cri-o/cri-o
ExcludeArch:    i586
Source0:        %{name}-%{version}.tar.gz
Source1:        vendor.tar.gz
Source2:        crio.service
Source3:        sysconfig.crio
Source4:        cri-o.conf
Source6:        kubelet.env
BuildRequires:  device-mapper-devel
BuildRequires:  fdupes
BuildRequires:  glib2-devel-static
BuildRequires:  glibc-devel-static
BuildRequires:  libapparmor-devel
BuildRequires:  libassuan-devel
BuildRequires:  libbtrfs-devel
BuildRequires:  libgpgme-devel
BuildRequires:  libseccomp-devel
BuildRequires:  golang(API) >= 1.23
BuildRequires:  sed
BuildRequires:  make
BuildRequires:  go-md2man

# completions
BuildRequires:  bash-completion
BuildRequires:  fish
BuildRequires:  zsh
#
Requires:       patterns-base-apparmor
Requires:       conntrack-tools
Requires:       cni
Requires:       cni-plugins
Requires:       iproute2
Requires:       iptables
Requires:       libcontainers-common >= 0.0.1
Requires:       runc >= 1.0.2
Requires:       conmon
Suggests:       katacontainers
# Provide generic cri-runtime dependency (needed by kubernetes)
Provides:       cri-runtime

%description
CRI-O provides an integration path between OCI conformant runtimes
and the kubelet. Specifically, it implements the Kubelet Container Runtime
Interface (CRI) using OCI conformant runtimes. The scope of CRI-O is tied to
the scope of the CRI.

%package kubeadm-criconfig
Summary:        CRI-O container runtime configuration for kubeadm
Requires:       kubernetes-kubeadm-provider
Requires(post): %fillup_prereq
Supplements:    cri-o
BuildArch:      noarch
Provides:       kubernetes-kubeadm-criconfig
Conflicts:      docker-kubic-kubeadm-criconfig

%description kubeadm-criconfig
This package provides the CRI-O container runtime configuration for kubeadm

%prep
%autosetup -a 1

%build
# Keep cgroupfs as the default cgroup manager for SLE15 builds
%if 0%{?sle_version} >= 150000 && !0%{?is_opensuse}
sed -i "s|.*apparmor_profile =.*|apparmor_profile = \"crio-default-%{version}\"|" %{SOURCE4}
sed -i "s|^cgroup_manager = \"systemd\"$|cgroup_manager = \"cgroupfs\"|g" %{SOURCE4}
sed -i "s|--cgroup-driver=systemd|--cgroup-driver=cgroupfs|g" %{SOURCE6}
%endif

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}")

#
# crio binary
#
go build \
    -buildmode=pie \
    -trimpath \
    -ldflags="-X github.com/cri-o/cri-o/internal/version.buildDate=${BUILD_DATE}" \
    -o bin/ \
    ./cmd/crio

#
# pinns binary
#
CFLAGS="${optflags} -std=c99 -Os -Wall -Werror -Wextra -static -fpie"
export CFLAGS
export LDFLAGS="-pie"
export STRIP=""
# make -C pinns
cd pinns || exit 1
gcc -O3 -o sysctl.o -c src/sysctl.c
gcc -O3 -o pinns.o -c src/pinns.c
gcc -o ../bin/pinns pinns.o sysctl.o

cd .. || exit 11

# manpages
make docs-generation
go-md2man -in docs/crio.conf.5.md -out docs/crio.conf.5

# completions
make completions-generation

%pre
%service_add_pre crio.service

%post
%service_add_post crio.service
# This is the additional directory where cri-o is going to look up for CNI
# plugins installed by DaemonSets running on Kubernetes (i.e. Cilium).
mkdir -p /opt/cni/bin

%post kubeadm-criconfig
%fillup_only -n kubelet

%preun
%service_del_preun crio.service

%postun
%service_del_postun crio.service

%install

# binaries
install -D -m 0755 bin/%{executable_name} %{buildroot}/%{_bindir}/%{executable_name}
install -D -m 0755 bin/pinns %{buildroot}/%{_bindir}/pinns

# bash completion file
mkdir -p %{buildroot}%{_datarootdir}/bash-completion/completions/
install -D -m 0644 completions/bash/%{executable_name} %{buildroot}%{_datarootdir}/bash-completion/completions/%{executable_name}

# fish completion file
mkdir -p %{buildroot}%{_datarootdir}/fish/vendor_completions.d/
install -D -m 0644 completions/fish/%{executable_name}.fish %{buildroot}%{_datarootdir}/fish/vendor_completions.d/%{executable_name}.fish

# zsh completion file
mkdir -p %{buildroot}%{_datarootdir}/zsh/site-functions/
install -D -m 0644 completions/zsh/_%{executable_name} %{buildroot}%{_datarootdir}/zsh/site-functions/_%{executable_name}

# Manpages
install -d %{buildroot}/%{_mandir}/man5
install -d %{buildroot}/%{_mandir}/man8
install -m 0644 docs/crio.conf.5 %{buildroot}/%{_mandir}/man5
install -m 0644 docs/%{executable_name}.8      %{buildroot}/%{_mandir}/man8

# Configs
sed -e 's-@LIBEXECDIR@-%{_libexecdir}-g' -i %{SOURCE4}
install -D -m 0644 %{SOURCE4}       %{buildroot}/%{_sysconfdir}/crio/crio.conf.d/00-default.conf
install -D -m 0644 crio-umount.conf %{buildroot}/%{_datadir}/oci-umount/oci-umount.d/cri-umount.conf
install -D -m 0644 %{SOURCE3}       %{buildroot}%{_fillupdir}/sysconfig.crio

# Systemd
install -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/crio.service

# place kubelet.env in fillupdir
install -D -m 0644 %{SOURCE6} %{buildroot}%{_fillupdir}/sysconfig.kubelet

# directory /usr/libexec/crio/bin
install -d %{buildroot}%{_libexecdir}/crio/bin

# Symlinks to rc files
install -d -m 0755 %{buildroot}%{_sbindir}
ln -sf service %{buildroot}%{_sbindir}/rc%{executable_name}

%fdupes %{buildroot}/%{_prefix}

%files
# Binaries
%{_bindir}/%{executable_name}
%{_bindir}/pinns
%dir %{_libexecdir}/crio
%dir %{_libexecdir}/crio/bin
# Completions
%{_datarootdir}/bash-completion/completions/%{executable_name}
%{_datarootdir}/fish/vendor_completions.d/%{executable_name}.fish
%{_datarootdir}/zsh/site-functions/_%{executable_name}
# Manpages
%{_mandir}/man5/crio.conf.5*
%{_mandir}/man8/crio.8*
# License
%license LICENSE
# Configs
%dir %{_sysconfdir}/crio
%dir %{_sysconfdir}/crio/crio.conf.d
%config %{_sysconfdir}/crio/crio.conf.d/00-default.conf
%dir %{_datadir}/oci-umount
%dir %{_datadir}/oci-umount/oci-umount.d
%{_datadir}/oci-umount/oci-umount.d/cri-umount.conf
%{_fillupdir}/sysconfig.crio
# Systemd
%{_unitdir}/crio.service
%{_sbindir}/rc%{executable_name}

%files kubeadm-criconfig
%{_fillupdir}/sysconfig.kubelet

%changelog
openSUSE Build Service is sponsored by