Début de réécriture du script d'installation.

This commit is contained in:
bri cassa 2022-05-22 16:29:32 +02:00
parent fe1104a8d4
commit 279a3c6535
1 changed files with 108 additions and 72 deletions

View File

@ -8,7 +8,7 @@ strip() {
} }
verif() { verif() {
if [[ $? -gt 0 ]]; then if [ $? -gt 0 ]; then
echo "Erreur ! Arrêt du script." echo "Erreur ! Arrêt du script."
exit 1 exit 1
fi fi
@ -21,19 +21,29 @@ error() {
} }
usage() { usage() {
echo "Usage: ./install.sh [options] [--] <version>" echo "Usage : ./install.sh [options] [--] <version>"
echo "Options :" echo -e "\nOptions :"
echo -e "\t-h --help\tAffiche l'aide." echo -e "\t-h | --help\t\tAffiche cette aide."
echo -e "\t-j --makeopt\tNombre de threads de compilation." 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>: Identifiants ssh." echo -e "\t--ssh <user@host>\tIdentifiants ssh."
echo -e "\t--url <URL>: URL distante personnalisée." echo -e "\t--url <URL>\t\tURL distante personnalisée."
echo -e "\t\tSi l'option --ssh est passée en option, il s'agira du chemin distant." 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\tChemin personnalisé des sources irrlicht." echo -e "\t-i | --irrlicht\t\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 -e "\t-p | --postgresql\tBackend map et joueurs avec postgresql. Sinon leveldb sera utilisé par défaut."
echo "version :" echo -e "\t-e | --exec <minetest bin>\tChemin de l'exécutable Minetest. Ex. /usr/local/bin/minetestserver"
echo -e "\tstable : Installation du serveur compatible avec la dernière branche stable de minetest. Suivez les instructions... (Recommandé)" echo -e "\t-d | --dir <minetest server dir>\tDossier d'exécution du serveur. Ex. /var/lib/minetest/.minetest"
echo -e "\tdev : Installation de la version en cours de developpement du serveur. Suivez les instructions... (Le plus à jour mais non Stable !)" echo -e "\nversion :"
echo -e "\texperimental : Installation d'une version experimentale du serveur. Suivez les instructions... (Attention, très experimental !)" 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 exit 0
} }
@ -66,46 +76,46 @@ postgresql() {
} }
install_minetest() { install_minetest() {
if [[ -z $makeopt ]]; then if [ -z $makeopt ]; then
local makeopt=$(grep -c processor /proc/cpuinfo) local makeopt=$(grep -c processor /proc/cpuinfo)
fi fi
if [[ -d minetest ]]; then 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
echo "Installation précédente de Minetest détecté." echo "Installation précédente de Minetest détecté."
read -p "Mettre à jour ? (y,n,clean,cancel) : " continue read -p "Mettre à jour ? (y,n,clean,cancel) : " continue
if [[ $continue == "clean" ]]; then if [ $continue == "clean" ]; then
echo "Attention ! Cela va supprimer définitivement toutes les données." echo "Attention ! Cela va supprimer définitivement toutes les données."
read -p "Êtes-vous certains de vouloir continuer ? (y or n) : " continue read -p "Êtes-vous certains de vouloir continuer ? (y or n) : " continue
if [[ $continue == "y" ]]; then if [ $continue == "y" ]; then
rm -rf minetest rm -rf minetest
echo "Répertoire minetest supprimé." echo "Répertoire minetest supprimé."
else else
echo "Installation annulée. Fin" echo "Installation annulée. Fin"
exit 0 exit 0
fi fi
elif [[ $continue == "y" ]]; then elif [ $continue == "y" ]; then
cd minetest cd minetest
git pull git pull
verif verif
cd .. cd ..
elif [[ $continue == "cancel" ]]; then elif [ $continue == "cancel" ]; then
echo "Installation annulée. Fin" echo "Installation annulée. Fin"
exit 0 exit 0
fi fi
fi fi
if [[ ! -d minetest ]]; then if [ ! -d minetest ]; then
local branch="-b 5.4.1" if [ -n $ssh ]; then
if [[ $ver == "dev" ]]; then
branch="-b stable-5"
elif [[ $ver == "experimental" ]]; then
branch="-b master"
fi
if [[ -n $ssh ]]; then
git clone --depth 1 $branch $ssh\:minetest/minetest.git git clone --depth 1 $branch $ssh\:minetest/minetest.git
else else
git clone --depth 1 $branch https://gitlab.com/minetest/minetest.git git clone --depth 1 $branch https://github.com/minetest/minetest.git
fi fi
verif verif
fi fi
@ -113,7 +123,7 @@ install_minetest() {
echo "Minetest va être (re)compilé..." echo "Minetest va être (re)compilé..."
sleep 3 sleep 3
cd minetest 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 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 make -j$makeopt
verif verif
echo "Installation de Minetest terminé." echo "Installation de Minetest terminé."
@ -121,37 +131,37 @@ install_minetest() {
} }
install_minetest_game() { install_minetest_game() {
if [[ -d nalc_game ]]; then if [ -d nalc_game ]; then
echo "Installation précédente du jeux NALC détecté." echo "Installation précédente du jeux NALC détecté."
read -p "Mettre à jour ? (y,n,clean,cancel) " continue read -p "Mettre à jour ? (y,n,clean,cancel) " continue
if [[ $continue == "y" ]]; then if [ $continue == "y" ]; then
cd nalc_game cd nalc_game
git pull git pull
verif verif
cd .. cd ..
echo "Mise à jour du jeux NALC depuis dépôt distant terminé." echo "Mise à jour du jeux NALC depuis dépôt distant terminé."
elif [[ $continue == "clean" ]]; then elif [ $continue == "clean" ]; then
echo "/!\ Cette action va effacer les données du répertoire nalc_game" 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 read -p "Êtes-vous sûr de vouloir continuer ? (y or n) " continue
if [[ $continue == "y" ]]; then if [ $continue == "y" ]; then
rm -rf nalc_game rm -rf nalc_game
echo "Jeux NALC supprimé." echo "Jeux NALC supprimé."
else else
echo "Mise à jour annulée. Terminé." echo "Mise à jour annulée. Terminé."
exit 0 exit 0
fi fi
elif [[ $continue == "cancel" ]]; then elif [ $continue == "cancel" ]; then
echo "Mise à jour annulée. Terminé." echo "Mise à jour annulée. Terminé."
exit 0 exit 0
fi fi
fi fi
if [[ ! -d nalc_game ]]; then if [ ! -d nalc_game ]; then
local branch="-b master" local branch="-b master"
if [[ $ver == "dev" ]]; then if [ $ver == "dev" ]; then
branch="-b dev" branch="-b dev"
elif [[ $ver == "experimental" ]]; then elif [ $ver == "experimental" ]; then
branch="-b experimental" branch="-b experimental"
fi fi
git clone --depth 1 $branch $URL/nalc_game.git git clone --depth 1 $branch $URL/nalc_game.git
@ -159,7 +169,7 @@ install_minetest_game() {
echo "Clonage de nalc_game terminé." echo "Clonage de nalc_game terminé."
fi fi
if [[ ! -L minetest/games/nalc_game ]]; then if [ ! -L minetest/games/nalc_game ]; then
ln -s $(pwd)/nalc_game minetest/games/nalc_game ln -s $(pwd)/nalc_game minetest/games/nalc_game
echo "Lien symbolique minetest/games/nalc_game vers $(pwd)/nalc_game créé." echo "Lien symbolique minetest/games/nalc_game vers $(pwd)/nalc_game créé."
fi fi
@ -168,25 +178,25 @@ install_minetest_game() {
} }
install_mods() { install_mods() {
if [[ -d nalc-server-mods ]]; then if [ -d nalc-server-mods ]; then
echo "Le dossier de mods est déjà présent. Que souhaitez-vous faire ?" 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 read -p "Choisissez parmi la liste, ([1]update, [2]clean update, [3]cancel, [4]Ne rien faire) : " continue
if [[ $continue == 1 ]]; then if [ $continue == 1 ]; then
./upgrade.sh -m ./upgrade.sh -m
elif [[ $continue == 2 ]]; then elif [ $continue == 2 ]; then
rm -rf nalc-server-mods rm -rf nalc-server-mods
elif [[ $continue == 3 ]]; then elif [ $continue == 3 ]; then
echo "Mise à jour des mods annulé. Terminé." echo "Mise à jour des mods annulé. Terminé."
exit 0 exit 0
fi fi
fi fi
if [[ ! -d nalc-server-mods ]]; then if [ ! -d nalc-server-mods ]; then
local branch="master" local branch="master"
if [[ $ver == "dev" ]]; then if [ $ver == "dev" ]; then
branch="dev" branch="dev"
elif [[ $ver == "experimental" ]]; then elif [ $ver == "experimental" ]; then
branch="experimental" branch="experimental"
fi fi
git clone --depth 1 -b $branch $URL/nalc-server-mods.git git clone --depth 1 -b $branch $URL/nalc-server-mods.git
@ -194,31 +204,31 @@ install_mods() {
./upgrade.sh -m ./upgrade.sh -m
fi fi
if [[ -z $pg_dbname ]]; then if [ -z $pg_dbname ]; then
cp worldmt-1.1.conf world.mt cp worldmt-1.1.conf world.mt
fi fi
} }
install_world() { install_world() {
local world_name="nalc-$ver" local world_name="nalc-$ver"
if [[ -n $pg_dbname ]]; then if [ -n $pg_dbname ]; then
world_name=$pg_dbname world_name=$pg_dbname
fi fi
if [[ -d minetest/worlds/$world_name ]]; then if [ -d minetest/worlds/$world_name ]; then
echo "Une map est déjà présente. Que souhaitez-vous faire ?" 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 read -p "Choisissez parmi la liste ([1]Nouveau, [2]Mettre à jour [3]Ne rien faire) : " continuer
if [[ $continuer == 1 ]]; then if [ $continuer == 1 ]; then
if [[ -n $pg_dbname ]]; 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 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 fi
# On sauvegarde l'ancien world # On sauvegarde l'ancien world
if [[ -d "minetest/worlds/"$world_name"_old" ]]; then if [ -d "minetest/worlds/"$world_name"_old" ]; then
rm -rf "minetest/worlds/"$world_name"_old" rm -rf "minetest/worlds/"$world_name"_old"
fi fi
mv minetest/worlds/$world_name "minetest/worlds/"$world_name"_old" mv minetest/worlds/$world_name "minetest/worlds/"$world_name"_old"
elif [[ $continuer == 2 ]]; then elif [ $continuer == 2 ]; then
# On sauvegarde l'ancien world # On sauvegarde l'ancien world
if [[ -d "minetest/worlds/"$world_name"_old" ]]; then if [ -d "minetest/worlds/"$world_name"_old" ]; then
rm -rf "minetest/worlds/"$world_name"_old" rm -rf "minetest/worlds/"$world_name"_old"
fi fi
cp -r minetest/worlds/$world_name "minetest/worlds/"$world_name"_old" cp -r minetest/worlds/$world_name "minetest/worlds/"$world_name"_old"
@ -228,9 +238,9 @@ install_world() {
fi fi
fi fi
if [[ ! -d minetest/worlds/$world_name ]]; then if [ ! -d minetest/worlds/$world_name ]; then
mkdir -p minetest/worlds/$world_name mkdir -p minetest/worlds/$world_name
if [[ -n $pg_dbname ]]; then if [ -n $pg_dbname ]; then
createdb $pg_dbname createdb $pg_dbname
createdb players-$pg_dbname createdb players-$pg_dbname
fi fi
@ -242,9 +252,9 @@ install_world() {
} }
post_install() { post_install() {
if [[ ! -a minetest/minetest.conf ]]; then if [ ! -a minetest/minetest.conf ]; then
local world_name="nalc-$ver" local world_name="nalc-$ver"
if [[ -n $pg_dbname ]]; then if [ -n $pg_dbname ]; then
world_name=$pg_dbname world_name=$pg_dbname
fi fi
./upgrade.sh -w $world_name -b $ver -f mtconf ./upgrade.sh -w $world_name -b $ver -f mtconf
@ -252,11 +262,11 @@ post_install() {
echo "Veuillez éditer le fichier $(pwd)/minetest/minetest.conf" echo "Veuillez éditer le fichier $(pwd)/minetest/minetest.conf"
fi fi
if [[ ! -d logs ]]; then if [ ! -d logs ]; then
mkdir logs mkdir logs
fi fi
if [[ ! -a start.sh ]]; then if [ ! -a start.sh ]; then
cp start.sh.example start.sh cp start.sh.example start.sh
chmod u+x start.sh chmod u+x start.sh
echo "Veuillez éditer le fichier $(pwd)/start.sh" echo "Veuillez éditer le fichier $(pwd)/start.sh"
@ -283,7 +293,7 @@ install_mtmapper() {
pushd "$(pwd)/minetestmapper" pushd "$(pwd)/minetestmapper"
git pull git pull
cmake . cmake .
[ $? -eq 1 ] && echo "Vérifier les dépendances de minetestmapper puis recompiler." [ $? -eq 1 ] && echo "Vérifiez les dépendances de minetestmapper puis recompilez."
make -j$makeopt make -j$makeopt
popd popd
@ -302,16 +312,18 @@ install_mtmapper() {
init() { init() {
ver=$(strip $1) ver=$(strip $1)
if [[ -n $ssh && -n $url ]]; then if [ -n $ssh && -n $url ]; then
URL=$ssh\:$url URL=$ssh\:$url
elif [[ -n $url ]]; then elif [ -n $url ]; then
URL=$url URL=$url
else else
URL="https://sys4.fr/gitea/nalc" URL="https://sys4.fr/gitea/nalc"
fi fi
read -p "L'installation va démarrer. Continuer ? (y or n) : " continue read -p "L'installation va démarrer. Continuer ? (y or n) : " continue
if [[ $continue == "y" ]]; then if [ $continue == "y" ]; then
# Vérification de l'environnement
install_minetest install_minetest
install_minetest_game install_minetest_game
install_mods install_mods
@ -326,7 +338,7 @@ init() {
action() { action() {
local arg=$(strip $1) local arg=$(strip $1)
if [[ $arg == "dev" || $arg == "stable" || $arg == "experimental" ]]; then if [ $arg == "dev" || $arg == "stable" || $arg == "experimental" ]; then
init $arg init $arg
else else
error error
@ -335,20 +347,38 @@ action() {
} }
irrlicht() { irrlicht() {
local arg=$(strip $1) local arg=$(strip "$1")
if [[ -d $arg ]]; then if [ -d "$arg" ]; then
irrlicht_src="-DIRRLICHT_SOURCE_DIR=$arg" 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"
fi fi
} }
# Pas de paramètre # Pas de paramètre
#[[ $# -lt 1 ]] && error #[ $# -lt 1 ] && error
# ou # ou
[[ $# -lt 1 ]] && usage [ $# -lt 1 ] && usage
# -o : Options courtes # -o : Options courtes
# -l : options longues # -l : options longues
OPT=$(getopt -o h,p,j:,i: -l help,postgresql,url:,ssh:,makeopt:,irrlicht: -- "$@") OPT=$(getopt -o h,p,j:,i:,e:,d: -l help,postgresql,url:,ssh:,makeopt:,irrlicht:,exec:,dir: -- "$@")
# éclatement de $options en $1, $2... # éclatement de $options en $1, $2...
set -- $OPT set -- $OPT
@ -372,6 +402,12 @@ while true; do
-j|--makeopt) -j|--makeopt)
makeopt $2 makeopt $2
shift 2;; shift 2;;
-e|--exec)
exepath $2
shift 2;;
-d|--dir)
minedir $2
shift 2;;
--) --)
shift;; shift;;
*) *)