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