From 51566433c0f07d1a796ca6da969f2c1b3f3912c5 Mon Sep 17 00:00:00 2001 From: pvincent Date: Tue, 7 Apr 2026 07:58:04 +0400 Subject: [PATCH] create not yet finalized, hangs on first login --- tools/miaou-create | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/tools/miaou-create b/tools/miaou-create index 7f93824..5199e69 100755 --- a/tools/miaou-create +++ b/tools/miaou-create @@ -60,27 +60,35 @@ function parse_options { } function create { - incus --project "$PROJECT_SANDBOX" copy "$TEMPLATE_SANDBOX" "$CONTAINER" --target-project $(incus project get-current) + incus --project "$PROJECT_SANDBOX" copy --instance-only --refresh "$TEMPLATE_SANDBOX" "$CONTAINER" --target-project $(incus project get-current) incus file delete "$CONTAINER/etc/machine-id" incus start "$CONTAINER" customize_host "$CONTAINER" } function mount_miaou_bash { - [[ -v MIAOU_BASH_DIR ]] && echo >&2 "Warn: variable MIAOU_BASH_DIR missing!" && return + 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" + 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 $optional_project config set $target environment.PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/miaou-bash/tools } function build_sandbox_project { - incus project show $PROJECT_SANDBOX > /dev/null || incus project create $PROJECT_SANDBOX + if ! incus project show $PROJECT_SANDBOX > /dev/null; then + incus project create $PROJECT_SANDBOX + incus profile device add default root disk path=/ pool=default --project $PROJECT_SANDBOX + incus profile device add default eth0 nic name=eth0 network=incusbr0 --project $PROJECT_SANDBOX + fi } function refresh_template { - incus --project "$PROJECT_SANDBOX" start "$TEMPLATE_SANDBOX" + if ! incus --project "$PROJECT_SANDBOX" info "$TEMPLATE_SANDBOX" | grep '^Status: RUNNING'; then + incus --project "$PROJECT_SANDBOX" start "$TEMPLATE_SANDBOX" + fi incus --project "$PROJECT_SANDBOX" exec "$TEMPLATE_SANDBOX" -- bash << EOF apt-get update apt-get dist-upgrade -y @@ -94,7 +102,8 @@ EOF function build_template_from_scratch { build_sandbox_project - echo "building image from scratch..." + echo "building template from scratch..." + incus --project "$PROJECT_SANDBOX" launch "$MIAOU_IMAGE" "$TEMPLATE_SANDBOX" incus --project "$PROJECT_SANDBOX" file delete "$TEMPLATE_SANDBOX"/etc/apt/sources.list incus --project "$PROJECT_SANDBOX" file push --uid 0 --gid 0 --mode 644 --create-dirs /etc/apt/sources.list.d/debian.sources "$TEMPLATE_SANDBOX"/etc/apt/sources.list.d/debian.sources cat << EOF | incus --project "$PROJECT_SANDBOX" file push --uid 0 --gid 0 --mode 644 --create-dirs - "$TEMPLATE_SANDBOX"/etc/systemd/resolved.conf.d/10-disable-ipv4-listener.conf @@ -103,10 +112,8 @@ LLMNR=no DNSStubListener=no EOF mount_miaou_bash "$TEMPLATE_SANDBOX" "$PROJECT_SANDBOX" - - incus --project "$PROJECT_SANDBOX" create "$MIAOU_IMAGE" "$TEMPLATE_SANDBOX" refresh_template - echo "image:"$TEMPLATE_SANDBOX" from project:$PROJECT_SANDBOX built successfully!" + echo "template:"$TEMPLATE_SANDBOX" from project:$PROJECT_SANDBOX built successfully!" } function prepare_template_for_quick_creation {