Browse Source

better miaou-create

main
pvincent 4 days ago
parent
commit
119d8750a0
  1. 46
      tools/miaou-create

46
tools/miaou-create

@ -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
Loading…
Cancel
Save