#!/usr/bin/env bash # # SPDX-License-Identifier: GPL-3.0-or-later set -e -u # Control the environment umask 0022 export LC_ALL="C.UTF-8" if [[ -v LANGUAGE ]]; then # LC_ALL=C.UTF-8, unlike LC_ALL=C, does not override LANGUAGE. # See https://sourceware.org/bugzilla/show_bug.cgi?id=16621 and https://savannah.gnu.org/bugs/?62815 unset LANGUAGE fi [[ -v SOURCE_DATE_EPOCH ]] || printf -v SOURCE_DATE_EPOCH '%(%s)T' -1 export SOURCE_DATE_EPOCH # Set application name from the script's file name app_name="${0##*/}" # Define global variables. All of them will be overwritten later pkg_list=() bootstrap_pkg_list=() quiet="" work_dir="" out_dir="" gpg_key="" gpg_sender="" iso_name="" iso_label="" iso_publisher="" iso_application="" iso_version="" install_dir="" arch="" pacman_conf="" packages="" bootstrap_packages="" pacstrap_dir="" buildmodes=() bootmodes=() airootfs_image_type="" airootfs_image_tool_options=() cert_list=() sign_netboot_artifacts="" declare -A file_permissions=() efibootimg="" efiboot_files=() # adapted from GRUB_EARLY_INITRD_LINUX_STOCK in https://git.savannah.gnu.org/cgit/grub.git/tree/util/grub-mkconfig.in readonly ucodes=('intel-uc.img' 'intel-ucode.img' 'amd-uc.img' 'amd-ucode.img' 'early_ucode.cpio' 'microcode.cpio') # Show an INFO message # $1: message string _msg_info() { local _msg="${1}" [[ "${quiet}" == "y" ]] || printf '[%s] INFO: %s\n' "${app_name}" "${_msg}" } # Show a WARNING message # $1: message string _msg_warning() { local _msg="${1}" printf '[%s] WARNING: %s\n' "${app_name}" "${_msg}" >&2 } # Show an ERROR message then exit with status # $1: message string # $2: exit code number (with 0 does not exit) _msg_error() { local _msg="${1}" local _error=${2} printf '[%s] ERROR: %s\n' "${app_name}" "${_msg}" >&2 if (( _error > 0 )); then exit "${_error}" fi } # Show help usage, with an exit status. # $1: exit status number. _usage() { IFS='' read -r -d '' usagetext < options: -A Set an application name for the ISO Default: '${iso_application}' -C pacman configuration file. Default: '${pacman_conf}' -D Set an install_dir. All files will by located here. Default: '${install_dir}' NOTE: Max 8 characters, use only [a-z0-9] -L