File katacontainers.spec of Package katacontainers

#
# spec file for package katacontainers
#
# Copyright (c) 2021 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  kata_project          github.com/kata-containers

%ifarch x86_64
%define QEMUCMD qemu-system-x86_64
%else
%ifarch ppc64le
%define QEMUCMD qemu-system-ppc
%else
%define QEMUCMD qemu-system-%{_arch}
%endif
%endif

%define configPath %{_datarootdir}/defaults/kata-containers/
%define configACRN configuration-acrn.toml
%define configFC   configuration-fc.toml
%define configQEMU configuration-qemu.toml
%ifarch x86_64
# Note: braces used for bash brace expansion
%define defaultConfigFiles \{%{configACRN},%{configFC},%{configQEMU}\}
%else
%define defaultConfigFiles %{configQEMU}
%endif

Name:           katacontainers
Version:        1.11.5
Release:        0
Summary:        Kata Containers OCI container runtime
License:        Apache-2.0
Group:          System/Management
URL:            https://github.com/kata-containers
Source0:        runtime-%{version}.tar.xz
Source1:        proxy-%{version}.tar.xz
Source2:        shim-%{version}.tar.xz
Source3:        ksm-throttler-%{version}.tar.xz
Source4:        kata-fc
Source5:        kata-qemu
Source6:        katacontainers.rpmlintrc
ExclusiveArch:  x86_64 aarch64 ppc64le s390x
BuildRequires:  fdupes
BuildRequires:  golang(API) >= 1.12
Requires:       katacontainers-image-initrd  = %{version}
# Requires: are also required for build, to correctly detect the kernel
# version to use
BuildRequires:  katacontainers-image-initrd  = %{version}
# Required for build to correctly detect the kernel version to use
%ifarch x86_64
Requires:       qemu-x86
Recommends:     firecracker
%endif
%ifarch aarch64
Requires:       qemu-arm
%endif
%ifarch ppc64le
Requires:       qemu-ppc
%endif

%description
Kata Containers is an open source container runtime, building lightweight
virtual machines that seamlessly plug into the containers ecosystem.

%prep
%setup -q -c -a1 -a2 -a3

%build
export GOPATH=$HOME/go
rm -rf $HOME/go/src

suffix="-%{version}*"
dirs=($(ls -d {proxy,runtime,shim,ksm-throttler}${suffix}))

for d in ${dirs[@]}; do
    pkg=${d%$suffix}
    dest="$HOME/go/src/%{kata_project}/$pkg"
    mkdir -pv "$dest"
    cp    -avr "$d"/* "$dest"
done

cd $HOME/go/src/%{kata_project}/runtime
make %{?_smp_mflags} \
    SKIP_GO_VERSION_CHECK=1 QEMUCMD=%{QEMUCMD}

cd $HOME/go/src/%{kata_project}/proxy
make %{?_smp_mflags}

cd $HOME/go/src/%{kata_project}/shim
make %{?_smp_mflags}

cd $HOME/go/src/%{kata_project}/ksm-throttler
make %{?_smp_mflags} HAVE_SYSTEMD=yes all-installable

%check
# No tests

%install
export GOPATH=$HOME/go

cd $HOME/go/src/%{kata_project}/runtime
make \
    SKIP_GO_VERSION_CHECK=1 \
    DESTDIR=%{buildroot} \
    PREFIX=%{_prefix} \
    LIBEXECDIR=%{_libexecdir} \
    QEMUCMD=%{QEMUCMD} \
    install

# Only initrd is supported: delete the "image =" entries only in files where
# both "image =" and "initrd =" is specified
for f in %{buildroot}%{configPath}/%{defaultConfigFiles}; do
  grep -q "^image =" "$f" && grep -q "^initrd = " "$f" && sed -i -E -e '/^image =/d' $f
done

# Replace /usr/libexec path with /usr/lib
sed -i -E \
    -e "s,/usr/libexec,%{_libexecdir}," \
    -e "s,^kernel =.*$,kernel = \"%{_datarootdir}/kata-containers/vmlinuz\"," \
    %{buildroot}%{configPath}/%{defaultConfigFiles}

install -m 644 -D %{buildroot}%{configPath}/configuration.toml %{buildroot}%{_sysconfdir}/kata-containers/configuration.toml

cd $HOME/go/src/%{kata_project}/proxy
make \
    DESTDIR=%{buildroot} \
    PREFIX=%{_prefix} \
    LIBEXECDIR=%{_libexecdir} \
    install

cd $HOME/go/src/%{kata_project}/shim
make \
    DESTDIR=%{buildroot} \
    PREFIX=%{_prefix} \
    LIBEXECDIR=%{_libexecdir} \
    install

cd $HOME/go/src/%{kata_project}/ksm-throttler
make \
    DESTDIR=%{buildroot} \
    PREFIX=%{_prefix} \
    LIBEXECDIR=%{_libexecdir} \
    HAVE_SYSTEMD=yes \
    UNIT_DIR=%{_unitdir} \
    V=1 \
    install

sed -i -E -e 's,/usr/libexec,%{_libexecdir},' \
    %{buildroot}/%{_unitdir}/kata-ksm-throttler.service \
    %{buildroot}/%{_unitdir}/kata-vc-throttler.service

# symlink /usr/sbin/rcFOO -> /usr/sbin/service
install -d %{buildroot}%{_sbindir}
ln -s service %{buildroot}%{_sbindir}/rckata-ksm-throttler
ln -s service %{buildroot}%{_sbindir}/rckata-vc-throttler

# install kata runtime helpers
install -m 755 %{SOURCE4} %{buildroot}%{_bindir}/kata-fc
install -m 755 %{SOURCE5} %{buildroot}%{_bindir}/kata-qemu

%fdupes %{buildroot}/%{_prefix}

%pre
%service_add_pre kata-ksm-throttler.service
%service_add_pre kata-vc-throttler.service

%post
%service_add_post kata-ksm-throttler.service
%service_add_post kata-vc-throttler.service

%preun
%service_del_preun kata-ksm-throttler.service
%service_del_preun kata-vc-throttler.service

%postun
%service_del_postun kata-ksm-throttler.service
%service_del_postun kata-vc-throttler.service

%files
%defattr(-,root,root,-)
# Runtime
# Binaries
%{_bindir}/kata-runtime
%{_bindir}/kata-fc
%{_bindir}/kata-qemu
%{_bindir}/containerd-shim-kata-v2
%dir %{_libexecdir}/kata-containers
%{_libexecdir}/kata-containers/kata-netmon
%{_bindir}/kata-collect-data.sh
# Manpages
# Configs
%dir %{_sysconfdir}/kata-containers
%config(noreplace) %{_sysconfdir}/kata-containers/configuration.toml
# Default configs
%dir %{_datarootdir}/defaults
%dir %{_datarootdir}/defaults/kata-containers
%config %{_datarootdir}/defaults/kata-containers/configuration.toml
%config %{_datarootdir}/defaults/kata-containers/configuration-*.toml
# Completion
%{_datarootdir}/bash-completion/completions/kata-runtime

# proxy
# Binaries
%{_libexecdir}/kata-containers/kata-proxy

# shim
# Binaries
%{_libexecdir}/kata-containers/kata-shim

# ksm-throttler
%dir %{_libexecdir}/kata-ksm-throttler
%dir %{_libexecdir}/kata-ksm-throttler/trigger
%dir %{_libexecdir}/kata-ksm-throttler/trigger/virtcontainers
# Binaries
%{_libexecdir}/kata-ksm-throttler/kata-ksm-throttler
%{_libexecdir}/kata-ksm-throttler/trigger/virtcontainers/vc
%{_sbindir}/rckata-ksm-throttler
%{_sbindir}/rckata-vc-throttler
# systemd
%{_unitdir}/kata-ksm-throttler.service
%{_unitdir}/kata-vc-throttler.service

%license runtime-%{version}/LICENSE

%changelog
openSUSE Build Service is sponsored by