forked from nalc/nalc-server
sys4
6cc32d5eec
* ./install.sh : Modification des arguments de ligne de commande, * ./shutdown.sh : Ajout d'arguments pour pouvoir faire une sauvegarde du serveur et/ou le redémarrer. * Ajout de minetest-dev.conf et minetest-stable.conf * Renommage de minetest-0.4.conf vers minetest-1.0.conf
419 lines
11 KiB
Bash
Executable File
419 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 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"
|
|
echo "version :"
|
|
echo -e "\tstable : Installation du serveur depuis sa branche stable. Suivez les instructions... (À priori 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... (Non Stable !)"
|
|
exit 0
|
|
}
|
|
|
|
ssh() {
|
|
ssh=$(strip $1)
|
|
echo "Installation avec identifiants ssh : $ssh"
|
|
}
|
|
|
|
url() {
|
|
url=$(strip $1)
|
|
}
|
|
|
|
makeopt() {
|
|
makeopt=$(strip $1)
|
|
}
|
|
|
|
full() {
|
|
if [[ -n $URL ]]; then
|
|
echo "Full install... with "$URL
|
|
else
|
|
echo "ERREUR: Vous devez choisir l'option --ssh ou --https avec cette commande !"
|
|
usage
|
|
fi
|
|
}
|
|
|
|
clean() {
|
|
echo "clean install..."
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
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 == "stable" || $ver == "1.0" ]]; then
|
|
branch="-b stable-0.4"
|
|
elif [[ $ver == "dev" ]]; then
|
|
branch="-b stable-5"
|
|
fi
|
|
git clone --depth 1 $branch https://gitlab.com/minetest/minetest.git
|
|
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.0"
|
|
elif [[ $ver == "stable" ]];then
|
|
branch="-b nalc"
|
|
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_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]Utiliser) : " 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
|
|
|
|
# dropdb $pg_dbname
|
|
# dropdb players-$pg_dbname
|
|
# createdb $pg_dbname
|
|
# createdb players-$pg_dbname
|
|
fi
|
|
|
|
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"
|
|
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
|
|
|
|
ln -s $(pwd)/world.mt minetest/worlds/$world_name/world.mt
|
|
|
|
cp -r world/* minetest/worlds/$world_name/
|
|
fi
|
|
}
|
|
|
|
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, [3]cancel, [4]Ne rien faire) : " continue
|
|
if [[ $continue == 1 ]]; then
|
|
cd nalc-server-mods
|
|
git pull
|
|
verif
|
|
git submodule update --init --recursive
|
|
verif
|
|
cd ..
|
|
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.0" ]]; then
|
|
branch="stable-1.0"
|
|
fi
|
|
git clone -b $branch $URL/nalc-server-mods.git
|
|
verif
|
|
cd nalc-server-mods
|
|
git submodule update --init --recursive
|
|
cd ..
|
|
fi
|
|
|
|
# Recréation des liens symboliques et du fichier world.mt (dans tous les cas)
|
|
rm minetest/mods/*
|
|
|
|
if [[ -a world.mt && -z $pg_dbname ]]; then
|
|
rm world.mt
|
|
cp worldmt.conf world.mt
|
|
fi
|
|
|
|
if [[ -d custom/mods ]]; then
|
|
ls custom/mods | while read -r mod; do
|
|
if [[ -d custom/mods/$mod ]]; then
|
|
rm nalc-server-mods/$mod
|
|
ln -s $(pwd)/custom/mods/$mod nalc-server-mods/$mod
|
|
fi
|
|
done
|
|
fi
|
|
|
|
local i=0
|
|
local md[1]="" # Mods to disable
|
|
local mods="3d_armor_ip 3d_armor_sfinv worldedit_brush"
|
|
if [[ $ver == "dev" ]]; then
|
|
mods="3d_armor_ip 3d_armor_sfinv"
|
|
fi
|
|
for mod in $mods; do
|
|
i=$(( $i+1 ))
|
|
md[$i]=$mod
|
|
done
|
|
|
|
ls nalc-server-mods | while read -r mod; do
|
|
if [[ -d nalc-server-mods/$mod ]]; then
|
|
ln -s $(pwd)/nalc-server-mods/$mod minetest/mods/$mod
|
|
|
|
if [[ -a nalc-server-mods/$mod/modpack.txt ]]; then
|
|
ls nalc-server-mods/$mod | while read -r submod; do
|
|
if [[ -d nalc-server-mods/$mod/$submod ]]; then
|
|
local mod_enable="true"
|
|
for (( modn=1; modn<=$i; modn++ )); do
|
|
if [[ ${md[$modn]} == $submod ]]; then
|
|
mod_enable="false"
|
|
fi
|
|
done
|
|
echo "load_mod_$submod = $mod_enable" >> world.mt
|
|
fi
|
|
done
|
|
else
|
|
local mod_enable="true"
|
|
for (( modn=1; modn<=$i; modn++ )); do
|
|
if [[ ${md[$modn]} == $mod ]]; then
|
|
mod_enable="false"
|
|
fi
|
|
done
|
|
echo "load_mod_$mod = $mod_enable" >> world.mt
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo "Liens des mods créés dans minetest/mods/"
|
|
}
|
|
|
|
post_install() {
|
|
if [[ ! -a minetest/minetest.conf ]]; then
|
|
cp minetest-$ver.conf minetest/minetest.conf
|
|
|
|
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
|
|
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
|
|
|
|
# fix technic_worldgen crash
|
|
#cd server-0.4/mods/technic
|
|
#git checkout fb93388f06fe87ee75aaaf04cf6edcf01a26d981 technic_worldgen/oregen.lua
|
|
#cd ../../..
|
|
#echo "Fix technic_worldgen pour éviter crash appliqué."
|
|
|
|
# skindb updater (à relancer à la main plusieurs fois pour l'instant)
|
|
#if [[ -d nalc-server-mods/skinsdb/updater ]]; then
|
|
# cd nalc-server-mods/skinsdb/updater
|
|
# ./update_from_db.py
|
|
# cd ../../..
|
|
#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" ]]; 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
|