43 lines
1.1 KiB
Bash
43 lines
1.1 KiB
Bash
|
#! /bin/sh
|
||
|
#
|
||
|
# recover.sh
|
||
|
# Recover a Minecraft world save from our S3 bucket
|
||
|
# Copyright (C) 2020 Vintage Salt <rehashedsalt@cock.li>
|
||
|
#
|
||
|
# Distributed under terms of the MIT license.
|
||
|
#
|
||
|
|
||
|
set -e
|
||
|
|
||
|
# Get to our magic dir
|
||
|
export MINECRAFT_DIR="/var/minecraft/{{ mcname }}"
|
||
|
cd "$MINECRAFT_DIR" || exit 50
|
||
|
|
||
|
# If the world directory exists, we need to ensure that we don't clobber it
|
||
|
if [ -d "world" ]; then
|
||
|
echo "Backing up current world"
|
||
|
tar czf "recover-world-$(date -Iseconds).tar.gz" world --remove-files
|
||
|
fi
|
||
|
# If it STILL exists, then we have a problem
|
||
|
if [ -d "world" ]; then
|
||
|
echo "World was found to exist after tarring; bailing"
|
||
|
exit 51
|
||
|
fi
|
||
|
|
||
|
# Get our latest good backup
|
||
|
backup="$(aws s3 ls "s3://{{ aws_backup_bucket }}/{{ mcname }}/" | tail -n 1 | awk '{print $4}')"
|
||
|
echo "Restoring backup: $backup"
|
||
|
aws s3 cp "s3://{{ aws_backup_bucket }}/{{ mcname }}/$backup" world.tgz
|
||
|
# Decompress it
|
||
|
tar xzf world.tgz
|
||
|
# Find the world
|
||
|
worlddir="$(find . -type d -name "world" | head -n 1)"
|
||
|
# Move it in place
|
||
|
mv "$worlddir" .
|
||
|
# Verify our work
|
||
|
if [ -f "world/level.dat" ]; then
|
||
|
echo "Recovered from backup: $backup"
|
||
|
else
|
||
|
echo "Failed to recover from backup: $backup"
|
||
|
fi
|