|
|
|
@ -2,15 +2,11 @@ |
|
|
|
|
|
|
|
# CONSTANTS |
|
|
|
|
|
|
|
BASEDIR=$(dirname "$0") |
|
|
|
MIAOU_IMAGE=images:debian/13 |
|
|
|
APT_ARCHIVES=/var/cache/apt/archives |
|
|
|
PROJECT_SANDBOX=sandbox |
|
|
|
TEMPLATE_SANDBOX=miaou-debian13-template |
|
|
|
TEMPLATE_REFRESH_DELAY="7 days" |
|
|
|
|
|
|
|
TEMPLATE_REFRESH_DELAY='7 days' |
|
|
|
BARE_MINIMAL=false |
|
|
|
CONTAINER= |
|
|
|
|
|
|
|
# FUNCTIONS |
|
|
|
|
|
|
|
@ -43,51 +39,47 @@ function humanize_ago { |
|
|
|
function parse_options { |
|
|
|
while [[ $# -gt 0 ]]; do |
|
|
|
case "$1" in |
|
|
|
--help | -h) |
|
|
|
usage && exit 0 |
|
|
|
;; |
|
|
|
--bare-minimal) |
|
|
|
BARE_MINIMAL=true |
|
|
|
;; |
|
|
|
--help | -h) usage && exit 0 ;; |
|
|
|
--bare-minimal) BARE_MINIMAL=true ;; |
|
|
|
*) |
|
|
|
if [[ -z $CONTAINER ]]; then |
|
|
|
if [[ ! -v CONTAINER ]]; then |
|
|
|
CONTAINER=$1 |
|
|
|
else |
|
|
|
echo >&2 "Unknown option: $1" && usage && exit 2 |
|
|
|
fi |
|
|
|
;; |
|
|
|
esac |
|
|
|
|
|
|
|
shift 1 # Move to the next argument |
|
|
|
shift |
|
|
|
done |
|
|
|
[[ -n $CONTAINER ]] || (usage && exit 1) |
|
|
|
if [[ ! -v CONTAINER ]]; then |
|
|
|
usage |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
function mount_miaou_bash { |
|
|
|
printenv MIAOU_BASH_DIR >/dev/null || (echo >&2 "Warn: environment variable MIAOU_BASH_DIR is missing!" && return) |
|
|
|
|
|
|
|
local target="$1" |
|
|
|
local optional_project=${2:-} |
|
|
|
[[ -n $optional_project ]] && optional_project="--project $optional_project" |
|
|
|
local options=() |
|
|
|
[[ -v 2 ]] && options+=(--project "$2") |
|
|
|
|
|
|
|
incus $optional_project config device add $target MIAOU-BASH disk source=$MIAOU_BASH_DIR path=/opt/miaou-bash readonly=true | grep -q 'Device MIAOU-BASH added' |
|
|
|
incus "${options[@]}" config device add "$target" MIAOU-BASH disk \ |
|
|
|
source="$MIAOU_BASH_DIR" path=/opt/miaou-bash readonly=true | |
|
|
|
grep -q 'Device MIAOU-BASH added' |
|
|
|
} |
|
|
|
|
|
|
|
function assign_host_zoneinfo { |
|
|
|
local target="$1" |
|
|
|
local optional_project=${2:-} |
|
|
|
[[ -n $optional_project ]] && optional_project="--project $optional_project" |
|
|
|
local options=() |
|
|
|
[ -v 2 ] && options+=(--project "$2") |
|
|
|
|
|
|
|
local host_zoneinfo |
|
|
|
host_zoneinfo=$(realpath /etc/localtime) |
|
|
|
echo "assign ZONEINFO from host: $host_zoneinfo" |
|
|
|
|
|
|
|
# TODO:optional_project might be an array, "${optional_project[@]}" |
|
|
|
incus exec $optional_project "$target" -- bash <<-EOF |
|
|
|
incus exec "${options[@]}" "$target" -- bash <<-EOF |
|
|
|
ln -fs "$host_zoneinfo" /etc/localtime |
|
|
|
dpkg-reconfigure -f noninteractive tzdata |
|
|
|
EOF |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
function build_sandbox_project { |
|
|
|
@ -107,14 +99,13 @@ function refresh_template { |
|
|
|
cat <<EOF |
|
|
|
apt-get update |
|
|
|
apt-get dist-upgrade -y |
|
|
|
apt-get install -y curl |
|
|
|
MIAOU_BASH_DIR=/opt/miaou-bash |
|
|
|
export MIAOU_BASH_DIR |
|
|
|
"\$MIAOU_BASH_DIR"/bin/miaou-bash --initiate |
|
|
|
/opt/miaou-bash/bin/miaou-bash /opt/miaou-bash/lib/initiate.bash |
|
|
|
EOF |
|
|
|
) |
|
|
|
|
|
|
|
incus --project "$PROJECT_SANDBOX" exec "$TEMPLATE_SANDBOX" -- bash -c "$script" |
|
|
|
incus --project "$PROJECT_SANDBOX" exec "$TEMPLATE_SANDBOX" -- bash -lc "$script" |
|
|
|
incus --project "$PROJECT_SANDBOX" stop "$TEMPLATE_SANDBOX" |
|
|
|
|
|
|
|
local image_date |
|
|
|
|