818914d495
The kiwi boxbuild plugin allows to build the image as normal user inside of a KVM box. The boxes are provided by the plugin and fetched once or on update. This is useful to decouple the build from host operating system requirements. The calling user must have permissions to run KVM instances. Also see: https://osinside.github.io/kiwi/plugins/self_contained.html for setting up the sshfs sharing backend
72 lines
2.4 KiB
Bash
Executable File
72 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Simple wrapper to call kiwi properly for image builds
|
|
# Author: Neal Gompa <ngompa@fedoraproject.org>
|
|
|
|
set -eu -o pipefail
|
|
|
|
kiwibuildsh="$(basename "$0")"
|
|
|
|
usage() {
|
|
echo >&2 "usage: $kiwibuildsh [--kiwi-description-dir=DIR] [--isolated] --output-dir=DIR --image-type=TYPE --image-profile=PROFILE [--debug]"
|
|
echo >&2 " eg: $kiwibuildsh --kiwi-description-dir=/var/tmp/desc --output-dir=/var/tmp/work --image-type=oem --image-profile=Cloud-Base-Generic --debug"
|
|
echo >&2 " eg: $kiwibuildsh --output-dir=/var/tmp/work --image-type=oem --image-profile=Cloud-Base-Generic"
|
|
echo >&2 " eg: $kiwibuildsh --isolated --output-dir=/var/tmp/work --image-type=oem --image-profile=Cloud-Base-Generic"
|
|
exit 255
|
|
}
|
|
|
|
optTemp=$(getopt --options '+k:,i,o:,t:,p:,d,h' --longoptions 'isolated,kiwi-description-dir:,output-dir:,image-type:,image-profile:,debug,help' --name "$kiwibuildsh" -- "$@")
|
|
eval set -- "$optTemp"
|
|
unset optTemp
|
|
|
|
kiwi_isolated=
|
|
kiwi_description_dir="./"
|
|
output_dir=
|
|
image_type=
|
|
image_profile=
|
|
debug=
|
|
|
|
while true; do
|
|
case "$1" in
|
|
-i|--isolated) kiwi_isolated=1; shift ;;
|
|
-k|--kiwi-description-dir) kiwi_description_dir="$2" ; shift 2 ;;
|
|
-o|--output-dir) output_dir="$2" ; shift 2 ;;
|
|
-t|--image-type) image_type="$2" ; shift 2 ;;
|
|
-p|--image-profile) image_profile="$2" ; shift 2 ;;
|
|
-d|--debug) debug="--debug" ; shift ;;
|
|
-h|--help) usage ;;
|
|
--) shift ; break ;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "$output_dir" ] || [ -z "$image_type" ] || [ -z "$image_profile" ]; then
|
|
echo "Options not set!"
|
|
usage
|
|
fi
|
|
|
|
if [ ! ${kiwi_isolated} ] && [ -e "/sys/fs/selinux/enforce" ]; then
|
|
# Disable SELinux enforcement during the image build if it's enforcing
|
|
selinux_enforcing="$(cat /sys/fs/selinux/enforce)"
|
|
if [ "$selinux_enforcing" = "1" ]; then
|
|
setenforce 0
|
|
fi
|
|
fi
|
|
|
|
set +e
|
|
if [ ! ${kiwi_isolated} ]; then
|
|
kiwi-ng ${debug} --type="${image_type}" --profile="${image_profile}" --color-output system build --description "${kiwi_description_dir}" --target-dir "${output_dir}"
|
|
else
|
|
kiwi-ng ${debug} --type="${image_type}" --profile="${image_profile}" --color-output system boxbuild --box universal --sshfs-sharing -- --description "${kiwi_description_dir}" --target-dir "${output_dir}"
|
|
fi
|
|
kiwi_status=$?
|
|
set -e
|
|
|
|
if [ ! ${kiwi_isolated} ] && [ -e "/sys/fs/selinux/enforce" ]; then
|
|
# Re-enable SELinux enforcement now that image build is done
|
|
if [ "$selinux_enforcing" = "1" ]; then
|
|
setenforce 1
|
|
fi
|
|
fi
|
|
|
|
exit $kiwi_status
|