|
|
|
@ -78,7 +78,7 @@ function assign_host_zoneinfo { |
|
|
|
|
|
|
|
incus exec "${options[@]}" "$target" -- bash <<-EOF |
|
|
|
ln -fs "$host_zoneinfo" /etc/localtime |
|
|
|
dpkg-reconfigure -f noninteractive tzdata |
|
|
|
dpkg-reconfigure -f noninteractive tzdata 2>/dev/null |
|
|
|
EOF |
|
|
|
} |
|
|
|
|
|
|
|
@ -113,17 +113,25 @@ EOF |
|
|
|
echo "template refreshed at: $image_date" |
|
|
|
} |
|
|
|
|
|
|
|
function build_template_from_scratch { |
|
|
|
build_sandbox_project |
|
|
|
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 |
|
|
|
function add_feature_minimal_debian { |
|
|
|
local container="$1" |
|
|
|
local options=() |
|
|
|
[[ -v 2 ]] && options+=(--project "$2") |
|
|
|
incus "${options[@]}" file delete "$container"/etc/apt/sources.list |
|
|
|
incus "${options[@]}" file push --uid 0 --gid 0 --mode 644 --create-dirs /etc/apt/sources.list.d/debian.sources "$container"/etc/apt/sources.list.d/debian.sources |
|
|
|
cat <<EOF | incus "${options[@]}" file push --uid 0 --gid 0 --mode 644 --create-dirs - "$container"/etc/systemd/resolved.conf.d/10-disable-ipv4-listener.conf |
|
|
|
[Resolve] |
|
|
|
LLMNR=no |
|
|
|
DNSStubListener=no |
|
|
|
EOF |
|
|
|
echo "duplicate apt repository (debian.sources) from host" |
|
|
|
} |
|
|
|
|
|
|
|
function build_template_from_scratch { |
|
|
|
build_sandbox_project |
|
|
|
echo "building template from scratch..." |
|
|
|
incus --project "$PROJECT_SANDBOX" launch "$MIAOU_IMAGE" "$TEMPLATE_SANDBOX" |
|
|
|
add_feature_minimal_debian "$TEMPLATE_SANDBOX" "$PROJECT_SANDBOX" |
|
|
|
mount_miaou_bash "$TEMPLATE_SANDBOX" "$PROJECT_SANDBOX" |
|
|
|
refresh_template |
|
|
|
echo "template:$TEMPLATE_SANDBOX from project:$PROJECT_SANDBOX built successfully!" |
|
|
|
@ -132,7 +140,8 @@ EOF |
|
|
|
function prepare_template_for_quick_creation { |
|
|
|
[[ $BARE_MINIMAL == true ]] && return |
|
|
|
|
|
|
|
local image_date=$(incus list "$TEMPLATE_SANDBOX" -f compact,noheader -cl --project "$PROJECT_SANDBOX") |
|
|
|
local image_date |
|
|
|
image_date=$(incus list "$TEMPLATE_SANDBOX" -f compact,noheader -cl --project "$PROJECT_SANDBOX") |
|
|
|
if [[ -z $image_date ]]; then |
|
|
|
build_template_from_scratch |
|
|
|
else |
|
|
|
@ -159,17 +168,23 @@ function customize_host { |
|
|
|
} |
|
|
|
|
|
|
|
function assert_not_sandboxing { |
|
|
|
[[ $(incus project get-current) == "$PROJECT_SANDBOX" ]] && |
|
|
|
echo ERROR: actual sandboxing project, please switch back to your 'default' project >&2 && |
|
|
|
exit 30 || |
|
|
|
true |
|
|
|
if [[ $(incus project get-current) == "$PROJECT_SANDBOX" ]]; then |
|
|
|
>&2 echo MIAOU_INCUS_ERROR: actual sandboxing project, please switch back to your 'default' project |
|
|
|
builtin exit 30 |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
function assert_unique_name { |
|
|
|
if incus info "$CONTAINER" >/dev/null 2>&1; then |
|
|
|
>&2 echo "MIAOU_INCUS_ERROR: a container named <$CONTAINER> already exists!" |
|
|
|
builtin exit 31 |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
function create { |
|
|
|
if [[ "$BARE_MINIMAL" == true ]]; then |
|
|
|
incus launch "$MIAOU_IMAGE" "$CONTAINER" |
|
|
|
command -v ghostty >/dev/null && infocmp_xterm_ghostty "$CONTAINER" |
|
|
|
|
|
|
|
add_feature_minimal_debian "$CONTAINER" |
|
|
|
assign_host_zoneinfo "$CONTAINER" |
|
|
|
else |
|
|
|
if incus --project "$PROJECT_SANDBOX" info "$TEMPLATE_SANDBOX" | grep '^Status: RUNNING'; then |
|
|
|
@ -187,6 +202,7 @@ function create { |
|
|
|
|
|
|
|
parse_options "$@" |
|
|
|
assert_not_sandboxing |
|
|
|
assert_unique_name |
|
|
|
prepare_template_for_quick_creation |
|
|
|
create |
|
|
|
echo Success |