Les fichiers pour installer le serveur NALC.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

370 lines
10KB

  1. #!/bin/bash
  2. # Author: Sys4
  3. # License: GPLv3
  4. # Fonctions
  5. strip() {
  6. echo $1 | cut -d \' -f 2
  7. }
  8. verif() {
  9. if [[ $? -gt 0 ]]; then
  10. echo "Erreur ! Arrêt du script."
  11. exit 1
  12. fi
  13. }
  14. error() {
  15. echo "ERREUR : Vérifiez vos paramètres !" >&2
  16. echo "Utilisez l'option -h pour en savoir plus" >&2
  17. exit 1
  18. }
  19. usage() {
  20. echo "Usage: ./install.sh [options] [--] <version>"
  21. echo "Options :"
  22. echo -e "\t-h --help\tAffiche l'aide."
  23. echo -e "\t-j --makeopt\tNombre de threads de compilation."
  24. echo -e "\t--ssh <user@host>: Identifiants ssh."
  25. echo -e "\t--url <URL>: URL distante personnalisée."
  26. echo -e "\t\tSi l'option --ssh est passée en option, il s'agira du chemin distant."
  27. echo -e "\t-i --irrlicht\tChemin personnalisé des sources irrlicht."
  28. echo -e "\t-p --postgresql\tSi vous voulez que le serveur soit configuré avec postgresql. Sinon leveldb par défaut."
  29. echo "version :"
  30. echo -e "\tstable : Installation du serveur compatible avec la dernière branche stable de minetest. Suivez les instructions... (Recommandé)"
  31. echo -e "\t1.3 : Installation du serveur compatible avec minetest-5.3. Suivez les instructions... (Stable)"
  32. echo -e "\t1.2 : Installation du serveur compatible avec minetest-5.2. Suivez les instructions... (Stable)"
  33. echo -e "\t1.1 : Installation du serveur depuis la branche 1.1 compatible Minetest 5.0. Suivez les instructions... (Stable)"
  34. echo -e "\t1.0 : Installation du serveur compatible avec minetest-0.4.17.x. Suivez les instructions... (Stable)"
  35. echo -e "\tdev : Installation de la version en cours de developpement du serveur. Suivez les instructions... (Le plus à jour mais non Stable !)"
  36. exit 0
  37. }
  38. ssh() {
  39. ssh=$(strip $1)
  40. echo "Installation avec identifiants ssh : $ssh"
  41. }
  42. url() {
  43. url=$(strip $1)
  44. }
  45. makeopt() {
  46. makeopt=$(strip $1)
  47. }
  48. postgresql() {
  49. echo "Les indications à fournir ci-après nécessite d'avoir configuré un serveur postgresql au préalable. (Ctrl-C) pour annuler."
  50. read -p "Indiquez l'adresse de la base de données : " pg_url
  51. read -p "Indiquez l'utilisateur de la BDD : " pg_user
  52. read -p "Indiquez le mot de passe : " pg_password
  53. read -p "Indiquez le nom de la BDD à utiliser : " pg_dbname
  54. echo "gameid = nalc_game" > world.mt
  55. echo "backend = postgresql" >> world.mt
  56. echo "player_backend = postgresql" >> world.mt
  57. echo "pgsql_connection = host=$pg_url user=$pg_user password=$pg_password dbname=$pg_dbname" >> world.mt
  58. echo "pgsql_player_connection = host=$pg_url user=$pg_user password=$pg_password dbname=players-$pg_dbname" >> world.mt
  59. echo "auth_backend = sqlite3" >> world.mt
  60. }
  61. install_minetest() {
  62. if [[ -z $makeopt ]]; then
  63. local makeopt=$(grep -c processor /proc/cpuinfo)
  64. fi
  65. if [[ -d minetest ]]; then
  66. echo "Installation précédente de Minetest détecté."
  67. read -p "Mettre à jour ? (y,n,clean,cancel) : " continue
  68. if [[ $continue == "clean" ]]; then
  69. echo "Attention ! Cela va supprimer définitivement toutes les données."
  70. read -p "Êtes-vous certains de vouloir continuer ? (y or n) : " continue
  71. if [[ $continue == "y" ]]; then
  72. rm -rf minetest
  73. echo "Répertoire minetest supprimé."
  74. else
  75. echo "Installation annulée. Fin"
  76. exit 0
  77. fi
  78. elif [[ $continue == "y" ]]; then
  79. cd minetest
  80. git pull
  81. verif
  82. cd ..
  83. elif [[ $continue == "cancel" ]]; then
  84. echo "Installation annulée. Fin"
  85. exit 0
  86. fi
  87. fi
  88. if [[ ! -d minetest ]]; then
  89. local branch="-b master"
  90. if [[ $ver == "1.0" ]]; then
  91. branch="-b stable-0.4"
  92. elif [[ $ver == "1.1" ]]; then
  93. branch="-b 5.1.1"
  94. elif [[ $ver == "1.2" ]]; then
  95. branch="-b 5.2.0"
  96. elif [[ $ver == "1.3" || $ver == "stable" ]]; then
  97. branch="-b 5.3.0"
  98. elif [[ $ver == "dev" ]]; then
  99. branch="-b stable-5"
  100. fi
  101. if [[ -n $ssh ]]; then
  102. git clone --depth 1 $branch $ssh\:minetest/minetest.git
  103. else
  104. git clone --depth 1 $branch https://gitlab.com/minetest/minetest.git
  105. fi
  106. verif
  107. fi
  108. echo "Minetest va être (re)compilé..."
  109. sleep 3
  110. cd minetest
  111. 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
  112. make -j$makeopt
  113. verif
  114. echo "Installation de Minetest terminé."
  115. cd ..
  116. }
  117. install_minetest_game() {
  118. if [[ -d nalc_game ]]; then
  119. echo "Installation précédente du jeux NALC détecté."
  120. read -p "Mettre à jour ? (y,n,clean,cancel) " continue
  121. if [[ $continue == "y" ]]; then
  122. cd nalc_game
  123. git pull
  124. verif
  125. cd ..
  126. echo "Mise à jour du jeux NALC depuis dépôt distant terminé."
  127. elif [[ $continue == "clean" ]]; then
  128. echo "/!\ Cette action va effacer les données du répertoire nalc_game"
  129. read -p "Êtes-vous sûr de vouloir continuer ? (y or n) " continue
  130. if [[ $continue == "y" ]]; then
  131. rm -rf nalc_game
  132. echo "Jeux NALC supprimé."
  133. else
  134. echo "Mise à jour annulée. Terminé."
  135. exit 0
  136. fi
  137. elif [[ $continue == "cancel" ]]; then
  138. echo "Mise à jour annulée. Terminé."
  139. exit 0
  140. fi
  141. fi
  142. if [[ ! -d nalc_game ]]; then
  143. local branch="-b master"
  144. if [[ $ver == "1.0" ]]; then
  145. branch="-b nalc-1.0"
  146. elif [[ $ver == "1.1" ]]; then
  147. branch="-b nalc-1.1"
  148. elif [[ $ver == "1.2" ]]; then
  149. branch="-b nalc-1.2"
  150. elif [[ $ver == "1.3" || $ver == "stable" ]]; then
  151. branch="-b nalc-1.3"
  152. elif [[ $ver == "dev" ]]; then
  153. branch="-b nalc-dev"
  154. fi
  155. git clone --depth 1 $branch $URL/nalc_game.git
  156. verif
  157. echo "Clonage de nalc_game terminé."
  158. fi
  159. if [[ ! -L minetest/games/nalc_game ]]; then
  160. ln -s $(pwd)/nalc_game minetest/games/nalc_game
  161. echo "Lien symbolique minetest/games/nalc_game vers $(pwd)/nalc_game créé."
  162. fi
  163. echo "Installation/Mise à jour du jeux NALC terminé."
  164. }
  165. install_mods() {
  166. if [[ -d nalc-server-mods ]]; then
  167. echo "Le dossier de mods est déjà présent. Que souhaitez-vous faire ?"
  168. read -p "Choisissez parmi la liste, ([1]update, [2]clean update, [3]cancel, [4]Ne rien faire) : " continue
  169. if [[ $continue == 1 ]]; then
  170. ./upgrade.sh -m
  171. elif [[ $continue == 2 ]]; then
  172. rm -rf nalc-server-mods
  173. elif [[ $continue == 3 ]]; then
  174. echo "Mise à jour des mods annulé. Terminé."
  175. exit 0
  176. fi
  177. fi
  178. if [[ ! -d nalc-server-mods ]]; then
  179. local branch="master"
  180. if [[ $ver == "dev" ]]; then
  181. branch="dev"
  182. elif [[ $ver == "1.3" ]]; then
  183. branch="stable-1.3"
  184. elif [[ $ver == "1.2" ]]; then
  185. branch="stable-1.2"
  186. elif [[ $ver == "1.1" ]]; then
  187. branch="stable-1.1"
  188. elif [[ $ver == "1.0" ]]; then
  189. branch="stable-1.0"
  190. fi
  191. git clone --depth 1 -b $branch $URL/nalc-server-mods.git
  192. verif
  193. ./upgrade.sh -m
  194. fi
  195. if [[ -z $pg_dbname ]]; then
  196. if [[ $ver == "1.0" ]]; then
  197. cp worldmt-1.0.conf world.mt
  198. elif [[ $ver == "1.1" || $ver == "1.2" || $ver == "1.3" || $ver == "stable" || $ver == "dev" ]]; then
  199. cp worldmt-1.1.conf world.mt
  200. fi
  201. fi
  202. }
  203. install_world() {
  204. local world_name="nalc-$ver"
  205. if [[ -n $pg_dbname ]]; then
  206. world_name=$pg_dbname
  207. fi
  208. if [[ -d minetest/worlds/$world_name ]]; then
  209. echo "Une map est déjà présente. Que souhaitez-vous faire ?"
  210. read -p "Choisissez parmi la liste ([1]Nouveau, [2]Mettre à jour [3]Ne rien faire) : " continuer
  211. if [[ $continuer == 1 ]]; then
  212. if [[ -n $pg_dbname ]]; then
  213. 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
  214. fi
  215. # On sauvegarde l'ancien world
  216. if [[ -d "minetest/worlds/"$world_name"_old" ]]; then
  217. rm -rf "minetest/worlds/"$world_name"_old"
  218. fi
  219. mv minetest/worlds/$world_name "minetest/worlds/"$world_name"_old"
  220. elif [[ $continuer == 2 ]]; then
  221. # On sauvegarde l'ancien world
  222. if [[ -d "minetest/worlds/"$world_name"_old" ]]; then
  223. rm -rf "minetest/worlds/"$world_name"_old"
  224. fi
  225. cp -r minetest/worlds/$world_name "minetest/worlds/"$world_name"_old"
  226. # On met à jour les fichiers contenues dans cette map
  227. ./upgrade.sh -w $world_name -b $ver
  228. fi
  229. fi
  230. if [[ ! -d minetest/worlds/$world_name ]]; then
  231. mkdir -p minetest/worlds/$world_name
  232. if [[ -n $pg_dbname ]]; then
  233. createdb $pg_dbname
  234. createdb players-$pg_dbname
  235. fi
  236. ./upgrade.sh -w $world_name -b $ver
  237. mkdir -p minetest/worlds/$world_name/runes
  238. fi
  239. }
  240. post_install() {
  241. if [[ ! -a minetest/minetest.conf ]]; then
  242. local world_name="nalc-$ver"
  243. if [[ -n $pg_dbname ]]; then
  244. world_name=$pg_dbname
  245. fi
  246. ./upgrade.sh -w $world_name -b $ver -f mtconf
  247. echo "Veuillez éditer le fichier $(pwd)/minetest/minetest.conf"
  248. fi
  249. if [[ ! -d logs ]]; then
  250. mkdir logs
  251. fi
  252. if [[ ! -a start.sh ]]; then
  253. cp start.sh.example start.sh
  254. chmod u+x start.sh
  255. echo "Veuillez éditer le fichier $(pwd)/start.sh"
  256. echo "Veuillez éditer le fichier $(pwd)/backup.sh"
  257. echo "Veuillez éditer le fichier $(pwd)/shutdown.sh"
  258. fi
  259. }
  260. init() {
  261. ver=$(strip $1)
  262. if [[ -n $ssh && -n $url ]]; then
  263. URL=$ssh\:$url
  264. elif [[ -n $url ]]; then
  265. URL=$url
  266. else
  267. URL="https://sys4.fr/gitea/nalc"
  268. fi
  269. read -p "L'installation va démarrer. Continuer ? (y or n) : " continue
  270. if [[ $continue == "y" ]]; then
  271. install_minetest
  272. install_minetest_game
  273. install_mods
  274. install_world
  275. post_install
  276. echo "L'installation est terminé. Bravo !"
  277. else
  278. echo "Installation annulée. Fin."
  279. fi
  280. }
  281. action() {
  282. local arg=$(strip $1)
  283. if [[ $arg == "dev" || $arg == "stable" || $arg == "1.0" || $arg == "1.1" || $arg == "1.2" || $arg == "1.3" ]]; then
  284. init $arg
  285. else
  286. error
  287. fi
  288. exit 0
  289. }
  290. irrlicht() {
  291. local arg=$(strip $1)
  292. if [[ -d $arg ]]; then
  293. irrlicht_src="-DIRRLICHT_SOURCE_DIR=$arg"
  294. fi
  295. }
  296. # Pas de paramètre
  297. #[[ $# -lt 1 ]] && error
  298. # ou
  299. [[ $# -lt 1 ]] && usage
  300. # -o : Options courtes
  301. # -l : options longues
  302. OPT=$(getopt -o h,p,j:,i: -l help,postgresql,url:,ssh:,makeopt:,irrlicht: -- "$@")
  303. # éclatement de $options en $1, $2...
  304. set -- $OPT
  305. while true; do
  306. case "$1" in
  307. -h|--help)
  308. usage;;
  309. -i|--irrlicht)
  310. irrlicht $2
  311. shift 2;;
  312. -p|--postgresql)
  313. postgresql
  314. shift;;
  315. --ssh)
  316. ssh $2
  317. shift 2;;
  318. --url)
  319. url $2
  320. shift 2;;
  321. -j|--makeopt)
  322. makeopt $2
  323. shift 2;;
  324. --)
  325. shift;;
  326. *)
  327. action $1
  328. shift;;
  329. esac
  330. done