split runtipictl into direct/jail implementations

This commit is contained in:
Lockszmith (@kateryna) 2025-01-16 10:58:15 -05:00
parent 9b0fac4b15
commit 75bed9a896
2 changed files with 160 additions and 6 deletions

145
_bin/rtpctl.d Executable file
View File

@ -0,0 +1,145 @@
#! /usr/bin/env bash
RPH_UID=${RPH_UID:-${UID}}
rph-docker-exec () {
docker exec $1 runtipi-host "${@:2}"
}
rph-shell() {
if rph-docker-exec "" true; then
rph-docker-exec "-it --user ${RPH_UID}" bash
fi
}
rph-exec () {
local set_x=" set -x; pwd; id; "
[ -z "$QUIET" ] || set_x=""
local cli="cd ${START_DIR:-/srv/runtipi};${set_x} ${1:?Must supply command} "
if [ -n "$ROOT_EXEC" ]; then
cli="$cli ${*:2}"
else
cli="$cli "${2:+"$(
printf '\"%s\" ' "${@:2}"
)"}
fi
if rph exec runtipi true; then
if [ -n "$ROOT_EXEC" ]; then
rph exec runtipi /bin/bash <<<"$cli"
else
rph shell --uid "${RPH_UID}" runtipi /bin/bash -c "$cli"
fi
else
echo "ERROR: ${_ERROR_MGS:-"Please check if runtipi jail has started! Have you tried 'full-start'?"}" >&2
exit -1
fi
}
runtipi-cli() {
rph-exec ./runtipi-cli "${@}"
}
runtipi-app-docker-compose() {
local APP="${1:-Must supply app name}"
local LOCAL_YML="user-config/${APP}/docker-compose.yml"
rph exec runtipi test -e "/srv/runtipi/${LOCAL_YML}" || LOCAL_YML=""
[ -z "$LOCAL_YML" ] || LOCAL_YML="--file ${LOCAL_YML}"
rph-exec docker compose \
--env-file user-config/.env.local \
--env-file app-data/${APP}/app.env \
--env-file user-config/${APP}/app.env \
--project-name ${APP} \
--file apps/${APP}/docker-compose.yml \
--file repos/29ca930bfdaffa1dfabf5726336380ede7066bc53297e3c0c868b27c97282903/apps/docker-compose.common.yml \
${LOCAL_YML} ${@:2}
}
dls() {
# Default docker ps format is:
# rph-exec docker ps --format "table {{ .ID }}\t{{ .Image }}\t{{ .Command }}\t{{ .Created }}\t{{ .Status }}\t{{ .Ports }}\t{{ .Names }}"
local base='{{.Status}}\t{{.ID}}\t{{.Names}}\t{{.Image}}' #'\t{{.Networks}}\t{{.Ports}}\t{{.Mounts}}'
local compose='{{.Label "com.docker.compose.project"}}\t{{.Label "com.docker.compose.service"}}'
local format="table $compose\t$base"
ROOT_EXEC=1 QUIET=${QUIET:-0} rph-exec \
docker "container ls --all --format '$format' | ( sed -u '1s/.*/\U&/; q'; sed -Ee 's|^|555|; s|^555runtipi|000runtipi|;' | sort | sed -Ee 's/^[[:digit:]]{3}//' )"
}
case "${1}" in
cli)
runtipi-cli "${@:2}"
;;
log)
rph-exec "POSTGRES_PASSWORD=_ TIPI_VERSION=_ LOCAL_DOMAIN=_ DOMAIN=_" docker compose --env-file user-config/.env.local logs --tail=${TAIL:-40} "${2:-runtipi}" ${3:+"${@:3}"}
;;
start)
runtipi-cli start --env-file user-config/.env.local --no-permissions
;;
update)
runtipi-cli update --env-file user-config/.env.local --no-permissions "${2:?Must supply version}" "${@:3}"
;;
full-start)
if ! rph exec runtipi true; then
rph start runtipi
sleep 1s
fi
_ERROR_MSG="ERROR: failed to invoke a command inside the runtipi jail and can't start the jail." \
runtipi-cli start --env-file user-config/.env.local --no-permissions
;;
shell)
rph-shell
;;
exec)
rph-exec "${@:2}"
;;
docker)
rph-exec docker "${@:2}"
;;
dls)
dls "${@:2}"
;;
dcoapp)
runtipi-app-docker-compose "${@:2}"
;;
dockge)
START_DIR=/srv/dockge/stacks/${2:?Must supply stack name} rph-exec docker compose "${@:3}"
;;
setup)
ln -s $2 "$(cd "$(dirname "$0")" && pwd)/$(basename "$0")" "$HOME/.local/bin/"
;;
*)
printf '%s %-12s %s\n' \
"" "" ""\
"Usage:" "" ""\
" $(basename "$0") <command> [args...]" "" ""\
"" "" "" \
"Available commands:" "" ""\
"" "" "" \
"runtipi" "" ""\
"" "cli" "runtipi-cli" \
"" "full-start" "start runtipi jail, following with starting runtipi" \
"" "log" "runtipi docker stack logs" \
"" "start" "start runtipi" \
"" "update" "update runtipi to a specific version" \
"" "" "" \
"docker/docker-compose" "" ""\
"" "dcoapp" "docker compose for runtipi apps" \
"" "dls" "stylized docker ls" \
"" "docker" "docker" \
"" "dockge" "docker compose for dockge stacks" \
"" "" "" \
"misc." "" ""\
"" "exec" "execute within the shell, START_DIR env applies" \
"" "shell" "enter an insteractive shell" \
"" "" "" \
"" "setup" "setup runtipictl in user's .local/bin dir" \
"" "" "" \
"Related env. vars:" "" "" \
"" "VISUAL EDITOR RPH_UID QUIET START_DIR ROOT_EXEC" ""
;;
esac

View File

@ -4,11 +4,14 @@ jlmkr () {
sudo VISUAL="${VISUAL:-}" EDITOR="${EDITOR:-}" $SCALE_POOL_ROOT/jailmaker/jlmkr.py "${@:---help}"
}
JAIL_UID=${JAIL_UID:-${UID}}
RPH_UID=${RPH_UID:-${UID}}
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BASE_NAME="$(basename "$0")"
BASE_BASE_NAME="${BASE_NAME%.*}"
jlmkr-shell() {
if jlmkr exec runtipi true; then
jlmkr shell --uid "${JAIL_UID}" runtipi
jlmkr shell --uid "${RPH_UID}" runtipi
fi
}
@ -28,7 +31,7 @@ jlmkr-exec () {
if [ -n "$ROOT_EXEC" ]; then
jlmkr exec runtipi /bin/bash <<<"$cli"
else
jlmkr shell --uid "${JAIL_UID}" runtipi /bin/bash -c "$cli"
jlmkr shell --uid "${RPH_UID}" runtipi /bin/bash -c "$cli"
fi
else
echo "ERROR: ${_ERROR_MGS:-"Please check if runtipi jail has started! Have you tried 'full-start'?"}" >&2
@ -108,13 +111,16 @@ case "${1}" in
START_DIR=/srv/dockge/stacks/${2:?Must supply stack name} jlmkr-exec docker compose "${@:3}"
;;
setup)
ln -s $2 "$(cd "$(dirname "$0")" && pwd)/$(basename "$0")" "$HOME/.local/bin/"
ln -s $2 "$(cd "${SCRIPT_DIR}" && pwd)/${BASE_NAME}" "${3:-$HOME/.local/bin/}"
;;
edit)
${VISUAL:-${EDITOR:-vi}} $0
;;
*)
printf '%s %-12s %s\n' \
"" "" ""\
"Usage:" "" ""\
" $(basename "$0") <command> [args...]" "" ""\
" ${BASE_NAME} <command> [args...]" "" ""\
"" "" "" \
"Available commands:" "" ""\
"" "" "" \
@ -136,9 +142,12 @@ case "${1}" in
"" "shell" "enter an insteractive shell" \
"" "" "" \
"" "setup" "setup runtipictl in user's .local/bin dir" \
"" "" "${BASE_NAME} setup" \
"" "" "${BASE_NAME} setup '' ~/.local/bin/${BASE_BASE_NAME}" \
"" "" "${BASE_NAME} setup '' ~/.local/bin/runtipictl" \
"" "" "" \
"Related env. vars:" "" "" \
"" "VISUAL EDITOR JAIL_UID QUIET START_DIR ROOT_EXEC" ""
"" "VISUAL EDITOR RPH_UID QUIET START_DIR ROOT_EXEC" ""
;;
esac