diff --git a/ctl b/ctl new file mode 100755 index 0000000..49b265d --- /dev/null +++ b/ctl @@ -0,0 +1,51 @@ +#!/bin/bash +# vi: set tabstop=4 shiftwidth=4 expandtab : +ROOTDIR=$(cd "$(dirname "$0")" && pwd) +cd $ROOTDIR +declare -A MAP_COMMAND + +# === Log ==================================================================== # +CW="\033[1;37m" # White +CG="\033[0;32m" # Green +CY="\033[0;33m" # Yellow +NC="\033[0m" # Reset + +function log { + local II="${CW}╡${CG}ctl${CW}╞${NC}" + echo -e "${II} $@" +} + +log "${CY}Container Control Script ${CG}b20220114-0500${NC}" + +# === Import ================================================================= # +for V in $(ls $ROOTDIR/ctl.d/*.sh) +do + . $V +done + +# === Main =================================================================== # +function main { + local args=($@) + local command=${args[0]} + + if [[ -n $command ]] + then + for cmd in $(echo "${!MAP_COMMAND[@]}") + do + if [ $command = $cmd ] + then + ${MAP_COMMAND[$cmd]} ${args[@]:1} + return + fi + done + fi + + print_help +} + +function print_help { + local vvv=$(echo "${!MAP_COMMAND[@]}" | tr ' ' "\n" | sort | tr "\n" ',' | sed 's/,/, /g') + log "Use: ${vvv:: -2}" +} + +main $@ diff --git a/ctl.d/10-module-container.sh b/ctl.d/10-module-container.sh new file mode 100644 index 0000000..498bcb7 --- /dev/null +++ b/ctl.d/10-module-container.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# vi: set tabstop=4 shiftwidth=4 expandtab : + +declare -A M_CONTAINER + +M_CONTAINER['name']='' +M_CONTAINER['title']='(NULL)' +M_CONTAINER['shell']=sh +M_CONTAINER['upd-sig']=HUP + +# +# Статус работы контейнера +# +MAP_COMMAND['status']=fn_container_status +function fn_container_status { + if [ $(fn_container_check) = 1 ] + then + log "${M_CONTAINERP['title']} running" + podman logs --tail 5 ${M_CONTAINER['name']} + elif [ $(fn_container_check2) = 1 ] + then + log "${M_CONTAINER['title']} container down" + else + log "${M_CONTAINER['title']} not running" + fi +} + +# +# Остановка контейнера +# +MAP_COMMAND['stop']=fn_container_stop +function fn_container_stop { + if [ $(fn_container_check) = 1 ] + then + log "Stop ${M_CONTAINER['title']} container..." + podman stop ${M_CONTAINER['name']} + fi + + if [ $(fn_container_check2) = 1 ] + then + log "Remove ${M_CONTAINER['title']} container..." + local container_id=$(podman rm ${M_CONTAINER['name']}) + log $conainer_id + # TODO здесь необходимо выполнить проверку на + # - включен ли модуль network + # - остались ли после удаления контейнера сетевые файлы + # - Если да, то запустить процесс зачистки... + # - ...файлов + # - ...nftables + # - Если нет, просто завершить работу + else + log "${M_CONTAINER['title']} not runned." + fi +} + +# +# Перезапуск контейнера +# +MAP_COMMAND['restart']=fn_container_restart +function fn_container_restart { + fn_container_stop && fn_container_start +} + +# +# Логи контейнера +# +MAP_COMMAND['logs']=fn_container_logs +function fn_logs { + if [ $(fn_container_check2) = 1 ] + then + podman logs --tail 10 -f ${M_CONTAINER['name']} + else + log "${M_CONTAINER['title']} not exists" + fi +} + +# +# Войти в shell контейнера +# +MAP_COMMAND['shell']=fn_container_shell +function fn_container_shell { + if [ $(fn_container_check) = 1 ] + then + log "Enter shell in ${M_CONTAINER['title']} container..." + podman exec -it ${M_CONTAINER['name']} ${M_CONTAINER['shell']} + else + log "${M_CONTAINER['title']} not runned." + fi +} + +# +# Послать сигнал обновления конфигов. +# Предназначено для запущенный в контейнере программ. +# +MAP_COMMAND['update']=fn_container_update_config +function fn_container_update_config { + if [ $(fn_container_check) = 1 ] + then + log "Update config ${M_CONTAINER['title']}..." + podman kill --signal=${M_CONTAINER['upd-sig']} ${M_CONTAINER['name']} + else + log "${M_CONTAINER['title']} not runned." + fi +} + +# +# Статус работы контейнера +# +function fn_container_check { + if [[ -n $(podman ps --filter "name=${M_CONTAINER['name']}" -q) ]] + then + echo 1 + else + echo 0 + fi +} + +# +# Статус существования контейнера +# +function fn_container_check2 { + if [[ -n $(podman ps --filter "name=${M_CONTAINER['name']}" -qa) ]] + then + echo 1 + else + echo 0 + fi +} + diff --git a/ctl.d/11-pma.sh b/ctl.d/11-pma.sh new file mode 100644 index 0000000..c44a103 --- /dev/null +++ b/ctl.d/11-pma.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# vi: set tabstop=4 shiftwidth=4 expandtab : + +M_CONTAINER['name']='tools--phpmyadmin' +M_CONTAINER['title']='phpMyAdmin' +M_CONTAINER['host']=0.0.0.0 +M_CONTAINER['port']=9091 + +MAP_COMMAND['start']=fn_container_start +function fn_container_start { + if [ $(fn_container_check) = 1 ] + then + log "${M_CONTAINER['title']} is runned." + elif [ $(fn_container_check2) = 1 ] + then + log "${M_CONTAINER['title']} container is down. Need restart." + else + log "Start ${M_CONTAINER['title']} container..." + local container_id=$(podman run -d \ + --name "${M_CONTAINER['name']}" \ + --volume /etc/timezone:/etc/timezone:ro \ + --volume /etc/localtime:/etc/localtime:ro \ + --publish "${M_CONTAINER['host']}:${M_CONTAINER['port']}:8080" \ + --env 'PMA_ARBITRARY=1' \ + phpmyadmin:5.1.1-apache + ) + log $conainer_id + fi +} + diff --git a/ctl.d/21-pma-backup.sh b/ctl.d/21-pma-backup.sh new file mode 100644 index 0000000..af05c97 --- /dev/null +++ b/ctl.d/21-pma-backup.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# vi: set tabstop=4 shiftwidth=4 expandtab : + +MAP_COMMAND['backup']=fn_backup +function fn_backup { + local basename=$(basename "$(cd "$(dirname "$0")" && pwd)") + local archive=${basename}-$(date +%Y%m%d) + + log 'Backup...' + tar -cf - -- \ + ctrl.d/ \ + ctl \ + | 7z a -bso0 -si ${archive}.tar.7z + log "$(du -sh ${archive}.tar.7z)" +} diff --git a/ctrl.sh b/ctrl.sh deleted file mode 100755 index 151458f..0000000 --- a/ctrl.sh +++ /dev/null @@ -1,143 +0,0 @@ -#!/bin/bash -# vi: set tabstop=4 shiftwidth=4 expandtab : -ROOTDIR=$(cd "$(dirname "$0")" && pwd) -cd $ROOTDIR - -# \ -# == Constants ============================================================== # -# / -DKRNAME=tools--phpmyadmin -NAME=phpMyAdmin - -# \ -# == Colors ================================================================= # -# / -CW="\033[1;37m" -CG="\033[0;32m" -CY="\033[0;33m" -NC="\033[0m" -II="${CW}╡${CG}ctrl${CW}╞${NC}" - -echo -e "${II} ${CY}Container CTRL Script ${CG}b20211219-0247${NC}" - -# \ -# == Function =============================================================== # -# / -function main { - case "$1" in - 'start') fn_start ;; - 'stop') fn_stop ;; - 'restart') fn_stop && fn_start ;; - 'logs') fn_logs ;; - 'shell') fn_shell ;; - 'backup') fn_backup ;; - 'update') fn_update_config ;; - *) echo -e "${II} Use: start, stop, restart, logs, shell, backup, update" ;; - esac -} - -# \ -# == Fun:Container ========================================================== # -# / -function fn_start { - if [ $(fn_container_check) = 1 ] - then - echo -e "${II} $NAME is runned." - elif [ $(fn_container_check2) = 1 ] - then - echo -e "${II} $NAME container is down. Need restart." - else - echo -e "${II} Start $NAME container..." - local CONTAINER_ID=$(podman run -d \ - --name "$DKRNAME" \ - --memory '512M' \ - --volume /etc/timezone:/etc/timezone:ro \ - --volume /etc/localtime:/etc/localtime:ro \ - --publish "0.0.0.0:9091:80" \ - --env 'PMA_ARBITRARY=1' \ - phpmyadmin:5.1.1-apache - ) - echo $CONTAINER_ID - fi -} - -function fn_stop { - if [ $(fn_container_check) = 1 ] - then - echo -e "${II} Stop $NAME container..." - podman stop $DKRNAME - fi - - - if [ $(fn_container_check2) = 1 ] - then - echo -e "${II} Remove $NAME container..." - local CONTAINER_ID=$(podman rm $DKRNAME) - echo $CONTAINER_ID - else - echo -e "${II} $NAME not runned." - fi -} - -function fn_logs { - if [ $(fn_container_check2) = 1 ] - then - podman logs --tail 10 -f $DKRNAME - else - echo -e "${II} $NAME not exists." - fi -} - -function fn_shell { - if [ $(fn_container_check) = 1 ] - then - echo -e "${II} Enter shell in $NAME container..." - podman exec -it $DKRNAME sh - else - echo -e "${II} $NAME not runned." - fi -} - -function fn_update_config { - if [ $(fn_container_check) = 1 ] - then - echo -e "${II} Update config $NAME..." - podman kill --signal=HUP $DKRNAME - else - echo -e "${II} $NAME not runned." - fi -} - -function fn_container_check { - if [[ -n $(podman ps --filter "name=$DKRNAME" -q) ]] - then - echo 1 - else - echo 0 - fi -} - -function fn_container_check2 { - if [[ -n $(podman ps --filter "name=$DKRNAME" -qa) ]] - then - echo 1 - else - echo 0 - fi -} - -# \ -# == Other ================================================================== # -# / -function fn_backup { - BASENAME=$(basename "$(cd "$(dirname "$0")" && pwd)") - ARCHIVE=$BASENAME-$(date +%Y%m%d) - - echo -e "${II} Backup..." - tar -cf - -- \ - *.sh \ - | 7z a -bso0 -si $ARCHIVE.tar.7z - echo -e "${II} $(du -sh $ARCHIVE.tar.7z)" -} - -main $@