#!/bin/bash #Help menu usage() { echo "Usage: $0 [OPTIONS]" echo "Options:" echo " -h Display this help message" echo " -i Use interactive mode, ignores other flags" echo "" echo " -a Set architecture" echo " -d Set distribution" echo " -v Set variant " exit 1 } #Prepare var interactive=false runws=false #Check if any parameter/option is passed if (( $# == 0 )); then echo "No options were passed";usage; fi #Process options while getopts hia:d:v: flag do case "${flag}" in h) usage;; i) interactive=true;; a) Arch=${OPTARG};; d) Distro=${OPTARG};; v) Variant=${OPTARG};; ?) usage esac done #Go to project folder cd "$( cd "$( dirname "$0" )" &> /dev/null && pwd )" #Interactive mode if $interactive;then echo Entering interactive mode... #Set lists for menu variantList=("minimal" "default" ) archListAlpine=("aarch64" "armhf" "armv7") archListDebian=("arm64" "armhf" "armel") archListRasPiOS=("armhf") #Geneate list of availible distro's declare -a distroList cd ./distros/ for file in *.yaml;do distroList+=("${file/.yaml/}") done #Adding quit option to menu distroList+=("Quit") cd .. #Distro menu echo "Select Distro:" select Distro in "${distroList[@]}"; do case $Distro in "Quit") echo Exiting ; exit;; "") echo 'Invalid choice' >&2 ;; *) break esac done #Architecture menu declare -n archList=archList"$(printf '%s' "$Distro" | tr -d '0123456789')" echo "Select architecture :" select Arch in "${archList[@]}"; do case $Arch in "") echo 'Invalid choice' >&2 ;; *) break esac done #Variant menu echo "Select variant:" select Variant in "${variantList[@]}"; do case $Variant in "") echo 'Invalid choice' >&2 ;; *) break esac done read -p "Do you want to serve image files on local webserver? (yes/No) " runws elif [ -z "$Arch" ] || [ -z "$Distro" ] || [ -z "$Variant" ]; then #Check if all paramaters are set echo "Not all required options were passed" usage fi ./distrobuilder build-lxc ./distros/$Distro.yaml -o image.variant=$Variant -o image.architecture_mapped=$Arch rm -f meta.tar.xz mv ./rootfs.tar.xz ./out/"$Distro-$Arch-$Variant".tar.xz if [[ $runws == y* || $runws == Y* ]]; then cd ./out echo "Availible ip addresses" ip -4 -o a echo "" echo "List images on: http://:8000/" echo "" echo "To stop the webserver press ctrl + c" python3 -m http.server >/dev/null fi