From c28eebfbc07b1cdcdd56047995b1853237c90212 Mon Sep 17 00:00:00 2001 From: m8in Date: Wed, 26 Nov 2025 11:27:23 +0100 Subject: [PATCH] cleanup --- script/host/nginx/update_nginx_conf.sh | 375 ------------------ script/host/zfs/snapshot/snapshot-cleanup.sh | 33 -- script/host/zfs/snapshot/snapshot-minutly.sh | 13 - script/host/zfs/snapshot/snapshot.sh | 57 --- script/host/zfs/sync/synccontainer-all.sh | 27 -- script/host/zfs/sync/synccontainer-check.sh | 30 -- .../host/zfs/sync/synccontainer-receiver.sh | 64 --- script/host/zfs/sync/synccontainer-sender.sh | 53 --- script/host/zfs/sync/synccontainer.sh | 23 -- 9 files changed, 675 deletions(-) delete mode 100644 script/host/nginx/update_nginx_conf.sh delete mode 100644 script/host/zfs/snapshot/snapshot-cleanup.sh delete mode 100644 script/host/zfs/snapshot/snapshot-minutly.sh delete mode 100644 script/host/zfs/snapshot/snapshot.sh delete mode 100644 script/host/zfs/sync/synccontainer-all.sh delete mode 100644 script/host/zfs/sync/synccontainer-check.sh delete mode 100644 script/host/zfs/sync/synccontainer-receiver.sh delete mode 100644 script/host/zfs/sync/synccontainer-sender.sh delete mode 100644 script/host/zfs/sync/synccontainer.sh diff --git a/script/host/nginx/update_nginx_conf.sh b/script/host/nginx/update_nginx_conf.sh deleted file mode 100644 index cce908c..0000000 --- a/script/host/nginx/update_nginx_conf.sh +++ /dev/null @@ -1,375 +0,0 @@ -#!/bin/bash -NGINX_DIR="/etc/nginx" -HOSTNAME=$(hostname) - -if [ ! -d "$NGINX_DIR" ]; then - exit -fi -rm $NGINX_DIR/site-*/* -TEMP_HOST_FILE=`mktemp` -cp /etc/hosts $TEMP_HOST_FILE -INDENT=4 - -function appendProxyServerBlock() { - INDENT=$((INDENT+4)) - local DOMAIN - local PORT - local INCLUDE_DOMAIN - local SSL - local FILE - DOMAIN=$1 - PORT=$2 - INCLUDE_DOMAIN=$3 - FILE=$4 - if [[ "$5" == "ssl" ]]; then - SSL=" ssl" - fi - - if [[ -z "$DOMAIN" || -z "$INCLUDE_DOMAIN" ]]; then - return - fi - echo "$(echo "" | pr -to $INDENT)append proxy server block: '${DOMAIN}'${SSL}" - cat >> "$FILE" << EOF -server { - listen ${PORT}${SSL}; - - server_name ${DOMAIN}; -EOF - - if [[ ! -z "$SSL" ]]; then - cat >> "$FILE" << EOF - - ssl_certificate /etc/nginx/ssl/${DOMAIN}/server.crt; - ssl_certificate_key /etc/nginx/ssl/${DOMAIN}/server.key; - - add_header Strict-Transport-Security max-age=15552000; -EOF - else - cat >> "$FILE" << EOF - server_name www.${DOMAIN}; -EOF - fi - - cat >> "$FILE" << EOF - root /var/www; - - proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; - proxy_set_header Host \$http_host; - proxy_set_header X-Forwarded-Proto \$scheme; - proxy_set_header X-Real-IP \$remote_addr; - - # WebSocket support - proxy_http_version 1.1; - proxy_set_header Upgrade \$http_upgrade; - proxy_set_header Connection \$connection_upgrade; - - proxy_redirect off; - location /.well-known/acme-challenge { - root /tmp/acme; - } - - include /etc/nginx/site-${INCLUDE_DOMAIN}/*; -} -EOF - INDENT=$((INDENT-4)) -} - -function appendProxy() { - INDENT=$((INDENT+4)) - local DOMAIN - local INCLUDE_DOMAIN - local FILE - DOMAIN=$1 - INCLUDE_DOMAIN=$2 - FILE="$NGINX_DIR/sites-enabled/${DOMAIN}" - - - if [[ -z "$TARGET_PUBLIC_PORT" ]]; then - TARGET_PUBLIC_PORT=80 - fi - - if [[ -z "$TARGET_PUBLIC_PORT_SSL" ]]; then - TARGET_PUBLIC_PORT_SSL=443 - fi - - echo "$(echo "" | pr -to $INDENT)creating proxy for domain ${DOMAIN}" - #VHost-Datei leeren - printf "" > "$FILE" - - #Proxy mit ssl (redirect HTTP -> HTTPS) - if [ -f "$NGINX_DIR/ssl/${DOMAIN}/server.crt" ]; then - - if [ -f "$NGINX_DIR/ssl/${DOMAIN}/allow_http" ]; then - appendProxyServerBlock "${DOMAIN}" "${TARGET_PUBLIC_PORT}" "${INCLUDE_DOMAIN}" "$FILE" - else - cat >> "${FILE}" << EOF -server { - listen ${TARGET_PUBLIC_PORT}; - server_name ${DOMAIN}; - server_name www.${DOMAIN}; - location /.well-known/acme-challenge { - root /tmp/acme; - } - root /var/www; - ${CUSTOM_NGINX_HTTP_CONFIG} - - add_header Strict-Transport-Security max-age=15552000; - location / { - return 301 https://${DOMAIN}:${TARGET_PUBLIC_PORT_SSL}\$request_uri; - } -} -EOF - fi - appendProxyServerBlock "${DOMAIN}" "${TARGET_PUBLIC_PORT_SSL}" "${INCLUDE_DOMAIN}" "$FILE" "ssl" - - # Proxy ohne ssl - else - appendProxyServerBlock "${DOMAIN}" "${TARGET_PUBLIC_PORT}" "${INCLUDE_DOMAIN}" "$FILE" - fi - INDENT=$((INDENT-4)) -} - -function configureProxyForTargetDomain() { - INDENT=$((INDENT+4)) - local DOMAIN=$1 - - echo "$(echo "" | pr -to $INDENT)configure proxy for domain $DOMAIN" - appendProxy "${DOMAIN}" "${DOMAIN}" - - # Proxy für Domain mit www Präfix - if [ -f "$NGINX_DIR/ssl/www.${DOMAIN}/server.crt" ]; then - FILE="$NGINX_DIR/sites-enabled/www.${DOMAIN}" - printf "" > "$FILE" - appendProxyServerBlock "www.${DOMAIN}" "${TARGET_PUBLIC_PORT_SSL}" "${DOMAIN}" "$FILE" "ssl" - fi - - mkdir -p "$NGINX_DIR/site-${DOMAIN}" - if [[ -z "$PROXY_CONTEXTS" ]]; then - if [[ -z "$CONTAINER_HTTPS_PORT" ]]; then - cat >> $NGINX_DIR/site-${DOMAIN}/${TARGET_CONTAINER} << EOF - location / { - proxy_pass http://${CONTAINER_IP}:${CONTAINER_HTTP_PORT}; - } -EOF - else - cat >> $NGINX_DIR/site-${DOMAIN}/${TARGET_CONTAINER} << EOF - location / { - proxy_pass https://${CONTAINER_IP}:${CONTAINER_HTTPS_PORT}; - } -EOF - fi - else - if [[ ! -z "$ROOT_REDIRECT" ]]; then - cat >> $NGINX_DIR/site-${DOMAIN}/${TARGET_CONTAINER} << EOF - location = / { - return 302 \$scheme://${DOMAIN}/${ROOT_REDIRECT}; - } -EOF - fi - for PROXY_CONTEXT in $PROXY_CONTEXTS; do - if [[ -z "$CONTAINER_HTTPS_PORT" ]]; then - cat >> $NGINX_DIR/site-${DOMAIN}/${TARGET_CONTAINER} << EOF - location /${PROXY_CONTEXT} { - proxy_pass http://${CONTAINER_IP}:${CONTAINER_HTTP_PORT}/${PROXY_CONTEXT}; - } -EOF - else - cat >> $NGINX_DIR/site-${DOMAIN}/${TARGET_CONTAINER} << EOF - location /${PROXY_CONTEXT} { - proxy_pass https://${CONTAINER_IP}:${CONTAINER_HTTPS_PORT}/${PROXY_CONTEXT}; - } -EOF - fi - done; - fi - - - CONTAINER_CONFIG_DIR="/invra/state/$(cat /invra/hostowner)/containers" - for FWD in $PROXY_FORWARDS; do - SOURCE_PATH="`echo $FWD | cut -d: -f1`" - TARGET_URL="`echo $FWD | cut -d: -s -f2-`" - CONTINUE=0 - - # Prüfen ob Proxy bereits durch neues Schema im invra/state angelegt wurde - while read PROXY_FILE; do - CUR_HOST_FILE="$(dirname "$(dirname "$PROXY_FILE")")/current-host" - CUR_HOST=$(cat $CUR_HOST_FILE) - if [[ -f "$CUR_HOST_FILE" && ( "$CUR_HOST" != "$HOSTNAME" || "$DOMAIN" != "$HOSTNAME" ) ]]; then - CONTINUE=1 - break - fi - #Process Substitution nutzen, damit CONTINUE-Variable die Schleife überlebt - done < <(grep -lER "^/?${SOURCE_PATH}/?$" ${CONTAINER_CONFIG_DIR}/*/httpproxy/${DOMAIN} 2> /dev/null) - - if [ $CONTINUE -eq 1 ]; then - continue - fi - echo "$(echo "" | pr -to $INDENT)create proxy for context-path '${SOURCE_PATH}' to URL '${TARGET_URL}'" - cat >> $NGINX_DIR/site-${DOMAIN}/${TARGET_CONTAINER} << EOF - location /${SOURCE_PATH} { - proxy_pass ${TARGET_URL}; - } -EOF - - done - INDENT=$((INDENT-4)) -} - -function getVar() { - local _VAR_NAME=$1 - local _CONF_FILE=$2 - local _RESULT - _RESULT=$(grep -E "^${_VAR_NAME}=" "${_CONF_FILE}" | grep -oE "[^=]+$") - _CLEAN_RESULT=$(echo "$_RESULT" | sed -E 's/[()"]//g') - GET_VAR_RESULT=$_CLEAN_RESULT -} - -echo "creating proxy forwards..." -TARGET_PUBLIC_PORT="" -TARGET_PUBLIC_PORT_SSL="" -for CONTAINER in /invra/state/$(cat /invra/hostowner)/containers/*; do - CONTAINER_HOST="$(cat $CONTAINER/current-host)" - TARGET_CONTAINER="$(basename "$CONTAINER")" - - echo " creating forward proxies for container '${TARGET_CONTAINER}' on Host '${CONTAINER_HOST}'" - for DOMAIN_FILE in $CONTAINER/httpproxy/*; do - if [ ! -f "${DOMAIN_FILE}" ]; then - continue - fi - - TARGET_DOMAIN="$(basename "$DOMAIN_FILE")" - - #Proxy für Domain, die direkt auf diesen Host verweisen, überspringen => werden für die gehosteten Containern später angelegt - if [[ "$TARGET_DOMAIN" == "$HOSTNAME" && "$CONTAINER_HOST" == "$HOSTNAME" ]]; then - echo " skipping '${TARGET_DOMAIN}'" - continue - fi - - appendProxy "${TARGET_DOMAIN}" "${TARGET_DOMAIN}" - - cat "$DOMAIN_FILE" | while read PROXY_CONTEXT; do - - echo " with context path '${PROXY_CONTEXT}'" - - mkdir -p "$NGINX_DIR/site-${TARGET_DOMAIN}" - case $PROXY_CONTEXT in - /) TARGET_LOCATION="" ;; - /*) TARGET_LOCATION="${PROXY_CONTEXT}" ;; - *) TARGET_LOCATION="/${PROXY_CONTEXT}"; PROXY_CONTEXT="${TARGET_LOCATION}" ;; - esac - - if [[ "$CONTAINER_HOST" == "$HOSTNAME" ]]; then - # neuer docker client - CONTAINER_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}:{{end}}' $TARGET_CONTAINER | cut -d: -f1) - if [ -z "$CONTAINER_IP" ]; then - # alter docker client - CONTAINER_IP=$(docker inspect -f '{{.NetworkSettings.IPAddress}}' $TARGET_CONTAINER) - if [ -z "$CONTAINER_IP" ]; then - continue - fi - fi - CONTAINER_CONFIG="/persistent/${TARGET_CONTAINER}/containersettings" - getVar "CONTAINER_HTTP_PORT" "${CONTAINER_CONFIG}" - CONTAINER_HTTP_PORT=${GET_VAR_RESULT:-8080} - - cat >> "$NGINX_DIR/site-${TARGET_DOMAIN}/${TARGET_CONTAINER}" << EOF - location ${PROXY_CONTEXT} { - proxy_pass http://${CONTAINER_IP}:${CONTAINER_HTTP_PORT}; - } -EOF - CONTAINER_CONFIG="" - CONTAINER_HTTP_PORT="" - else - cat >> "$NGINX_DIR/site-${TARGET_DOMAIN}/fw-${TARGET_CONTAINER}" << EOF - location ${PROXY_CONTEXT} { - proxy_pass https://${CONTAINER_HOST}${TARGET_LOCATION}; - proxy_set_header Host ${TARGET_DOMAIN}; - } -EOF - fi - done - done -done - -echo "" -echo "creating proxies for local container..." -for CONTAINER_CONFIG in /persistent/*/containersettings; do - - getVar "TARGET_CONTAINER" "${CONTAINER_CONFIG}" - TARGET_CONTAINER=$GET_VAR_RESULT - getVar "CONTAINER_HTTP_PORT" "${CONTAINER_CONFIG}" - CONTAINER_HTTP_PORT=${GET_VAR_RESULT:-8080} - getVar "CONTAINER_HTTPS_PORT" "${CONTAINER_CONFIG}" - CONTAINER_HTTPS_PORT=$GET_VAR_RESULT - getVar "TARGET_DOMAIN" "${CONTAINER_CONFIG}" - TARGET_DOMAIN=$GET_VAR_RESULT - getVar "TARGET_PUBLIC_PORT" "${CONTAINER_CONFIG}" - TARGET_PUBLIC_PORT=$GET_VAR_RESULT - getVar "TARGET_PUBLIC_PORT_SSL" "${CONTAINER_CONFIG}" - TARGET_PUBLIC_PORT_SSL=$GET_VAR_RESULT - getVar "ADDITIONAL_TARGET_DOMAIN" "${CONTAINER_CONFIG}" - ADDITIONAL_TARGET_DOMAIN=$GET_VAR_RESULT - getVar "PROXY_CONTEXTS" "${CONTAINER_CONFIG}" - PROXY_CONTEXTS=$GET_VAR_RESULT - getVar "PROXY_FORWARDS" "${CONTAINER_CONFIG}" - PROXY_FORWARDS=$GET_VAR_RESULT - getVar "CUSTOM_NGINX_HTTP_CONFIG" "${CONTAINER_CONFIG}" - CUSTOM_NGINX_HTTP_CONFIG="" - grep -E "CUSTOM_NGINX_HTTP_CONFIG" "${CONTAINER_CONFIG}" > /dev/null - if [[ $? -eq 0 ]]; then - echo "CUSTOM_NGINX_HTTP_CONFIG wird in containersettings nicht mehr unterstützt" - fi - getVar "ROOT_REDIRECT" "${CONTAINER_CONFIG}" - ROOT_REDIRECT=$GET_VAR_RESULT - - if [[ "${TARGET_CONTAINER}" == "" ]]; then - echo "'${CONTAINER_CONFIG}' enthält keinen TARGET_CONTAINER" - continue - fi - - CURRENT_HOST_FILE="/invra/state/$(cat /invra/hostowner)/containers/${TARGET_CONTAINER}/current-host" - if [ -f "$CURRENT_HOST_FILE" ]; then - CURRENT_HOST="$(cat "$CURRENT_HOST_FILE")" - if [ ! -z "$CURRENT_HOST" ] && [[ "$CURRENT_HOST" != "$HOSTNAME" ]]; then - continue - fi - fi - echo " configuring container '$TARGET_CONTAINER'" - # neuer docker client - CONTAINER_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}:{{end}}' $TARGET_CONTAINER | cut -d: -f1) - if [ -z "$CONTAINER_IP" ]; then - # alter docker client - CONTAINER_IP=$(docker inspect -f '{{.NetworkSettings.IPAddress}}' $TARGET_CONTAINER) - if [ -z "$CONTAINER_IP" ]; then - continue - fi - fi - echo " updating ip from container $TARGET_CONTAINER" - sed -i "s/.*$TARGET_CONTAINER\.cont.*//" $TEMP_HOST_FILE - sed -i '/^\s*$/d' "${TEMP_HOST_FILE}" #löscht alle Zeilen, die nur unsichtbare Zeichen enthalten - sed -i "/# DOCKER-IPS/a\\$CONTAINER_IP $TARGET_CONTAINER\.cont" $TEMP_HOST_FILE - - if [ -z "$TARGET_DOMAIN" ]; then - continue - fi - - for DOMAIN_I in ${TARGET_DOMAIN}; do - OLDSETTINGSFILE="$NGINX_DIR/site-${DOMAIN_I}/${TARGET_CONTAINER}" - if [ -f $OLDSETTINGSFILE ]; then - rm $OLDSETTINGSFILE - fi - configureProxyForTargetDomain "${DOMAIN_I}" - done - - if [[ ! -z "${ADDITIONAL_TARGET_DOMAIN}" ]]; then - for DOMAIN_I in ${ADDITIONAL_TARGET_DOMAIN}; do - appendProxy "${DOMAIN_I}" "$(echo ${TARGET_DOMAIN} | awk '{print $1}')" - done - fi - -done -cat $TEMP_HOST_FILE > /etc/hosts -rm $TEMP_HOST_FILE -service nginx configtest -service nginx reload - diff --git a/script/host/zfs/snapshot/snapshot-cleanup.sh b/script/host/zfs/snapshot/snapshot-cleanup.sh deleted file mode 100644 index df9a96a..0000000 --- a/script/host/zfs/snapshot/snapshot-cleanup.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -MIN_MIN=$(date --date="- 5 minutes" -u "+%Y%m%d%H%M") -HOUR_MIN=$(date --date="- 1 days" -u "+%Y%m%d%H") -DAY_MIN=$(date --date="- 7 days" -u "+%Y%m%d") -MONTH_MIN=$(date --date="- 3 years" -u "+%Y%m") - -zfs list -Hr -o name -t snapshot -r "zpool1/persistent" | grep -E "^zpool1/persistent/[a-zA-Z0-9_-]+@(SNAPHOURLY|SNAPDAILY|SNAPMONTHLY|SNAPMINUTLY)_[0-9]{6,12}$" | while read SNAPSHOT; do - SNAPSHOT_TIME=$(echo "$SNAPSHOT" | grep -oE "[0-9]+$") - if [[ ${#SNAPSHOT_TIME} == 12 && "$SNAPSHOT_TIME" < "${MIN_MIN}" ]]; then - zfs destroy "${SNAPSHOT}" - fi - if [[ ${#SNAPSHOT_TIME} == 10 && "$SNAPSHOT_TIME" < "${HOUR_MIN}" ]]; then - zfs destroy "${SNAPSHOT}" - fi - if [[ ${#SNAPSHOT_TIME} == 8 && "${SNAPSHOT_TIME}" < "${DAY_MIN}" ]]; then - zfs destroy "${SNAPSHOT}" - fi - if [[ ${#SNAPSHOT_TIME} == 6 && "${SNAPSHOT_TIME}" < "${MONTH_MIN}" ]]; then - zfs destroy "${SNAPSHOT}" - fi -done - - - -MONTH_MIN_QA=$(date --date="- 1 month" -u "+%Y%m") - -zfs list -Hr -o name -t snapshot -r "zpool1/persistent" | grep -E "^zpool1/persistent/[a-zA-Z0-9_-]+-qa@SNAPMONTHLY_[0-9]{6}$" | while read SNAPSHOT_QA; do - SNAPSHOT_TIME_QA=$(echo "$SNAPSHOT_QA" | grep -oE "[0-9]+$") - if [[ "${SNAPSHOT_TIME_QA}" < "${MONTH_MIN_QA}" ]]; then - zfs destroy "${SNAPSHOT_QA}" - fi -done - diff --git a/script/host/zfs/snapshot/snapshot-minutly.sh b/script/host/zfs/snapshot/snapshot-minutly.sh deleted file mode 100644 index a2ce53a..0000000 --- a/script/host/zfs/snapshot/snapshot-minutly.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin - -_TIMESTAMP="$(date -u "+%Y%m%d%H%M")" -_ZFS_FILESYSTEM="${1:?"Missing first parameter ZFS_FILESYSTEM."}" -echo "${_ZFS_FILESYSTEM}" | grep -E '\-prod$' &> /dev/null \ - && zfs snapshot "${_ZFS_FILESYSTEM}@SNAPMINUTLY_${_TIMESTAMP}" \ - && exit 0 - -echo "Snapshot konnte nicht angelegt werden:" -echo " - ${_ZFS_FILESYSTEM}@SNAPMINUTLY_${_TIMESTAMP}" -echo " (Minuten-Snapshots sollen nur auf 'PROD'-Containeren angelegt werden, sodass diese dann syncronisiert werden)" -exit 1 diff --git a/script/host/zfs/snapshot/snapshot.sh b/script/host/zfs/snapshot/snapshot.sh deleted file mode 100644 index a48999b..0000000 --- a/script/host/zfs/snapshot/snapshot.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -HOUR=$(date -u "+%Y%m%d%H") -DAY=${HOUR:0:8} -MONTH=${HOUR:0:6} -HOSTOWNER=$(cat /invra/hostowner) -if [ ! -d /tmp/locks ]; then - mkdir /tmp/locks -fi - -zfs list -Hr -o name zpool1/persistent | grep -v -- -BACKUP | tail -n +2 | while read DATASET; do - CONTAINER=${DATASET#zpool1/persistent/} - ( - flock -n 9 || exit 1 - - MODE_FILE="/invra/state/$HOSTOWNER/containers/$CONTAINER/snapshot-mode" - HOURLY=1 - DAILY=1 - MONTHLY=1 - - if [ -f "$MODE_FILE" ]; then - grep -i "NONE" "$MODE_FILE" &> /dev/null - if [ $? -eq 0 ]; then - exit - fi - grep -i "HOURLY" "$MODE_FILE" &> /dev/null - if [ $? -ne 0 ]; then - HOURLY=0 - fi - grep -i "DAILY" "$MODE_FILE" &> /dev/null - if [ $? -ne 0 ]; then - DAILY=0 - fi - grep -i "MONTHLY" "$MODE_FILE" &> /dev/null - if [ $? -ne 0 ]; then - MONTHLY=0 - fi - fi - SNAPSHOT_HOUR="${DATASET}@SNAPHOURLY_${HOUR}" - SNAPSHOT_DAY="${DATASET}@SNAPDAILY_${DAY}" - SNAPSHOT_MONTH="${DATASET}@SNAPMONTHLY_${MONTH}" - - zfs list -H -t snapshot -o name -r "$DATASET" | grep -E "^${SNAPSHOT_HOUR}$" > /dev/null - if [[ $? -ne 0 && $HOURLY -eq 1 ]]; then - zfs snapshot "${SNAPSHOT_HOUR}" - fi - - zfs list -H -t snapshot -o name -r "$DATASET" | grep -E "^${SNAPSHOT_DAY}$" > /dev/null - if [[ $? -ne 0 && $DAILY -eq 1 ]]; then - zfs snapshot "${SNAPSHOT_DAY}" - fi - - zfs list -H -t snapshot -o name -r "$DATASET" | grep -E "^${SNAPSHOT_MONTH}$" > /dev/null - if [[ $? -ne 0 && $MONTHLY -eq 1 ]]; then - zfs snapshot "${SNAPSHOT_MONTH}" - fi - ) 9>>/tmp/locks/snapshot.${CONTAINER}.lock -done diff --git a/script/host/zfs/sync/synccontainer-all.sh b/script/host/zfs/sync/synccontainer-all.sh deleted file mode 100644 index bb0b758..0000000 --- a/script/host/zfs/sync/synccontainer-all.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -HOSTOWNER=$(cat /invra/hostowner) -BACKUPHOST=$(hostname) -STATE_DIR=/invra/state/${HOSTOWNER}/containers/; - -screen -ls | grep -oE "[0-9]+\.synccontainer\.[a-zA-Z0-9_-]+" | while read -r SCREEN_SESSION; do - CONTAINER=$(echo "$SCREEN_SESSION" | grep -oE "[^.]+$") - PID=$(echo "$SCREEN_SESSION" | grep -oE "^[0-9]+") - grep -iE "^${BACKUPHOST}$" ${STATE_DIR}/${CONTAINER}/standby-hosts > /dev/null - if [ $? -ne 0 ]; then - echo "quit screen session ${SCREEN_SESSION}" - screen -XS "$PID" quit - fi -done - -grep -lrE "^${BACKUPHOST}$" /invra/state/${HOSTOWNER}/containers/*/standby-hosts > /dev/null -if [ $? -eq 0 ]; then - grep -lrE "^${BACKUPHOST}$" /invra/state/${HOSTOWNER}/containers/*/standby-hosts | while read -r STANDBY_FILE; do - CONTAINER=$(basename $(dirname ${STANDBY_FILE})) - screen -ls | grep -oE "[0-9]+\.synccontainer\.$CONTAINER" > /dev/null - if [ $? -ne 0 ]; then - echo "starte container sync" - screen -dmS "synccontainer.$CONTAINER" /invra/scripts/hosts/zfs/synccontainer.sh "$CONTAINER" - fi - done -fi - diff --git a/script/host/zfs/sync/synccontainer-check.sh b/script/host/zfs/sync/synccontainer-check.sh deleted file mode 100644 index 2e34a60..0000000 --- a/script/host/zfs/sync/synccontainer-check.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -TMP="$(mktemp)" -( - HOSTNAME="$(hostname)" - HOSTOWNER="$(cat /invra/hostowner)" - MAX_BEHIND=0 - CURRENT_UNIXTIME=$(date -u +%s) - echo "OK#Checks running" - for CONTAINER_PATH in /invra/state/${HOSTOWNER}/containers/*; do - grep -E "^${HOSTNAME}$" "${CONTAINER_PATH}/standby-hosts" &> /dev/null || continue; - CONTAINER_NAME="$(basename "$CONTAINER_PATH")"; - TS=$(zfs list -o name -r -t snapshot "zpool1/persistent/${CONTAINER_NAME}-BACKUP" | grep "@SYNC_${HOSTNAME}" | head -n1 | grep -oP "\\d{4}-\\d{2}-\\d{2}_\\d{2}:\\d{2}:\\d{2}") - LAST_SNAPSHOT_TIME="$(echo "${TS}" | sed "s/_/ /g")" - LAST_SNAPSHOT_UNIXTIME=$(date -u --date="TZ=\"UTC\" ${LAST_SNAPSHOT_TIME}" +%s) - SECONDS_BEHIND=$[ $CURRENT_UNIXTIME - $LAST_SNAPSHOT_UNIXTIME ] - if [ "$SECONDS_BEHIND" -gt "$MAX_BEHIND" ]; then - MAX_BEHIND="$SECONDS_BEHIND" - fi - if [ "$SECONDS_BEHIND" -gt 30 ]; then - echo "LAGGING_SYNC_${CONTAINER_NAME}_${HOSTNAME}?FAIL#${SECONDS_BEHIND} behind" - - fi - done - echo $CURRENT_UNIXTIME -) > "$TMP" -chmod 655 "$TMP" -mkdir -p /var/www/html/monitoring &>/dev/null -mv "$TMP" /var/www/html/monitoring/synccontainer.check.txt - - diff --git a/script/host/zfs/sync/synccontainer-receiver.sh b/script/host/zfs/sync/synccontainer-receiver.sh deleted file mode 100644 index f8ed3e8..0000000 --- a/script/host/zfs/sync/synccontainer-receiver.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -CONTAINER=${1:?"CONTAINER missing"} -CONTAINER=$(echo $1 | sed -E 's|[^a-zA-Z0-9_-]*||g') -( - flock -n 9 || exit 1 - - BACKUPHOST=$(hostname) - HOSTOWNER=$(cat /invra/hostowner) - SOURCEHOST=$(cat /invra/state/${HOSTOWNER}/containers/${CONTAINER}/current-host) - - MOUNTPOINT="none" - DATASET="zpool1/persistent/${CONTAINER}-BACKUP" - SNAPSHOT_PREFIX="${DATASET}@SYNC_${BACKUPHOST}_" - - LAST_SNAPSHOT_NAME="" - RESUME_TOKEN="" - zfs list -Hr -o name -s name "${DATASET}" | grep -E "^${DATASET}$" > /dev/null - if [ $? -eq 0 ]; then - LAST_SNAPSHOT_NAME=$(zfs list -H -o name -S name -t snapshot -r "${DATASET}" | grep -E "^${SNAPSHOT_PREFIX}" | head -n 1) - RESUME_TOKEN="$(zfs get -o value -H receive_resume_token "${DATASET}")" - fi - - if [[ "x$RESUME_TOKEN" != "x" && "x$RESUME_TOKEN" != "x-" ]]; then - echo "Resume token present trying to resume at $RESUME_TOKEN" - LAST_SNAPSHOT_NAME="RESUME" - fi - - if [[ "x${LAST_SNAPSHOT_NAME}" != "x" && "${LAST_SNAPSHOT_NAME}" != "RESUME" ]]; then - zfs rollback -r "${LAST_SNAPSHOT_NAME}" - fi - - # Beiim zfs receive in der nächsten Zeile fehlt noch das "-s" für resumable streams. Der tzrlxsrv kann das aber momentan nicht. Fehlermeldung: cannot receive resume stream: kernel modules must be upgraded to receive this stream. - (while sleep 1; do echo; done) | ssh -o ConnectTimeout=20 -C invencom@${SOURCEHOST} "sudo /invra/scripts/hosts/zfs/synccontainer-sender.sh \"${BACKUPHOST}\" \"${CONTAINER}\" \"${LAST_SNAPSHOT_NAME#$SNAPSHOT_PREFIX}\"" \"${RESUME_TOKEN}\" | zfs receive -v "${DATASET}" - if [ $? -ne 0 ]; then - exit 1 - fi - - # Dataset gegen Veränderungen sichern - zfs set readonly=on "${DATASET}" - zfs set "mountpoint=${MOUNTPOINT}" "${DATASET}" - - # Aufsetzpunkte fremder Synchronisierer wegräumen - zfs list -t snapshot -o name -r "${DATASET}" | grep -- "${DATASET}@SYNC" | grep -v -i "_${BACKUPHOST}_" | while read SNAP; do - echo "Destroying $SNAP" - zfs destroy $SNAP - done - - # Alte Snapshots wegräumen - while read -r ZEILE - do - if [ "$ZEILE" = "" ]; then - break - fi - if [[ "$ZEILE" > "$LAST_SNAPSHOT_NAME" ]]; then - break - fi - zfs destroy "$ZEILE" - done < <(zfs list -Hr -o name -s name -t snapshot "${DATASET}" | grep -E "^${SNAPSHOT_PREFIX}") -) 9>>/tmp/synccontainer.${CONTAINER}.lock - -if [ $? -ne 0 ]; then - exit 1 -fi -exit 0 diff --git a/script/host/zfs/sync/synccontainer-sender.sh b/script/host/zfs/sync/synccontainer-sender.sh deleted file mode 100644 index dae11de..0000000 --- a/script/host/zfs/sync/synccontainer-sender.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -BACKUPHOST=${1:?"BACKUPHOST missing"} -CONTAINER=${2:?"CONTAINER missing"} -BACKUPHOST=$(echo $1 | sed -E 's|[^a-zA-Z0-9._-]*||g') -CONTAINER=$(echo $2 | sed -E 's|[^a-zA-Z0-9_-]*||g') -LAST_SNAPSHOT=$(echo $3 | sed -E 's|[^a-zA-Z0-9._:-]*||g') -NEW_SNAPSHOT=$(date -u "+%Y-%m-%d_%H:%M:%S") - -if [[ "${LAST_SNAPSHOT}" == "RESUME" ]]; then - RESUME_TOKEN=$(echo $4 | sed -E 's|[^a-zA-Z0-9._:-]*||g') - zfs send -t "${RESUME_TOKEN}" - exit -fi - -DATASET="zpool1/persistent/$CONTAINER" -SNAPSHOT_PREFIX="${DATASET}@SYNC_${BACKUPHOST}_" -LAST_SNAPSHOT_NAME="${SNAPSHOT_PREFIX}${LAST_SNAPSHOT}" -NEW_SNAPSHOT_NAME="${SNAPSHOT_PREFIX}${NEW_SNAPSHOT}" -SNAPSHOT_FOUND="" - -# Existiert der Snapshot? -while read -r ZEILE -do - if [[ "$ZEILE" == "$LAST_SNAPSHOT_NAME" ]]; then - SNAPSHOT_FOUND="1" - continue - fi -done < <(zfs list -H -o name -s name -t snapshot "${DATASET}" | grep -E "^${SNAPSHOT_PREFIX}") - -# Falls ja, alle anderen Snapshots wegräumen - eine frühere Version des Skripts hat hier nur die Älteren weggeräumt. Das führt allerdings zum Vollmüllen -# mit neueren Snapshots, wenn der Sync immer wieder fehlschlägt - im Einzelfall bis zur Unbenutzbarkeit des Senders -if [[ "${SNAPSHOT_FOUND}x" == "1x" ]]; then - while read -r ZEILE - do - if [[ "$ZEILE" == "$LAST_SNAPSHOT_NAME" ]]; then - continue - fi - zfs destroy "$ZEILE" - done < <(zfs list -H -o name -s name -t snapshot "${DATASET}" | grep -E "^${SNAPSHOT_PREFIX}") -fi - -zfs snapshot "$NEW_SNAPSHOT_NAME" - -if [[ "$LAST_SNAPSHOT" != "" ]]; then - if [[ "$SNAPSHOT_FOUND" == "" ]]; then - echo "Angeforderter Snapshot '${LAST_SNAPSHOT}' nicht vorhanden" - exit 1; - fi - zfs send -I "${LAST_SNAPSHOT_NAME}" "${NEW_SNAPSHOT_NAME}" -else - zfs send "${NEW_SNAPSHOT_NAME}" -fi diff --git a/script/host/zfs/sync/synccontainer.sh b/script/host/zfs/sync/synccontainer.sh deleted file mode 100644 index 556ca68..0000000 --- a/script/host/zfs/sync/synccontainer.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -BACKUPHOST=$(hostname) -CONTAINER=${1:?"Kein Container angegeben"} -DATASET="zpool1/persistent/$CONTAINER" -SNAPSHOT_PREFIX="${DATASET}@SYNC_${BACKUPHOST}_" - -while true; do - - /invra/scripts/hosts/zfs/synccontainer-receiver.sh "$CONTAINER" - sleep 5 - -# LAST_SNAPSHOT_NAME=$(zfs list -Hr -o name -S name -t snapshot "${DATASET}" | grep -E "^${SNAPSHOT_PREFIX}" | head -n 1) -# LAST_SNAPSHOT_TIME=${LAST_SNAPSHOT_NAME#${SNAPSHOT_PREFIX}} -# LAST_SNAPSHOT_TIME="$(echo "${LAST_SNAPSHOT_TIME}" | sed "s/_/ /g")" -# LAST_SNAPSHOT_UNIXTIME=$(date -u --date="TZ=\"UTC\" ${LAST_SNAPSHOT_TIME}" +%s) -# CURRENT_UNIXTIME=$(date -u +%s) -# SECONDS_BEHIND=$[ $CURRENT_UNIXTIME - $LAST_SNAPSHOT_UNIXTIME ] -# mkdir -p /var/www/html/monitoring > /dev/null 2>&1 -# echo $CURRENT_UNIXTIME > "/var/www/html/monitoring/containersync.${CONTAINER}" -# echo "OK: $SECONDS_BEHIND seconds behind" >> "/var/www/html/monitoring/containersync.${CONTAINER}" - -done -