#!/usr/bin/env bash # directory where the script is located, so we can source files regardless of where PWD is DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ${EXTRA_PKGS_FILE="${DIR}/EXTRA-PACKAGES.txt"} EXTRA_PKGS=() [[ -n "$EXTRA_PKGS_FILE" ]] && mapfile -t EXTRA_PKGS < <(cat "$EXTRA_PKGS_FILE") : ${CR_MIRROR="http://no.mirrors.blix.com/ubuntu/"} : ${CR_ARCH="amd64"} : ${CR_VER="focal"} : ${CR_VARIANT="buildd"} : ${CR_COMPONENTS="main,universe"} if (( $# > 0 )) && [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]] || [[ "$1" == "-?" ]] || [[ "$1" == "?" ]]; then : ${CR_OUT="${DIR}/ubuntu-${CR_VER}-${CR_ARCH}"} echo "USAGE: $0 (version='${CR_VER}') (arch='${CR_ARCH}') (out='${CR_OUT}') (mirror='${CR_MIRROR}')" echo echo "Env vars:" echo echo " CR_MIRROR - The mirror to use. Default: $CR_MIRROR" echo " CR_COMPONENTS - The repository 'components' or 'sections' to use (e.g. main, nonfree, universe, extra). Default: $CR_COMPONENTS" echo " CR_ARCH - The CPU architecture to use. Default: $CR_ARCH" echo " CR_VER - The distro version to download (usually indexed by codename). Default: $CR_VER" echo " CR_OUT - The folder to output the chroot into. Default: $CR_OUT" echo " CR_VARIANT - The value for debootstrap '--variant='. Default: $CR_VARIANT" echo " EXTRA_PKGS_FILE - Path to a file containing extra packages to install, separated by newlines. If set to \"\" then no extra packages will be installed. " \ "Default: $EXTRA_PKGS_FILE" echo exit 1 fi (( $# > 0 )) && CR_VER="$1" (( $# > 1 )) && CR_ARCH="$2" : ${CR_OUT="${DIR}/ubuntu-${CR_VER}-${CR_ARCH}"} (( $# > 2 )) && CR_OUT="$3" (( $# > 3 )) && CR_MIRROR="$4" EXTRA_PKGS_COMSEP="" echo -e "Extra packages:\n" for p in "${EXTRA_PKGS[@]}"; do [[ -z "$p" ]] && continue echo " - $p" EXTRA_PKGS_COMSEP+="${p}," done sleep 2 EXTRA_PKGS_COMSEP="${EXTRA_PKGS_COMSEP%,}" DEBOOT_ARGS=( "--variant=$CR_VARIANT" "--components=$CR_COMPONENTS" "--arch" "$CR_ARCH" ) if (( ${#EXTRA_PKGS[@]} > 0 )); then DEBOOT_ARGS+=("--include=$EXTRA_PKGS_COMSEP") fi DEBOOT_ARGS+=("$CR_VER" "$CR_OUT" "$CR_MIRROR") echo -e "\n-----------------------------------------------------------------------------\n" echo -e " Debootstrap Generator Tool" echo -e " Written by Chris (Someguy123) @ Privex Inc. (https://www.privex.io)" echo echo -e " Distro Version: $CR_VARIANT CPU Arch: $CR_ARCH" echo -e " Mirror: $CR_MIRROR" echo -e " Variant: $CR_VARIANT Output Folder: $CR_OUT" echo -e " Total Extra Packages: ${#EXTRA_PKGS[@]}" echo -e "\n-----------------------------------------------------------------------------\n" echo -e " >>> Running the following command in 10 seconds:\n" #echo -e "\t\t" debootstrap "--variant=$CR_VARIANT" "--components=$CR_COMPONENTS" "--include=$EXTRA_PKGS_COMSEP" --arch "$CR_ARCH" "$CR_VER" "$CR_OUT" "$CR_MIRROR" echo -e "\t\t" debootstrap "${DEBOOT_ARGS[@]}" echo sleep 5 echo " [...] 5 seconds..." sleep 2 echo " [...] 3 seconds..." sleep 2 echo " [...] 1 second..." sleep 1 echo -e " [!!!] STARTING DEBOOTSTRAP. Downloading distro '${CR_VER}' arch '${CR_ARCH}' into folder: ${CR_OUT}\n" debootstrap "${DEBOOT_ARGS[@]}" #debootstrap "--variant=$CR_VARIANT" "--components=$CR_COMPONENTS" "--include=$EXTRA_PKGS_COMSEP" --arch "$CR_ARCH" "$CR_VER" "$CR_OUT" "$CR_MIRROR" ret=$? if (( ret )); then echo -e "\n-----------------------------------------------------------------------------\n" echo -e "\n [!!!] ERROR! Something went wrong. Please check the messages above." echo -e "\n [!!!] Return code: $ret" echo -e "\n-----------------------------------------------------------------------------\n" exit $ret else echo -e "\n-----------------------------------------------------------------------------\n" echo -e "\n [+++] SUCCESS! A zero return code was returned by debootstrap, meaning" echo -e " [+++] that nothing went wrong during the install :)" echo -e "\n [+++] Return code: $ret" echo -e "\n-----------------------------------------------------------------------------\n" fi echo -e "\n [+++] FINISHED! Debootstrap at $CHR_OUT is now fully ready.\n" exit $ret