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