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 :"
echo "--help | -h : Affiche l'aide."
echo "--verbose | -v : Be verbose !"
echo "--ssh <user@host>: Identifiants ssh."
echo "--url <URL>: URL distante personnalisée."
echo -e "\tSi l'option --ssh est passée en option, il s'agira du chemin distant."
echo "Commandes :"
echo -e "\tinit : Installation par défaut. Suivez les instructions..."
echo -e "\t\tSi une installation précédente est détectée alors le script s'arrête."
echo -e "\tupgrade : Met à jour le serveur tout en sauvegardant la version précédente au cas où."
echo -e "\tclean_install : /!\ Permet de faire une installation qui supprime toute installation précédente (Perte de la map et des paramètres définitif...)."
echo -e "\tuninstall : /!\ Permet de supprimer l'installation courante (Perte de données...)."
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..."
}
install_minetest( ) {
if [ [ -z $makeopt ] ] ; then
local makeopt = 1
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-22 10:07:56 +01:00
git clone $URL /minetest.git
verif
2018-03-21 01:28:29 +01:00
fi
echo "Minetest va être recompilé..."
sleep 3
2018-03-22 10:07:56 +01:00
cd minetest
cmake . -DRUN_IN_PLACE= true -DGETTEXT= true
make -j$makeopt
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( ) {
2018-03-22 10:07:56 +01:00
if [ [ -d minetest_game ] ] ; then
2018-03-21 01:28:29 +01:00
echo "Installation précédente du jeux Minetest détecté."
2018-03-22 10:07:56 +01:00
read -p "Mettre à jour ? (y,n,clean,cancel) " continue
if [ [ $continue = = "y" ] ] ; then
cd minetest_game
git pull
verif
cd ..
echo "Mise à jour du jeux Minetest depuis dépôt distant terminé."
elif [ [ $continue = = "clean" ] ] ; then
echo "/!\ Cette action va effacer les données du répertoire minetest_game"
read -p "Êtes-vous sûr de vouloir continuer ? (y or n) " continue
if [ [ $continue = = "y" ] ] ; then
rm -rf minetest_game
echo "Jeux Minetest 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 minetest_game ] ] ; then
git clone $URL /minetest_game.git
verif
echo "Clonage de minetest_game terminé."
fi
if [ [ ! -a minetest/games/minetest_game ] ] ; then
ln -s $( pwd ) /minetest_game minetest/games/minetest_game
echo " Lien symbolique minetest/games/minetest_game vers $( pwd ) /minetest_game créé. "
fi
echo "Installation/Mise à jour du jeux Minetest terminé."
}
install_world( ) {
if [ [ -d minetest/worlds/nalc ] ] ; 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 [ [ -d minetest/worlds/nalc_old ] ] ; then
rm -rf minetest/worlds/nalc_old
fi
mv minetest/worlds/nalc minetest/worlds/nalc_old
fi
fi
if [ [ ! -d minetest/worlds/nalc ] ] ; then
mkdir -p minetest/worlds/nalc
ln -s $( pwd ) /world.mt minetest/worlds/nalc/world.mt
2018-03-21 01:28:29 +01:00
fi
2018-03-22 10:07:56 +01:00
}
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 --remote --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
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 ] ] ; then
rm world.mt
fi
cp worldmt.conf world.mt
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
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
echo " load_mod_ $submod = true " >> world.mt
fi
done
else
echo " load_mod_ $mod = true " >> world.mt
fi
fi
done
echo "Liens des mods créés dans minetest/mods/"
2018-03-21 01:28:29 +01:00
}
init( ) {
if [ [ -n $ssh && -n $url ] ] ; then
URL = $ssh \: $url
elif [ [ -n $url ] ] ; then
URL = $url
else
URL = "https://github.com/sys4-fr"
fi
read -p "L'installation va démarrer. Continuer ? (y or n) : " continue
if [ [ $continue = = "y" ] ] ; then
install_minetest
install_minetest_game
install_mods
2018-03-22 10:07:56 +01:00
install_world
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 )
if [ [ $arg = = "init" ] ] ; then
2018-03-22 10:07:56 +01:00
init
2018-03-21 01:28:29 +01:00
elif [ [ $arg = = "clean" ] ] ; then
2018-03-22 10:07:56 +01:00
clean
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
}
# Pas de paramètre
#[[ $# -lt 1 ]] && error
# ou
[ [ $# -lt 1 ] ] && usage
# -o : Options courtes
# -l : options longues
OPT = $( getopt -o h,v,j: -l verbose,help,url:,ssh:,makeopt: -- " $@ " )
# éclatement de $options en $1, $2...
set -- $OPT
while true; do
case " $1 " in
-v| --verbose)
# TODO
shift; ;
-h| --help)
usage; ;
--ssh)
ssh $2
shift 2; ;
--url)
url $2
shift 2; ;
-j| --makeopt)
makeopt $2
shift 2; ;
--)
shift; ;
*)
action $1
shift; ;
esac
done
2018-03-16 23:47:34 +01:00
install( ) {
if [ [ $1 = = "ssh" ] ] ; then
read -p "Please enter <username>@<host> : " ident
ident = $ident \:
else
ident = "https://sys4.fr/gogs/"
fi
# On clone le dépot du moteur du jeux Minetest à la racine
git clone $ident "NotreAmiLeCube/minetest.git"
verif
# On clone le dépot du sous-jeux minetest_game à la racine
git clone $ident "NotreAmiLeCube/minetest_game.git"
verif
# On clone les mods de nalc à la racine
git clone $ident "NotreAmiLeCube/nalc-server-mods.git"
verif
# On initialise les sous-modules du dépot des mods
cd nalc-server-mods
git submodule update --init --recursive
# On créé les liens symboliques nécessaires
cd ..
ln -s $( pwd ) /minetest_game minetest/games/minetest_game
2018-03-21 01:28:29 +01:00
ln -s $( pwd ) /custom/mods/nalc nalc-server-mods/nalc
2018-03-16 23:47:34 +01:00
while read -r mod
do
ln -s $( pwd ) /nalc-server-mods/$mod minetest/mods/$mod
done <<< $( ls nalc-server-mods)
# TODO Lien symbolique minetest.conf
# Création du répertoire de la map
2018-03-17 01:18:15 +01:00
mkdir -p minetest/worlds/nalc
2018-03-16 23:47:34 +01:00
# Compilation de Minetest
cd minetest
cmake . -DRUN_IN_PLACE= true -DENABLE_GETTEXT= true
make -j33
verif
cd ..
2018-03-16 23:57:46 +01:00
echo "Installation terminé."
echo "Mise à jour des mods..."
exec ./upgrade.sh --mods-link
2018-03-16 23:47:34 +01:00
}