From 4ba5ef8ec52156f670f0b4759bf7d33b7be578c3 Mon Sep 17 00:00:00 2001 From: Andrew Hurley Date: Fri, 26 May 2023 17:22:20 +0800 Subject: [PATCH] Tenth --- podmanctl | 130 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 88 insertions(+), 42 deletions(-) diff --git a/podmanctl b/podmanctl index cfc8a4c..401cdf1 100755 --- a/podmanctl +++ b/podmanctl @@ -1,9 +1,9 @@ -#!/bin/bash +#!/usr/bin/env bash # --------------------------------------------------------- bash settings #set -o xtrace set -u -set -e +set -o pipefail # sub ----------------------------------------------------- usage usage () { @@ -95,50 +95,83 @@ if [[ $# -lt 1 ]]; then exit 2 fi -# sub ----------------------------------------------------- stop +# sub ----------------------------------------------------- error +error () { + printf "${1}\n" + exit 1 +} + +# sub ----------------------------------------------------- error - usage +erroru () { + printf "${1}\n" + exit 1 +} + +# sub ----------------------------------------------------- systemd - find +systemd-find () { + local SERVICE="$(${SYSTEMDCM} list-unit-files --all |grep -F "${1}")" + if [[ "x$SERVICE" =~ "x$1" ]]; then + return 0 + else + return 1 + fi +} + +systemd-active () { + local ACTIVE="$(${SYSTEMDCM} is-active "${1}")" + if [[ $ACTIVE == "active" ]]; then + return 0 + else + return 1 + fi +} + +# +sub ----------------------------------------------------- stop stop-pod () { - if [[ "$(systemctl is-active podman-${PODNAME}.service)" == "active" ]]; then - if systemctl list-units --full -all \ - |grep -Fq "podman-${PODNAME}.service"; then - systemctl stop podman-${PODNAME}.service || return 1 + local SERVICE="podman-${PODNAME}.service" + if systemd-active ${SERVICE}; then + if systemd-find ${SERVICE}; then + ${SYSTEMDCM} stop ${SERVICE} || error " :: Stop Service" fi else if podman pod exists "${PODNAME}"; then - podman pod stop -t 70 "${PODNAME}" || return 2 + podman pod stop -t 70 "${PODNAME}" || error " :: Stop Pod" fi fi } # sub ----------------------------------------------------- start start-pod () { - if systemctl list-units --full -all \ - |grep -Fq "podman-${PODNAME}.service"; then - systemctl start podman-${PODNAME}.service || return 1 + local SERVICE="podman-${PODNAME}.service" + if systemd-find ${SERVICE}; then + ${SYSTEMDCM} start ${SERVICE} || error " :: Start Service" else - printf ":: ${COMMAND} ${SERVER} - service not found!\n"; return 2 + error ":: ${COMMAND} ${SERVER} - service not found!" fi } # sub ----------------------------------------------------- restart restart-pod () { - if systemctl list-units --full -all \ - |grep -Fq "podman-${PODNAME}.service"; then - systemctl restart podman-${PODNAME}.service || return 1 + local SERVICE="podman-${PODNAME}.service" + if systemd-find ${SERVICE}; then + ${SYSTEMDCM} restart ${SERVICE} || error " :: Restart Service" else - printf ":: ${COMMAND} ${SERVER} - service not found!\n"; return 2 + error ":: ${COMMAND} ${SERVER} - service not found!" fi } # sub ----------------------------------------------------- remove services remove-services () { - if [[ -f "${SYSTEMD}"/podman-${PODNAME}.service ]]; then - systemctl disable podman-${PODNAME}.service + local SERVICE="podman-${PODNAME}.service" + if [[ -f "${SYSTEMDIR}/${SERVICE}" ]]; then + ${SYSTEMDCM} disable ${SERVICE} || error " :: Disable Service" fi - find "${SYSTEMD}" \ + find "${SYSTEMDIR}" \ -maxdepth 1 \ -name "podman-${SERVER}-*.service" \ -exec rm {} + - systemctl daemon-reload + ${SYSTEMDCM} daemon-reload } # sub ----------------------------------------------------- install services @@ -146,15 +179,15 @@ remove-services () { # --stop-timeout=70 \ # --restart-sec=10 \ install-services () { - (cd "${SYSTEMD}" && \ + (pushd "${SYSTEMDIR}" && \ podman generate systemd \ --name \ --new \ --pod-prefix=podman \ --container-prefix=podman \ - --files ${PODNAME} \ - ) && systemctl daemon-reload \ - && systemctl enable podman-${PODNAME} + --files ${PODNAME} && \ + popd) && ${SYSTEMDCM} daemon-reload \ + && ${SYSTEMDCM} enable podman-${PODNAME} } # sub ----------------------------------------------------- clean @@ -165,7 +198,8 @@ clean-pod () { # sub ----------------------------------------------------- backup volumes backup-volumes () { - VOLUMES="$(podman volume ls --format='{{.Name}}' |grep -v ".backup" |grep "${SERVER}")" + VOLUMES="$(podman volume ls --format='{{.Name}}' \ + |grep -v ".backup" |grep "${SERVER}")" if [[ -z $VOLUMES ]]; then printf ":: ${COMMAND} ${SERVER} - no volumes found to backup.\n" return @@ -176,9 +210,11 @@ backup-volumes () { TARGET_VOLUME="$(docker volume ls -q --filter name="^${TARGET}$")" if [[ -z $TARGET_VOLUME ]]; then if docker volume create "${TARGET}"; then - printf ":: ${COMMAND} ${SERVER} - target volume '${TARGET}' created\n" + printf \ + ":: ${COMMAND} ${SERVER} - target volume '${TARGET}' created\n" else - printf ":: ${COMMAND} ${SERVER} - target volume ${TARGET} could not be created\n" + printf \ + ":: ${COMMAND} ${SERVER} - target volume ${TARGET} could not be created\n" return 1 fi fi @@ -191,16 +227,19 @@ backup-volumes () { --volume "${TARGET}:/target" \ cor.cherished.me/system/helper-rsync \ > /dev/null; then - printf ":: ${COMMAND} ${SERVER} - backup of ${VOLUME} successful\n" + printf \ + ":: ${COMMAND} ${SERVER} - backup of ${VOLUME} successful\n" else - printf ":: ${COMMAND} ${SERVER} - error in backup of ${VOLUME}\n"; return 2 + printf \ + ":: ${COMMAND} ${SERVER} - error in backup of ${VOLUME}\n"; return 2 fi done } # sub ----------------------------------------------------- save images save-images () { - IMAGES="$(podman image ls --format="{{.Repository}}" |grep -v "docker.io" |grep "${SERVER}")" + IMAGES="$(podman image ls --format="{{.Repository}}" \ + |grep -v "docker.io" |grep "${SERVER}")" if [[ -z $IMAGES ]]; then printf ":: ${COMMAND} ${SERVER} - no images found\n" return @@ -224,7 +263,8 @@ save-images () { # --------------------------------------------------------- save backup volumes save-backups () { - VOLUMES="$(podman volume ls --format='{{.Name}}' |grep ".backup" |grep "${SERVER}")" + VOLUMES="$(podman volume ls --format='{{.Name}}' \ + |grep ".backup" |grep "${SERVER}")" if [[ -z $VOLUMES ]]; then printf ":: ${COMMAND} ${SERVER} - no volumes found.\n" return @@ -253,15 +293,23 @@ save-backups () { - +# --------------------------------------------------------- system user +if [ "x$(id -u)x" = "x0x" ]; then + ROOT="true" + SYSTEMDIR="/etc/systemd/system" + SYSTEMDCM="systemctl" + [ -d $SYSTEMDIR ] || error "Missing /etc/systemd/system." +else + ROOT="false" + SYSTEMDIR="$HOME/.config/systemd/user" + SYSTEMDCM="systemctl --user" + mkdir -p "${SYSTEMDIR}" || error "Cannot create user systemd." +fi # --------------------------------------------------------- system top -SYSTEMT="$(realpath ~/Server)" -if [[ ! -d "${SYSTEMT}" ]]; then - printf "Error: ~/Server directory missing\n" - exit 1 -fi +SYSTEMT="$(realpath $HOME/Server)" +[ -d $SYSTEMT ] || error "$HOME/Server directory missing\n" # --------------------------------------------------------- system runtime RUNTDIR="${SYSTEMT}/podman" @@ -277,7 +325,6 @@ CERTDIR="${SYSTEMT}/.certs" BUILDIR="${SYSTEMT}/builds" # --------------------------------------------------------- other dirs -SYSTEMD="/etc/systemd/system" REPADDR="cor.cherished.me/cherished.me" # --------------------------------------------------------- dir checks @@ -330,7 +377,8 @@ for SERVER in $*; do (ps) # --------------------------------------------------------- ps - podman ps -a --filter "pod=${PODNAME}" --format '{{.Names}}\t\t{{.Image}}\t\t{{.ExitCode}}\t\t{{.Status}}' + podman ps -a --filter "pod=${PODNAME}" \ + --format '{{.Names}}\t\t{{.Image}}\t\t{{.ExitCode}}\t\t{{.Status}}' ;; (create|run) @@ -377,9 +425,7 @@ for SERVER in $*; do install-services # --------------------------------------------------------- run services - if [[ $COMMAND = "run" ]]; then - systemctl start podman-${PODNAME} - fi + [[ $COMMAND = "run" ]] && $SYSTEMDCM start podman-${PODNAME} printf ":: ${COMMAND} ${SERVER} - success\n" ;;