This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
## The number of backups to keep
|
||||
BACKUPS_KEEP=24
|
||||
|
||||
CONTAINER_USER_ID="2015"
|
||||
|
||||
# Global variables (Do NOT change)
|
||||
CLEANUP_FABRIC=false
|
||||
CLEANUP_LUCKPERMS=false
|
||||
@@ -18,6 +20,7 @@ main() {
|
||||
|
||||
broadcast_status started
|
||||
|
||||
backup_beta || cleanup_failure
|
||||
backup_fabric || cleanup_failure
|
||||
backup_luckperms || cleanup_failure
|
||||
backup_paper || cleanup_failure
|
||||
@@ -63,6 +66,9 @@ broadcast_status() {
|
||||
STATUS="$1"
|
||||
log_info "Broadcasting backup status: $STATUS"
|
||||
|
||||
if docker compose exec -T beta true > /dev/null 2>&1; then
|
||||
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "say Backup $STATUS." > /dev/null 2>&1
|
||||
fi
|
||||
if docker compose exec -T fabric true > /dev/null 2>&1; then
|
||||
docker compose exec -T fabric rcon-cli "tellraw @a [{\"text\":\"Server\",\"color\":\"light_purple\"},{\"text\":\": Backup $STATUS.\",\"color\":\"white\"}]" > /dev/null 2>&1
|
||||
fi
|
||||
@@ -71,6 +77,28 @@ broadcast_status() {
|
||||
fi
|
||||
}
|
||||
|
||||
backup_beta() {
|
||||
log_info "Starting Beta backup..."
|
||||
|
||||
CLEANUP_BETA=false
|
||||
if docker compose exec -T beta true > /dev/null 2>&1; then
|
||||
CLEANUP_BETA=true
|
||||
log_info "Beta server detected, disabling saves"
|
||||
|
||||
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "save-off" > /dev/null 2>&1
|
||||
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "save-all" > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
docker compose run --rm init sh -c '
|
||||
mkdir -p "$1"/beta_data &&
|
||||
cp -a --reflink=auto /beta_data/world "$1"/beta_data &&
|
||||
cp -a --reflink=auto /beta_data/white-list.txt "$1"/beta_data &&
|
||||
cp -a --reflink=auto /beta_data/ops.txt "$1"/beta_data
|
||||
' -- "$BACKUP_DIR" || return 1
|
||||
|
||||
log_info "Finished Beta backup"
|
||||
}
|
||||
|
||||
backup_fabric() {
|
||||
log_info "Starting Fabric backup..."
|
||||
|
||||
@@ -240,6 +268,11 @@ cleanup() {
|
||||
# Ignore specified conditions to ensure cleanup runs to completion uninterrupted
|
||||
trap '' HUP INT QUIT ABRT TERM
|
||||
|
||||
if [ "$CLEANUP_BETA" = true ]; then
|
||||
log_info "Re-enabling Beta saves"
|
||||
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "save-on" > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ "$CLEANUP_FABRIC" = true ]; then
|
||||
log_info "Re-enabling Fabric saves"
|
||||
docker compose exec -T fabric rcon-cli save-on > /dev/null 2>&1
|
||||
|
||||
+60
-1
@@ -21,6 +21,10 @@ Commands:
|
||||
|
||||
Restore options:
|
||||
--all
|
||||
--beta
|
||||
--beta-ops
|
||||
--beta-whitelist
|
||||
--beta-world
|
||||
--fabric
|
||||
--fabric-essentials
|
||||
--fabric-g4mespeed
|
||||
@@ -59,6 +63,10 @@ cmd_restore() {
|
||||
CLEANUP_VOLUMES=0
|
||||
|
||||
# Default flags
|
||||
## Beta server
|
||||
RESTORE_BETA_OPS=0
|
||||
RESTORE_BETA_WHITELIST=0
|
||||
RESTORE_BETA_WORLD=0
|
||||
## Fabric server
|
||||
RESTORE_FABRIC_ESSENTIALS=0
|
||||
RESTORE_FABRIC_G4MESPEED=0
|
||||
@@ -85,6 +93,9 @@ cmd_restore() {
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--all)
|
||||
RESTORE_BETA_OPS=1
|
||||
RESTORE_BETA_WHITELIST=1
|
||||
RESTORE_BETA_WORLD=1
|
||||
RESTORE_FABRIC_ESSENTIALS=1
|
||||
RESTORE_FABRIC_G4MESPEED=1
|
||||
RESTORE_FABRIC_WORLD=1
|
||||
@@ -102,6 +113,24 @@ cmd_restore() {
|
||||
RESTORE_VELOCITY_GLOBAL_WHITELIST=1
|
||||
;;
|
||||
|
||||
--beta)
|
||||
RESTORE_BETA_OPS=1
|
||||
RESTORE_BETA_WHITELIST=1
|
||||
RESTORE_BETA_WORLD=1
|
||||
;;
|
||||
|
||||
--beta-ops)
|
||||
RESTORE_BETA_OPS=1
|
||||
;;
|
||||
|
||||
--beta-whitelist)
|
||||
RESTORE_BETA_WHITELIST=1
|
||||
;;
|
||||
|
||||
--beta-world)
|
||||
RESTORE_BETA_WORLD=1
|
||||
;;
|
||||
|
||||
--fabric)
|
||||
RESTORE_FABRIC_ESSENTIALS=1
|
||||
RESTORE_FABRIC_G4MESPEED=1
|
||||
@@ -235,7 +264,10 @@ cmd_restore() {
|
||||
BACKUP_ID=$(basename "$BACKUP_DIR")
|
||||
|
||||
# Validate options
|
||||
if [ "$RESTORE_FABRIC_ESSENTIALS" -eq 0 ] \
|
||||
if [ "$RESTORE_BETA_OPS" -eq 0 ] \
|
||||
&& [ "$RESTORE_BETA_WHITELIST" -eq 0 ] \
|
||||
&& [ "$RESTORE_BETA_WORLD" -eq 0 ] \
|
||||
&& [ "$RESTORE_FABRIC_ESSENTIALS" -eq 0 ] \
|
||||
&& [ "$RESTORE_FABRIC_G4MESPEED" -eq 0 ] \
|
||||
&& [ "$RESTORE_FABRIC_WORLD" -eq 0 ] \
|
||||
&& [ "$RESTORE_LUCKPERMS" -eq 0 ] \
|
||||
@@ -263,6 +295,7 @@ cmd_restore() {
|
||||
trap restore_cleanup_trap HUP INT QUIT ABRT TERM
|
||||
create_snapshot || restore_cleanup_failure
|
||||
|
||||
restore_beta || restore_cleanup_failure
|
||||
restore_fabric || restore_cleanup_failure
|
||||
restore_luckperms || restore_cleanup_failure
|
||||
restore_paper || restore_cleanup_failure
|
||||
@@ -280,6 +313,7 @@ create_snapshot() {
|
||||
# Map: source volume name -> cloned volume name
|
||||
# Source names must match the mount points inside init
|
||||
declare -Ag VOLUMES=(
|
||||
[beta_data]="beta_data_$BACKUP_ID"
|
||||
[fabric_data]="fabric_data_$BACKUP_ID"
|
||||
[luckperms_data]="luckperms_data_$BACKUP_ID"
|
||||
[paper_data]="paper_data_$BACKUP_ID"
|
||||
@@ -304,6 +338,7 @@ create_snapshot() {
|
||||
"${MOUNTS[@]}" \
|
||||
init sh -ec '
|
||||
for DIR in \
|
||||
beta_data \
|
||||
fabric_data \
|
||||
luckperms_data \
|
||||
paper_data \
|
||||
@@ -321,6 +356,29 @@ create_snapshot() {
|
||||
echo "Created snapshot successfully"
|
||||
}
|
||||
|
||||
restore_beta() {
|
||||
if [ "$RESTORE_BETA_OPS" -eq 1 ]; then
|
||||
echo "Restoring Beta server's op list..."
|
||||
docker compose run --rm init sh -c '
|
||||
cp -a --reflink=auto "$1"/beta_data/ops.txt /beta_data
|
||||
' -- "$BACKUP_DIR" || return 1
|
||||
fi
|
||||
|
||||
if [ "$RESTORE_BETA_WHITELIST" -eq 1 ]; then
|
||||
echo "Restoring Beta server's whitelist..."
|
||||
docker compose run --rm init sh -c '
|
||||
cp -a --reflink=auto "$1"/beta_data/white-list.txt /beta_data
|
||||
' -- "$BACKUP_DIR" || return 1
|
||||
fi
|
||||
|
||||
if [ "$RESTORE_BETA_WORLD" -eq 1 ]; then
|
||||
echo "Restoring Beta server's world..."
|
||||
docker compose run --rm init sh -c '
|
||||
cp -a --reflink=auto "$1"/beta_data/world /beta_data
|
||||
' -- "$BACKUP_DIR" || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
restore_fabric() {
|
||||
if [ "$RESTORE_FABRIC_ESSENTIALS" -eq 1 ]; then
|
||||
echo "Restoring Fabric server's Essentials mod data..."
|
||||
@@ -484,6 +542,7 @@ restore_cleanup() {
|
||||
"${MOUNTS[@]}" \
|
||||
init sh -ec '
|
||||
for DIR in \
|
||||
beta_data \
|
||||
fabric_data \
|
||||
luckperms_data \
|
||||
paper_data \
|
||||
|
||||
Reference in New Issue
Block a user