From b8e497cf217402283b712af5be91c1384946429d Mon Sep 17 00:00:00 2001 From: Matthew Lear Date: Tue, 29 Oct 2024 10:15:10 +0000 Subject: [PATCH] Allow export image customisation (#801) * Allow export image customisation Add new variable EXPORT_CONFIG_DIR to set the location of the scripts pigen will run when exporting an image. Setting this is optional. If not specified, the current location is retained. By utilising STAGE_LIST AND EXPORT_CONFIG_DIR, a user can construct custom images out-of-tree without modification to any defaults. (cherry picked from commit e5e6ceeaf46f52f77b759d3d35aef8bbd0a69c8b) * Shellcheck and style fixes Fixed shellcheck warnings and made the changes more consistent with the surrounding code --------- Co-authored-by: Serge Schneider --- README.md | 4 ++++ build.sh | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 71be938..a246b5f 100644 --- a/README.md +++ b/README.md @@ -205,6 +205,10 @@ The following environment variables are supported: If set, then instead of working through the numeric stages in order, this list will be followed. For example setting to `"stage0 stage1 mystage stage2"` will run the contents of `mystage` before stage2. Note that quotes are needed around the list. An absolute or relative path can be given for stages outside the pi-gen directory. + * `EXPORT_CONFIG_DIR` (Default: `$BASE_DIR/export-image`) + + If set, use this directory path as the location of scripts to run when generating images. An absolute or relative path can be given for a location outside the pi-gen directory. + A simple example for building Raspberry Pi OS: ```bash diff --git a/build.sh b/build.sh index a96f4e4..4864dd6 100755 --- a/build.sh +++ b/build.sh @@ -301,6 +301,13 @@ log "Begin ${BASE_DIR}" STAGE_LIST=${STAGE_LIST:-${BASE_DIR}/stage*} export STAGE_LIST +EXPORT_CONFIG_DIR=$(realpath "${EXPORT_CONFIG_DIR:-"${BASE_DIR}/export-image"}") +if [ ! -d "${EXPORT_CONFIG_DIR}" ]; then + echo "EXPORT_CONFIG_DIR invalid: ${EXPORT_CONFIG_DIR} does not exist" + exit 1 +fi +export EXPORT_CONFIG_DIR + for STAGE_DIR in $STAGE_LIST; do STAGE_DIR=$(realpath "${STAGE_DIR}") run_stage @@ -308,7 +315,7 @@ done CLEAN=1 for EXPORT_DIR in ${EXPORT_DIRS}; do - STAGE_DIR=${BASE_DIR}/export-image + STAGE_DIR=${EXPORT_CONFIG_DIR} # shellcheck source=/dev/null source "${EXPORT_DIR}/EXPORT_IMAGE" EXPORT_ROOTFS_DIR=${WORK_DIR}/$(basename "${EXPORT_DIR}")/rootfs