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.

290 lines
7.7KB

  1. #!/bin/bash
  2. # Author: Sys4
  3. # License: GPLv3
  4. serverpath=$(pwd)
  5. UP_MODS=0
  6. WORLD_FILE=all
  7. strip() {
  8. echo $1 | cut -d \' -f 2
  9. }
  10. verif() {
  11. if [[ $? -gt 0 ]]; then
  12. echo "Erreur ! Arrêt du script."
  13. exit 1
  14. fi
  15. }
  16. error() {
  17. if [[ -n $1 ]]; then
  18. echo "ERREUR : $1 !"
  19. else
  20. echo "ERREUR : paramètres invalides !" >&2
  21. echo "utilisez l'option -h pour en savoir plus" >&2
  22. fi
  23. exit 1
  24. }
  25. usage() {
  26. echo "Usage : ./upgrade.sh [-h|--help] | [-s|--serverpath <path>] [-m|--mods] [ -w|--world <world> < -b|--branch <branch> [-f|--world-file <arg>] > ]"
  27. echo "WARNING: This is for an experimental usage. Don't use it!"
  28. echo "Options:"
  29. echo -e "\t-h --help\t\tAffiche cette aide"
  30. echo -e "\t-s --serverpath <path>\tRépertoire racine du serveur"
  31. echo -e "\t-m --mods\t\tMet à jour les mods"
  32. echo -e "\t-w --world <name>\tNom de la carte"
  33. echo -e "\t-b --branch <branch>\tBranche concerné"
  34. echo -e "\t-f --world-file <arg>\tFichier(s) a mettre à jour :"
  35. echo -e "\t<arg> doit être une des valeur suivante :"
  36. echo -e "\tall\t\tToutes les mise à jour suivantes seront executés sauf 'mtconf'"
  37. echo -e "\tnews\t\tLes news du serveur"
  38. echo -e "\ttechnic\t\tLes paramètres de technic"
  39. echo -e "\tfbn\t\tLes paramètres de forbidden_names"
  40. echo -e "\tfbnp\t\tLes paramètres de forbidden_names_patterns"
  41. echo -e "\tbitchange\tLes paramètres de bitchange"
  42. echo -e "\tchristmas\tLes paramètres de christmas_craft"
  43. echo -e "\trandommsg\tLes messages aléatoires"
  44. echo -e "\tworldmt\tRégénère le fichier world.mt (peut-être utile avec l'option -m)"
  45. echo -e "\tmtconf\tMet à jour le fichier minetest.conf"
  46. echo "Exemples:"
  47. echo -e "\tMise à jour des mods :"
  48. echo -e "\t$ ./upgrade.sh -m"
  49. echo -e "\tMise à jour du fichier minetest.conf :"
  50. echo -e "\t$ ./upgrade.sh -w nalc-stable -b stable -f mtconf"
  51. echo -e "\tMise à jour complète (mods et fichiers world, sauf minetest.conf) :"
  52. echo -e "\t$ ./upgrade.sh -m -w nalc-1.1 -b 1.1"
  53. }
  54. regen_worldmt() {
  55. local worldfile=$serverpath/world.mt
  56. echo "Regénération du fichier $worldfile..."
  57. # Faire une sauvegarde du fichier world.mt actuel
  58. cp $worldfile $serverpath/world.mt.bak
  59. # Créer un nouveau fichier temporaire sans les lignes commençant par load_mod
  60. local i=0
  61. cat $worldfile | while read -r line; do
  62. local match=$(echo $line | grep load_mod_)
  63. if [[ -z $match ]]; then
  64. if [[ $i -eq 0 ]]; then
  65. echo $line > /tmp/world.mt
  66. else
  67. echo $line >> /tmp/world.mt
  68. fi
  69. fi
  70. i=$(( $i+1 ))
  71. done
  72. # Recréation des liens symboliques des mods dans le dossier minetest
  73. # et générer une ligne "load_mod_<mod> = true ou false" pour chaque mod
  74. # et l'ajouter au fichier
  75. local mods_path=$serverpath/nalc-server-mods
  76. local mods_minetest=$serverpath/minetest/mods
  77. local mods_custom=$serverpath/custom/mods
  78. rm -f $mods_minetest/*
  79. if [[ -d $mods_custom ]]; then
  80. ls $mods_custom | while read -r mod; do
  81. if [[ -d $mods_custom/$mod ]]; then
  82. rm -f $mods_path/$mod
  83. ln -s $mods_custom/$mod $mods_path/$mod
  84. fi
  85. done
  86. fi
  87. local i=0
  88. local md[1]="" # Mods to disable
  89. local mods="3d_armor_ip 3d_armor_sfinv"
  90. if [[ $BRANCH == "1.0" ]]; then
  91. mods="3d_armor_ip 3d_armor_sfinv worldedit_brush"
  92. elif [[ $BRANCH == "dev" || $BRANCH == "1.2" || $BRANCH == "1.3" || $BRANCH == "stable" ]]; then
  93. mods="3d_armor_ip 3d_armor_sfinv 3dmushrooms"
  94. fi
  95. for mod in $mods; do
  96. i=$(( $i+1 ))
  97. md[$i]=$mod
  98. done
  99. ls $mods_path | while read -r mod; do
  100. if [[ -d $mods_path/$mod ]]; then
  101. ln -s $mods_path/$mod $mods_minetest/$mod
  102. if [[ -e $mods_path/$mod/modpack.txt || -e $mods_path/$mod/modpack.conf ]]; then
  103. ls $mods_path/$mod | while read -r submod; do
  104. if [[ -d $mods_path/$mod/$submod ]]; then
  105. local mod_enable="true"
  106. for (( modn=1; modn<=$i; modn++ )); do
  107. if [[ ${md[$modn]} == $submod ]]; then
  108. mod_enable="false"
  109. fi
  110. done
  111. echo "load_mod_$submod = $mod_enable" >> /tmp/world.mt
  112. fi
  113. done
  114. else
  115. local mod_enable="true"
  116. for (( modn=1; modn<=$i; modn++ )); do
  117. if [[ ${md[$modn]} == $mod ]]; then
  118. mod_enable="false"
  119. fi
  120. done
  121. echo "load_mod_$mod = $mod_enable" >> /tmp/world.mt
  122. fi
  123. fi
  124. done
  125. # Remplacement du l'ancien world.mt par le nouveau
  126. mv /tmp/world.mt $serverpath/world.mt
  127. echo "Regénération terminé."
  128. }
  129. update_mods() {
  130. local mods_path=$serverpath/nalc-server-mods
  131. if [[ ! -d $mods_path ]]; then
  132. error "Le répertoire $mods_path n'existe pas"
  133. fi
  134. pushd $mods_path > /dev/null 2>&1
  135. git pull
  136. verif
  137. git submodule update --init --recursive
  138. verif
  139. popd > /dev/null 2>&1
  140. }
  141. update_world() {
  142. local world_repos=$serverpath/world
  143. local world_dest=$serverpath/minetest/worlds/$WORLD_NAME
  144. if [[ ! -d $world_repos ]]; then
  145. error "$world_repos n'existe pas"
  146. fi
  147. if [[ ! -d $world_dest ]]; then
  148. error "$world_dest n'existe pas"
  149. fi
  150. if [[ $WORLD_FILE == "all" ]]; then
  151. WORLD_FILE="moretrees news technic fbn fbnp bitchange christmas randommsg worldmt"
  152. fi
  153. for w_file in $WORLD_FILE; do
  154. local file=""
  155. local file_dest=""
  156. local do_copy=1
  157. case $w_file in
  158. moretrees)
  159. file_dest=$world_dest/moretrees_settings.txt
  160. file=$world_repos/moretrees_settings-$BRANCH.txt;;
  161. news)
  162. file_dest=$world_dest/news.txt
  163. file=$world_repos/news-$BRANCH.txt;;
  164. technic)
  165. file_dest=$world_dest/technic.conf
  166. file=$world_repos/technic-$BRANCH.conf;;
  167. fbn)
  168. file_dest=$world_dest/forbidden_names.txt
  169. file=$world_repos/forbidden_names-$BRANCH.txt;;
  170. fbnp)
  171. file_dest=$world_dest/forbidden_names_patterns.txt
  172. file=$world_repos/forbidden_names_patterns-$BRANCH.txt;;
  173. bitchange)
  174. file_dest=$world_dest/bitchange_config.txt
  175. file=$world_repos/bitchange_config-$BRANCH.txt;;
  176. christmas)
  177. file_dest=$world_dest/christmas_craft.conf
  178. file=$world_repos/christmas_craft-$BRANCH.conf;;
  179. randommsg)
  180. file_dest=$world_dest/random_messages
  181. file=$world_repos/random_messages-$BRANCH;;
  182. worldmt)
  183. do_copy=0
  184. regen_worldmt
  185. rm -f $world_dest/world.mt
  186. ln -s $serverpath/world.mt $world_dest/world.mt;;
  187. mtconf) # Exception ici car n'est pas un fichier world. Doit être appelé seul.
  188. file_dest=$serverpath/minetest/minetest.conf
  189. file=$serverpath/minetest-$BRANCH.conf;;
  190. *)
  191. error;;
  192. esac
  193. if [[ $do_copy -eq 1 ]]; then
  194. if [[ ! -e $file ]]; then
  195. error "Le fichier $file n'existe pas"
  196. fi
  197. echo "Copie de $file vers $file_dest"
  198. cp -up $file $file_dest
  199. fi
  200. done
  201. }
  202. action() {
  203. if [[ ! -d $serverpath ]]; then
  204. error "Le répertoire $serverpath n'existe pas"
  205. fi
  206. if [[ $UP_MODS -eq 1 ]]; then
  207. echo "Mise à jour des mods dans $serverpath/nalc-server-mods..."
  208. update_mods
  209. echo "Mise à jour des mods terminé."
  210. fi
  211. if [[ -n $WORLD_NAME && -n $BRANCH ]]; then
  212. echo "Mise à jour de $WORLD_FILE dans $serverpath/minetest/worlds/$WORLD_NAME de la branche $BRANCH..."
  213. update_world
  214. echo "Mise à jour des fichiers world terminé."
  215. elif [[ -n $WORLD_NAME || -n $BRANCH ]]; then
  216. error
  217. fi
  218. }
  219. # Pas de paramètre
  220. [[ $# -lt 1 ]] && usage
  221. # -o : Options courtes
  222. # -l : Options longues
  223. options=$(getopt -o h,s:,m,w:,b:,f: -l help,serverpath:,mods,world:,branch:,world-file: -- "$@")
  224. # Éclatement de $options en $1, $2...
  225. set -- $options
  226. while true; do
  227. case "$1" in
  228. -h|--help)
  229. usage
  230. exit 0;;
  231. -s|--serverpath)
  232. serverpath=$(strip $2)
  233. shift 2;;
  234. -m|--mods)
  235. UP_MODS=1
  236. shift;;
  237. -w|--world)
  238. WORLD_NAME=$(strip $2)
  239. shift 2;;
  240. -b|--branch)
  241. BRANCH=$(strip $2)
  242. shift 2;;
  243. -f|--world-file)
  244. WORLD_FILE=$(strip $2)
  245. shift 2;;
  246. --)
  247. shift;;
  248. *)
  249. action
  250. exit 0
  251. shift;;
  252. esac
  253. done
  254. exit 0