Set up a recovery script for MC servers
this shit happens to goddamn often-
This commit is contained in:
parent
4b9e2503d6
commit
d698f0b588
@ -47,6 +47,14 @@
|
|||||||
dest: "/var/minecraft/{{ mcname }}/modpack.zip"
|
dest: "/var/minecraft/{{ mcname }}/modpack.zip"
|
||||||
url: "{{ mczip }}"
|
url: "{{ mczip }}"
|
||||||
register: get_mcpack
|
register: get_mcpack
|
||||||
|
- name: Template out scripts
|
||||||
|
template:
|
||||||
|
src: "{{ item.src }}"
|
||||||
|
dest: "/var/minecraft/{{ mcname }}/{{ item.dest }}"
|
||||||
|
mode: "{{ item.mode }}"
|
||||||
|
loop:
|
||||||
|
- { src: "install.sh", dest: "install.sh", mode: "0755" }
|
||||||
|
- { src: "recover.sh", dest: "recover.sh", mode: "0755" }
|
||||||
- name: Install modpack
|
- name: Install modpack
|
||||||
block:
|
block:
|
||||||
- name: Disable service
|
- name: Disable service
|
||||||
@ -71,10 +79,6 @@
|
|||||||
remote_src: yes
|
remote_src: yes
|
||||||
dest: "/var/minecraft/{{ mcname }}"
|
dest: "/var/minecraft/{{ mcname }}"
|
||||||
notify: "restart minecraft {{ mcname }}"
|
notify: "restart minecraft {{ mcname }}"
|
||||||
- name: Template out install script
|
|
||||||
template:
|
|
||||||
src: "install.sh"
|
|
||||||
dest: "/var/minecraft/{{ mcname }}/install.sh"
|
|
||||||
- name: Run install script
|
- name: Run install script
|
||||||
command:
|
command:
|
||||||
chdir: "/var/minecraft/{{ mcname }}"
|
chdir: "/var/minecraft/{{ mcname }}"
|
||||||
@ -123,6 +127,19 @@
|
|||||||
state: link
|
state: link
|
||||||
when: not stat_mcroot_newjar.stat.exists
|
when: not stat_mcroot_newjar.stat.exists
|
||||||
when: not stat_mcroot_forgejar.stat.exists
|
when: not stat_mcroot_forgejar.stat.exists
|
||||||
|
- name: Check for world
|
||||||
|
stat:
|
||||||
|
path: "/var/minecraft/{{ mcname }}/world"
|
||||||
|
register: stat_mcroot_world
|
||||||
|
- name: Recover world, if available
|
||||||
|
block:
|
||||||
|
- name: Run recover script
|
||||||
|
command:
|
||||||
|
chdir: "/var/minecraft/{{ mcname }}"
|
||||||
|
argv:
|
||||||
|
- bash
|
||||||
|
- "./recover.sh"
|
||||||
|
notify: "restart minecraft {{ mcname }}"
|
||||||
- name: Configure server
|
- name: Configure server
|
||||||
block:
|
block:
|
||||||
- name: Template out server.properties
|
- name: Template out server.properties
|
||||||
|
42
roles/minecraft/templates/recover.sh
Normal file
42
roles/minecraft/templates/recover.sh
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#! /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
|
@ -7,6 +7,13 @@
|
|||||||
apt:
|
apt:
|
||||||
name:
|
name:
|
||||||
- mono-complete
|
- mono-complete
|
||||||
|
- name: Disable bundled services
|
||||||
|
systemd:
|
||||||
|
name: "{{ item }}"
|
||||||
|
enabled: no
|
||||||
|
state: stopped
|
||||||
|
loop:
|
||||||
|
- "mono-xsp4"
|
||||||
- name: Assure terraria admin group
|
- name: Assure terraria admin group
|
||||||
group:
|
group:
|
||||||
name: ter-admin
|
name: ter-admin
|
||||||
|
Loading…
Reference in New Issue
Block a user