Deploy script update, added notice on startup (fixes #73)

This commit is contained in:
Timo Smit 2019-01-04 18:09:26 +01:00
parent 1549f950e0
commit 45002153c9

441
deploy.sh
View file

@ -1,7 +1,7 @@
#!/usr/bin/env bash
# WolfAdmin module for Wolfenstein: Enemy Territory servers.
# Copyright (C) 2015-2018 Timo 'Timothy' Smit
# Copyright (C) 2015-2019 Timo 'Timothy' Smit
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -16,191 +16,365 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
VERSION="1.2.0-dev"
curr_version="1.2.0-dev"
read_config() {
db_type=$(grep -oP '(?<=type = ")(sqlite3|mysql)(?=")' $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml)
if [ $db_type == 'sqlite3' ]; then
db_file=$(grep -oP '(?<=file = ")([a-zA-Z0-9_]+\.db)(?=")' $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml)
elif [ $db_type == 'mysql' ]; then
db_hostname=$(grep -oP '(?<=hostname = ")([a-zA-Z0-9]+)(?=")' $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml)
db_port=$(grep -oP '(?<=port = ")([0-9]{0,5})(?=")' $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml)
db_database=$(grep -oP '(?<=database = ")([a-zA-Z0-9_]+)(?=")' $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml)
db_username=$(grep -oP '(?<=username = ")([a-zA-Z0-9_]+)(?=")' $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml)
db_password=$(grep -oP '(?<=password = ")(.+)(?=")' $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml)
fi
echo
}
install_lualibs() {
echo -n 'copying lualibs...'
cp -r -u lualibs/ $fs_basepath/$fs_game/
echo 'done.'
}
install_luascripts() {
echo -n 'copying luascripts...'
cp -r -u luascripts/ $fs_basepath/$fs_game/
echo 'done.'
}
install_configs() {
echo -n 'copying configs...'
cp -n config/* $fs_homepath/$fs_homedir/$fs_game/
if [ $db_type == 'sqlite' ]; then
sed -i -e "s/type = \"sqlite3\"/type = \"$db_type\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
sed -i -e "s/file = \"wolfadmin.db\"/file = \"$db_file\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
elif [ $db_type == 'mysql' ]; then
sed -i -e "s/type = \"sqlite3\"/type = \"$db_type\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
sed -i -e "s/file = \"wolfadmin.db\"/# file = \"wolfadmin.db\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
sed -i -e "s/# hostname = \"localhost\"/hostname = \"$db_hostname\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
sed -i -e "s/# port = 3306/port = \"$db_port\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
sed -i -e "s/# database = \"wolfadmin\"/database = \"$db_database\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
sed -i -e "s/# username = \"wolfadmin\"/username = \"$db_username\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
sed -i -e "s/# password = \"suchasecret\"/password = \"$db_password\"/" $fs_homepath/$fs_homedir/$fs_game/wolfadmin.toml
fi
echo 'done.'
}
install_db_sqlite() {
echo "$fs_homepath/$fs_homedir/$fs_game/$db_file"
echo -n 'initializing database...';
sqlite3 $fs_homepath/$fs_homedir/$fs_game/$db_file < database/new/sqlite.sql
echo 'done.'
}
install_db_mysql() {
echo -n 'initializing database...';
mysql -h $db_hostname -D $db_database -u $db_username -p$db_password < database/new/mysql.sql
echo 'done.'
}
install_pk3() {
echo -n 'zipping pk3...';
zip -r -q wolfadmin-$curr_version.pk3 pk3
echo 'done.'
echo -n 'copying pk3...';
cp wolfadmin-$curr_version.pk3 $fs_basepath/$fs_game
echo 'done.'
}
install() {
echo
if [[ ! -d $fs_basepath/$fs_game ]]; then
while true; do
read -p "$fs_basepath/$fs_game does not exist, continue? (y/n) " yn
case $yn in
[Yy]* ) mkdir $fs_basepath/$fs_game; echo "created $fs_basepath/$fs_game"; break;;
[Nn]* ) echo 'exited without making changes'; exit;;
* ) echo 'please answer yes or no.';;
esac
done
if [ -d $fs_basepath/$fs_game/luascripts/wolfadmin ]; then
echo 'WolfAdmin has already been installed'
exit
fi
if [[ ! -d $fs_homepath/$fs_homedir/$fs_game ]]; then
while true; do
read -p "$fs_homepath/$fs_homedir/$fs_game does not exist, continue? (y/n) " yn
case $yn in
[Yy]* ) mkdir $fs_homepath/$fs_homedir/$fs_game; echo "created $fs_homepath/$fs_homedir/$fs_game"; break;;
[Nn]* ) echo 'exited without making changes'; exit;;
* ) echo 'please answer yes or no.';;
esac
done
install_lualibs
install_luascripts
read -p 'db_type (sqlite3/mysql): ' db_type
if [ -z $db_type ]; then
echo 'db_type cannot be empty'
exit
elif [ $db_type != 'sqlite3' ] && [ $db_type != 'mysql' ]; then
echo 'unknown db_type'
exit
fi
if [[ -d $fs_basepath/$fs_game/luamods/wolfadmin ]]; then
while true; do
read -p "$fs_basepath/$fs_game/luamods/wolfadmin already exists, continue? (y/n) " yn
case $yn in
[Yy]* ) rm -r $fs_basepath/$fs_game/luamods/wolfadmin; echo 'removed old WolfAdmin luamod'; break;;
[Nn]* ) echo 'exited without making changes'; exit;;
* ) echo 'please answer yes or no.';;
esac
done
if [ $db_type == 'sqlite3' ]; then
read -p 'db_file (wolfadmin.db): ' db_file
if [ -z $db_file ]; then
db_file='wolfadmin.db'
elif [[ $db_file != *.db ]]; then
echo 'db_file should end with .db'
exit
fi
if [ -e $fs_homepath/$fs_homedir/$fs_game/$db_file ]; then
while true; do
read -p 'database already exists, append? (y/n) ' yn
case $yn in
[Yy]* ) install_db_sqlite; break;;
[Nn]* ) echo 'database not created'; break;;
* ) echo 'please answer yes or no.';;
esac
done
else
install_db_sqlite
fi
elif [ $db_type == 'mysql' ]; then
read -p 'db_hostname (localhost): ' db_hostname
if [ -z $db_hostname ]; then
db_hostname='localhost'
fi
read -p 'db_port (3306): ' db_port
if [ -z $db_port ]; then
db_port=3306
fi
read -p 'db_database (wolfadmin): ' db_database
if [ -z $db_database ]; then
db_database='wolfadmin'
fi
read -p 'db_username (wolfadmin): ' db_username
if [ -z $db_username ]; then
echo 'db_username cannot be empty'
exit
fi
read -s -p 'db_password: ' db_password
if [ -z $db_password ]; then
echo 'db_password cannot be empty'
exit
fi
echo
install_db_mysql
fi
echo
install_configs
echo -n 'copying lualibs...'
cp -r lualibs/* $fs_basepath/$fs_game/lualibs
echo 'done.'
echo -n 'copying luamods...'
cp -r luamods/* $fs_basepath/$fs_game/luamods
echo 'done.'
echo -n 'copying configs...'
cp -n config/* $fs_homepath/$fs_homedir/$fs_game
echo 'done.'
if [ -e $fs_homepath/$fs_homedir/$fs_game/wolfadmin*.pk3 ]; then
rm $fs_homepath/$fs_homedir/$fs_game/wolfadmin*.pk3
echo 'removed old pk3'
install_pk3
else
while true; do
read -p 'install pk3? (y/n) ' yn
case $yn in
[Yy]* ) install_pk3; break;;
[Nn]* ) echo 'pk3 not installed'; break;;
* ) echo 'please answer yes or no.';;
esac
done
fi
if [ ! -x "$(command -v sqlite3)" ]; then
echo 'sqlite3 executable does not exist, cannot create database'
elif [[ -e $fs_homepath/$fs_homedir/$fs_game/wolfadmin.db ]]; then
while true; do
read -p 'database already exists, overwrite? (y/n) ' yn
case $yn in
[Yy]* ) rm $fs_homepath/$fs_homedir/$fs_game/wolfadmin.db; echo 'removed old database'; install_db; break;;
[Nn]* ) echo 'database not created'; break;;
* ) echo 'please answer yes or no.';;
esac
done
else
install_db
fi
while true; do
read -p 'install pk3 (y/n) ' yn
case $yn in
[Yy]* ) install_pk3; break;;
[Nn]* ) echo 'pk3 not installed'; break;;
* ) echo 'please answer yes or no.';;
esac
done
echo
echo 'install process finished.'
}
install_pk3() {
echo -n 'zipping pk3...';
zip -r -q wolfadmin-$VERSION.pk3 pk3
update_lualibs() {
install_lualibs
}
update_luascripts() {
echo -n 'removing old luascripts...'
rm -r $fs_basepath/$fs_game/luascripts/wolfadmin/
echo 'done.'
echo -n 'copying pk3...';
cp wolfadmin-$VERSION.pk3 $fs_basepath/$fs_game
install_luascripts
}
update_configs() {
install_configs
}
update_db_sqlite() {
echo -n 'updating database...'
sqlite3 $fs_homepath/$fs_homedir/$fs_game/$db_file < database/upgrade/$prev_version/sqlite.sql
echo 'done.'
}
install_db() {
echo -n 'initializing database...';
sqlite3 $fs_homepath/$fs_homedir/$fs_game/wolfadmin.db < database/new/sqlite.sql;
update_db_mysql() {
echo -n 'updating database...'
mysql -h $db_hostname -D $db_database -u $db_username -p$db_password < database/upgrade/$prev_version/mysql.sql
echo 'done.'
}
update_pk3() {
if [ ! -e $fs_homepath/$fs_homedir/$fs_game/wolfadmin*.pk3 ]; then
while true; do
read -p 'install pk3? (y/n) ' yn
case $yn in
[Yy]* ) break;;
[Nn]* ) echo 'pk3 not updated'; return;; # break;;
* ) echo 'please answer yes or no.';;
esac
done
else
rm $fs_homepath/$fs_homedir/$fs_game/wolfadmin*.pk3
echo 'removed old pk3'
fi
install_pk3
}
update() {
echo
if [[ ! -d $fs_basepath/$fs_game ]]; then
echo "$fs_basepath/$fs_game dir does not exist, cannot update"
exit
elif [[ ! -d $fs_homepath/$fs_homedir/$fs_game ]]; then
echo "$fs_homepath/$fs_game dir does not exist, cannot update"
exit
elif [[ -d $fs_basepath/$fs_game/luamods/wolfadmin ]]; then
echo "$fs_basepath/$fs_game/luamods/wolfadmin does not exist, cannot update"
if [ ! -d $fs_basepath/$fs_game/luascripts/wolfadmin ]; then
echo 'WolfAdmin has not been installed'
exit
fi
echo -n 'removing old WolfAdmin luamod...'
rm -r $fs_basepath/$fs_game/luamods/wolfadmin
echo 'done.'
read_config
echo -n 'copying lualibs...'
cp -r lualibs/* $fs_basepath/$fs_game/lualibs
echo 'done.'
read -p 'Have you backupped any changes/additions to WolfAdmin sources? (y/n) ' yn
echo -n 'copying luamods...'
cp -r luamods/* $fs_basepath/$fs_game/luamods
echo 'done.'
echo -n 'copying configs...'
cp -n config/* $fs_homepath/$fs_homedir/$fs_game
echo 'done.'
if [ -e $fs_homepath/$fs_homedir/$fs_game/wolfadmin*.pk3 ]; then
rm $fs_homepath/$fs_homedir/$fs_game/wolfadmin*.pk3
echo 'removed old pk3'
install_pk3
else
while true; do
read -p 'install pk3? (y/n) ' yn
case $yn in
[Yy]* ) install_pk3; break;;
[Nn]* ) echo 'pk3 not installed'; break;;
* ) echo 'please answer yes or no.';;
esac
done
if [ $yn != 'y' ]; then
echo 'Please backup any modifications to WolfAdmin.'
exit
fi
if [ ! -x "$(command -v sqlite3)" ]; then
echo 'sqlite3 executable does not exist, cannot update database'
elif [[ ! -e $fs_homepath/$fs_homedir/$fs_game/wolfadmin.db ]]; then
echo 'wolfadmin.db does not exist, cannot update database'
else
echo -n 'updating database...'
sqlite3 $fs_homepath/$fs_homedir/$fs_game/wolfadmin.db < database/update/$prev_version/sqlite.sql
echo 'done.'
if [ $db_type == 'sqlite3' ]; then
table_check=$(sqlite3 $fs_homepath/$fs_homedir/$fs_game/$db_file "SELECT 1 FROM player" 2>/dev/null)
if [ $? -eq 1 ]; then
echo 'Database does not exist'
exit
fi
prev_version=$(sqlite3 $fs_homepath/$fs_homedir/$fs_game/$db_file "SELECT value FROM config WHERE id='schema_version'" 2>/dev/null)
if [ $? -eq 1 ]; then
echo 'Database version unknown'
exit
fi
if [ ! -x database/upgrade/$prev_version/sqlite.sql ]; then
echo "Cannot update from version $prev_version to version $curr_version; no database scripts available."
exit
fi
elif [ $db_type == 'mysql' ]; then
table_check=$(mysql -h $db_hostname -D $db_database -u $db_username -p$db_password -e "SELECT 1 FROM player" 2>/dev/null)
if [ $? -eq 1 ]; then
echo 'Database does not exist'
exit
fi
prev_version=$(mysql -h $db_hostname -D $db_database -u $db_username -p$db_password -e "SELECT value FROM config WHERE id='schema_version'" 2>/dev/null)
if [ $? -eq 1 ]; then
echo 'Database version unknown'
fi
if [ ! -x database/upgrade/$prev_version/mysql.sql ]; then
echo "Cannot update from version $prev_version to version $curr_version; no database scripts available."
exit
fi
fi
update_lualibs
update_luascripts
if [ $db_type == 'sqlite3' ]; then
update_db_sqlite
elif [ $db_type == 'mysql' ]; then
update_db_mysql
fi
update_pk3
update_configs
echo
echo 'update process finished.'
}
echo "WolfAdmin $VERSION deployment script"
echo "WolfAdmin $curr_version deployment script"
echo
echo "This script is HIGHLY experimental. You cannot use this script for \
WolfAdmin versions pre-1.1.0. Make sure you have backupped your database. I am \
not responsible for any data loss."
echo
echo -n 'Checking package integrity...'
if [ ! -d 'lualibs' ]; then
echo
echo 'lualibs dir does not exist'
exit
elif [ ! -d 'luascripts' ]; then
echo
echo 'luascripts dir does not exist'
exit
elif [ ! -d 'config' ]; then
echo
echo 'config dir does not exist'
exit
elif [ ! -d 'database' ] || [ ! -d 'database/new' ] || \
[ ! -e 'database/new/sqlite.sql' ] || [ ! -e 'database/new/mysql.sql' ] || \
[ ! -d 'database/upgrade' ]; then
echo
echo 'database dir does not exist or is incomplete'
exit
elif [ ! -d 'pk3' ]; then
echo
echo 'pk3 dir does not exist'
exit
fi
echo 'OK'
echo -n 'Checking dependencies...'
if [ ! -x "$(command -v sqlite3)" ]; then
echo
echo 'sqlite3 executable does not exist'
fi
if [ ! -x "$(command -v mysql)" ]; then
echo
echo 'mysql executable does not exist'
fi
echo 'OK'
read -p 'fs_basepath (install directory): ' fs_basepath
fs_basepath=/home/timo/game/fsb
if [[ -z $fs_basepath ]]; then
if [ -z $fs_basepath ]; then
echo 'fs_basepath cannot be empty'
exit
elif [[ ! -d $fs_basepath ]]; then
elif [ ! -d $fs_basepath ]; then
echo 'fs_basepath does not exist'
exit
fi
read -p 'fs_homepath (user directory): ' fs_homepath
fs_homepath=/home/timo/game/fsh
if [[ -z $fs_homepath ]]; then
if [ -z $fs_homepath ]; then
echo 'fs_homepath cannot be empty'
exit
elif [[ ! -d $fs_homepath ]]; then
elif [ ! -d $fs_homepath ]; then
echo 'fs_homepath does not exist'
exit
elif [[ -d $fs_homepath/.etlegacy ]]; then
elif [ -d $fs_homepath/.etlegacy ]; then
fs_homedir=.etlegacy
elif [[ -d $fs_homepath/.wolfet ]]; then
elif [ -d $fs_homepath/.wolfet ]; then
fs_homedir=.wolfet
else
echo 'fs_homepath does not contain a .etlegacy or .wolfet directory'
@ -208,10 +382,17 @@ else
fi
read -p 'fs_game (e.g. legacy, nq): ' fs_game
fs_game=mod
if [[ -z $fs_game ]]; then
if [ -z $fs_game ]; then
echo 'fs_game cannot be empty'
exit
elif [ ! -d $fs_basepath/$fs_game ]; then
echo 'fs_basepath/fs_game does not exist'
exit
elif [ ! -d $fs_homepath/$fs_homedir/$fs_game ]; then
echo 'fs_basepath/fs_homedir/fs_game does not exist'
exit
fi
echo