From c2f52add1fa8d238dc78440acbccec0ef7190e28 Mon Sep 17 00:00:00 2001 From: sys4 Date: Fri, 27 May 2022 14:36:02 +0200 Subject: [PATCH] Rewrite of the install script --- README.md | 169 ++++++++++- doc/README.org | 140 +++++++++ install.sh | 730 +++++++++++++++++++++++++---------------------- start.sh.example | 50 ++-- upgrade.sh | 123 ++++---- 5 files changed, 775 insertions(+), 437 deletions(-) create mode 100644 doc/README.org diff --git a/README.md b/README.md index ed45ee9..3ff96a0 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,166 @@ -# server-nalc -Les fichiers pour installer le serveur NALC. +# Description -## Installation -Lancer le script ./install.sh +The files to install the Minetest NALC server. -Pour l'aide : ./install.sh --help -------------------------------------------------------------------------------- -*Licence : GPL v3* +# Installation + +Start the install.sh script and follow instructions. + +Help: ./install.sh –help + + +# Requirements + +- Official Minetest server must already be installed on your GNU/Linux system. If it is not the case, please refers to the website for the installation instructions. +- You'll also need 'git', 'cmake' and 'make' programs installed. + + +# Examples of installation + + +## For a production server intended to be publicly available + +We suppose that you have already installed Minetest server from your package manager. + +The home of the 'minetest' user is located to /var/lib/minetest and you have the write access to it. + +1. Create the dir '\\/var/lib/minetest/.minetest' if not exist. +2. cd /var/lib/minetest +3. git clone –depth 1 -b master +4. cd nalc-server +5. ./install.sh -d \\/var/lib/minetest/.minetest +6. Follow the instructions + + +## For a test server + +We suppose you have already installed a production server that is actually in use and stable. But you want to install another one in palallel on the same system in order to test the development version of NALC. + +For the next steps we will be logged in as a normal user: + +1. cd +2. Create the dir '~/.minetest' if it not exist. +3. No need to download the server files again because they are already downloaded in the dir /var/lib/minetest/nalc-server. So you can just do a 'mkdir ~/nalc-dev'. But you can always do a 'git clone ~/nalc-dev' if you prefer. Whatever your choice and for the next steps we will refer to the install dir as '$INSTALL'. +4. $INSTALL/install.sh -d ~/.minetest -w test -P 30001 –branch dev ~/nalc-dev +5. Follow the instructions + + +## Case of a custom Minetest installation + +We suppose you have compiled Minetest from sources with the CMAKE option RUNINPLACE=TRUE. The location of your installation is ~/games/minetest. + +1. cd ~/games +2. git clone +3. cd nalc-server +4. ./install.sh -b ~/games/minetest/bin/minetestserver -d ~/games/minetest +5. Follow the instructions + + +## Other cases + +Other combinaisons are possibles and I cannot describe all of them. Don't hesitate to read the help of the script with –help option and do your own tests :) + + +# Add or disable mods + +If you want to add mods you can do it easily. For that you can create the dir $DESTINATION/custom/mods where $DESTINATION is the dir where you have installed the server (the one containing the nalc.conf file). +Then copy your mods and modpacks in $DESTINATION/custom/mods and you need to execute $INSTALL/upgrade.sh -s $DESTINATION -w -b -f worldmt for regenerating the world.mt file of your world. +Replace by your world name. +Replace by the branch name specified during the installation, either 'stable', 'dev' or 'exp'. + +If you want to disable mods you need to edit the file $DESTINATION/modsdisabled.txt and add one mod name per line. +Then execute again $INSTALL/upgrade.sh -s $DESTINATION -w -b -f worldmt. + +Note: Depending on how you have installed NALC server, but $INSTALL and $DESTINATION can point to the same directory. If it's the case you can ommit the -s option. + + +# Start/Stop the server + + +## Use provided scripts + +You can rename the $INSTALL/start.sh.example file to start.sh and give it executable permissions. +Then launch the server with the command $INSTALL/start.sh -s $DESTINATION. + +Note: -s option can be ommited if you launch the script from the dir $DESTINATION. + +For shutting down the server press CTRL-C. + +You can edit the start.sh script for your needs. + + +## Use openrc to start/stop NALC as a daemon + +We suppose minetest is installed from portage with the +server USE flag and NALC server is installed in the home of the minetest user `/var/lib/minetest/nalc-server`. If you would use your Gentoo/Calculate Linux system init to start/stop NALC server as a service then you can follow theses steps: + +1. Edit your `/etc/conf.d/minetest-server` file like that: + + # /etc/conf.d/minetest-server: config file for /etc/init.d/minetest-server + + # user + USER="minetest" + + # group + GROUP="minetest" + + # pidfile + PIDFILE="/run/minetest-server.pid" + + # executable + MINETESTBIN="/usr/bin/minetestserver" + + # additional arguments for the server + ARGS="--logfile /var/log/minetest/minetest-server.log" + +2. Edit or create the file `/etc/init.d/minetest-server`: + + #!/sbin/openrc-run + # Copyright 1999-2019 Gentoo Authors + # Distributed under the terms of the GNU General Public License v2 + + supervisor="supervise-daemon" + + description="Minetest dedicated server" + + depend() { + need net postgresql-13 # Remove postgresql-13 if you don't use it as a Minetest backend. + } + + start() { + ebegin "starting Minetest server" + ${supervisor} ${RC_SVCNAME} \ + --pidfile "${PIDFILE}" \ + --user ${USER} \ + --group ${GROUP} \ + --start "${MINETESTBIN}" -- ${ARGS} + eend $? + } + + stop() { + ebegin "stopping Minetest server" + ${supervisor} ${RC_SVCNAME} \ + --stop \ + --signal 15 \ + --pidfile "${PIDFILE}" \ + --user ${USER} \ + --group ${GROUP} + eend $? + } + +3. Add the service to your default init level: `rc-update add minetest-server default`. + +4. Start the service: `rc-service minetest-server start`. + +5. Stop the service: `rc-service minetest-server stop`. + + +## TODO Use systemd to start/stop NALC as a daemon + + +# Update the server + +You can execute the install.sh script again. If a nalc.conf file is detected in the specified destination, it will load all the settings specified during the previous installation. +Then you have to follow the instructions of the script and you will be able to update your server. -*Copyright: Sys4* diff --git a/doc/README.org b/doc/README.org new file mode 100644 index 0000000..185bebb --- /dev/null +++ b/doc/README.org @@ -0,0 +1,140 @@ +* Description + The files to install the Minetest NALC server. + +* Installation + Start the install.sh script and follow instructions. + + Help: ./install.sh --help + +* Requirements + + - Official Minetest server must already be installed on your GNU/Linux system. If it is not the case, please refers to the https://minetest.net website for the installation instructions. + - You'll also need 'git', 'cmake' and 'make' programs installed. + +* Examples of installation + +** For a production server intended to be publicly available + We suppose that you have already installed Minetest server from your package manager. + + The home of the 'minetest' user is located to /var/lib/minetest and you have the write access to it. + + 1. Create the dir '\/var/lib/minetest/.minetest' if not exist. + 2. cd /var/lib/minetest + 3. git clone --depth 1 -b master https://sys4.fr/gitea/nalc/nalc-server.git + 4. cd nalc-server + 5. ./install.sh -d \/var/lib/minetest/.minetest + 6. Follow the instructions + +** For a test server + We suppose you have already installed a production server that is actually in use and stable. But you want to install another one in palallel on the same system in order to test the development version of NALC. + + For the next steps we will be logged in as a normal user: + + 1. cd + 2. Create the dir '~/.minetest' if it not exist. + 3. No need to download the server files again because they are already downloaded in the dir /var/lib/minetest/nalc-server. So you can just do a 'mkdir ~/nalc-dev'. But you can always do a 'git clone https://sys4.fr/gitea/nalc/nalc-server.git ~/nalc-dev' if you prefer. Whatever your choice and for the next steps we will refer to the install dir as '$INSTALL'. + 4. $INSTALL/install.sh -d ~/.minetest -w test -P 30001 --branch dev ~/nalc-dev + 5. Follow the instructions + +** Case of a custom Minetest installation + We suppose you have compiled Minetest from sources with the CMAKE option RUN_IN_PLACE=TRUE. The location of your installation is ~/games/minetest. + + 1. cd ~/games + 2. git clone https://sys4.fr/gitea/nalc/nalc-server.git + 3. cd nalc-server + 4. ./install.sh -b ~/games/minetest/bin/minetestserver -d ~/games/minetest + 5. Follow the instructions + +** Other cases + Other combinaisons are possibles and I cannot describe all of them. Don't hesitate to read the help of the script with --help option and do your own tests :) + +* Add or disable mods + If you want to add mods you can do it easily. For that you can create the dir $DESTINATION/custom/mods where $DESTINATION is the dir where you have installed the server (the one containing the nalc.conf file). + Then copy your mods and modpacks in $DESTINATION/custom/mods and you need to execute $INSTALL/upgrade.sh -s $DESTINATION -w -b -f worldmt for regenerating the world.mt file of your world. + Replace by your world name. + Replace by the branch name specified during the installation, either 'stable', 'dev' or 'exp'. + + If you want to disable mods you need to edit the file $DESTINATION/mods_disabled.txt and add one mod name per line. + Then execute again $INSTALL/upgrade.sh -s $DESTINATION -w -b -f worldmt. + + Note: Depending on how you have installed NALC server, but $INSTALL and $DESTINATION can point to the same directory. If it's the case you can ommit the -s option. + +* Start/Stop the server +** Use provided scripts + You can rename the $INSTALL/start.sh.example file to start.sh and give it executable permissions. + Then launch the server with the command $INSTALL/start.sh -s $DESTINATION. + + Note: -s option can be ommited if you launch the script from the dir $DESTINATION. + + For shutting down the server press CTRL-C. + + You can edit the start.sh script for your needs. + +** Use openrc to start/stop NALC as a daemon + We suppose minetest is installed from portage with the +server USE flag and NALC server is installed in the home of the minetest user ~/var/lib/minetest/nalc-server~. If you would use your Gentoo/Calculate Linux system init to start/stop NALC server as a service then you can follow theses steps: + + 1. Edit your ~/etc/conf.d/minetest-server~ file like that: + #+begin_src conf + # /etc/conf.d/minetest-server: config file for /etc/init.d/minetest-server + + # user + USER="minetest" + + # group + GROUP="minetest" + + # pidfile + PIDFILE="/run/minetest-server.pid" + + # executable + MINETESTBIN="/usr/bin/minetestserver" + + # additional arguments for the server + ARGS="--logfile /var/log/minetest/minetest-server.log" + #+end_src + + 2. Edit or create the file ~/etc/init.d/minetest-server~: + #+begin_src openrc-run + #!/sbin/openrc-run + # Copyright 1999-2019 Gentoo Authors + # Distributed under the terms of the GNU General Public License v2 + + supervisor="supervise-daemon" + + description="Minetest dedicated server" + + depend() { + need net postgresql-13 # Remove postgresql-13 if you don't use it as a Minetest backend. + } + + start() { + ebegin "starting Minetest server" + ${supervisor} ${RC_SVCNAME} \ + --pidfile "${PIDFILE}" \ + --user ${USER} \ + --group ${GROUP} \ + --start "${MINETESTBIN}" -- ${ARGS} + eend $? + } + + stop() { + ebegin "stopping Minetest server" + ${supervisor} ${RC_SVCNAME} \ + --stop \ + --signal 15 \ + --pidfile "${PIDFILE}" \ + --user ${USER} \ + --group ${GROUP} + eend $? + } + #+end_src + + 3. Add the service to your default init level: ~rc-update add minetest-server default~. + + 4. Start the service: ~rc-service minetest-server start~. + + 5. Stop the service: ~rc-service minetest-server stop~. +** TODO Use systemd to start/stop NALC as a daemon +* Update the server +You can execute the install.sh script again. If a nalc.conf file is detected in the specified destination, it will load all the settings specified during the previous installation. +Then you have to follow the instructions of the script and you will be able to update your server. diff --git a/install.sh b/install.sh index 225fefb..2fa0228 100755 --- a/install.sh +++ b/install.sh @@ -2,416 +2,468 @@ # Author: Sys4 # License: GPLv3 -# Fonctions +usage() { + echo "Usage: ./install_nalc.sh [options] [--] [destination]" + echo + echo "Description:" + echo -e "\tDownload and install the files needed by the NALC server to the" + echo -e "\toptional [destination] folder. Otherwise the current directory" + echo -e "\twill be used." + echo + echo -e "\tBut, be carefull!" + echo -e "\tBy default the ~/.minetest dir will also be used and modified." + echo -e "\tSo, make a backup of your ~/.minetest directory before the" + echo -e "\tinstallation of this server or specify a new directory with the" + echo -e "\t --minetest-dir or -d option." + echo + echo "Requirements:" + echo -e "\t- Official Minetest server must be already installed on your system." + echo -e "\tIf it is not the case, please refers to the https://minetest.net" + echo -e "\twebsite for the installation instructions." + echo -e "\t- You'll also need git, cmake, make." + echo + echo "Options:" + echo -e "\t-h --help\t This help." + echo -e "\t-b --minetest-bin Minetest server executable path." + echo -e "\t-d --minetest-dir Minetest directory to use for installing nalc mods, nalc game, minetest.conf…" + echo -e "\t-m --map-backend " + echo -e "\t-p --player-backend " + echo -e "\t-a --auth-backend " + echo -e "\t-M --minetest-mapper Install with minetest mapper support." + echo -e "\t-w --world Custom world name." + echo -e "\t-P --port Custom server port number." + echo -e "\t--url Custom remote URL." + echo -e "\t--branch Choose the version to install (stable by default)" + echo + echo "License: GPLv3. Please read the LICENSE file." + echo "Author: Sys4 - https://sys4.fr#contact" + + exit 0 +} + strip() { echo $1 | cut -d \' -f 2 } verif() { - if [ $? -gt 0 ]; then - echo "Erreur ! Arrêt du script." + if [[ $? -gt 0 ]]; then + echo "Error! Exit." exit 1 fi } error() { - echo "ERREUR : Vérifiez vos paramètres !" >&2 - echo "Utilisez l'option -h pour en savoir plus" >&2 + if [[ -n $1 ]]; then + echo "ERROR: $1"! >&2 + else + echo "ERROR: Invalid option!" >&2 + echo "Use -h option for help." >&2 + fi exit 1 } -usage() { - echo "Usage : ./install.sh [options] [--] " - 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 \tIdentifiants ssh." - echo -e "\t--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 \tChemin de l'exécutable Minetest. Ex. /usr/local/bin/minetestserver" - echo -e "\t-d | --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 +save_conf() { + local conf="$1" + echo "MINETEST_BIN=$MINETEST_BIN" > "$conf" + echo "MINETEST_DIR=$MINETEST_DIR" >> "$conf" + echo "MAP_BACKEND=$MAP_BACKEND" >> "$conf" + echo "PLAYER_BACKEND=$PLAYER_BACKEND" >> "$conf" + echo "AUTH_BACKEND=$AUTH_BACKEND" >> "$conf" + echo "MINETEST_MAPPER=$MINETEST_MAPPER" >> "$conf" + echo "URL=$URL" >> "$conf" + echo "BRANCH=$BRANCH" >> "$conf" + echo "WORLD_NAME=$WORLD_NAME" >> "$conf" + echo "PORT=$PORT" >> "$conf" } -ssh() { - ssh=$(strip $1) - echo "Installation avec identifiants ssh : $ssh" +load_conf() { + . "$1" } -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 - - local branch="-b 5.5.0" - if [ $ver == "dev" ]; then - branch="-b stable-5" - elif [ $ver == "experimental" ]; then - branch="-b master" +install_game() { + local game_dir="$MINETEST_DIR/games/nalc_game" + if [ -d "$game_dir" ]; then + echo "Previous installation of NALC game detected." + read -p "Upgrade? ([Y]es/[n]o/clean/[c]ancel) " continue + case "$continue" in + [yY][eE][sS]|[yY]|"") + echo "Upgrading…" + pushd "$game_dir" + git pull + verif + popd;; + [cC][lL][eE][aA][nN]) + echo "Cleaning…" + rm -rf "$game_dir" + verif;; + [cC][aA][nN][cC][eE][lL]|[cC]) + echo "Upgrade cancelled." + exit 0;; + esac fi + if [ ! -d "$game_dir" ]; then + local git_branch + local depth + case $BRANCH in + "stable") + git_branch="-b master" + depth="--depth 1" + ;; + "dev") + git_branch="-b dev" + ;; + "exp") + git_branch="-b experimental" + ;; + esac + [ -z "$git_branch" ] && error "Invalid branch" - 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 - if [ -n $ssh ]; then - git clone --depth 1 $branch $ssh\:minetest/minetest.git - else - git clone --depth 1 $branch https://github.com/minetest/minetest.git - fi + echo "Cloning $URL""nalc/nalc_game.git to $game_dir…" + mkdir -p "$MINETEST_DIR/games" + verif + git clone $depth $git_branch $URL"nalc/nalc_game.git" "$game_dir" 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 - 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 == "dev" ]; then - branch="-b dev" - elif [ $ver == "experimental" ]; then - branch="-b experimental" - 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é." + echo "NALC game installed/upgraded." } 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 + local mods_dir="$MINETEST_DIR/mods" + if [ -d "$mods_dir" ]; then + echo "Mods directory is not empty." + read -p "Upgrade? ([Y]es/[n]o/clean/[c]ancel) " continue + case "$continue" in + [yY][eE][sS]|[yY]|"") + echo "Upgrading…" + "$SCRIPT_DIR"/upgrade.sh -m -s "$DESTINATION" + verif + ;; + [cC][lL][eE][aA][nN]) + echo "Cleaning…" + rm -rf "$mods_dir" + verif + ;; + [cC][aA][nN][cC][eE][lL]|[cC]) + echo "Upgrade cancelled." + exit 0;; + esac fi - - if [ ! -d nalc-server-mods ]; then - local branch="master" - - if [ $ver == "dev" ]; then - branch="dev" - elif [ $ver == "experimental" ]; then - branch="experimental" - fi - git clone --depth 1 -b $branch $URL/nalc-server-mods.git + if [ ! -d "$mods_dir" ]; then + local git_branch + local depth + case $BRANCH in + "stable") + git_branch="-b master" + depth="--depth 1" + ;; + "dev") + git_branch="-b dev" + ;; + "exp") + git_branch="-b experimental" + ;; + esac + [ -z $git_branch ] && error "Invalid branch" + + echo "Cloning $URL/nalc-server-mods.git to $mods_dir…" + git clone $depth $git_branch $URL"nalc/nalc-server-mods.git" "$mods_dir" verif - ./upgrade.sh -m - fi - - if [ -z $pg_dbname ]; then - cp worldmt-1.1.conf world.mt + pushd "$mods_dir" + git submodule update --init --recursive + verif + popd fi + echo "Mods for NALC installed/upgraded." } 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 + local world_dir="$MINETEST_DIR/worlds/$WORLD_NAME" + if [ -d "$world_dir" ]; then + echo "$WORLD_NAME already exist." + read -p "Upgrade $WORLD_NAME? ([Y]es/[n]o/[c]lean) " continue + case "$continue" in + [yY][eE][sS]|[yY]|"") + echo "Upgrading…" + [ -d "$world_dir"_old ] && rm -rf "$world_dir"_old + cp -r "$world_dir" "$world_dir"_old + verif + ;; + [cC][lL][eE][aA][nN]|[cC]) + echo "Cleaning…" + [ -d "$world_dir"_old ] && rm -rf "$world_dir"_old + mv "$world_dir" "$world_dir"_old + verif + ;; + esac fi + if [ ! -d "$world_dir" ]; then + mkdir -p "$world_dir/runes" + verif - 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 + local mt=$world_dir/world.mt + echo "Generating $mt""…" - 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" - 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." + echo "gameid = nalc_game" > $mt + echo "enable_damage = true" >> $mt + echo "creative_mod = false" >> $mt + case $MAP_BACKEND in + "sqlite3"|"") + echo "backend = sqlite3" >> $mt + ;; + "leveldb") + echo "backend = leveldb" >> $mt + ;; + "redis") + echo "backend = redis" >> $mt + read -p "redis_address? " val + echo "redis_address = $val" >> $mt + read -p "redis_hash? " val + echo "redis_hash = $val" >> $mt + read -p "redis_port? (6379) " val + [ -z $val ] && val=6379 + echo "redis_port = $val" >> $mt + ;; + "postgresql") + echo "backend = postgresql" >> $mt + read -p "DB address? " val + read -p "DB user? " val2 + read -p "DB password? " val3 + read -p "DB name? " val4 + read -p "DB port? (5432) " val5 + [ -z $val5 ] && val5=5432 + echo "pgsql_connection = host=$val port=$val5 user=$val2 password=$val3 dbname=$val4" >> $mt + ;; + "dummy") + echo "backend = dummy" >> $mt + ;; + *) + error "$MAP_BACKEND is not valid";; + esac + case $PLAYER_BACKEND in + "sqlite3"|"") + echo "player_backend = sqlite3" >> $mt + ;; + "leveldb") + echo "player_backend = leveldb" >> $mt + ;; + "postgresql") + echo "player_backend = postgresql" >> $mt + read -p "DB address? ($val) " vval + read -p "DB user? ($val2) " vval2 + read -p "DB password? ($val3) " vval3 + read -p "DB name? (players-$val4) " vval4 + read -p "DB port? ($val5) " vval5 + [ -z $vval ] && vval=$val + [ -z $vval2 ] && vval2=$val2 + [ -z $vval3 ] && vval3=$val3 + [ -z $vval4 ] && vval4="players-$val4" + [ -z $vval5 ] && vval5=$val5 + echo "pgsql_player_connection = host=$vval port=$vval5 user=$vval2 password=$vval3 dbname=$vval4" >> $mt + ;; + "dummy") + echo "player_backend = dummy" >> $mt + ;; + "files") + echo "player_backend = files" >> $mt + ;; + *) + error "$PLAYER_BACKEND is not valid";; + esac + case $AUTH_BACKEND in + "sqlite3"|"") + echo "auth_backend = sqlite3" >> $mt + ;; + "leveldb") + echo "auth_backend = leveldb" >> $mt + ;; + "postgresql") + echo "auth_backend = postgresql" >> $mt + read -p "DB address? ($val) " vval + read -p "DB user? ($val2) " vval2 + read -p "DB password? ($val3) " vval3 + read -p "DB name? (auth-$val4) " vval4 + read -p "DB port? ($val5) " vval5 + [ -z $vval ] && vval=$val + [ -z $vval2 ] && vval2=$val2 + [ -z $vval3 ] && vval3=$val3 + [ -z $vval4 ] && vval4="auth-$val4" + [ -z $vval5 ] && vval5=$val5 + echo "pgsql_auth_connection = host=$vval port=$vval5 user=$vval2 password=$vval3 dbname=$vval4" >> $mt + ;; + "files") + echo "auth_backend = files" >> $mt + ;; + *) + error "$AUTH_BACKEND is not valid";; + esac + read -p "Server announce? (y/N) " val + if [[ $val =~ [yY][eE][sS]|[yY] ]]; then + echo "server_announce = true" >> $mt + else + echo "server_announce = false" >> $mt + fi fi } 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 + if [ ! -d "$DESTINATION/minetestmapper" ]; then + echo "Clone Minetest mapper…" + git clone --depth 1 $URL"/minetest/minetestmapper.git" "$DESTINATION/minetestmapper" verif + else + echo "Upgrading Minetest mapper…" + pushd "$DESTINATION/minetestmapper" + git pull + verif + popd fi - pushd "$(pwd)/minetestmapper" - git pull + pushd "$DESTINATION/minetestmapper" cmake . - [ $? -eq 1 ] && echo "Vérifiez les dépendances de minetestmapper puis recompilez." - make -j$makeopt + [ $? -eq 1 ] && error "CMake failed. Check dependencies" + make -j$(nproc) + verif 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 + if [ ! -d "$DESTINATION/leaftest" ]; then + echo "Installing leaftest…" + git clone --recursive --depth 1 $URL"nalc/leaftest.git" "$DESTINATION/leaftest" verif + else + echo "Upgrading leaftest…" + pushd "$DESTINATION/leaftest" + git pull + verif + popd 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" +post_install() { + if [[ "$DESTINATION" != "$SCRIPT_DIR" ]]; then + cp "$SCRIPT_DIR/mods_disabled.txt" "$DESTINATION" fi - read -p "L'installation va démarrer. Continuer ? (y or n) : " continue - if [ $continue == "y" ]; then - # Vérification de l'environnement - - install_minetest - install_minetest_game - install_mods - install_world - install_mtmapper - post_install - echo "L'installation est terminé. Bravo !" - else - echo "Installation annulée. Fin." + "$SCRIPT_DIR"/upgrade.sh -w $WORLD_NAME -b $BRANCH -s "$DESTINATION" + "$SCRIPT_DIR"/upgrade.sh -w $WORLD_NAME -b $BRANCH -f mtconf -s "$DESTINATION" + + echo "Please, review and edit the following files:" + echo -e "\t- $MINETEST_DIR/minetest.conf" + echo -e "\t- $DESTINATION/mods_disabled.txt" + echo + + if [ $MINETEST_MAPPER -eq 1 ]; then + echo "The use of Minetest Mapper needs ImageMagick with fontconfig and truetype dependencies." + echo "You also need to allow read and write permissions for PS. The configuration can be found in the file that manage the security policy of ImageMagick." fi } action() { - local arg=$(strip $1) - if [ $arg == "dev" || $arg == "stable" || $arg == "experimental" ]; then - init $arg - else - error + echo "Preparing the installation…" + + DESTINATION="$1" + GIT=$(which git) + CMAKE=$(which cmake) + MAKE=$(which make) + [ ! -e "$GIT" ] && error "git not found" + [ ! -e "$CMAKE" ] && error "cmake not found" + [ ! -e "$MAKE" ] && error "make not found" + + if [ -e "$DESTINATION/nalc.conf" ]; then + read -p "Previous installation is detected. Do you want to load previous settings? [Y/n] " continue + if [ -z $continue ] || [[ "$continue" =~ ^[yY][eE][sS]|[yY]$ ]]; then + load_conf "$DESTINATION/nalc.conf" + fi fi + + [ -z $MINETEST_BIN ] && MINETEST_BIN=$(which minetestserver) + [ -z $MINETEST_DIR ] && MINETEST_DIR=~/.minetest + [ -z $MAP_BACKEND ] && MAP_BACKEND=sqlite3 + [ -z $PLAYER_BACKEND ] && PLAYER_BACKEND=sqlite3 + [ -z $AUTH_BACKEND ] && AUTH_BACKEND=sqlite3 + [ -z $MINETEST_MAPPER ] && MINETEST_MAPPER=0 + [ -z $PORT ] && PORT=30000 + [ -z $URL ] && URL="https://sys4.fr/gitea/" + [[ $URL =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+$ ]] && URL="$URL:" + [ -z $BRANCH ] && BRANCH="stable" + [ -z $WORLD_NAME ] && WORLD_NAME="nalc" + + SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) + [ -z $DESTINATION ] && DESTINATION="$SCRIPT_DIR" + [ ! -e $MINETEST_BIN ] && error "$MINETEST_BIN not found" + [ ! -d $MINETEST_DIR ] && error "$MINETEST_DIR not found" + + + echo "Installation summary:" + echo -e "\t- Server files will be downloaded from $URL" + echo -e "\t- NALC server will be installed to $DESTINATION." + echo -e "\t- World of NALC will be installed to $MINETEST_DIR/worlds/$WORLD_NAME" + echo -e "\t- The minetestserver executable $MINETEST_BIN will be used." + echo -e "\t- The $MINETEST_DIR directory will be used." + echo -e "\t- $MAP_BACKEND will be used as map backend." + echo -e "\t- $PLAYER_BACKEND will be used as player backend." + echo -e "\t- $AUTH_BACKEND will be used as auth backend." + echo -e "\t- Port used: $PORT." + [ $MINETEST_MAPPER -eq 1 ] && echo -e "\t- Minetest mapper support added." + echo + + read -p "Installation of NALC server will begin. Continue? [Y/n] " continue + if [ -z $continue ] || [[ "$continue" =~ ^[yY][eE][sS]|[yY]$ ]]; then + save_conf "$DESTINATION/nalc.conf" + install_game + install_mods + install_world + [ $MINETEST_MAPPER -eq 1 ] && install_mtmapper + post_install + fi + + echo "End of the NALC server installation. Good Bye!" exit 0 } -irrlicht() { - local arg=$(strip "$1") - if [ -d "$arg" ]; then - irrlicht_src="-DIRRLICHT_INCLUDE_DIR=$arg" - fi -} +[ $# -lt 0 ] && usage -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" - 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... +OPT=$(getopt -o h,b:,d:,m:,p:,a:,M,w:,P: -l help,minetest-bin:,minetest-dir:,map-backend:,player-backend:,auth-backend:,minetest-mapper,url:,branch:,world:,port: -- "$@") set -- $OPT while true; do case "$1" in -h|--help) usage;; - -i|--irrlicht) - irrlicht $2 + -b|--minetest-bin) + MINETEST_BIN=$(strip "$2") shift 2;; - -p|--postgresql) - postgresql - shift;; - --ssh) - ssh $2 + -d|--minetest-dir) + MINETEST_DIR=$(strip "$2") + shift 2;; + -m|--map-backend) + MAP_BACKEND=$(strip "$2") + shift 2;; + -p|--player-backend) + PLAYER_BACKEND=$(strip "$2") + shift 2;; + -a|--auth-backend) + AUTH_BACKEND=$(strip "$2") + shift 2;; + -M|--minetest-mapper) + MINETEST_MAPPER=1 + shift 1;; + -w|--world) + WORLD_NAME=$(strip "$2") + shift 2;; + -P|--port) + PORT=$(strip $2) shift 2;; --url) - url $2 + URL=$(strip "$2") shift 2;; - -j|--makeopt) - makeopt $2 + --branch) + BRANCH=$(strip "$2") shift 2;; - -e|--exec) - exepath $2 - shift 2;; - -d|--dir) - minedir $2 - shift 2;; - --) + --) shift;; *) - action $1 + action $(strip "$1") shift;; esac done + diff --git a/start.sh.example b/start.sh.example index a79a7a6..905d2b2 100644 --- a/start.sh.example +++ b/start.sh.example @@ -1,29 +1,39 @@ #!/bin/bash +# +# This is a startup script example you can adapt for your needs. +# It can take a server directory to start as argument else, +# it will use the current dir. +# If you want to use it, rename it to 'start.sh' and give it executable rights. +# +# If you want to start/stop the server as a system service you should not use this +# script. Please read the documentation for more informations. +# -serverpath=/home/minetest/nalc-server -world=$serverpath/minetest/worlds/nalc +serverdir="$1" +[ -z "$serverdir" ] && serverdir="$(pwd)" +if [ ! -e "$serverdir/nalc.conf" ]; then + echo "ERROR: nalc.conf not found!" + exit 1 +else + . "$serverdir/nalc.conf" +fi -DEBUG=$serverpath/logs/debug.log -MOREDEBUG=$serverpath/logs/moredebug.log +#DEBUG=$serverdir/logs/debug.log +#MOREDEBUG=$serverdir/logs/moredebug.log -cd $serverpath/minetest/bin - -while true - do - sleep 5 - - echo "----------------------" >>$MOREDEBUG - echo "Server restarted at "`date` >>$MOREDEBUG - echo "----------------------" >>$MOREDEBUG +#while true; do +# sleep 5 +# echo "----------------------" >>$MOREDEBUG +# echo "Server restarted at "`date` >>$MOREDEBUG +# echo "----------------------" >>$MOREDEBUG echo "0" >/tmp/players_c.txt - ./minetestserver \ - --world $world/ \ - --config $serverpath/minetest/minetest.conf \ + "$MINETEST_BIN" \ + --world "$MINETEST_DIR/worlds/$WORLD_NAME/" \ + --config "$MINETEST_DIR/minetest.conf" \ --gameid nalc_game \ - --port 30002 \ -# --logfile $DEBUG + --port $PORT \ +# --logfile $DEBUG - sleep 25 -done &>> $MOREDEBUG \ No newline at end of file +#done &>> $MOREDEBUG diff --git a/upgrade.sh b/upgrade.sh index 383b1fb..32f890b 100755 --- a/upgrade.sh +++ b/upgrade.sh @@ -2,7 +2,8 @@ # Author: Sys4 # License: GPLv3 -serverpath=$(pwd) +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) +serverpath="$SCRIPT_DIR" UP_MODS=0 WORLD_FILE=all @@ -58,16 +59,16 @@ usage() { } regen_worldmt() { - local worldfile=$serverpath/world.mt + local worldfile="$MINETEST_DIR/worlds/$WORLD_NAME/world.mt" echo "Regénération du fichier $worldfile..." # Faire une sauvegarde du fichier world.mt actuel - cp $worldfile $serverpath/world.mt.bak + cp "$worldfile" "$worldfile".bak # Créer un nouveau fichier temporaire sans les lignes commençant par load_mod local i=0 - cat $worldfile | while read -r line; do + cat "$worldfile" | while read -r line; do local match=$(echo $line | grep load_mod_) if [[ -z $match ]]; then if [[ $i -eq 0 ]]; then @@ -83,52 +84,39 @@ regen_worldmt() { # Recréation des liens symboliques des mods dans le dossier minetest # et générer une ligne "load_mod_ = true ou false" pour chaque mod # et l'ajouter au fichier +# local mods_path=$serverpath/nalc-server-mods + local mods="$MINETEST_DIR/mods" + local mods_custom="$serverpath/custom/mods" + + # Suppression d'éventuels liens symboliques du dossier des mods + ls "$mods" | while read -r mod; do + [ -L "$mods/$mod" ] && rm -f "$mods/$mod" + done - local mods_path=$serverpath/nalc-server-mods - local mods_minetest=$serverpath/minetest/mods - local mods_custom=$serverpath/custom/mods - - rm -f $mods_minetest/* - - if [[ -d $mods_custom ]]; then + if [ -d "$mods_custom" ]; then ls $mods_custom | while read -r mod; do - if [[ -d $mods_custom/$mod ]]; then - rm -f $mods_path/$mod - ln -s $mods_custom/$mod $mods_path/$mod - fi + [ -d $mods_custom/$mod ] && ln -s $mods_custom/$mod $mods/$mod done fi # Liste des mods à désactiver - local mods="3d_armor_ip 3d_armor_sfinv 3dmushrooms" - - local md[1]="" - local i=0 - for mod in $mods; do - i=$(( $i+1 )) - md[$i]=$mod - done - - ls $mods_path | while read -r mod; do - if [[ -d $mods_path/$mod ]]; then - ln -s $mods_path/$mod $mods_minetest/$mod + readarray -t md < "$serverpath/mods_disabled.txt" - if [[ -e $mods_path/$mod/init.lua ]]; then + # Populate world.mt + ls "$mods" | while read -r mod; do + if [ -d $mods/$mod ]; then + if [ -e $mods/$mod/init.lua ]; then local mod_enable="true" - for (( modn=1; modn<=$i; modn++ )); do - if [[ ${md[$modn]} == $mod ]]; then - mod_enable="false" - fi + for (( modn=0; modn<${#md[@]}; modn++ )); do + [ ${md[$modn]} == $mod ] && mod_enable="false" done echo "load_mod_$mod = $mod_enable" >> /tmp/world.mt else - ls $mods_path/$mod | while read -r submod; do - if [[ -d $mods_path/$mod/$submod ]]; then + ls "$mods/$mod" | while read -r submod; do + if [ -d "$mods/$mod/$submod" ]; then local mod_enable="true" - for (( modn=1; modn<=$i; modn++ )); do - if [[ ${md[$modn]} == $submod ]]; then - mod_enable="false" - fi + for (( modn=0; modn<${#md[@]}; modn++ )); do + [ ${md[$modn]} == $submod ] && mod_enable="false" done echo "load_mod_$submod = $mod_enable" >> /tmp/world.mt fi @@ -138,18 +126,16 @@ regen_worldmt() { done # Remplacement du l'ancien world.mt par le nouveau - mv /tmp/world.mt $serverpath/world.mt + mv /tmp/world.mt "$MINETEST_DIR/worlds/$WORLD_NAME/world.mt" echo "Regénération terminé." } update_mods() { - local mods_path=$serverpath/nalc-server-mods - if [[ ! -d $mods_path ]]; then - error "Le répertoire $mods_path n'existe pas" - fi + local mods_path="$MINETEST_DIR/mods" + [ ! -d "$mods_path" ] && error "$mods_path not found" - pushd $mods_path > /dev/null 2>&1 + pushd "$mods_path" > /dev/null 2>&1 git pull verif git submodule update --init --recursive @@ -158,17 +144,17 @@ update_mods() { } update_world() { - local world_repos=$serverpath/world - local world_dest=$serverpath/minetest/worlds/$WORLD_NAME + local world_repos="$SCRIPT_DIR/world" + local world_dest="$MINETEST_DIR/worlds/$WORLD_NAME" - if [[ ! -d $world_repos ]]; then - error "$world_repos n'existe pas" + if [ ! -d "$world_repos" ]; then + error "$world_repos not found" fi - if [[ ! -d $world_dest ]]; then - error "$world_dest n'existe pas" + if [ ! -d "$world_dest" ]; then + error "$world_dest not found" fi - if [[ $WORLD_FILE == "all" ]]; then + if [ $WORLD_FILE == "all" ]; then WORLD_FILE="moretrees news technic fbn fbnp bitchange christmas randommsg worldmt" fi @@ -203,20 +189,16 @@ update_world() { file=$world_repos/random_messages-$BRANCH;; worldmt) do_copy=0 - regen_worldmt - rm -f $world_dest/world.mt - ln -s $serverpath/world.mt $world_dest/world.mt;; + regen_worldmt;; mtconf) # Exception ici car n'est pas un fichier world. Doit être appelé seul. - file_dest=$serverpath/minetest/minetest.conf - file=$serverpath/minetest-$BRANCH.conf;; + file_dest="$MINETEST_DIR/minetest.conf" + file="$SCRIPT_DIR/minetest-$BRANCH.conf";; *) error;; esac - if [[ $do_copy -eq 1 ]]; then - if [[ ! -e $file ]]; then - error "Le fichier $file n'existe pas" - fi + if [ $do_copy -eq 1 ]; then + [ ! -e $file ] && error "Le fichier $file n'existe pas" echo "Copie de $file vers $file_dest" cp -up $file $file_dest @@ -225,21 +207,22 @@ update_world() { } action() { - if [[ ! -d $serverpath ]]; then - error "Le répertoire $serverpath n'existe pas" - fi + [ ! -d "$serverpath" ] && error "$serverpath not found" + . "$serverpath/nalc.conf" + [[ $BRANCH == "exp" ]] && BRANCH="experimental" - if [[ $UP_MODS -eq 1 ]]; then - echo "Mise à jour des mods dans $serverpath/nalc-server-mods..." + if [ $UP_MODS -eq 1 ]; then + echo "Updating $MINETEST_DIR/mods…" update_mods - echo "Mise à jour des mods terminé." + echo "Mods updated." + exit 0 fi - if [[ -n $WORLD_NAME && -n $BRANCH ]]; then - echo "Mise à jour de $WORLD_FILE dans $serverpath/minetest/worlds/$WORLD_NAME de la branche $BRANCH..." + if [ -n $WORLD_NAME ] && [ -n $BRANCH ]; then + echo "Updating $WORLD_FILE from $WORLD_NAME and branch $BRANCH"… update_world - echo "Mise à jour des fichiers world terminé." - elif [[ -n $WORLD_NAME || -n $BRANCH ]]; then + echo "World files updated." + elif [ -n $WORLD_NAME ] || [ -n $BRANCH ]; then error fi }