From 475bcc9ea41475abc3dc6be5ebc9a2f20de1f226 Mon Sep 17 00:00:00 2001 From: Parul Date: Wed, 16 Feb 2022 20:41:40 -0500 Subject: [PATCH 1/5] microshift-images.spec for addtional ro container image stores. Signed-off-by: Parul --- packaging/rpm/microshift-images.spec | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 packaging/rpm/microshift-images.spec diff --git a/packaging/rpm/microshift-images.spec b/packaging/rpm/microshift-images.spec new file mode 100644 index 0000000000..7b308fa998 --- /dev/null +++ b/packaging/rpm/microshift-images.spec @@ -0,0 +1,62 @@ +%global imageStore %{buildroot}/var/lib/microshift/images + +Name: microshift-images +Version: 1 +Release: 1 +# this can be %{timestamp}.git%{short_hash} later for continous main builds +Summary: Create custom container storage +License: ASL 2.0 +URL: https://github.com/redhat-et/microshift + +BuildRequires: podman +BuildRequires: crio + + +%description +This rpm creates a custom RO container storage and pull images and add path to additional container image stores. + +%prep + +if [ -d %{imageStore} ] +then + sudo rm -rf %{imageStore} +fi + + +%build + + +%install + +mkdir -p %{imageStore} + +declare -a ListOfImages=("quay.io/openshift/okd-content@sha256:27f7918b5f0444e278118b2ee054f5b6fadfc4005cf91cb78106c3f5e1833edd" \ +"quay.io/openshift/okd-content@sha256:bcdefdbcee8af1e634e68a850c52fe1e9cb31364525e30f5b20ee4eacb93c3e8" \ +"quay.io/openshift/okd-content@sha256:01cfbbfdc11e2cbb8856f31a65c83acc7cfbd1986c1309f58c255840efcc0b64" \ +"quay.io/coreos/flannel:v0.14.0" \ +"quay.io/microshift/flannel-cni:4.8.0-0.okd-2021-10-10-030117" \ +"quay.io/openshift/okd-content@sha256:459f15f0e457edaf04fa1a44be6858044d9af4de276620df46dc91a565ddb4ec" \ +"quay.io/kubevirt/hostpath-provisioner:v0.8.0" \ +"k8s.gcr.io/pause" \ +"quay.io/openshift/okd-content@sha256:dd1cd4d7b1f2d097eaa965bc5e2fe7ebfe333d6cbaeabc7879283af1a88dbf4e") + +for val in ${ListOfImages[@]}; do + sudo podman pull --root %{imageStore} $val +done +sudo chmod -R a+rx %{imageStore} + + +%post +sudo sed -i '/^additionalimagestores =*/a "/var/lib/microshift/images",' /etc/containers/storage.conf +# if crio was already started, restart it so it read from new imagestore +systemctl is-active --quiet crio && systemctl restart --quiet crio + + +%files +/var/lib/microshift/images/* + + + +%changelog +* Wed Feb 16 2022 Parul Singh . 4.8.0-0.microshiftr-2022_02_02_194009_3 +- Initial packaging of additional RO container storage. \ No newline at end of file From f2bae5bf0409a195dbb46c10c6b9f64e4080f1be Mon Sep 17 00:00:00 2001 From: Parul Date: Tue, 22 Feb 2022 06:52:35 -0500 Subject: [PATCH 2/5] create app images rpm spec Signed-off-by: Parul --- .../rpm/make-microshift-app-images-rpm.sh | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100755 packaging/rpm/make-microshift-app-images-rpm.sh diff --git a/packaging/rpm/make-microshift-app-images-rpm.sh b/packaging/rpm/make-microshift-app-images-rpm.sh new file mode 100755 index 0000000000..c7e750b18a --- /dev/null +++ b/packaging/rpm/make-microshift-app-images-rpm.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +# First arg: file path containing user images per line +# Second arg: container storage dir path +# Third arg: RPMBUILD_DIR + +RPMBUILD_DIR=$3 +_img_dir_=$2 + +declare -a ARRAY + +#link filedescriptor 10 with stdin (standard input) +exec 10<&0 + +#stdin replaced with a file supplied as a first argument +exec < $1 +let count=0 + +#read user images into ARRAY +while read LINE; do + ARRAY[$count]=$LINE + ((count++)) +done + +#restore stdin from file descriptor 10 then close filedescriptor 10 +exec 0<&10 10<&- + +#Generate microshift-app-images.spec +touch ./microshift-app-images.spec +cat >./microshift-app-images.spec < Date: Tue, 1 Mar 2022 12:02:02 -0500 Subject: [PATCH 3/5] rpmbuild fix strip Signed-off-by: Parul --- packaging/rpm/make-microshift-app-images-rpm.sh | 2 +- packaging/rpm/microshift-images.spec | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packaging/rpm/make-microshift-app-images-rpm.sh b/packaging/rpm/make-microshift-app-images-rpm.sh index c7e750b18a..9fdacc5052 100755 --- a/packaging/rpm/make-microshift-app-images-rpm.sh +++ b/packaging/rpm/make-microshift-app-images-rpm.sh @@ -80,4 +80,4 @@ systemctl is-active --quiet crio && systemctl restart --quiet crio EOF cp ./microshift-app-images.spec $RPMBUILD_DIR/SPECS/microshift-app-images.spec -QA_RPATHS=$(( 0x0001|0x0010 )) rpmbuild -bb $RPMBUILD_DIR/SPECS/microshift-app-images.spec \ No newline at end of file +rpmbuild -bb --define "_topdir ${RPMBUILD_DIR}" $RPMBUILD_DIR/SPECS/microshift-app-images.spec \ No newline at end of file diff --git a/packaging/rpm/microshift-images.spec b/packaging/rpm/microshift-images.spec index 7b308fa998..a995de72db 100644 --- a/packaging/rpm/microshift-images.spec +++ b/packaging/rpm/microshift-images.spec @@ -1,5 +1,8 @@ %global imageStore %{buildroot}/var/lib/microshift/images +%define __arch_install_post QA_SKIP_RPATHS=2 /usr/lib/rpm/check-rpaths +%define __brp_check_rpaths QA_SKIP_RPATHS=2 /usr/lib/rpm/check-rpaths + Name: microshift-images Version: 1 Release: 1 From 1c0552a43b592bc26defebc4645778902f4d8bc5 Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Wed, 2 Mar 2022 16:39:41 +0100 Subject: [PATCH 4/5] Multiarch support Signed-off-by: Miguel Angel Ajo --- packaging/rpm/make-microshift-images-rpm.sh | 48 +++++++++ packaging/rpm/microshift-images.spec | 113 ++++++++++++++------ pkg/release/get.sh | 41 +++++++ 3 files changed, 170 insertions(+), 32 deletions(-) create mode 100755 packaging/rpm/make-microshift-images-rpm.sh create mode 100755 pkg/release/get.sh diff --git a/packaging/rpm/make-microshift-images-rpm.sh b/packaging/rpm/make-microshift-images-rpm.sh new file mode 100755 index 0000000000..44b985b40f --- /dev/null +++ b/packaging/rpm/make-microshift-images-rpm.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +set -e -o pipefail + +# generated from other info +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +BASE_VERSION="$(${SCRIPT_DIR}/../../pkg/release/get.sh base)" +TARBALL_FILE="microshift-pkg-release-${BASE_VERSION}.tar.gz" +RPMBUILD_DIR="${SCRIPT_DIR}/_rpmbuild/" +BUILD=${BUILD:-$2} +BUILD=${BUILD:-all} +TARGET=${TARGET:-$3} +TARGET=${TARGET:-x86_64} + + +case $BUILD in + all) RPMBUILD_OPT=-ba ;; + rpm) RPMBUILD_OPT=-bb ;; + srpm) RPMBUILD_OPT=-bs ;; +esac + +ARCHITECTURES=${ARCHITECTURES:-"x86_64 arm64 arm ppc64le riscv64"} + +build() { + cat >"${RPMBUILD_DIR}"SPECS/microshift-images.spec <> "${RPMBUILD_DIR}"SPECS/microshift-images.spec + echo "" >> "${RPMBUILD_DIR}"SPECS/microshift-images.spec + done + + cat "${SCRIPT_DIR}/microshift-images.spec" >> "${RPMBUILD_DIR}SPECS/microshift-images.spec" + + sudo rpmbuild "${RPMBUILD_OPT}" --target $TARGET --define "_topdir ${RPMBUILD_DIR}" "${RPMBUILD_DIR}SPECS/microshift-images.spec" +} + +# prepare the rpmbuild env +mkdir -p "${RPMBUILD_DIR}"/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + +case $1 in + local) + build + ;; + *) + echo "Usage: $0 local [all|rpm|srpm]" + exit 1 +esac diff --git a/packaging/rpm/microshift-images.spec b/packaging/rpm/microshift-images.spec index a995de72db..f29db44b53 100644 --- a/packaging/rpm/microshift-images.spec +++ b/packaging/rpm/microshift-images.spec @@ -1,65 +1,114 @@ -%global imageStore %{buildroot}/var/lib/microshift/images +Name: microshift-images -%define __arch_install_post QA_SKIP_RPATHS=2 /usr/lib/rpm/check-rpaths -%define __brp_check_rpaths QA_SKIP_RPATHS=2 /usr/lib/rpm/check-rpaths +# disable dynamic rpmbuild checks +%global __os_install_post /bin/true +%global __arch_install_post /bin/true +AutoReqProv: no -Name: microshift-images -Version: 1 -Release: 1 -# this can be %{timestamp}.git%{short_hash} later for continous main builds -Summary: Create custom container storage +# where do we want the images to be stored on the final system +%global imageStore /opt/microshift/images +%global imageStoreSed %(echo %{imageStore} | sed 's/\//\\\//g') + +%define version %(echo %{baseVersion} | sed s/-/_/g) + +# to-be-improved: +# avoid warnings for container layers: +# - warning: absolute symlink: +# - warning: Duplicate build-ids + +Version: %{version} +Release: 2 + +Summary: MicroShift related container images License: ASL 2.0 URL: https://github.com/redhat-et/microshift -BuildRequires: podman +BuildRequires: podman BuildRequires: crio %description -This rpm creates a custom RO container storage and pull images and add path to additional container image stores. +This rpm creates a custom RO container storage for the MicroShift container images +and pull images and add path to additional container image stores. %prep -if [ -d %{imageStore} ] + +if [ -d %{buildroot}%{imageStore} ] then - sudo rm -rf %{imageStore} + sudo rm -rf %{buildroot}%{imageStore} fi - %build %install -mkdir -p %{imageStore} +mkdir -p %{buildroot}%{imageStore} + +%define arch %{_arch} + +# aarch64 is arm64 for container regisitries + +%ifarch %{arm} aarch64 +%define arch arm64 +%endif + +pull_arch="--arch %{arch}" -declare -a ListOfImages=("quay.io/openshift/okd-content@sha256:27f7918b5f0444e278118b2ee054f5b6fadfc4005cf91cb78106c3f5e1833edd" \ -"quay.io/openshift/okd-content@sha256:bcdefdbcee8af1e634e68a850c52fe1e9cb31364525e30f5b20ee4eacb93c3e8" \ -"quay.io/openshift/okd-content@sha256:01cfbbfdc11e2cbb8856f31a65c83acc7cfbd1986c1309f58c255840efcc0b64" \ -"quay.io/coreos/flannel:v0.14.0" \ -"quay.io/microshift/flannel-cni:4.8.0-0.okd-2021-10-10-030117" \ -"quay.io/openshift/okd-content@sha256:459f15f0e457edaf04fa1a44be6858044d9af4de276620df46dc91a565ddb4ec" \ -"quay.io/kubevirt/hostpath-provisioner:v0.8.0" \ -"k8s.gcr.io/pause" \ -"quay.io/openshift/okd-content@sha256:dd1cd4d7b1f2d097eaa965bc5e2fe7ebfe333d6cbaeabc7879283af1a88dbf4e") +# for x86_64 we don't want to specify the arch otherwise quay gets grumpy -for val in ${ListOfImages[@]}; do - sudo podman pull --root %{imageStore} $val +%ifarch x86_64 +pull_arch="" +images=%{images_x86_64} +%endif + +%ifarch %{arm} +images=%{images_arm} +%endif + +%ifarch %{arm} aarch64 +images=%{images_arm64} +%endif + +%ifarch ppc64le +images=%{images_ppc64le} +%endif + +%ifarch riscv64 +images=%{images_riscv64} +%endif + + +for val in ${images}; do + podman pull ${pull_arch} --root %{buildroot}%{imageStore} $val done -sudo chmod -R a+rx %{imageStore} +# check, why do we need this? +# sudo chmod -R a+rx %{imageStore} %post -sudo sed -i '/^additionalimagestores =*/a "/var/lib/microshift/images",' /etc/containers/storage.conf -# if crio was already started, restart it so it read from new imagestore -systemctl is-active --quiet crio && systemctl restart --quiet crio +# only on install (1), not on upgrades (2) +if [ $1 -eq 1 ]; then + sed -i '/^additionalimagestores =*/a "%{imageStore}",' /etc/containers/storage.conf + # if crio was already started, restart it so it read from new imagestore + systemctl is-active --quiet crio && systemctl restart --quiet crio +fi -%files -/var/lib/microshift/images/* +%postun +# only on uninstall (0), not on upgrades(1) +if [ $1 -eq 0 ]; + sed -i '/"${imageStoreSed}",/d" /etc/containers/storage.conf +fi +%files +%{imageStore}/* %changelog +* Wed Mar 2 2022 Miguel Angel Ajo . 4.8.0_0.okd_2021_10_10_030117-2 +- Automatically get architecture images and OKD base version + * Wed Feb 16 2022 Parul Singh . 4.8.0-0.microshiftr-2022_02_02_194009_3 -- Initial packaging of additional RO container storage. \ No newline at end of file +- Initial packaging of additional RO container storage. diff --git a/pkg/release/get.sh b/pkg/release/get.sh new file mode 100755 index 0000000000..2b3ad3ddff --- /dev/null +++ b/pkg/release/get.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +function get_base { + grep "var Base" "${SCRIPT_DIR}/release.go" | cut -d\" -f 2 +} + +function add_bases { + base=$(get_base) + sed "s/:$/:${base}/g" # some lines have "xxxxx:" + Base like flannel +} + +function get_image_list { + + cat $1 | grep "Image = map\[string\]string" -A 100 | grep '":' | cut -d\" -f4 | \ + add_bases +} + +function get_images { + arch=$1 + case $arch in + x86_64|amd64) get_image_list "${SCRIPT_DIR}/release_amd64.go" ;; + *) get_image_list "${SCRIPT_DIR}/release.go" ;; + esac +} + +function usage { + echo "usage:" + echo " get.sh base : prints the OKD base version for this MicroShift codebase" + echo " get.sh images : prints image list used by this MicroShift codebase and architecture" + exit 1 +} + +case $1 in + base) get_base ;; + images) get_images $2 ;; + *) usage +esac + + From f12cc6a14440c2942e13c579320b49eaf2fb9143 Mon Sep 17 00:00:00 2001 From: Parul Date: Thu, 3 Mar 2022 10:24:50 -0500 Subject: [PATCH 5/5] Apache License 2.0 Signed-off-by: Parul --- packaging/rpm/make-microshift-app-images-rpm.sh | 2 +- packaging/rpm/microshift-images.spec | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packaging/rpm/make-microshift-app-images-rpm.sh b/packaging/rpm/make-microshift-app-images-rpm.sh index 9fdacc5052..1c52ce1d3c 100755 --- a/packaging/rpm/make-microshift-app-images-rpm.sh +++ b/packaging/rpm/make-microshift-app-images-rpm.sh @@ -36,7 +36,7 @@ Name: microshift-app-images Version: 1 Release: 1 Summary: Creates RO container storage for user applications -License: ASL 2.0 +License: Apache License 2.0 URL: https://github.com/redhat-et/microshift BuildRequires: podman diff --git a/packaging/rpm/microshift-images.spec b/packaging/rpm/microshift-images.spec index f29db44b53..6d2abcabbe 100644 --- a/packaging/rpm/microshift-images.spec +++ b/packaging/rpm/microshift-images.spec @@ -20,11 +20,11 @@ Version: %{version} Release: 2 Summary: MicroShift related container images -License: ASL 2.0 +License: Apache License 2.0 URL: https://github.com/redhat-et/microshift BuildRequires: podman -BuildRequires: crio +Requires: crio %description @@ -101,6 +101,8 @@ fi # only on uninstall (0), not on upgrades(1) if [ $1 -eq 0 ]; sed -i '/"${imageStoreSed}",/d" /etc/containers/storage.conf + systemctl is-active --quiet crio && systemctl restart --quiet crio + fi %files