From 66f2cf9cac7e50d328650e59e15f70e24cb59729 Mon Sep 17 00:00:00 2001 From: pvincent Date: Wed, 26 Nov 2025 11:56:53 +0400 Subject: [PATCH] miaou-login --- tools/miaou-create | 54 ++++++++++++++++++++-------------------- tools/miaou-login | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 27 deletions(-) create mode 100755 tools/miaou-login diff --git a/tools/miaou-create b/tools/miaou-create index 771d01f..b209af7 100755 --- a/tools/miaou-create +++ b/tools/miaou-create @@ -8,43 +8,45 @@ CONTAINER='' # FUNCTIONS -function usage { +function usage { echo "$(basename "$0") " } - function parse_options { - while [[ $# -gt 0 ]]; do - case "$1" in - --help | -h) - usage && exit 0 - ;; - *) - if [[ -z $CONTAINER ]]; then - CONTAINER=$1 - else - echo >&2 "Unknown option: $1" && usage && exit 2 - fi - ;; - esac + while [[ $# -gt 0 ]]; do + case "$1" in + --help | -h) + usage && exit 0 + ;; + *) + if [[ -z $CONTAINER ]]; then + CONTAINER=$1 + else + echo >&2 "Unknown option: $1" && usage && exit 2 + fi + ;; + esac + + shift 1 # Move to the next argument + done + [[ -n $CONTAINER ]] || (usage && exit 1) - shift 1 # Move to the next argument - done - [[ -n $CONTAINER ]] || ( usage && exit 1 ) - } function before_start { # cold changes - incus config device add $CONTAINER MIAOU-BASH disk source=/opt/miaou-bash path=/opt/miaou-bash readonly=true | grep -q 'Device MIAOU-BASH added' - incus config set $CONTAINER environment.PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/miaou-bash/tools - cat <&2 "Warn: variable MIAOU_BASH_DIR missing!" + fi + cat << EOF | incus 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 - } function after_start { @@ -53,7 +55,7 @@ function after_start { local domain=$(incus network get incusbr0 dns.domain) domain=${domain:-incus} - cat < [--user|-u USER]" +} + +function parse_options { + while [[ $# -gt 0 ]]; do + case "$1" in + --help | -h) + usage && exit 0 + ;; + --user | -u) + shift 1 + [[ -z ${1:-} ]] && >&2 echo 'ERROR: user expected!' && usage && exit 5 + USER="$1" + ;; + *) + if [[ -z $CONTAINER ]]; then + CONTAINER=$1 + else + echo >&2 "Unknown option: $1" && usage && exit 2 + fi + ;; + esac + + shift 1 # Move to the next argument + done + [[ -n $CONTAINER ]] || (usage && exit 1) +} + +function incus_su { + incus exec "$CONTAINER" -- su - $1 +} + +function incus_user_exists { + incus exec "$CONTAINER" -- id $1 &> /dev/null +} + +function login { + if [[ -n $USER ]]; then + incus_su $USER + else + local current=$(whoami) + incus_user_exists $current && incus_su $current || incus_su root + fi +} + +# MAIN + +set -Eue +parse_options $* +login