Allow customizing exports (images) and document
There are use cases where pi-gen can be useful that need different image generation that the current defaults. Rather than force such users to require carrying modified versions of the default exports, allow users to specify alternate exports (e.g. instead of export-image and export-noobs, or in addition to these). We do this using a mechanism similar to STAGE_LIST, except that the lists of images are per-stage and default to paying attention to the presence of EXPORT_IMAGE and EXPORT_NOOBS as is currently the case. Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
This commit is contained in:
parent
f8f3d6fe93
commit
3f2ff883c3
18
README.md
18
README.md
|
@ -129,6 +129,24 @@ 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.
|
||||
|
||||
* `stageX_EXPORT_LIST` (Default: based on presence for `EXPORT_IMAGE` and/or
|
||||
`EXPORT_NOOBS` in stageX directory (currently stage2, stage4, and stage5) )
|
||||
|
||||
If set, then instead of determining images to export based on `EXPORT_IMAGE`
|
||||
and/or `EXPORT_NOOBS` being present in a particular directory the images to
|
||||
export for a particular stage is based on that stage's `stageX_EXPORT_LIST`.
|
||||
Only stages with a `stageX_EXPORT_LIST` (e.g. `stage2_EXPORT_LIST`) are
|
||||
determined this way. All other stages use the default method (presence of
|
||||
`EXPORT_IMAGE` and/or `EXPORT_NOOBS`).
|
||||
For stages with a `stageX_EXPORT_LIST`, the contents of EXPORT_LIST are
|
||||
expected to be directory names in the repo directory. In addition, files
|
||||
with each directory in EXPORT_LIST translated to upper case and dashes (-)
|
||||
converted to underscores (\_) in the stage's directory are sourced before
|
||||
generating the image. (e.g. an 'export-image' in the stage2_EXPORT_LIST
|
||||
first sources stage2/EXPORT_IMAGE and then generates an images using the
|
||||
`export-image` directory, which is the same behaviour as the old default
|
||||
behaviour.
|
||||
|
||||
A simple example for building Raspbian:
|
||||
|
||||
```bash
|
||||
|
|
44
build.sh
44
build.sh
|
@ -87,8 +87,13 @@ run_stage(){
|
|||
STAGE_WORK_DIR="${WORK_DIR}/${STAGE}"
|
||||
ROOTFS_DIR="${STAGE_WORK_DIR}"/rootfs
|
||||
if [ ! -f SKIP_IMAGES ]; then
|
||||
if [ -f "${STAGE_DIR}/EXPORT_IMAGE" ]; then
|
||||
EXPORT_DIRS="${EXPORT_DIRS} ${STAGE_DIR}"
|
||||
if [ -z "${EXPORT_LIST}" ]; then
|
||||
get_stage_export "${STAGE_DIR}"
|
||||
if [ -n "${EXPORT_LIST}" ]; then
|
||||
EXPORT_DIRS="${EXPORT_DIRS} ${STAGE_DIR}"
|
||||
fi
|
||||
unset EXPORT_LIST
|
||||
export EXPORT_LIST
|
||||
fi
|
||||
fi
|
||||
if [ ! -f SKIP ]; then
|
||||
|
@ -180,6 +185,15 @@ export TIMEZONE_DEFAULT="${TIMEZONE_DEFAULT:-Europe/London}"
|
|||
|
||||
export GIT_HASH=${GIT_HASH:-"$(git rev-parse HEAD)"}
|
||||
|
||||
if [ "${USE_QEMU}" = "1" ]; then
|
||||
# shellcheck disable=SC2034
|
||||
export stage2_EXPORT_LIST="${stage2_EXPORT_LIST:-export-image}"
|
||||
# shellcheck disable=SC2034
|
||||
export stage4_EXPORT_LIST="${stage4_EXPORT_LIST:-export-image}"
|
||||
# shellcheck disable=SC2034
|
||||
export stage5_EXPORT_LIST="${stage5_EXPORT_LIST:-export-image}"
|
||||
fi
|
||||
|
||||
export CLEAN
|
||||
export IMG_NAME
|
||||
export APT_PROXY
|
||||
|
@ -236,20 +250,26 @@ for STAGE_DIR in $STAGE_LIST; do
|
|||
done
|
||||
|
||||
CLEAN=1
|
||||
|
||||
for EXPORT_DIR in ${EXPORT_DIRS}; do
|
||||
STAGE_DIR=${BASE_DIR}/export-image
|
||||
# shellcheck source=/dev/null
|
||||
source "${EXPORT_DIR}/EXPORT_IMAGE"
|
||||
EXPORT_ROOTFS_DIR=${WORK_DIR}/$(basename "${EXPORT_DIR}")/rootfs
|
||||
run_stage
|
||||
if [ "${USE_QEMU}" != "1" ]; then
|
||||
if [ -e "${EXPORT_DIR}/EXPORT_NOOBS" ]; then
|
||||
log "Begin export ${EXPORT_DIR}"
|
||||
# e.g. stageX with default stage_dirs
|
||||
get_stage_export "${EXPORT_DIR}"
|
||||
|
||||
for EXPORT_IMAGE in ${EXPORT_LIST}; do
|
||||
IMAGE_SOURCE="$(echo "${EXPORT_IMAGE}" | tr '[:lower:]' '[:upper:]' | tr '\-' '_')"
|
||||
if [ -f "${EXPORT_DIR}/${IMAGE_SOURCE}" ]; then
|
||||
log "Begin ${EXPORT_IMAGE}"
|
||||
STAGE_DIR="${BASE_DIR}/${EXPORT_IMAGE}"
|
||||
# shellcheck source=/dev/null
|
||||
source "${EXPORT_DIR}/EXPORT_NOOBS"
|
||||
STAGE_DIR="${BASE_DIR}/export-noobs"
|
||||
source "${EXPORT_DIR}/${IMAGE_SOURCE}"
|
||||
# shellcheck disable=SC2153
|
||||
EXPORT_ROOTFS_DIR="${WORK_DIR}/${EXPORT_STAGE}/rootfs"
|
||||
run_stage
|
||||
log "End ${EXPORT_IMAGE}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
log "End export ${EXPORT_DIR}"
|
||||
done
|
||||
|
||||
if [ -x ${BASE_DIR}/postrun.sh ]; then
|
||||
|
|
|
@ -98,3 +98,29 @@ update_issue() {
|
|||
echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using ${PI_GEN}, ${PI_GEN_REPO}, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue"
|
||||
}
|
||||
export -f update_issue
|
||||
|
||||
get_stage_export() {
|
||||
local stage_dir="$1"
|
||||
local stage_var
|
||||
stage_var="$(echo "$(basename "$1")"|tr '\- :/' '_')"
|
||||
local export_list_var
|
||||
|
||||
export_list_var="\$${stage_var}"_EXPORT_LIST
|
||||
|
||||
eval EXPORT_LIST="$export_list_var"
|
||||
|
||||
if [ -z "${EXPORT_LIST}" ]; then
|
||||
if [ -e "$stage_dir"/EXPORT_IMAGE ]; then
|
||||
EXPORT_LIST="export-image"
|
||||
fi
|
||||
if [ -e "$stage_dir"/EXPORT_NOOBS ]; then
|
||||
EXPORT_LIST="${EXPORT_LIST} export-noobs"
|
||||
fi
|
||||
fi
|
||||
|
||||
EXPORT_STAGE="$(basename "$1")"
|
||||
export EXPORT_STAGE
|
||||
export EXPORT_LIST
|
||||
}
|
||||
|
||||
export -f get_stage_export
|
||||
|
|
Loading…
Reference in New Issue
Block a user