This commit is contained in:
Andrew Hurley 2023-05-26 17:22:20 +08:00
parent 006bfa740d
commit 4ba5ef8ec5
1 changed files with 88 additions and 42 deletions

130
podmanctl
View File

@ -1,9 +1,9 @@
#!/bin/bash #!/usr/bin/env bash
# --------------------------------------------------------- bash settings # --------------------------------------------------------- bash settings
#set -o xtrace #set -o xtrace
set -u set -u
set -e set -o pipefail
# sub ----------------------------------------------------- usage # sub ----------------------------------------------------- usage
usage () { usage () {
@ -95,50 +95,83 @@ if [[ $# -lt 1 ]]; then
exit 2 exit 2
fi 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 () { stop-pod () {
if [[ "$(systemctl is-active podman-${PODNAME}.service)" == "active" ]]; then local SERVICE="podman-${PODNAME}.service"
if systemctl list-units --full -all \ if systemd-active ${SERVICE}; then
|grep -Fq "podman-${PODNAME}.service"; then if systemd-find ${SERVICE}; then
systemctl stop podman-${PODNAME}.service || return 1 ${SYSTEMDCM} stop ${SERVICE} || error " :: Stop Service"
fi fi
else else
if podman pod exists "${PODNAME}"; then 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
fi fi
} }
# sub ----------------------------------------------------- start # sub ----------------------------------------------------- start
start-pod () { start-pod () {
if systemctl list-units --full -all \ local SERVICE="podman-${PODNAME}.service"
|grep -Fq "podman-${PODNAME}.service"; then if systemd-find ${SERVICE}; then
systemctl start podman-${PODNAME}.service || return 1 ${SYSTEMDCM} start ${SERVICE} || error " :: Start Service"
else else
printf ":: ${COMMAND} ${SERVER} - service not found!\n"; return 2 error ":: ${COMMAND} ${SERVER} - service not found!"
fi fi
} }
# sub ----------------------------------------------------- restart # sub ----------------------------------------------------- restart
restart-pod () { restart-pod () {
if systemctl list-units --full -all \ local SERVICE="podman-${PODNAME}.service"
|grep -Fq "podman-${PODNAME}.service"; then if systemd-find ${SERVICE}; then
systemctl restart podman-${PODNAME}.service || return 1 ${SYSTEMDCM} restart ${SERVICE} || error " :: Restart Service"
else else
printf ":: ${COMMAND} ${SERVER} - service not found!\n"; return 2 error ":: ${COMMAND} ${SERVER} - service not found!"
fi fi
} }
# sub ----------------------------------------------------- remove services # sub ----------------------------------------------------- remove services
remove-services () { remove-services () {
if [[ -f "${SYSTEMD}"/podman-${PODNAME}.service ]]; then local SERVICE="podman-${PODNAME}.service"
systemctl disable podman-${PODNAME}.service if [[ -f "${SYSTEMDIR}/${SERVICE}" ]]; then
${SYSTEMDCM} disable ${SERVICE} || error " :: Disable Service"
fi fi
find "${SYSTEMD}" \ find "${SYSTEMDIR}" \
-maxdepth 1 \ -maxdepth 1 \
-name "podman-${SERVER}-*.service" \ -name "podman-${SERVER}-*.service" \
-exec rm {} + -exec rm {} +
systemctl daemon-reload ${SYSTEMDCM} daemon-reload
} }
# sub ----------------------------------------------------- install services # sub ----------------------------------------------------- install services
@ -146,15 +179,15 @@ remove-services () {
# --stop-timeout=70 \ # --stop-timeout=70 \
# --restart-sec=10 \ # --restart-sec=10 \
install-services () { install-services () {
(cd "${SYSTEMD}" && \ (pushd "${SYSTEMDIR}" && \
podman generate systemd \ podman generate systemd \
--name \ --name \
--new \ --new \
--pod-prefix=podman \ --pod-prefix=podman \
--container-prefix=podman \ --container-prefix=podman \
--files ${PODNAME} \ --files ${PODNAME} && \
) && systemctl daemon-reload \ popd) && ${SYSTEMDCM} daemon-reload \
&& systemctl enable podman-${PODNAME} && ${SYSTEMDCM} enable podman-${PODNAME}
} }
# sub ----------------------------------------------------- clean # sub ----------------------------------------------------- clean
@ -165,7 +198,8 @@ clean-pod () {
# sub ----------------------------------------------------- backup volumes # sub ----------------------------------------------------- backup volumes
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 if [[ -z $VOLUMES ]]; then
printf ":: ${COMMAND} ${SERVER} - no volumes found to backup.\n" printf ":: ${COMMAND} ${SERVER} - no volumes found to backup.\n"
return return
@ -176,9 +210,11 @@ backup-volumes () {
TARGET_VOLUME="$(docker volume ls -q --filter name="^${TARGET}$")" TARGET_VOLUME="$(docker volume ls -q --filter name="^${TARGET}$")"
if [[ -z $TARGET_VOLUME ]]; then if [[ -z $TARGET_VOLUME ]]; then
if docker volume create "${TARGET}"; then if docker volume create "${TARGET}"; then
printf ":: ${COMMAND} ${SERVER} - target volume '${TARGET}' created\n" printf \
":: ${COMMAND} ${SERVER} - target volume '${TARGET}' created\n"
else 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 return 1
fi fi
fi fi
@ -191,16 +227,19 @@ backup-volumes () {
--volume "${TARGET}:/target" \ --volume "${TARGET}:/target" \
cor.cherished.me/system/helper-rsync \ cor.cherished.me/system/helper-rsync \
> /dev/null; then > /dev/null; then
printf ":: ${COMMAND} ${SERVER} - backup of ${VOLUME} successful\n" printf \
":: ${COMMAND} ${SERVER} - backup of ${VOLUME} successful\n"
else else
printf ":: ${COMMAND} ${SERVER} - error in backup of ${VOLUME}\n"; return 2 printf \
":: ${COMMAND} ${SERVER} - error in backup of ${VOLUME}\n"; return 2
fi fi
done done
} }
# sub ----------------------------------------------------- save images # sub ----------------------------------------------------- save images
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 if [[ -z $IMAGES ]]; then
printf ":: ${COMMAND} ${SERVER} - no images found\n" printf ":: ${COMMAND} ${SERVER} - no images found\n"
return return
@ -224,7 +263,8 @@ save-images () {
# --------------------------------------------------------- save backup volumes # --------------------------------------------------------- save backup volumes
save-backups () { 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 if [[ -z $VOLUMES ]]; then
printf ":: ${COMMAND} ${SERVER} - no volumes found.\n" printf ":: ${COMMAND} ${SERVER} - no volumes found.\n"
return 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 # --------------------------------------------------------- system top
SYSTEMT="$(realpath ~/Server)" SYSTEMT="$(realpath $HOME/Server)"
if [[ ! -d "${SYSTEMT}" ]]; then [ -d $SYSTEMT ] || error "$HOME/Server directory missing\n"
printf "Error: ~/Server directory missing\n"
exit 1
fi
# --------------------------------------------------------- system runtime # --------------------------------------------------------- system runtime
RUNTDIR="${SYSTEMT}/podman" RUNTDIR="${SYSTEMT}/podman"
@ -277,7 +325,6 @@ CERTDIR="${SYSTEMT}/.certs"
BUILDIR="${SYSTEMT}/builds" BUILDIR="${SYSTEMT}/builds"
# --------------------------------------------------------- other dirs # --------------------------------------------------------- other dirs
SYSTEMD="/etc/systemd/system"
REPADDR="cor.cherished.me/cherished.me" REPADDR="cor.cherished.me/cherished.me"
# --------------------------------------------------------- dir checks # --------------------------------------------------------- dir checks
@ -330,7 +377,8 @@ for SERVER in $*; do
(ps) (ps)
# --------------------------------------------------------- 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) (create|run)
@ -377,9 +425,7 @@ for SERVER in $*; do
install-services install-services
# --------------------------------------------------------- run services # --------------------------------------------------------- run services
if [[ $COMMAND = "run" ]]; then [[ $COMMAND = "run" ]] && $SYSTEMDCM start podman-${PODNAME}
systemctl start podman-${PODNAME}
fi
printf ":: ${COMMAND} ${SERVER} - success\n" printf ":: ${COMMAND} ${SERVER} - success\n"
;; ;;