#! /usr/bin/env bash jlmkr () { sudo VISUAL="${VISUAL:-}" EDITOR="${EDITOR:-}" $SCALE_POOL_ROOT/jailmaker/jlmkr.py "${@:---help}" } JAIL_UID=${JAIL_UID:-${UID}} jlmkr-shell() { if jlmkr exec runtipi true; then jlmkr shell --uid "${JAIL_UID}" runtipi fi } jlmkr-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 jlmkr exec runtipi true; then if [ -n "$ROOT_EXEC" ]; then jlmkr exec runtipi /bin/bash <<<"$cli" else jlmkr shell --uid "${JAIL_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() { jlmkr-exec ./runtipi-cli "${@}" } runtipi-app-docker-compose() { local APP="${1:-Must supply app name}" local LOCAL_YML="user-config/${APP}/docker-compose.yml" jlmkr exec runtipi test -e "/srv/runtipi/${LOCAL_YML}" || LOCAL_YML="" [ -z "$LOCAL_YML" ] || LOCAL_YML="--file ${LOCAL_YML}" jlmkr-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: # jlmkr-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} jlmkr-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) jlmkr-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 ! jlmkr exec runtipi true; then jlmkr 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) jlmkr-shell ;; exec) jlmkr-exec "${@:2}" ;; docker) jlmkr-exec docker "${@:2}" ;; dls) dls "${@:2}" ;; dcoapp) runtipi-app-docker-compose "${@:2}" ;; dockge) 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/" ;; *) printf '%s %-12s %s\n' \ "" "" ""\ "Usage:" "" ""\ " $(basename "$0") [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" ;; esac