#!/bin/bash -e # description: CI/CD Utility helper. Builds linux rootfs file from kickstart input file in docker/podman enviroment # param: 1. kickstart file and 2. rootfs file name to be generated # license: MIT. usage() { cat 1>&2 <&2 < /etc/anaconda/product.d/ks2rootfs.conf # Anaconda configuration file for Kickstart to Rootfs. [Product] product_name = Kickstart to RootFS [Base Product] product_name = AlmaLinux [Storage] file_system_type = [License] eula = _EOF # create rootfs livemedia-creator --logfile="/tmp/ks2rootfs.log" \ --make-tar --ks="${BUILD_WORK_DIR}/${BUILD_KICKSTART}" --no-virt \ --image-only --image-name="${BUILD_ROOTFS}" \ --anaconda-arg "--product Kickstart to RootFS" \ --compression ${BUILD_COMPTYPE} # copy rootfs to working dir cp -rp /var/tmp/${BUILD_ROOTFS} ${BUILD_OUTDIR}/${BUILD_ROOTFS} echo "Copied disk image from /var/tmp/${BUILD_ROOTFS} to ${BUILD_OUTDIR}/${BUILD_ROOTFS}" if [ ${BUILD_FLAG_WRITE_META} == 'true' ]; then # extract os-release info tar -xvf /var/tmp/${BUILD_ROOTFS} -C /tmp/ --strip-components=3 ./usr/lib/os-release os_release_id=$(awk -F= '$1=="ID" { print $2 ;}' /tmp/os-release | tr -d '"') distro_release=$(grep "${os_release_id}.*-release-" /tmp/anaconda/packaging.log | grep -o "Verifying:.*" | sed -n 's/Verifying: //p') if [ -z ${distro_release+x} ]; then exit 1 else echo 'Writting meta data ... ' # save distro release info echo "$distro_release" > ${BUILD_OUTDIR}/distro-release fi # save list of packages installed jq .[] -r /tmp/dnf.cache/tempfiles.json | awk -F '/' '{print $5}' | sort > ${BUILD_OUTDIR}/rpm-packags # cat ${BUILD_OUTDIR}/rpm-packags | sed 's/-[0-9].*//g' > ${BUILD_OUTDIR}/pkgs-list-only # cat ${BUILD_OUTDIR}/rpm-packags | sed 's/.el[0-9].*//g' > ${BUILD_OUTDIR}/pkgs-list echo 'Writting meta data completed.' else echo 'Skip writing meta data based on configuration.' fi if [ ${BUILD_FLAG_RETAIN_LOG} == 'true' ]; then rm -rf ${BUILD_LOGDIR} mkdir -p ${BUILD_LOGDIR} ${BUILD_LOGDIR}/anaconda echo "Copying logs to '${BUILD_LOGDIR}' ..." cp /tmp/ks2rootfs.log rm -rf ${BUILD_LOGDIR}/ks2rootfs.log cp -rp /tmp/anaconda/* ${BUILD_LOGDIR}/anaconda echo 'Copying logs completed.' else echo 'Skip copying logs data based on configuration (default). ' fi cat << _EOF > "${BUILD_OUTDIR}/Dockerfile" # This file auto generated from 'ks2rootfs' script, any changes will be over-written FROM scratch ADD ${BUILD_ROOTFS} / CMD ["/bin/bash"] _EOF echo "Generating '${BUILD_OUTDIR}/Dockerfile' completed."