nalc-server/install.sh

370 lines
10 KiB
Bash
Executable File

#!/bin/bash
# Author: Sys4
# License: GPLv3
# Fonctions
strip() {
echo $1 | cut -d \' -f 2
}
verif() {
if [[ $? -gt 0 ]]; then
echo "Erreur ! Arrêt du script."
exit 1
fi
}
error() {
echo "ERREUR : Vérifiez vos paramètres !" >&2
echo "Utilisez l'option -h pour en savoir plus" >&2
exit 1
}
usage() {
echo "Usage: ./install.sh [options] [--] <version>"
echo "Options :"
echo -e "\t-h --help\tAffiche l'aide."
echo -e "\t-j --makeopt\tNombre de threads de compilation."
echo -e "\t--ssh <user@host>: Identifiants ssh."
echo -e "\t--url <URL>: URL distante personnalisée."
echo -e "\t\tSi l'option --ssh est passée en option, il s'agira du chemin distant."
echo -e "\t-i --irrlicht\tChemin personnalisé des sources irrlicht."
echo -e "\t-p --postgresql\tSi vous voulez que le serveur soit configuré avec postgresql. Sinon leveldb par défaut."
echo "version :"
echo -e "\tstable : Installation du serveur compatible avec la dernière branche stable de minetest. Suivez les instructions... (Recommandé)"
echo -e "\t1.3 : Installation du serveur compatible avec minetest-5.3. Suivez les instructions... (Stable)"
echo -e "\t1.2 : Installation du serveur compatible avec minetest-5.2. Suivez les instructions... (Stable)"
echo -e "\t1.1 : Installation du serveur depuis la branche 1.1 compatible Minetest 5.0. Suivez les instructions... (Stable)"
echo -e "\t1.0 : Installation du serveur compatible avec minetest-0.4.17.x. Suivez les instructions... (Stable)"
echo -e "\tdev : Installation de la version en cours de developpement du serveur. Suivez les instructions... (Le plus à jour mais non Stable !)"
exit 0
}
ssh() {
ssh=$(strip $1)
echo "Installation avec identifiants ssh : $ssh"
}
url() {
url=$(strip $1)
}
makeopt() {
makeopt=$(strip $1)
}
postgresql() {
echo "Les indications à fournir ci-après nécessite d'avoir configuré un serveur postgresql au préalable. (Ctrl-C) pour annuler."
read -p "Indiquez l'adresse de la base de données : " pg_url
read -p "Indiquez l'utilisateur de la BDD : " pg_user
read -p "Indiquez le mot de passe : " pg_password
read -p "Indiquez le nom de la BDD à utiliser : " pg_dbname
echo "gameid = nalc_game" > world.mt
echo "backend = postgresql" >> world.mt
echo "player_backend = postgresql" >> world.mt
echo "pgsql_connection = host=$pg_url user=$pg_user password=$pg_password dbname=$pg_dbname" >> world.mt
echo "pgsql_player_connection = host=$pg_url user=$pg_user password=$pg_password dbname=players-$pg_dbname" >> world.mt
echo "auth_backend = sqlite3" >> world.mt
}
install_minetest() {
if [[ -z $makeopt ]]; then
local makeopt=$(grep -c processor /proc/cpuinfo)
fi
if [[ -d minetest ]]; then
echo "Installation précédente de Minetest détecté."
read -p "Mettre à jour ? (y,n,clean,cancel) : " continue
if [[ $continue == "clean" ]]; then
echo "Attention ! Cela va supprimer définitivement toutes les données."
read -p "Êtes-vous certains de vouloir continuer ? (y or n) : " continue
if [[ $continue == "y" ]]; then
rm -rf minetest
echo "Répertoire minetest supprimé."
else
echo "Installation annulée. Fin"
exit 0
fi
elif [[ $continue == "y" ]]; then
cd minetest
git pull
verif
cd ..
elif [[ $continue == "cancel" ]]; then
echo "Installation annulée. Fin"
exit 0
fi
fi
if [[ ! -d minetest ]]; then
local branch="-b master"
if [[ $ver == "1.0" ]]; then
branch="-b stable-0.4"
elif [[ $ver == "1.1" ]]; then
branch="-b 5.1.1"
elif [[ $ver == "1.2" ]]; then
branch="-b 5.2.0"
elif [[ $ver == "1.3" || $ver == "stable" ]]; then
branch="-b 5.3.0"
elif [[ $ver == "dev" ]]; then
branch="-b stable-5"
fi
if [[ -n $ssh ]]; then
git clone --depth 1 $branch $ssh\:minetest/minetest.git
else
git clone --depth 1 $branch https://gitlab.com/minetest/minetest.git
fi
verif
fi
echo "Minetest va être (re)compilé..."
sleep 3
cd minetest
cmake . -DBUILD_CLIENT=0 -DBUILD_SERVER=1 -DENABLE_SOUND=0 -DENABLE_SYSTEM_GMP=1 $irrlicht_src -DENABLE_LEVELDB=1 -DENABLE_REDIS=1 -DENABLE_POSTGRESQL=1 -DRUN_IN_PLACE=1 -DENABLE_GETTEXT=1 -DENABLE_FREETYPE=1 -DENABLE_LUAJIT=1 -DENABLE_CURL=1
make -j$makeopt
verif
echo "Installation de Minetest terminé."
cd ..
}
install_minetest_game() {
if [[ -d nalc_game ]]; then
echo "Installation précédente du jeux NALC détecté."
read -p "Mettre à jour ? (y,n,clean,cancel) " continue
if [[ $continue == "y" ]]; then
cd nalc_game
git pull
verif
cd ..
echo "Mise à jour du jeux NALC depuis dépôt distant terminé."
elif [[ $continue == "clean" ]]; then
echo "/!\ Cette action va effacer les données du répertoire nalc_game"
read -p "Êtes-vous sûr de vouloir continuer ? (y or n) " continue
if [[ $continue == "y" ]]; then
rm -rf nalc_game
echo "Jeux NALC supprimé."
else
echo "Mise à jour annulée. Terminé."
exit 0
fi
elif [[ $continue == "cancel" ]]; then
echo "Mise à jour annulée. Terminé."
exit 0
fi
fi
if [[ ! -d nalc_game ]]; then
local branch="-b master"
if [[ $ver == "1.0" ]]; then
branch="-b nalc-1.0"
elif [[ $ver == "1.1" ]]; then
branch="-b nalc-1.1"
elif [[ $ver == "1.2" ]]; then
branch="-b nalc-1.2"
elif [[ $ver == "1.3" || $ver == "stable" ]]; then
branch="-b nalc-1.3"
elif [[ $ver == "dev" ]]; then
branch="-b nalc-dev"
fi
git clone --depth 1 $branch $URL/nalc_game.git
verif
echo "Clonage de nalc_game terminé."
fi
if [[ ! -L minetest/games/nalc_game ]]; then
ln -s $(pwd)/nalc_game minetest/games/nalc_game
echo "Lien symbolique minetest/games/nalc_game vers $(pwd)/nalc_game créé."
fi
echo "Installation/Mise à jour du jeux NALC terminé."
}
install_mods() {
if [[ -d nalc-server-mods ]]; then
echo "Le dossier de mods est déjà présent. Que souhaitez-vous faire ?"
read -p "Choisissez parmi la liste, ([1]update, [2]clean update, [3]cancel, [4]Ne rien faire) : " continue
if [[ $continue == 1 ]]; then
./upgrade.sh -m
elif [[ $continue == 2 ]]; then
rm -rf nalc-server-mods
elif [[ $continue == 3 ]]; then
echo "Mise à jour des mods annulé. Terminé."
exit 0
fi
fi
if [[ ! -d nalc-server-mods ]]; then
local branch="master"
if [[ $ver == "dev" ]]; then
branch="dev"
elif [[ $ver == "1.3" || $ver == "stable" ]]; then
branch="stable-1.3"
elif [[ $ver == "1.2" ]]; then
branch="stable-1.2"
elif [[ $ver == "1.1" ]]; then
branch="stable-1.1"
elif [[ $ver == "1.0" ]]; then
branch="stable-1.0"
fi
git clone --depth 1 -b $branch $URL/nalc-server-mods.git
verif
./upgrade.sh -m
fi
if [[ -z $pg_dbname ]]; then
if [[ $ver == "1.0" ]]; then
cp worldmt-1.0.conf world.mt
elif [[ $ver == "1.1" || $ver == "1.2" || $ver == "1.3" || $ver == "stable" || $ver == "dev" ]]; then
cp worldmt-1.1.conf world.mt
fi
fi
}
install_world() {
local world_name="nalc-$ver"
if [[ -n $pg_dbname ]]; then
world_name=$pg_dbname
fi
if [[ -d minetest/worlds/$world_name ]]; then
echo "Une map est déjà présente. Que souhaitez-vous faire ?"
read -p "Choisissez parmi la liste ([1]Nouveau, [2]Mettre à jour [3]Ne rien faire) : " continuer
if [[ $continuer == 1 ]]; then
if [[ -n $pg_dbname ]]; then
read -p "Les BDD $pg_dbname et players-$pg_dbname ne seront pas effacées. À vous de le faire manuellement après ce script ! -- Press enter -- : " continuer
fi
# On sauvegarde l'ancien world
if [[ -d "minetest/worlds/"$world_name"_old" ]]; then
rm -rf "minetest/worlds/"$world_name"_old"
fi
mv minetest/worlds/$world_name "minetest/worlds/"$world_name"_old"
elif [[ $continuer == 2 ]]; then
# On sauvegarde l'ancien world
if [[ -d "minetest/worlds/"$world_name"_old" ]]; then
rm -rf "minetest/worlds/"$world_name"_old"
fi
cp -r minetest/worlds/$world_name "minetest/worlds/"$world_name"_old"
# On met à jour les fichiers contenues dans cette map
./upgrade.sh -w $world_name -b $ver
fi
fi
if [[ ! -d minetest/worlds/$world_name ]]; then
mkdir -p minetest/worlds/$world_name
if [[ -n $pg_dbname ]]; then
createdb $pg_dbname
createdb players-$pg_dbname
fi
./upgrade.sh -w $world_name -b $ver
mkdir -p minetest/worlds/$world_name/runes
fi
}
post_install() {
if [[ ! -a minetest/minetest.conf ]]; then
local world_name="nalc-$ver"
if [[ -n $pg_dbname ]]; then
world_name=$pg_dbname
fi
./upgrade.sh -w $world_name -b $ver -f mtconf
echo "Veuillez éditer le fichier $(pwd)/minetest/minetest.conf"
fi
if [[ ! -d logs ]]; then
mkdir logs
fi
if [[ ! -a start.sh ]]; then
cp start.sh.example start.sh
chmod u+x start.sh
echo "Veuillez éditer le fichier $(pwd)/start.sh"
echo "Veuillez éditer le fichier $(pwd)/backup.sh"
echo "Veuillez éditer le fichier $(pwd)/shutdown.sh"
fi
}
init() {
ver=$(strip $1)
if [[ -n $ssh && -n $url ]]; then
URL=$ssh\:$url
elif [[ -n $url ]]; then
URL=$url
else
URL="https://sys4.fr/gitea/nalc"
fi
read -p "L'installation va démarrer. Continuer ? (y or n) : " continue
if [[ $continue == "y" ]]; then
install_minetest
install_minetest_game
install_mods
install_world
post_install
echo "L'installation est terminé. Bravo !"
else
echo "Installation annulée. Fin."
fi
}
action() {
local arg=$(strip $1)
if [[ $arg == "dev" || $arg == "stable" || $arg == "1.0" || $arg == "1.1" || $arg == "1.2" || $arg == "1.3" ]]; then
init $arg
else
error
fi
exit 0
}
irrlicht() {
local arg=$(strip $1)
if [[ -d $arg ]]; then
irrlicht_src="-DIRRLICHT_SOURCE_DIR=$arg"
fi
}
# Pas de paramètre
#[[ $# -lt 1 ]] && error
# ou
[[ $# -lt 1 ]] && usage
# -o : Options courtes
# -l : options longues
OPT=$(getopt -o h,p,j:,i: -l help,postgresql,url:,ssh:,makeopt:,irrlicht: -- "$@")
# éclatement de $options en $1, $2...
set -- $OPT
while true; do
case "$1" in
-h|--help)
usage;;
-i|--irrlicht)
irrlicht $2
shift 2;;
-p|--postgresql)
postgresql
shift;;
--ssh)
ssh $2
shift 2;;
--url)
url $2
shift 2;;
-j|--makeopt)
makeopt $2
shift 2;;
--)
shift;;
*)
action $1
shift;;
esac
done