version 1.2, 2021/09/02 16:17:35 |
version 1.3, 2021/09/26 14:02:56 |
|
|
# Purpose: Minetest server Control |
# Purpose: Minetest server Control |
# License: Copyright (C) 2021 by Miniontoby <miniontoby@ircnow.org> |
# License: Copyright (C) 2021 by Miniontoby <miniontoby@ircnow.org> |
#--------------------------------------------------------------------- |
#--------------------------------------------------------------------- |
VERSION="1.0" |
VERSION="1.2" |
config=[] |
config=[] |
config[0]="no"; config[1]="/usr/local/share/minetest/" |
config[0]="no"; config[1]="/usr/local/share/minetest/" |
|
|
|
|
echo -e "mtctl: $MSG" | sed -e 's/\\n/\\nmtctl: /' |
echo -e "mtctl: $MSG" | sed -e 's/\\n/\\nmtctl: /' |
} |
} |
mthelp() { |
mthelp() { |
echo -e "usage: mtctl start|stop|restart|status|create worldname\n mtctl list|help|version|check_updates"; exit 1 |
echo -e "usage: mtctl start|stop|restart|status|create|backup worldname\n mtctl list|help|version|check_updates"; exit 1 |
} |
} |
if [ "x$1" == "x" ]; then mthelp; exit 1; fi |
if [ "x$1" == "x" ]; then mthelp; exit 1; fi |
|
|
|
|
echo -ne "\nUsername: "; read USERNAME |
echo -ne "\nUsername: "; read USERNAME |
|
|
cd $WORLDBASE; mkdir $NAME; cd $NAME |
cd $WORLDBASE; mkdir $NAME; cd $NAME |
echo -e "server_name = $NAME\nserver_description = $SERVER_DESCRIPTION\nport = $PORT\nmotd = $MOTD\nfixed_map_seed = $SEED\ncreative_mode = $CREATIVE_MODE\nenable_damage = $ENABLE_DAMAGE\nenable_pvp = $ENABLE_PVP\nname = $USERNAME\nserver_announce = true\nserverlist_url = servers.minetest.net" > world.conf |
echo -e "server_name = $NAME\nserver_description = $SERVER_DESCRIPTION\nport = $PORT\nmotd = $MOTD\nfixed_map_seed = $SEED\ncreative_mode = $CREATIVE_MODE\nenable_damage = $ENABLE_DAMAGE\nenable_pvp = $ENABLE_PVP\nname = $USERNAME\nserver_announce = true\nserverlist_url = servers.minetest.net\nsqlite_synchronous = 0\nserver_unload_unused_data_timeout = 900\nserver_map_save_interval = 900.0" > world.conf |
echo -e "creative_mode = $CREATIVE_MODE\nenable_damage = $ENABLE_DAMAGE\nauth_backend = sqlite3\nbackend = sqlite3\nplayer_backend = sqlite3\ngameid = minetest\nworld_name = $NAME" > world.mt |
echo -e "creative_mode = $CREATIVE_MODE\nenable_damage = $ENABLE_DAMAGE\nauth_backend = sqlite3\nbackend = sqlite3\nplayer_backend = sqlite3\ngameid = minetest\nworld_name = $NAME" > world.mt |
echo -ne "\nWorld created!\nWant to start the world?(yes/no): "; read startit |
echo -ne "\nWorld created!\nWant to start the world?(yes/no): "; read startit |
if [[ "$startit" == "yes" ]]; then /usr/bin/mtctl start $NAME; fi |
if [[ "$startit" == "yes" ]]; then /usr/bin/mtctl start $NAME; fi |
echo -e "\nSuccess: \033[1;32mDone \033[m\nFeel free to join your new server at port $PORT" |
echo -e "\nSuccess: \033[1;32mDone \033[m\nFeel free to join your new server at port $PORT" |
} |
} |
|
|
|
backupMT() { |
|
SetWorld "$1" |
|
# Backup script from mtlbak by Minix |
|
# Copyright (C) 2021 Minix from FreedomTest (freedomtest@protonmail.com) |
|
|
|
BACKUP_DIR="$CONFDIR/backups/$NAME" |
|
LOG_FILE="$LOGDIR/backup_$NAME.log" |
|
mkdir -p $BACKUP_DIR |
|
echo -ne "" >> $LOG_FILE |
|
|
|
if [ -f /tmp/$(basename $WORLDDIR)_local_backup_in_progress ]; then |
|
echo "\nBackup for $(basename $WORLDDIR) on $(date) aborted because another backup is already in progress, this may be caused by a backup that is taking longer than expected" >> $LOG_FILE |
|
mtinfo "Backup for $(basename $WORLDDIR) on $(date) aborted because another backup is already in progress, this may be caused by a backup that is taking longer than expected" |
|
exit 1 |
|
fi |
|
|
|
touch /tmp/$(basename $WORLDDIR)_local_backup_in_progress |
|
rm $BACKUP_DIR/map.sqlite.tmp* 2> /dev/null #Cleaning in case of crashed attempts |
|
|
|
echo -e "\n$(date) backup started" >> $LOG_FILE |
|
mtstatus "Backup started" |
|
|
|
try=0 |
|
while [ $try -lt 5 ]; do |
|
echo "Starting backup attempt #$(expr $try + 1) on $(date)" >> $LOG_FILE |
|
sqlite3 $WORLDDIR/map.sqlite ".backup $BACKUP_DIR/map.sqlite.tmp" 2> /dev/null |
|
if [ $? -eq 0 ]; then |
|
mv $BACKUP_DIR/{map.sqlite.tmp,map.sqlite} |
|
#Backup auth.sqlite and players.sqlite files properly |
|
until sqlite3 $WORLDDIR/auth.sqlite ".backup $BACKUP_DIR/auth.sqlite" 2> /dev/null; do |
|
continue |
|
done |
|
until sqlite3 $WORLDDIR/players.sqlite ".backup $BACKUP_DIR/players.sqlite" 2> /dev/null; do |
|
continue |
|
done |
|
rsync -ptrW --delete --exclude "*.sqlite" $WORLDDIR/ $BACKUP_DIR/ |
|
echo "Backup finished succesfully on $(date)" >> $LOG_FILE |
|
mtstatus "Backup success" |
|
rm /tmp/$(basename $WORLDDIR)_local_backup_in_progress 2> /dev/null |
|
exit 0 |
|
else |
|
rm $BACKUP_DIR/map.sqlite.tmp 2> /dev/null |
|
try=$(expr $try + 1) |
|
if [ $try -eq 5 ]; then |
|
echo "Backup failed 5 times, aborting on $(date)" >> $LOG_FILE |
|
mtstatus "Backup failed" |
|
rm /tmp/$(basename $WORLDDIR)_local_backup_in_progress 2> /dev/null |
|
exit 1 |
|
else |
|
echo "map.sqlite backup attempt #$try failed, retrying in 60 seconds" >> $LOG_FILE |
|
sleep 60 |
|
fi |
|
fi |
|
done |
|
} |
|
|
|
|
#--------------------------------------------------------------------- |
#--------------------------------------------------------------------- |
# Handle the actions |
# Handle the actions |
ACTION="$1" |
ACTION="$1" |
|
|
NEWESTVERSION=$(curl https://cvsweb.planetofnix.com/cgi-bin/cvsweb/~checkout~/mtctl/version.txt?content-type=text/plain 2> /dev/null) |
NEWESTVERSION=$(curl https://cvsweb.planetofnix.com/cgi-bin/cvsweb/~checkout~/mtctl/version.txt?content-type=text/plain 2> /dev/null) |
if [ "$NEWESTVERSION" \!= "$VERSION" ]; then |
if [ "$NEWESTVERSION" \!= "$VERSION" ]; then |
mtinfo "Update avaible!\n\nInstalling update NOW!" |
mtinfo "Update avaible!\n\nInstalling update NOW!" |
curl -sSL https://ircforever.org/mtctl.php | $SHELL |
curl -sSLk https://ircforever.org/mtctl.php | $SHELL |
fi |
fi |
;; |
;; |
help) |
help) |