#!/bin/bash # SPDX-Version: 3.0 # SPDX-CreationInfo: 2025-06-17; WEIDNER, Marc S.; # SPDX-ExternalRef: GIT https://git.coresecret.dev/msw/CISS.debian.installer.git # SPDX-FileContributor: WEIDNER, Marc S.; Centurion Intelligence Consulting Agency # SPDX-FileCopyrightText: 2024-2025; WEIDNER, Marc S.; # SPDX-FileType: SOURCE # SPDX-License-Identifier: EUPL-1.2 OR LicenseRef-CCLA-1.0 # SPDX-LicenseComment: This file is part of the CISS.debian.installer.secure framework. # SPDX-PackageName: CISS.debian.installer # SPDX-Security-Contact: security@coresecret.eu guard_sourcing ####################################### # Parsing './.preseed/preseed.yaml' and './.preseed/partitioning.yaml'. # Globals: # ARY_BOOTPARAM # ARY_LOCALE # ARY_NTPSRVR # ARY_PACKAGES # BASH_REMATCH # DIR_CNF # DIR_TMP # VAR_PRESEED # VAR_USER_MAX # Arguments: # None # Returns: # 0: on success ####################################### yaml_parser() { ### Declare Arrays, HashMaps, and Variables. # shellcheck disable=SC2034 declare -ag ARY_BOOTPARAM=() ARY_LOCALE=() ARY_NTPSRVR=() ARY_PACKAGES=() declare -gix VAR_USER_MAX=0 declare var_index="" var_key="" var_value="" cat "${DIR_CNF}/preseed.yaml" "${DIR_CNF}/partitioning.yaml" >| "${DIR_TMP}/combined.yaml" yq -o=shell "${DIR_TMP}/combined.yaml" >| "${VAR_PRESEED}" ### Generate Arrays for [Grub Parameter], [Locales], [NTPSec Server FQDN], [Software Packages]. while IFS='=' read -r var_key var_value; do var_value=${var_value#\'} var_value=${var_value%\'} # shellcheck disable=SC2034 case "${var_key}" in grub_parameter_[0-9]*) ARY_BOOTPARAM+=("${var_value}") ;; locale_locale_[0-9]*) ARY_LOCALE+=("${var_value}") ;; ntp_server_[0-9]*) ARY_NTPSRVR+=("${var_value}") ;; software_[0-9]*) ARY_PACKAGES+=("${var_value}") ;; esac done < "${VAR_PRESEED}" ### Search all set variables for user_userN_name patterns. # shellcheck disable=SC2312 while IFS='=' read -r var_index; do if [[ "${var_index}" =~ ^user_user([0-9]+)_name$ ]]; then var_index="${BASH_REMATCH[1]}" (( var_index > VAR_USER_MAX )) && VAR_USER_MAX="${var_index}" fi done < <(compgen -v) ### Remove obsolete variables, normalize empty assignments, wrap remaining values in single quotes sed -i -E ' # --- Deletions -------------------------------------------------------- /^grub_parameter_[0-9]+=/d # delete grub parameter variables /^locale_locale_[0-9]+=/d # delete locale variables /^ntp_server_[0-9]+=/d # delete NTP server variables /^software_[0-9]+=/d # delete software list variables # --- Empty-value normalisation --------------------------------------- s/^(.*)=\s*$/\1=""/ # turn key= into key="" # --- Quote unquoted values ------------------------------------------- s/^(.*)=([^'\''"]+)/\1='\''\2'\''/ # wrap value in single quotes ' "${VAR_PRESEED}" # shellcheck disable=SC1090 . "${VAR_PRESEED}" guard_dir && return 0 } # vim: number et ts=2 sw=2 sts=2 ai tw=128 ft=sh