2018-03-15 23:49:09 +01:00
#!/bin/bash
2018-03-21 01:28:29 +01:00
# Fonctions
strip( ) {
echo $1 | cut -d \' -f 2
}
2018-03-15 23:49:09 +01:00
verif( ) {
2018-03-21 01:28:29 +01:00
if [ [ $? -gt 0 ] ] ; then
2018-03-22 10:07:56 +01:00
echo "Erreur ! Arrêt du script."
exit 1
2018-03-21 01:28:29 +01:00
fi
2018-03-15 23:49:09 +01:00
}
2018-03-16 23:47:34 +01:00
error( ) {
2018-03-21 01:28:29 +01:00
echo "ERREUR : Vérifiez vos paramètres !" >& 2
echo "Utilisez l'option -h pour en savoir plus" >& 2
exit 1
2018-03-16 23:47:34 +01:00
}
usage( ) {
2018-03-21 01:28:29 +01:00
echo "Usage: ./install.sh [options] [--] <arg>"
echo "Options :"
2018-07-31 23:38:13 +02:00
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 "Arguments :"
2019-02-03 00:03:46 +01:00
echo -e "\t5 : Installation du serveur avec minetest-5.x. Suivez les instructions... (Non stable !)"
2018-07-31 23:38:13 +02:00
echo -e "\t0.4 : Installation du serveur avec minetest-0.4.x. Suivez les instructions... (Stable)"
2019-02-03 00:03:46 +01:00
echo -e "\tmaster : Installation du serveur avec la branche master de minetest. Suivez les instructions... (Non Stable !)"
2018-03-21 01:28:29 +01:00
exit 0
}
ssh( ) {
ssh = $( strip $1 )
echo " Installation avec identifiants ssh : $ssh "
}
url( ) {
url = $( strip $1 )
2018-03-16 23:47:34 +01:00
}
2018-03-21 01:28:29 +01:00
makeopt( ) {
makeopt = $( strip $1 )
}
full( ) {
if [ [ -n $URL ] ] ; then
2018-03-22 10:07:56 +01:00
echo "Full install... with " $URL
2018-03-21 01:28:29 +01:00
else
2018-03-22 10:07:56 +01:00
echo "ERREUR: Vous devez choisir l'option --ssh ou --https avec cette commande !"
usage
2018-03-21 01:28:29 +01:00
fi
}
clean( ) {
echo "clean install..."
}
2018-03-24 20:10:33 +01:00
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
2018-03-24 20:49:59 +01:00
read -p "Indiquez le nom de la BDD à utiliser : " pg_dbname
2018-03-24 20:10:33 +01:00
2019-02-03 00:03:46 +01:00
echo "gameid = nalc_game" > world.mt
2018-04-01 05:18:01 +02:00
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
2018-03-24 20:10:33 +01:00
}
2018-03-24 12:14:37 +01:00
install_0.4( ) {
if [ [ -d server-0.4 ] ] ; then
echo "Installation précédente détecté. Voulez-vous faire la mise à jour ?"
2018-03-31 16:13:41 +02:00
read -p "Votre choix ? (y, n, clean) " continuer
2018-03-24 12:14:37 +01:00
if [ [ $continuer = = "y" ] ] ; then
cd server-0.4
git pull
verif
2018-07-31 23:38:13 +02:00
git -c http.sslVerify= false submodule update --init --recursive
2018-03-24 12:14:37 +01:00
verif
2018-03-24 14:06:26 +01:00
cd ..
2018-03-31 16:13:41 +02:00
elif [ [ $continuer = = "clean" ] ] ; then
rm -rf server-0.4
2018-08-01 00:38:29 +02:00
git -c http.sslVerify= false clone --depth 1 $URL /server-nalc.git server-0.4
2018-03-31 16:13:41 +02:00
verif
cd server-0.4
2018-07-26 18:13:21 +02:00
git -c http.sslVerify= false submodule update --init --recursive
2018-03-31 16:13:41 +02:00
verif
cd ..
2018-03-24 12:14:37 +01:00
else
2018-07-31 23:23:50 +02:00
echo "Mise à jour annulée"
2018-03-24 12:14:37 +01:00
fi
else
2018-08-01 00:38:29 +02:00
git -c http.sslVerify= false clone --depth 1 $URL /server-nalc.git server-0.4
2018-03-24 12:14:37 +01:00
verif
cd server-0.4
2018-07-26 18:13:21 +02:00
git -c http.sslVerify= false submodule update --init --recursive
2018-03-24 12:14:37 +01:00
verif
2018-03-24 14:06:26 +01:00
cd ..
2018-03-24 12:14:37 +01:00
fi
}
2018-03-21 01:28:29 +01:00
install_minetest( ) {
if [ [ -z $makeopt ] ] ; then
2018-03-24 12:14:37 +01:00
local makeopt = $( grep -c processor /proc/cpuinfo)
2018-03-21 01:28:29 +01:00
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
2018-03-22 10:07:56 +01:00
rm -rf minetest
2018-03-21 01:28:29 +01:00
echo "Répertoire minetest supprimé."
else
echo "Installation annulée. Fin"
exit 0
fi
elif [ [ $continue = = "y" ] ] ; then
2018-03-22 10:07:56 +01:00
cd minetest
git pull
verif
cd ..
2018-03-21 01:28:29 +01:00
elif [ [ $continue = = "cancel" ] ] ; then
echo "Installation annulée. Fin"
exit 0
fi
fi
if [ [ ! -d minetest ] ] ; then
2018-03-31 16:13:41 +02:00
local branch = "-b master"
2018-03-24 12:14:37 +01:00
if [ [ $ver = = "0.4" ] ] ; then
2018-07-26 18:13:21 +02:00
branch = "-b stable-0.4"
2019-02-03 00:03:46 +01:00
elif [ [ $ver = = "5" ] ] ; then
branch = "-b stable-5.0"
2018-03-24 12:14:37 +01:00
fi
2018-08-01 00:38:29 +02:00
git clone --depth 1 $branch https://github.com/minetest/minetest.git
2018-03-22 10:07:56 +01:00
verif
2018-03-21 01:28:29 +01:00
fi
2018-03-24 12:14:37 +01:00
echo "Minetest va être (re)compilé..."
2018-03-21 01:28:29 +01:00
sleep 3
2018-03-22 10:07:56 +01:00
cd minetest
2019-02-03 00:03:46 +01:00
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
2018-03-22 10:07:56 +01:00
make -j$makeopt
2019-02-03 03:20:52 +01:00
verif
2018-03-21 01:28:29 +01:00
echo "Installation de Minetest terminé."
2018-03-22 10:07:56 +01:00
cd ..
2018-03-21 01:28:29 +01:00
}
install_minetest_game( ) {
2019-02-03 00:03:46 +01:00
if [ [ -d nalc_game ] ] ; then
echo "Installation précédente du jeux NALC détecté."
2018-03-22 10:07:56 +01:00
read -p "Mettre à jour ? (y,n,clean,cancel) " continue
if [ [ $continue = = "y" ] ] ; then
2019-02-03 00:03:46 +01:00
cd nalc_game
2018-03-22 10:07:56 +01:00
git pull
verif
cd ..
2019-02-03 00:03:46 +01:00
echo "Mise à jour du jeux NALC depuis dépôt distant terminé."
2018-03-22 10:07:56 +01:00
elif [ [ $continue = = "clean" ] ] ; then
2019-02-03 00:03:46 +01:00
echo "/!\ Cette action va effacer les données du répertoire nalc_game"
2018-03-22 10:07:56 +01:00
read -p "Êtes-vous sûr de vouloir continuer ? (y or n) " continue
if [ [ $continue = = "y" ] ] ; then
2019-02-03 00:03:46 +01:00
rm -rf nalc_game
echo "Jeux NALC supprimé."
2018-03-22 10:07:56 +01:00
else
echo "Mise à jour annulée. Terminé."
exit 0
fi
elif [ [ $continue = = "cancel" ] ] ; then
echo "Mise à jour annulée. Terminé."
exit 0
fi
fi
2019-02-03 00:03:46 +01:00
if [ [ ! -d nalc_game ] ] ; then
2018-03-31 16:13:41 +02:00
local branch = "-b master"
2018-04-01 05:18:01 +02:00
if [ [ $ver = = "0.4" ] ] ; then
2019-02-03 00:03:46 +01:00
branch = "-b nalc"
elif [ [ $ver = = "5" ] ] ; then
branch = "-b stable-5.0"
2018-03-24 12:14:37 +01:00
fi
2019-02-03 00:03:46 +01:00
git clone --depth 1 $branch $URL /nalc_game.git
2018-03-31 16:13:41 +02:00
verif
2019-02-03 00:03:46 +01:00
echo "Clonage de nalc_game terminé."
2018-03-22 10:07:56 +01:00
fi
2019-02-03 00:03:46 +01:00
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éé. "
2018-03-22 10:07:56 +01:00
fi
2019-02-03 00:03:46 +01:00
echo "Installation/Mise à jour du jeux NALC terminé."
2018-03-22 10:07:56 +01:00
}
install_world( ) {
2019-02-03 00:03:46 +01:00
local world_name = "nalc"
if [ [ -n $pg_dbname ] ] ; then
world_name = $pg_dbname
fi
if [ [ -d minetest/worlds/$world_name ] ] ; then
2018-03-22 10:07:56 +01:00
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
2018-07-31 23:23:50 +02:00
if [ [ -n $pg_dbname ] ] ; then
2019-02-03 00:03:46 +01:00
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
2018-07-31 23:23:50 +02:00
# dropdb $pg_dbname
# dropdb players-$pg_dbname
# createdb $pg_dbname
# createdb players-$pg_dbname
fi
2019-02-03 00:03:46 +01:00
if [ [ -d "minetest/worlds/" $world_name "_old" ] ] ; then
rm -rf "minetest/worlds/" $world_name "_old"
2018-03-22 10:07:56 +01:00
fi
2019-02-03 00:03:46 +01:00
mv minetest/worlds/$world_name "minetest/worlds/" $world_name "_old"
2018-03-22 10:07:56 +01:00
fi
fi
2019-02-03 00:03:46 +01:00
if [ [ ! -d minetest/worlds/$world_name ] ] ; then
mkdir -p minetest/worlds/$world_name
2018-03-31 16:13:41 +02:00
if [ [ -n $pg_dbname ] ] ; then
createdb $pg_dbname
createdb players-$pg_dbname
fi
2019-02-03 00:03:46 +01:00
ln -s $( pwd ) /world.mt minetest/worlds/$world_name /world.mt
2019-02-03 03:20:52 +01:00
cp -r world/* minetest/worlds/$world_name /
2018-03-21 01:28:29 +01:00
fi
2018-03-22 10:07:56 +01:00
}
install_mods( ) {
2019-02-03 00:03:46 +01:00
# if [[ $ver == "0.4" ]]; then
# local i=0
# local md[1]="" # Mods to disable
# for mod in 3d_armor_ip 3d_armor_sfinv mysql_auth watershed mobs_old magicmithril blackmithril hardenedleather reinforcedleather obsidian eventobjects player_inactive random_messages irc irc_commands profilerdumper profnsched; do
# i=$(( $i+1 ))
# md[$i]=$mod
# done
#
# if [[ -d minetest/mods ]]; then
# rm -rf minetest/mods
# ln -s $(pwd)/server-0.4/mods minetest/mods
# fi
#
# if [[ -a world.mt && -z $pg_dbname ]]; then
# rm world.mt
# cp worldmt.conf world.mt
# fi
#
# ls server-0.4/mods | while read -r mod; do
# if [[ -a server-0.4/mods/$mod/modpack.txt ]]; then
# ls server-0.4/mods/$mod | while read -r submod; do
# if [[ -d server-0.4/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
# if [[ $mod_enable == "true" && -d custom/textures/$submod ]]; then
# cp custom/textures/$submod/* server-0.4/mods/$mod/$submod/textures/
# fi
# 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
# if [[ $mod_enable == "true" && -d custom/textures/$mod ]]; then
# cp custom/textures/$submod/* server-0.4/mods/$mod/textures/
# fi
# fi
# done
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
2018-03-24 12:14:37 +01:00
fi
2019-02-03 00:03:46 +01:00
fi
if [ [ ! -d nalc-server-mods ] ] ; then
git clone $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
2018-03-31 16:13:41 +02:00
2019-02-03 00:03:46 +01:00
local i = 0
local md[ 1] = "" # Mods to disable
for mod in 3d_armor_ip 3d_armor_sfinv nalc_lib worldedit_brush; 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
2018-03-31 16:13:41 +02:00
local mod_enable = "true"
2018-04-01 05:18:01 +02:00
for ( ( modn = 1; modn<= $i ; modn++ ) ) ; do
2018-03-31 16:13:41 +02:00
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"
2018-04-01 05:18:01 +02:00
for ( ( modn = 1; modn<= $i ; modn++ ) ) ; do
2019-02-13 20:59:27 +01:00
if [ [ ${ md [ $modn ] } = = $mod ] ] ; then
2018-03-31 16:13:41 +02:00
mod_enable = "false"
fi
2019-02-03 00:03:46 +01:00
done
2018-03-31 16:13:41 +02:00
echo " load_mod_ $mod = $mod_enable " >> world.mt
fi
2018-03-24 12:14:37 +01:00
fi
2019-02-03 00:03:46 +01:00
done
echo "Liens des mods créés dans minetest/mods/"
2018-03-21 01:28:29 +01:00
}
2018-03-24 14:06:26 +01:00
post_install( ) {
if [ [ ! -a minetest/minetest.conf ] ] ; then
2019-02-03 00:03:46 +01:00
cp minetest-$ver .conf minetest/minetest.conf
2018-03-24 14:06:26 +01:00
echo " Veuillez éditer le fichier $( pwd ) /minetest/minetest.conf "
fi
if [ [ ! -d logs ] ] ; then
mkdir logs
fi
2019-02-03 00:03:46 +01:00
if [ [ ! -a start.sh ] ] ; then
cp start.sh.example ./start.sh
echo "Veuiller éditer le fichier start.sh"
2018-03-24 14:06:26 +01:00
fi
2018-03-25 03:00:27 +02:00
2019-02-03 00:03:46 +01:00
# 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é."
2018-03-25 15:53:26 +02:00
# skindb updater (à relancer à la main plusieurs fois pour l'instant)
2019-02-03 00:03:46 +01:00
#if [[ -d nalc-server-mods/skinsdb/updater ]]; then
# cd nalc-server-mods/skinsdb/updater
# ./update_from_db.py
# cd ../../..
#fi
2018-03-24 14:06:26 +01:00
}
2018-03-21 01:28:29 +01:00
init( ) {
2018-03-24 12:14:37 +01:00
ver = $( strip $1 )
2018-03-21 01:28:29 +01:00
if [ [ -n $ssh && -n $url ] ] ; then
URL = $ssh \: $url
elif [ [ -n $url ] ] ; then
URL = $url
else
2019-02-03 00:03:46 +01:00
URL = "https://sys4.fr/gitea/nalc"
2018-03-21 01:28:29 +01:00
fi
read -p "L'installation va démarrer. Continuer ? (y or n) : " continue
if [ [ $continue = = "y" ] ] ; then
2019-02-03 00:03:46 +01:00
# if [[ $ver == "0.4" ]]; then
# install_0.4
# fi
2018-03-21 01:28:29 +01:00
install_minetest
install_minetest_game
install_mods
2018-03-22 10:07:56 +01:00
install_world
2018-03-24 14:06:26 +01:00
post_install
2018-03-21 01:28:29 +01:00
echo "L'installation est terminé. Bravo !"
else
echo "Installation annulée. Fin."
fi
}
action( ) {
local arg = $( strip $1 )
2019-02-03 00:03:46 +01:00
if [ [ $arg = = "5" || $arg = = "0.4" || $arg = = "master" ] ] ; then
init $arg
2018-03-21 01:28:29 +01:00
else
2018-03-22 10:07:56 +01:00
error
2018-03-21 01:28:29 +01:00
fi
exit 0
}
2018-03-24 12:14:37 +01:00
irrlicht( ) {
local arg = $( strip $1 )
if [ [ -d $arg ] ] ; then
irrlicht_src = " -DIRRLICHT_SOURCE_DIR= $arg "
fi
}
2018-03-21 01:28:29 +01:00
# Pas de paramètre
#[[ $# -lt 1 ]] && error
# ou
[ [ $# -lt 1 ] ] && usage
# -o : Options courtes
# -l : options longues
2018-03-24 20:10:33 +01:00
OPT = $( getopt -o h,p,j:,i: -l help,postgresql,url:,ssh:,makeopt:,irrlicht: -- " $@ " )
2018-03-21 01:28:29 +01:00
# éclatement de $options en $1, $2...
set -- $OPT
while true; do
case " $1 " in
-h| --help)
usage; ;
2018-03-24 12:14:37 +01:00
-i| --irrlicht)
irrlicht $2
shift 2; ;
2018-03-24 20:10:33 +01:00
-p| --postgresql)
postgresql
shift; ;
2018-03-21 01:28:29 +01:00
--ssh)
ssh $2
shift 2; ;
--url)
url $2
shift 2; ;
-j| --makeopt)
makeopt $2
shift 2; ;
--)
shift; ;
*)
action $1
shift; ;
esac
done