integ/kubernetes/kubernetes-unversioned/centos/kubernetes-unversioned.spec
Jim Gauld 8e7ce96e0e Split kubernetes into versioned stages and unversioned package
This packages kubernetes in versioned subdirectories to be able to
support upgrading multiple versions of kubernetes without collisions.
Common configuration/environment files are moved to the new
kubernetes-unversioned package.

This creates directories:
/usr/local/kubernetes/<version>/stage1
/usr/local/kubernetes/<version>/stage2

The binaries and configuration or kubernetes-node, kubernetes-kubeadm,
and kube-client are placed in new locations, e.g.,
/usr/local/kubernetes/1.18/stage1/usr/bin/kubeadm
/usr/local/kubernetes/1.18/stage2/usr/bin/{kubelet,kubectl}

A new package kubernetes-unversioned contains directories:
/usr/local/kubernetes/current/stage1
/usr/local/kubernetes/current/stage2

This package contains symlinks of all the expected binaries and
configuration needed to run kubernetes. For example, /usr/bin/kubelet
is a symlink to /usr/local/kubernetes/current/stage2/user/bin/kubelet.

At ansible install time and during subsequent boots, there is code in
place to bind-mount /usr/local/kubernetes/<version>/stageX onto
/usr/local/kubernetes/current/stageX .

This removes redundant doc and man pages from the production rpms.

Story: 2008972
Task: 43002
Depends-On: https://review.opendev.org/c/starlingx/ansible-playbooks/+/802898
Signed-off-by: Jim Gauld <james.gauld@windriver.com>
Change-Id: I74dc867faea6759906a687cef0b0ebf9555829ee
2021-08-17 11:19:21 -04:00

132 lines
4.0 KiB
RPMSpec

#
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) 2021 Wind River Systems, Inc.
#
%define debug_package %{nil}
%global _k8s_name kubernetes
# Used to simplify the paths for install and files
%global _curr_stage1 %{_exec_prefix}/local/kubernetes/current/stage1
%global _curr_stage2 %{_exec_prefix}/local/kubernetes/current/stage2
# https://github.com/kubernetes/contrib
%global con_provider github
%global con_provider_tld com
%global con_project kubernetes
%global con_repo kubernetes-contrib
%global con_commit 1.18.1
##############################################
Name: kubernetes-unversioned
Version: 1.0
Release: 1%{?_tis_dist}.%{tis_patch_ver}
Summary: Kubernetes unversioned common config and current version symlinks
License: Apache-2.0
Group: base
Packager: Wind River <info@windriver.com>
URL: unknown
Source0: LICENSE
Source1: %{con_repo}-v%{con_commit}.tar.gz
# systemd resource control enable CPU and Memory accounting for cgroups
Source2: kubernetes-accounting.conf
Patch1: kubelet-service-remove-docker-dependency.patch
BuildArch: noarch
BuildRequires: systemd-devel
Requires: /bin/bash
Requires: systemd
%description
%{summary}
%prep
%setup -q -n %{con_repo}-%{con_commit} -T -b 1
mkdir contrib
cp -r ../%{con_repo}-%{con_commit}/init contrib/.
%patch1 -p1
cp %{SOURCE0} .
%build
%install
stage1_link() {
ln -v -sf %{_curr_stage1}$1/$2 %{buildroot}$1/$2
}
stage2_link() {
ln -v -sf %{_curr_stage2}$1/$2 %{buildroot}$1/$2
}
# Current staged directories
install -v -m 755 -d %{buildroot}%{_curr_stage1}
install -v -m 755 -d %{buildroot}%{_curr_stage2}
# Symlink targets
install -v -m 755 -d %{buildroot}%{_bindir}
install -v -m 755 -d %{buildroot}%{_sysconfdir}/systemd/system/kubelet.service.d
install -v -m 755 -d %{buildroot}%{_datadir}/bash-completion/completions
stage1_link %{_bindir} kubeadm
stage2_link %{_sysconfdir}/systemd/system/kubelet.service.d kubeadm.conf
stage2_link %{_datadir}/bash-completion/completions kubectl
stage2_link %{_bindir} kubelet-cgroup-setup.sh
stage2_link %{_bindir} kubelet
stage2_link %{_bindir} kubectl
# install environment files
install -v -d -m 0755 %{buildroot}%{_sysconfdir}/%{_k8s_name}
install -v -m 644 -t %{buildroot}%{_sysconfdir}/%{_k8s_name} contrib/init/systemd/environ/{config,kubelet,kubelet.kubeconfig,proxy}
# install config files
install -v -d -m 0755 %{buildroot}%{_tmpfilesdir}
install -v -p -m 0644 -t %{buildroot}/%{_tmpfilesdir} contrib/init/systemd/tmpfiles.d/kubernetes.conf
mkdir -p %{buildroot}/run
install -v -d -m 0755 %{buildroot}/run/%{_k8s_name}/
# install service files
install -v -d -m 0755 %{buildroot}%{_unitdir}
install -v -m 0644 -t %{buildroot}%{_unitdir} contrib/init/systemd/kubelet.service
# install the place the kubelet defaults to put volumes (/var/lib/kubelet)
install -v -d %{buildroot}%{_sharedstatedir}/kubelet
# enable CPU and Memory accounting
install -v -d -m 0755 %{buildroot}/%{_sysconfdir}/systemd/system.conf.d
install -v -p -m 0644 -t %{buildroot}/%{_sysconfdir}/systemd/system.conf.d %{SOURCE2}
%files
%defattr(-,root,root,-)
%license LICENSE
%dir %{_curr_stage1}
%dir %{_curr_stage2}
# the following are symlinks
%{_bindir}/kubeadm
%{_bindir}/kubelet
%{_bindir}/kubelet-cgroup-setup.sh
%{_bindir}/kubectl
%dir %{_sysconfdir}/systemd/system/kubelet.service.d
%{_sysconfdir}/systemd/system/kubelet.service.d/kubeadm.conf
%{_datadir}/bash-completion/completions/kubectl
# the following are common config, environment, service
%{_unitdir}/kubelet.service
%dir %{_sharedstatedir}/kubelet
%dir %{_sysconfdir}/%{_k8s_name}
%config(noreplace) %{_sysconfdir}/%{_k8s_name}/config
%config(noreplace) %{_sysconfdir}/%{_k8s_name}/kubelet
%config(noreplace) %{_sysconfdir}/%{_k8s_name}/kubelet.kubeconfig
%config(noreplace) %{_sysconfdir}/%{_k8s_name}/proxy
%config(noreplace) %{_sysconfdir}/systemd/system.conf.d/kubernetes-accounting.conf
%{_tmpfilesdir}/kubernetes.conf
%verify(not size mtime md5) %attr(755, root,root) %dir /run/%{_k8s_name}
%changelog