#!/usr/bin/env bash set -x KICKSTART_BASE="Rocky" TODAY="$(TZ='UTC' date +%Y.%m.%d)" APPLIANCE_BASE="${KICKSTART_BASE}-$(dnf config-manager --dump-variables | grep releasever | awk '{print $3}')-$(uname -m)-minimal-${TODAY}" PARTITION_TYPES=('GPT' 'MBR') for P_LAYOUT in "${PARTITION_TYPES[@]}"; do KICKSTART_FILE="${KICKSTART_BASE}-${P_LAYOUT}.ks" APPLIANCE_NAME="${APPLIANCE_BASE}-${P_LAYOUT}" IMAGE_NAME="${APPLIANCE_NAME}.raw" COMMANDS_TO_CHECK=('appliance-creator' 'shasum' 'zstd') for COMMAND in "${COMMANDS_TO_CHECK[@]}"; do if ! command -v "${COMMAND}" > /dev/null; then >&2 echo "$0: ERROR: unable to find command '${COMMAND}' in PATH" exit 1 fi done appliance-creator \ --config "${KICKSTART_FILE}" \ --name "${APPLIANCE_NAME}" \ --format raw \ --outdir "${PWD}" \ --no-compress \ --debug \ --cache /root/cache \ --verbose 2>&1 | tee "${APPLIANCE_NAME}.log" || exit 1 if [[ -d "${APPLIANCE_NAME}" ]]; then pushd "${APPLIANCE_NAME}" || exit 1 mv "${APPLIANCE_NAME}-sda.raw" "${IMAGE_NAME}" zstd --compress -9 "${IMAGE_NAME}" popd || exit 0 else >&2 echo "$0: ERROR: unable to find the appliance output directory" >&2 echo "$0: ${APPLIANCE_NAME}" exit 1 fi done rm -rf "${APPLIANCE_BASE}" && mkdir "${APPLIANCE_BASE}" find . -type f \( -name "*.log" -o -name "*.raw*" \) -exec mv {} "${APPLIANCE_BASE}/" \; rm -rf "${APPLIANCE_BASE}"-{GPT,MBR} pushd "${APPLIANCE_BASE}" || exit 1 sha512sum -- *.raw* > SHA512SUMS sha256sum -- *.raw* > SHA256SUMS popd || exit 1 if [[ -n "$1" ]]; then chown "$1":"$1" -vR "${APPLIANCE_BASE}" fi