nalc-server/install.sh

418 lines
12 KiB
Bash
Raw Normal View History

2018-03-15 23:49:09 +01:00
#!/bin/bash
2019-04-28 22:43:57 +02:00
# Author: Sys4
# License: GPLv3
2018-03-15 23:49:09 +01:00
# Fonctions
strip() {
echo $1 | cut -d \' -f 2
}
2018-03-15 23:49:09 +01:00
verif() {
if [ $? -gt 0 ]; then
2020-07-18 12:37:59 +02:00
echo "Erreur ! Arrêt du script."
exit 1
fi
2018-03-15 23:49:09 +01:00
}
2018-03-16 23:47:34 +01:00
error() {
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() {
echo "Usage : ./install.sh [options] [--] <version>"
echo -e "\nOptions :"
echo -e "\t-h | --help\t\tAffiche cette aide."
echo -e "\t-j | --makeopt\t\tNombre de threads de compilation. (Nombre total de cœurs par défaut)"
echo -e "\t--ssh <user@host>\tIdentifiants ssh."
echo -e "\t--url <URL>\t\tURL distante personnalisée."
echo -e "\t\t\t\tSi l'option --ssh est passée en option, il s'agira du chemin distant."
echo -e "\t-i | --irrlicht\t\tChemin personnalisé des sources irrlicht."
echo -e "\t-p | --postgresql\tBackend map et joueurs avec postgresql. Sinon leveldb sera utilisé par défaut."
echo -e "\t-e | --exec <minetest bin>\tChemin de l'exécutable Minetest. Ex. /usr/local/bin/minetestserver"
echo -e "\t-d | --dir <minetest server dir>\tDossier d'exécution du serveur. Ex. /var/lib/minetest/.minetest"
echo -e "\nversion :"
echo -e "\tstable : La dernière version stable du serveur sera installée avec la dernière version stable de minetest. Suivez les instructions... (Recommandé)"
echo -e "\tdev : La version du serveur en cours de developpement sera installée avec la dernière version stable de minetest. Suivez les instructions... (Le plus à jour mais risques d'instabilités !)"
echo -e "\texperimental : La version experimentale du serveur sera installée avec la branche master de Minetest (version de dev). Suivez les instructions... (Attention, très experimental !)"
echo -e "\nExemples :"
echo -e "\n\t\$ ./install.sh stable"
echo -e "\tInstalle la dernière version stable du serveur avec leveldb comme backend pour la map et les utilisateurs. Tous les cœurs du processeur sont utilisés pour la compilation."
echo -e "\n\t\$ ./install.sh -j12 --url https://sys4.fr/gitea/grossam -i /home/grossam/lib/irrlichtmt -p dev"
echo -e "\tInstalle la version dev d'un fork de nalc créé par l'utilisateur grossam avec 12 threads de compilation, chemin personnalisé d'irrlichtmt et support de PostgreSQL comme backend de la map et des joueurs.\n"
echo -e "\nÀ voir également :"
echo -e "\tGuide de contribution et de développement du serveur NALC"
echo -e "\thttps://sys4.fr/gitea/nalc/nalc-server/wiki/Guide-de-contribution-et-de-d%C3%A9veloppement-du-serveur-NALC\n"
exit 0
}
ssh() {
ssh=$(strip $1)
echo "Installation avec identifiants ssh : $ssh"
}
url() {
2020-07-18 12:37:59 +02:00
url=$(strip $1)
2018-03-16 23:47:34 +01:00
}
makeopt() {
2020-07-18 12:37:59 +02:00
makeopt=$(strip $1)
}
postgresql() {
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02:00
local makeopt=$(grep -c processor /proc/cpuinfo)
fi
local branch="-b 5.5.0"
if [ $ver == "dev" ]; then
branch="-b stable-5"
elif [ $ver == "experimental" ]; then
branch="-b master"
fi
if [ -d minetest ]; then
2020-07-18 12:37:59 +02:00
echo "Installation précédente de Minetest détecté."
read -p "Mettre à jour ? (y,n,clean,cancel) : " continue
if [ $continue == "clean" ]; then
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02:00
rm -rf minetest
echo "Répertoire minetest supprimé."
else
echo "Installation annulée. Fin"
exit 0
fi
elif [ $continue == "y" ]; then
2020-07-18 12:37:59 +02:00
cd minetest
git pull
verif
cd ..
elif [ $continue == "cancel" ]; then
2020-07-18 12:37:59 +02:00
echo "Installation annulée. Fin"
exit 0
fi
fi
if [ ! -d minetest ]; then
if [ -n $ssh ]; then
2020-07-18 12:37:59 +02:00
git clone --depth 1 $branch $ssh\:minetest/minetest.git
else
git clone --depth 1 $branch https://github.com/minetest/minetest.git
2020-07-18 12:37:59 +02:00
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 -DENABLE_JSONCPP=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=0 -DENABLE_CURSES=1 -DENABLE_SPATIAL=1
2020-07-18 12:37:59 +02:00
make -j$makeopt
verif
echo "Installation de Minetest terminé."
cd ..
}
install_minetest_game() {
if [ -d nalc_game ]; then
2020-07-18 12:37:59 +02:00
echo "Installation précédente du jeux NALC détecté."
read -p "Mettre à jour ? (y,n,clean,cancel) " continue
if [ $continue == "y" ]; then
2020-07-18 12:37:59 +02:00
cd nalc_game
git pull
verif
cd ..
echo "Mise à jour du jeux NALC depuis dépôt distant terminé."
elif [ $continue == "clean" ]; then
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02:00
rm -rf nalc_game
echo "Jeux NALC supprimé."
else
echo "Mise à jour annulée. Terminé."
exit 0
fi
elif [ $continue == "cancel" ]; then
2020-07-18 12:37:59 +02:00
echo "Mise à jour annulée. Terminé."
exit 0
fi
fi
if [ ! -d nalc_game ]; then
2020-07-18 12:37:59 +02:00
local branch="-b master"
if [ $ver == "dev" ]; then
branch="-b dev"
elif [ $ver == "experimental" ]; then
branch="-b experimental"
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02:00
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é."
2018-03-22 10:07:56 +01:00
}
install_mods() {
if [ -d nalc-server-mods ]; then
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02:00
./upgrade.sh -m
elif [ $continue == 2 ]; then
2020-07-18 12:37:59 +02:00
rm -rf nalc-server-mods
elif [ $continue == 3 ]; then
2020-07-18 12:37:59 +02:00
echo "Mise à jour des mods annulé. Terminé."
exit 0
fi
fi
if [ ! -d nalc-server-mods ]; then
2020-07-18 12:37:59 +02:00
local branch="master"
if [ $ver == "dev" ]; then
2020-07-18 12:37:59 +02:00
branch="dev"
elif [ $ver == "experimental" ]; then
branch="experimental"
2020-07-18 12:37:59 +02:00
fi
git clone --depth 1 -b $branch $URL/nalc-server-mods.git
verif
./upgrade.sh -m
fi
if [ -z $pg_dbname ]; then
cp worldmt-1.1.conf world.mt
2020-07-18 12:37:59 +02:00
fi
}
2018-03-31 16:13:41 +02:00
install_world() {
2020-07-18 12:37:59 +02:00
local world_name="nalc-$ver"
if [ -n $pg_dbname ]; then
2020-07-18 12:37:59 +02:00
world_name=$pg_dbname
fi
if [ -d minetest/worlds/$world_name ]; then
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02: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
fi
# On sauvegarde l'ancien world
if [ -d "minetest/worlds/"$world_name"_old" ]; then
2020-07-18 12:37:59 +02:00
rm -rf "minetest/worlds/"$world_name"_old"
fi
mv minetest/worlds/$world_name "minetest/worlds/"$world_name"_old"
elif [ $continuer == 2 ]; then
2020-07-18 12:37:59 +02:00
# On sauvegarde l'ancien world
if [ -d "minetest/worlds/"$world_name"_old" ]; then
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02:00
mkdir -p minetest/worlds/$world_name
if [ -n $pg_dbname ]; then
2020-07-18 12:37:59 +02:00
createdb $pg_dbname
createdb players-$pg_dbname
fi
./upgrade.sh -w $world_name -b $ver
mkdir -p minetest/worlds/$world_name/runes
fi
}
2018-03-24 14:06:26 +01:00
post_install() {
if [ ! -a minetest/minetest.conf ]; then
2020-07-18 12:37:59 +02:00
local world_name="nalc-$ver"
if [ -n $pg_dbname ]; then
2020-07-18 12:37:59 +02:00
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
2020-07-18 12:37:59 +02:00
mkdir logs
fi
if [ ! -a start.sh ]; then
2020-07-18 12:37:59 +02:00
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"
echo ""
echo "Pour utiliser la génération de la carte, installer ImageMagick avec la dépendance fontconfig et truetype."
echo "Il faudra aussi autoriser lecture et écriture pour PS. Dans le fichier de gestion de la police de sécurité d'ImageMagick."
2020-07-18 12:37:59 +02:00
fi
2018-03-24 14:06:26 +01:00
}
install_mtmapper() {
if [ -n $ssh ]; then
URL=$ssh\:minetest
else
URL="https://sys4.fr/gitea/minetest"
fi
if [ ! -d "$(pwd)/minetestmapper" ]; then
git clone --depth 1 $URL/minetestmapper.git
verif
fi
pushd "$(pwd)/minetestmapper"
git pull
cmake .
[ $? -eq 1 ] && echo "Vérifiez les dépendances de minetestmapper puis recompilez."
make -j$makeopt
popd
if [ -n $ssh ]; then
URL=$ssh\:nalc
else
URL="https://sys4.fr/gitea/nalc"
fi
if [ ! -d "$(pwd)/leaftest" ]; then
git clone --recursive --depth 1 $URL/leaftest.git
verif
fi
}
init() {
2020-07-18 12:37:59 +02:00
ver=$(strip $1)
if [ -n $ssh && -n $url ]; then
2020-07-18 12:37:59 +02:00
URL=$ssh\:$url
elif [ -n $url ]; then
2020-07-18 12:37:59 +02:00
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
# Vérification de l'environnement
2020-07-18 12:37:59 +02:00
install_minetest
install_minetest_game
install_mods
install_world
install_mtmapper
2020-07-18 12:37:59 +02:00
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 == "experimental" ]; then
2020-07-18 12:37:59 +02:00
init $arg
else
2020-07-18 12:37:59 +02:00
error
fi
exit 0
}
irrlicht() {
local arg=$(strip "$1")
if [ -d "$arg" ]; then
irrlicht_src="-DIRRLICHT_INCLUDE_DIR=$arg"
fi
}
exepath() {
local arg=$(strip "$1")
if [ -e "$arg" ]; then
minetest_bin="$arg"
else
error "$arg n'existe pas"
fi
}
minedir() {
local arg=$(strip "$1")
if [ -d "$arg" ]; then
minetest_dir="$arg"
else
error "$arg n'est pas un répertoire"
2020-07-18 12:37:59 +02:00
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:,e:,d: -l help,postgresql,url:,ssh:,makeopt:,irrlicht:,exec:,dir: -- "$@")
# éclatement de $options en $1, $2...
set -- $OPT
while true; do
case "$1" in
-h|--help)
usage;;
-i|--irrlicht)
2020-07-18 12:37:59 +02:00
irrlicht $2
shift 2;;
-p|--postgresql)
2020-07-18 12:37:59 +02:00
postgresql
shift;;
--ssh)
ssh $2
shift 2;;
--url)
url $2
shift 2;;
-j|--makeopt)
2020-07-18 12:37:59 +02:00
makeopt $2
shift 2;;
-e|--exec)
exepath $2
shift 2;;
-d|--dir)
minedir $2
shift 2;;
--)
shift;;
*)
action $1
shift;;
esac
done