Andrew Davis 92aa7b3de2 Use HTTPS for kernel.org sources checkout
HTTPS is more secure and less likely to be blocked by firewalls. The
other sources here use HTTPS now, update the kernel to the same.
2023-06-14 15:55:09 +02:00

512 lines
21 KiB
Bash

#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com
#
# This file is a part of the Armbian Build Framework
# https://github.com/armbian/build/
### Attention: we can't use any interactive programs, read from stdin, nor use non-coreutils utilities here.
function do_main_configuration() {
display_alert "Starting main configuration" "${MOUNT_UUID}" "info"
# Obsolete stuff, make sure not defined, then make readonly
declare -g -r DEBOOTSTRAP_LIST
declare -g -r PACKAGE_LIST
declare -g -r PACKAGE_LIST_BOARD
declare -g -r PACKAGE_LIST_ADDITIONAL
declare -g -r PACKAGE_LIST_EXTERNAL
declare -g -r PACKAGE_LIST_DESKTOP
# common options
declare revision_from="undetermined"
if [ -f "${USERPATCHES_PATH}"/VERSION ]; then
REVISION=$(cat "${USERPATCHES_PATH}"/VERSION)
revision_from="userpatches VERSION file"
else
REVISION=$(cat "${SRC}"/VERSION)
revision_from="main VERSION file"
fi
declare -g -r REVISION="${REVISION}"
display_alert "Using revision from" "${revision_from}: '${REVISION}'" "info"
# This is the prefix used by all artifacts. Readonly. It's just $REVISION and a double dash.
declare -r -g artifact_prefix_version="${REVISION}--"
[[ -z $VENDOR ]] && VENDOR="Armbian"
[[ -z $VENDORURL ]] && VENDORURL="https://www.armbian.com"
[[ -z $VENDORSUPPORT ]] && VENDORSUPPORT="https://forum.armbian.com"
[[ -z $VENDORPRIVACY ]] && VENDORPRIVACY="https://www.armbian.com"
[[ -z $VENDORBUGS ]] && VENDORBUGS="https://www.armbian.com/bugs"
[[ -z $VENDORLOGO ]] && VENDORLOGO="armbian-logo"
[[ -z $ROOTPWD ]] && ROOTPWD="1234" # Must be changed @first login
[[ -z $MAINTAINER ]] && MAINTAINER="Igor Pecovnik" # deb signature
[[ -z $MAINTAINERMAIL ]] && MAINTAINERMAIL="igor.pecovnik@****l.com" # deb signature
DEST_LANG="${DEST_LANG:-"en_US.UTF-8"}" # en_US.UTF-8 is default locale for target
display_alert "DEST_LANG..." "DEST_LANG: ${DEST_LANG}" "debug"
declare -g SKIP_EXTERNAL_TOOLCHAINS="${SKIP_EXTERNAL_TOOLCHAINS:-yes}" # don't use any external toolchains, by default.
# Timezone
if [[ -f /etc/timezone ]]; then # Timezone for target is taken from host, if it exists.
TZDATA=$(cat /etc/timezone)
display_alert "Using host's /etc/timezone for" "TZDATA: ${TZDATA}" "debug"
else
display_alert "Host has no /etc/timezone" "Using Etc/UTC by default" "debug"
TZDATA="Etc/UTC" # If not /etc/timezone at host, default to UTC.
fi
USEALLCORES=yes # Use all CPU cores for compiling
[[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed
[[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board
cd "${SRC}" || exit
[[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7
if [[ -d "${SRC}/.git" && "${CONFIG_DEFS_ONLY}" != "yes" ]]; then # don't waste time if only gathering config defs
# The docker launcher will have passed these as environment variables. If not, try again here.
if [[ -z "${BUILD_REPOSITORY_URL}" || -z "${BUILD_REPOSITORY_COMMIT}" ]]; then
set_git_build_repo_url_and_commit_vars "main configuration"
fi
fi
ROOTFS_CACHE_MAX=200 # max number of rootfs cache, older ones will be cleaned up
# .deb compression. xz is standard, but is slow, so if avoided by default if not running in CI. one day, zstd.
if [[ -z ${DEB_COMPRESS} ]]; then
DEB_COMPRESS="none" # none is very fast bug produces big artifacts.
[[ "${CI}" == "true" ]] && DEB_COMPRESS="xz" # xz is small and slow
fi
display_alert ".deb compression" "DEB_COMPRESS=${DEB_COMPRESS}" "debug"
if [[ $BETA == yes ]]; then
DEB_STORAGE=$DEST/debs-beta
else
DEB_STORAGE=$DEST/debs
fi
# image artefact destination with or without subfolder
FINALDEST="${DEST}/images"
if [[ -n "${MAKE_FOLDERS}" ]]; then
FINALDEST="${DEST}"/images/"${BOARD}"/"${MAKE_FOLDERS}"
install -d "${FINALDEST}"
fi
# Prepare rootfs filesystem support
[[ -z $ROOTFS_TYPE ]] && ROOTFS_TYPE=ext4 # default rootfs type is ext4
case "$ROOTFS_TYPE" in
ext4) # nothing extra here
;;
nfs)
FIXED_IMAGE_SIZE=256 # small SD card with kernel, boot script and .dtb/.bin files
;;
f2fs)
enable_extension "fs-f2fs-support"
# Fixed image size is in 1M dd blocks (MiB)
# to get size of block device /dev/sdX execute as root: echo $(( $(blockdev --getsize64 /dev/sdX) / 1024 / 1024 ))
[[ -z $FIXED_IMAGE_SIZE ]] && exit_with_error "Please define FIXED_IMAGE_SIZE for use with f2fs"
;;
xfs)
enable_extension "fs-xfs-support"
;;
btrfs)
enable_extension "fs-btrfs-support"
[[ -z $BTRFS_COMPRESSION ]] && BTRFS_COMPRESSION=zlib # default btrfs filesystem compression method is zlib
[[ ! $BTRFS_COMPRESSION =~ zlib|lzo|zstd|none ]] && exit_with_error "Unknown btrfs compression method" "$BTRFS_COMPRESSION"
;;
nilfs2)
enable_extension "fs-nilfs2-support"
;;
*)
exit_with_error "Unknown rootfs type: ROOTFS_TYPE='${ROOTFS_TYPE}'"
;;
esac
# Support for LUKS / cryptroot
if [[ $CRYPTROOT_ENABLE == yes ]]; then
enable_extension "fs-cryptroot-support" # add the tooling needed, cryptsetup
ROOT_MAPPER="armbian-root" # TODO: fixed name can't be used for parallel image building (rpardini: ?)
if [[ -z $CRYPTROOT_PASSPHRASE ]]; then # a passphrase is mandatory if rootfs encryption is enabled
exit_with_error "Root encryption is enabled but CRYPTROOT_PASSPHRASE is not set"
fi
[[ -z $CRYPTROOT_SSH_UNLOCK ]] && CRYPTROOT_SSH_UNLOCK=yes
[[ -z $CRYPTROOT_SSH_UNLOCK_PORT ]] && CRYPTROOT_SSH_UNLOCK_PORT=2022
# Default to pdkdf2, this used to be the default with cryptroot <= 2.0, however
# cryptroot 2.1 changed that to Argon2i. Argon2i is a memory intensive
# algorithm which doesn't play well with SBCs (need 1GiB RAM by default !)
# https://gitlab.com/cryptsetup/cryptsetup/-/issues/372
[[ -z $CRYPTROOT_PARAMETERS ]] && CRYPTROOT_PARAMETERS="--pbkdf pbkdf2"
fi
# Since we are having too many options for mirror management,
# then here is yet another mirror related option.
# Respecting user's override in case a mirror is unreachable.
case $REGIONAL_MIRROR in
china)
[[ -z $USE_MAINLINE_GOOGLE_MIRROR ]] && [[ -z $MAINLINE_MIRROR ]] && MAINLINE_MIRROR=tuna
[[ -z $USE_GITHUB_UBOOT_MIRROR ]] && [[ -z $UBOOT_MIRROR ]] && UBOOT_MIRROR=gitee
[[ -z $GITHUB_MIRROR ]] && GITHUB_MIRROR=gitclone
[[ -z $DOWNLOAD_MIRROR ]] && DOWNLOAD_MIRROR=china
;;
*) ;;
esac
# used by multiple sources - reduce code duplication
[[ $USE_MAINLINE_GOOGLE_MIRROR == yes ]] && MAINLINE_MIRROR=google
# URL for the git bundle used to "bootstrap" local git copies without too much server load. This applies independently of git mirror below.
declare -g MAINLINE_KERNEL_TORVALDS_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle" # this is plain torvalds, single branch
declare -g MAINLINE_KERNEL_STABLE_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/clone.bundle" # this is all stable branches. with tags!
declare -g MAINLINE_KERNEL_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL:-${MAINLINE_KERNEL_TORVALDS_BUNDLE_URL}}" # default to Torvalds; everything else is small enough with this
case $MAINLINE_MIRROR in
google)
MAINLINE_KERNEL_SOURCE='https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable'
MAINLINE_FIRMWARE_SOURCE='https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git'
;;
tuna)
MAINLINE_KERNEL_SOURCE='https://mirrors.tuna.tsinghua.edu.cn/git/linux-stable.git'
MAINLINE_FIRMWARE_SOURCE='https://mirrors.tuna.tsinghua.edu.cn/git/linux-firmware.git'
;;
bfsu)
MAINLINE_KERNEL_SOURCE='https://mirrors.bfsu.edu.cn/git/linux-stable.git'
MAINLINE_FIRMWARE_SOURCE='https://mirrors.bfsu.edu.cn/git/linux-firmware.git'
;;
*)
MAINLINE_KERNEL_SOURCE='https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git' # "linux-stable" was renamed to "linux"
MAINLINE_FIRMWARE_SOURCE='https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git'
;;
esac
MAINLINE_KERNEL_DIR='linux-mainline'
[[ $USE_GITHUB_UBOOT_MIRROR == yes ]] && UBOOT_MIRROR=github
case $UBOOT_MIRROR in
gitee)
MAINLINE_UBOOT_SOURCE='https://gitee.com/mirrors/u-boot.git'
;;
denx)
MAINLINE_UBOOT_SOURCE='https://source.denx.de/u-boot/u-boot.git'
;;
*)
MAINLINE_UBOOT_SOURCE='https://github.com/u-boot/u-boot'
;;
esac
MAINLINE_UBOOT_DIR='u-boot'
case $GITHUB_MIRROR in
fastgit)
GITHUB_SOURCE='https://hub.fastgit.xyz'
;;
ghproxy)
GITHUB_SOURCE='https://ghproxy.com/https://github.com'
;;
gitclone)
GITHUB_SOURCE='https://gitclone.com/github.com'
;;
*)
GITHUB_SOURCE='https://github.com'
;;
esac
case $GHCR_MIRROR in
dockerproxy)
GHCR_SOURCE='ghcr.dockerproxy.com'
;;
*)
GHCR_SOURCE='ghcr.io'
;;
esac
# Let's set default data if not defined in board configuration above
[[ -z $OFFSET ]] && OFFSET=4 # offset to 1st partition (we use 4MiB boundaries by default)
[[ -z $ARCH ]] && ARCH=armhf # makes little sense to default to anything...
ATF_COMPILE=yes
[[ -z $WIREGUARD ]] && WIREGUARD="yes"
[[ -z $EXTRAWIFI ]] && EXTRAWIFI="yes"
[[ -z $SKIP_BOOTSPLASH ]] && SKIP_BOOTSPLASH="no"
[[ -z $PLYMOUTH ]] && PLYMOUTH="yes"
[[ -z $AUFS ]] && AUFS="yes"
[[ -z $IMAGE_PARTITION_TABLE ]] && IMAGE_PARTITION_TABLE="msdos"
[[ -z $EXTRA_BSP_NAME ]] && EXTRA_BSP_NAME=""
[[ -z $EXTRA_ROOTFS_MIB_SIZE ]] && EXTRA_ROOTFS_MIB_SIZE=0
[[ -z $CONSOLE_AUTOLOGIN ]] && CONSOLE_AUTOLOGIN="yes"
# single ext4 partition is the default and preferred configuration
#BOOTFS_TYPE=''
## ------ Sourcing family config ---------------------------
source_family_config_and_arch
if [[ "$HAS_VIDEO_OUTPUT" == "no" ]]; then
SKIP_BOOTSPLASH="yes"
PLYMOUTH="no"
[[ $BUILD_DESKTOP != "no" ]] && exit_with_error "HAS_VIDEO_OUTPUT is set to no. So we shouldn't build desktop environment"
fi
## Extensions: at this point we've sourced all the config files that will be used,
## and (hopefully) not yet invoked any extension methods. So this is the perfect
## place to initialize the extension manager. It will create functions
## like the 'post_family_config' that is invoked below.
initialize_extension_manager
call_extension_method "post_family_config" "config_tweaks_post_family_config" <<- 'POST_FAMILY_CONFIG'
*give the config a chance to override the family/arch defaults*
This hook is called after the family configuration (`sources/families/xxx.conf`) is sourced.
Since the family can override values from the user configuration and the board configuration,
it is often used to in turn override those.
POST_FAMILY_CONFIG
# A secondary post_family_config hook, this time with the BRANCH in the name, lowercase.
call_extension_method "post_family_config_branch_${BRANCH,,}" <<- 'POST_FAMILY_CONFIG_PER_BRANCH'
*give the config a chance to override the family/arch defaults, per branch*
This hook is called after the family configuration (`sources/families/xxx.conf`) is sourced,
and after `post_family_config()` hook is already run.
The sole purpose of this is to avoid "case ... esac for $BRANCH" in the board configuration,
allowing separate functions for different branches. You're welcome.
POST_FAMILY_CONFIG_PER_BRANCH
# Lets make some variables readonly.
# We don't want anything changing them, it's exclusively for family config.
declare -g -r PACKAGE_LIST_FAMILY="${PACKAGE_LIST_FAMILY}"
declare -g -r PACKAGE_LIST_FAMILY_REMOVE="${PACKAGE_LIST_FAMILY_REMOVE}"
display_alert "Done with do_main_configuration" "do_main_configuration" "debug"
}
function do_extra_configuration() {
[[ -n $ATFSOURCE && -z $ATF_USE_GCC ]] && exit_with_error "Error in configuration: ATF_USE_GCC is unset"
[[ -z $UBOOT_USE_GCC ]] && exit_with_error "Error in configuration: UBOOT_USE_GCC is unset"
[[ -z $KERNEL_USE_GCC ]] && exit_with_error "Error in configuration: KERNEL_USE_GCC is unset"
declare BOOTCONFIG_VAR_NAME="BOOTCONFIG_${BRANCH^^}"
[[ -n ${!BOOTCONFIG_VAR_NAME} ]] && BOOTCONFIG=${!BOOTCONFIG_VAR_NAME}
[[ -z $LINUXCONFIG ]] && LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}"
[[ -z $BOOTPATCHDIR ]] && BOOTPATCHDIR="u-boot-$LINUXFAMILY"
[[ -z $ATFPATCHDIR ]] && ATFPATCHDIR="atf-$LINUXFAMILY"
[[ -z $KERNELPATCHDIR ]] && KERNELPATCHDIR="$LINUXFAMILY-$BRANCH"
if [[ "$RELEASE" =~ ^(focal|jammy|kinetic|lunar)$ ]]; then
DISTRIBUTION="Ubuntu"
else
DISTRIBUTION="Debian"
fi
DEBIAN_MIRROR='deb.debian.org/debian'
DEBIAN_SECURTY='security.debian.org/'
[[ "${ARCH}" == "amd64" ]] &&
UBUNTU_MIRROR='archive.ubuntu.com/ubuntu/' ||
UBUNTU_MIRROR='ports.ubuntu.com/'
if [[ $DOWNLOAD_MIRROR == "china" ]]; then
DEBIAN_MIRROR='mirrors.tuna.tsinghua.edu.cn/debian'
DEBIAN_SECURTY='mirrors.tuna.tsinghua.edu.cn/debian-security'
[[ "${ARCH}" == "amd64" ]] &&
UBUNTU_MIRROR='mirrors.tuna.tsinghua.edu.cn/ubuntu/' ||
UBUNTU_MIRROR='mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/'
fi
if [[ $DOWNLOAD_MIRROR == "bfsu" ]]; then
DEBIAN_MIRROR='mirrors.bfsu.edu.cn/debian'
DEBIAN_SECURTY='mirrors.bfsu.edu.cn/debian-security'
[[ "${ARCH}" == "amd64" ]] &&
UBUNTU_MIRROR='mirrors.bfsu.edu.cn/ubuntu/' ||
UBUNTU_MIRROR='mirrors.bfsu.edu.cn/ubuntu-ports/'
fi
if [[ "${ARCH}" == "amd64" ]]; then
UBUNTU_MIRROR='archive.ubuntu.com/ubuntu' # ports are only for non-amd64, of course.
if [[ -n ${CUSTOM_UBUNTU_MIRROR} ]]; then # ubuntu redirector doesn't work well on amd64
UBUNTU_MIRROR="${CUSTOM_UBUNTU_MIRROR}"
fi
fi
if [[ "${ARCH}" != "i386" && "${ARCH}" != "amd64" ]]; then # ports are not present on all mirrors
if [[ -n ${CUSTOM_UBUNTU_MIRROR_PORTS} ]]; then
display_alert "Using custom ports/${ARCH} mirror" "${CUSTOM_UBUNTU_MIRROR_PORTS}" "info"
UBUNTU_MIRROR="${CUSTOM_UBUNTU_MIRROR_PORTS}"
fi
fi
# Debian needs the ports repo when strapping riscv64 - revise after bookworm release
if [[ "${ARCH}" == "riscv64" ]] && [[ $DISTRIBUTION == Debian ]]; then
DEBIAN_MIRROR='deb.debian.org/debian-ports'
fi
# Control aria2c's usage of ipv6.
[[ -z $DISABLE_IPV6 ]] && DISABLE_IPV6="true"
# @TODO this is _very legacy_ and should be removed. Old-time users might have a lib.config lying around and it will mess up things.
# For (late) user override.
# Notice: it is too late to define hook functions or add extensions in lib.config, since the extension initialization already ran by now.
# in case the user tries to use them in lib.config, hopefully they'll be detected as "wishful hooking" and the user will be wrn'ed.
if [[ -f $USERPATCHES_PATH/lib.config ]]; then
display_alert "Using user configuration override" "$USERPATCHES_PATH/lib.config" "info"
source "$USERPATCHES_PATH"/lib.config
fi
# Prepare array for extensions to fill in.
display_alert "Main config" "initting EXTRA_IMAGE_SUFFIXES" "debug"
declare -g -a EXTRA_IMAGE_SUFFIXES=()
call_extension_method "user_config" <<- 'USER_CONFIG'
*Invoke function with user override*
Allows for overriding configuration values set anywhere else.
It is called after sourcing the `lib.config` file if it exists,
but before assembling any package lists.
USER_CONFIG
display_alert "Extensions: prepare configuration" "extension_prepare_config" "debug"
call_extension_method "extension_prepare_config" <<- 'EXTENSION_PREPARE_CONFIG'
*allow extensions to prepare their own config, after user config is done*
Implementors should preserve variable values pre-set, but can default values an/or validate them.
This runs *after* user_config. Don't change anything not coming from other variables or meant to be configured by the user.
EXTENSION_PREPARE_CONFIG
error_if_lib_tag_set # make sure users are not thrown off by using old parameter which does nothing anymore
# apt-cacher-ng mirror configurarion
APT_MIRROR=$DEBIAN_MIRROR
if [[ $DISTRIBUTION == Ubuntu ]]; then
APT_MIRROR=$UBUNTU_MIRROR
fi
[[ -n "${APT_PROXY_ADDR}" ]] && display_alert "Using custom apt proxy address" "APT_PROXY_ADDR=${APT_PROXY_ADDR}" "info"
# @TODO: allow to run aggregation, for CONFIG_DEFS_ONLY? rootfs_aggregate_packages
# Give the option to configure DNS server used in the chroot during the build process
[[ -z $NAMESERVER ]] && NAMESERVER="1.0.0.1" # default is cloudflare alternate
# Consolidate the extra image suffix. loop and add.
declare EXTRA_IMAGE_SUFFIX=""
for suffix in "${EXTRA_IMAGE_SUFFIXES[@]}"; do
display_alert "Adding extra image suffix" "'${suffix}'" "debug"
EXTRA_IMAGE_SUFFIX="${EXTRA_IMAGE_SUFFIX}${suffix}"
done
declare -g -r EXTRA_IMAGE_SUFFIX="${EXTRA_IMAGE_SUFFIX}"
display_alert "Extra image suffix" "'${EXTRA_IMAGE_SUFFIX}'" "debug"
unset EXTRA_IMAGE_SUFFIXES # get rid of this, no longer used
# Lets estimate the image name, based on the configuration. The real image name depends on _actual_ kernel version.
# Here we do a gross estimate with the KERNEL_MAJOR_MINOR + ".y" version, or "generic" if not set (ddks etc).
declare calculated_image_version="undetermined"
declare predicted_kernel_version="generic"
if [[ -n "${KERNEL_MAJOR_MINOR}" ]]; then
predicted_kernel_version="${KERNEL_MAJOR_MINOR}.y"
fi
IMAGE_INSTALLED_KERNEL_VERSION="${predicted_kernel_version}" include_vendor_version="no" calculate_image_version
declare -r -g IMAGE_FILE_ID="${calculated_image_version}" # Global, readonly.
display_alert "Done with do_extra_configuration" "do_extra_configuration" "debug"
}
function write_config_summary_output_file() {
local debug_dpkg_arch debug_uname debug_virt debug_src_mount
debug_dpkg_arch="$(dpkg --print-architecture)"
debug_uname="$(uname -a)"
# We might not have systemd-detect-virt, specially inside docker. Docker images have no systemd...
debug_virt="unknown-nosystemd"
if [[ -n "$(command -v systemd-detect-virt)" ]]; then
debug_virt="$(systemd-detect-virt || true)"
fi
debug_src_mount="$(findmnt --output TARGET,SOURCE,FSTYPE,AVAIL --target "${SRC}" --uniq)"
display_alert "Writing build config summary to" "debug log" "debug"
LOG_ASSET="build.summary.txt" do_with_log_asset cat <<- EOF
## BUILD SCRIPT ENVIRONMENT
Repository: $REPOSITORY_URL
Version: $REPOSITORY_COMMIT
Host OS: $HOSTRELEASE
Host arch: ${debug_dpkg_arch}
Host system: ${debug_uname}
Virtualization type: ${debug_virt}
## Build script directories
Build directory is located on:
${debug_src_mount}
## BUILD CONFIGURATION
Build target:
Board: $BOARD
Branch: $BRANCH
Minimal: $BUILD_MINIMAL
Desktop: $BUILD_DESKTOP
Desktop Environment: $DESKTOP_ENVIRONMENT
Software groups: $DESKTOP_APPGROUPS_SELECTED
Kernel configuration:
Repository: $KERNELSOURCE
Branch: $KERNELBRANCH
Config file: $LINUXCONFIG
U-boot configuration:
Repository: $BOOTSOURCE
Branch: $BOOTBRANCH
Config file: $BOOTCONFIG
Partitioning configuration: $IMAGE_PARTITION_TABLE offset: $OFFSET
Boot partition type: ${BOOTFS_TYPE:-(none)} ${BOOTSIZE:+"(${BOOTSIZE} MB)"}
Root partition type: $ROOTFS_TYPE ${FIXED_IMAGE_SIZE:+"(${FIXED_IMAGE_SIZE} MB)"}
CPU configuration: $CPUMIN - $CPUMAX with $GOVERNOR
EOF
}
function source_family_config_and_arch() {
declare -a family_source_paths=("${SRC}/config/sources/families/${LINUXFAMILY}.conf" "${USERPATCHES_PATH}/config/sources/families/${LINUXFAMILY}.conf")
declare -i family_sourced_ok=0
declare family_source_path
for family_source_path in "${family_source_paths[@]}"; do
[[ ! -f "${family_source_path}" ]] && continue
display_alert "Sourcing family configuration" "${family_source_path}" "info"
# shellcheck source=/dev/null
source "${family_source_path}"
# @TODO: reset error handling, go figure what they do in there.
family_sourced_ok=$((family_sourced_ok + 1))
done
# If no families sourced (and not allowed by ext var), bail out
if [[ ${family_sourced_ok} -lt 1 ]]; then
if [[ "${allow_no_family:-"no"}" != "yes" ]]; then
exit_with_error "Sources configuration not found" "tried ${family_source_paths[*]}"
fi
fi
# load "all-around common arch defaults" common.conf
display_alert "Sourcing common arch configuration" "common.conf" "debug"
# shellcheck source=config/sources/common.conf
source "${SRC}/config/sources/common.conf"
# load architecture defaults
display_alert "Sourcing arch configuration" "${ARCH}.conf" "info"
# shellcheck source=/dev/null
source "${SRC}/config/sources/${ARCH}.conf"
return 0
}
function set_git_build_repo_url_and_commit_vars() {
display_alert "Getting git info for repo, during ${1}..." "${SRC}" "debug"
declare -g BUILD_REPOSITORY_URL BUILD_REPOSITORY_COMMIT
BUILD_REPOSITORY_URL="$(git -C "${SRC}" remote get-url "$(git -C "${SRC}" remote | grep origin || true)" || true)" # ignore all errors
BUILD_REPOSITORY_COMMIT="$(git -C "${SRC}" describe --match=d_e_a_d_b_e_e_f --always --dirty || true)" # ignore error
display_alert "BUILD_REPOSITORY_URL set during ${1}" "${BUILD_REPOSITORY_URL}" "debug"
display_alert "BUILD_REPOSITORY_COMMIT set during ${1}" "${BUILD_REPOSITORY_COMMIT}" "debug"
return 0
}