160 lines
2.7 KiB
Bash
Executable File
160 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -eo pipefail
|
|
|
|
# Simple build wrapper
|
|
|
|
ACTION=${1}
|
|
OS=${2}
|
|
VERSION=${3}
|
|
|
|
RCP_DIR="./recipes"
|
|
PACKER=${PACKER:-packer}
|
|
|
|
BUILDER=${BUILDER:-qemu}
|
|
|
|
#
|
|
# Init packer
|
|
# install plugins
|
|
#
|
|
initPacker() {
|
|
os=${1}
|
|
${PACKER} init ${RCP_DIR}/${os}
|
|
}
|
|
|
|
#
|
|
# Run the build
|
|
# First the "base" image then the provisionned ones
|
|
#
|
|
run() {
|
|
# ${PACKER} build ${PACKER_OPTS} -on-error=abort -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" -only="base.*.${OS}" "${RCP_DIR}/${OS}/."
|
|
${PACKER} build ${PACKER_OPTS} -on-error=abort -force -var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" -except="base.*.${OS}" "${RCP_DIR}/${OS}/."
|
|
}
|
|
|
|
#
|
|
# Run a specific build
|
|
#
|
|
run_build() {
|
|
target=${4}
|
|
${PACKER} build ${PACKER_OPTS} -force \
|
|
-var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" \
|
|
-only="${target}.${BUILDER}.${OS}" \
|
|
"${RCP_DIR}/${OS}/."
|
|
}
|
|
|
|
#
|
|
# Run many builds for one OS
|
|
#
|
|
run_many() {
|
|
targets="${@:4}"
|
|
only=""
|
|
for target in ${targets};do
|
|
only="${only}-only=${target}.${BUILDER}.${OS} "
|
|
done
|
|
|
|
${PACKER} build ${PACKER_OPTS} -force \
|
|
-var-file="${RCP_DIR}/${OS}/${VERSION}.pkrvars.hcl" \
|
|
${only} \
|
|
"${RCP_DIR}/${OS}/."
|
|
}
|
|
|
|
#
|
|
# List what you can build
|
|
#
|
|
list() {
|
|
echo "You can build : "
|
|
for os in "${RCP_DIR}"/*; do
|
|
echo " * $(basename "${os}") :"
|
|
cd "${os}" || exit 100
|
|
for vfile in *.pkrvars.hcl; do
|
|
echo " - ${vfile}" | sed 's/\.pkrvars\.hcl$//'
|
|
done
|
|
cd - >/dev/null 2>&1 || exit 100
|
|
done
|
|
exit 0
|
|
}
|
|
|
|
#
|
|
# Run all builds
|
|
#
|
|
run_all() {
|
|
versions=""
|
|
for os in "${RCP_DIR}"/*; do
|
|
cd "${os}" || exit 100
|
|
for vfile in *.pkrvars.hcl; do
|
|
versions="${versions} $(echo "${vfile}" | sed 's/\.auto\.pkrvars\.hcl$//')"
|
|
done
|
|
OS=$(basename ${os})
|
|
cd - >/dev/null 2>&1 || exit 100
|
|
for ver in ${versions}; do
|
|
VERSION=${ver}
|
|
run
|
|
done
|
|
versions=""
|
|
done
|
|
set +x
|
|
}
|
|
|
|
#
|
|
# Start only ONE build
|
|
#
|
|
start_build() {
|
|
if [ -z "${OS}" ]; then
|
|
echo "OS Name is missing !"
|
|
echo " Supported OS are :"
|
|
printf " "
|
|
ls ${RCP_DIR}
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${VERSION}" ]; then
|
|
echo "OS Version is missing !"
|
|
echo " ex: ./build debian 10"
|
|
exit 2
|
|
fi
|
|
run
|
|
}
|
|
|
|
case "${ACTION}" in
|
|
|
|
"list")
|
|
list
|
|
;;
|
|
|
|
"all")
|
|
initPacker "${2}" || exit 1
|
|
run_all
|
|
exit ${?}
|
|
;;
|
|
|
|
"start")
|
|
initPacker "${2}" || exit 1
|
|
start_build
|
|
;;
|
|
|
|
"run")
|
|
initPacker "${2}" || exit 1
|
|
run_build $@
|
|
;;
|
|
|
|
"runVMW")
|
|
initPacker "${2}" || exit 1
|
|
run_build $@
|
|
;;
|
|
|
|
"mrun")
|
|
initPacker "${2}" || exit 1
|
|
run_many $@
|
|
;;
|
|
|
|
*)
|
|
echo "You need to provide a valid action!"
|
|
echo " Supported actions are:"
|
|
echo " - start "
|
|
echo " - list "
|
|
echo " - all"
|
|
echo " - run"
|
|
exit 1
|
|
;;
|
|
esac
|