database_installer.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. #!/bin/bash
  2. ############################################
  3. ## Writen by DrLecter ##
  4. ## License: GNU GPL ##
  5. ## Based on Tiago Tagliaferri's script ##
  6. ## E-mail: tiago_tagliaferri@msn.com ##
  7. ## From "L2J-DataPack" ##
  8. ############################################
  9. trap finish 2
  10. configure() {
  11. echo "#############################################"
  12. echo "# You entered script configuration area #"
  13. echo "# No change will be performed in your DB #"
  14. echo "# I will just ask you some questions about #"
  15. echo "# your hosts and DB. #"
  16. echo "#############################################"
  17. MYSQLDUMPPATH=`which mysqldump 2>/dev/null`
  18. MYSQLPATH=`which mysql 2>/dev/null`
  19. if [ $? -ne 0 ]; then
  20. echo "We were unable to find MySQL binaries on your path"
  21. while :
  22. do
  23. echo -ne "\nPlease enter MySQL binaries directory (no trailing slash): "
  24. read MYSQLBINPATH
  25. if [ -e "$MYSQLBINPATH" ] && [ -d "$MYSQLBINPATH" ] && [ -e "$MYSQLBINPATH/mysqldump" ] && [ -e "$MYSQLBINPATH/mysql" ]; then
  26. MYSQLDUMPPATH="$MYSQLBINPATH/mysqldump"
  27. MYSQLPATH="$MYSQLBINPATH/mysql"
  28. break
  29. else
  30. echo "The data you entered is invalid. Please verify and try again."
  31. exit 1
  32. fi
  33. done
  34. fi
  35. #LS
  36. echo -ne "\nPlease enter MySQL Login Server hostname (default localhost): "
  37. read LSDBHOST
  38. if [ -z "$LSDBHOST" ]; then
  39. LSDBHOST="localhost"
  40. fi
  41. echo -ne "\nPlease enter MySQL Login Server database name (default l2jdb): "
  42. read LSDB
  43. if [ -z "$LSDB" ]; then
  44. LSDB="l2jdb"
  45. fi
  46. echo -ne "\nPlease enter MySQL Login Server user (default root): "
  47. read LSUSER
  48. if [ -z "$LSUSER" ]; then
  49. LSUSER="root"
  50. fi
  51. echo -ne "\nPlease enter MySQL Login Server $LSUSER's password (won't be displayed) :"
  52. stty -echo
  53. read LSPASS
  54. stty echo
  55. echo ""
  56. if [ -z "$LSPASS" ]; then
  57. echo "Hum.. i'll let it be but don't be stupid and avoid empty passwords"
  58. elif [ "$LSUSER" == "$LSPASS" ]; then
  59. echo "You're not too brilliant choosing passwords huh?"
  60. fi
  61. #GS
  62. echo -ne "\nPlease enter MySQL Game Server hostname (default $LSDBHOST): "
  63. read GSDBHOST
  64. if [ -z "$GSDBHOST" ]; then
  65. GSDBHOST="$LSDBHOST"
  66. fi
  67. echo -ne "\nPlease enter MySQL Game Server database name (default $LSDB): "
  68. read GSDB
  69. if [ -z "$GSDB" ]; then
  70. GSDB="$LSDB"
  71. fi
  72. echo -ne "\nPlease enter MySQL Game Server user (default $LSUSER): "
  73. read GSUSER
  74. if [ -z "$GSUSER" ]; then
  75. GSUSER="$LSUSER"
  76. fi
  77. echo -ne "\nPlease enter MySQL Game Server $GSUSER's password (won't be displayed): "
  78. stty -echo
  79. read GSPASS
  80. stty echo
  81. echo ""
  82. if [ -z "$GSPASS" ]; then
  83. echo "Hum.. i'll let it be but don't be stupid and avoid empty passwords"
  84. elif [ "$GSUSER" == "$GSPASS" ]; then
  85. echo "You're not too brilliant choosing passwords huh?"
  86. fi
  87. save_config $1
  88. }
  89. save_config() {
  90. if [ -n "$1" ]; then
  91. CONF="$1"
  92. else
  93. CONF="database_installer.rc"
  94. fi
  95. echo ""
  96. echo "With these data i can generate a configuration file which can be read"
  97. echo "on future updates. WARNING: this file will contain clear text passwords!"
  98. echo -ne "Shall i generate config file $CONF? (Y/n):"
  99. read SAVE
  100. if [ "$SAVE" == "y" -o "$SAVE" == "Y" -o "$SAVE" == "" ];then
  101. cat <<EOF>$CONF
  102. #Configuration settings for L2J-Datapack database installer script
  103. MYSQLDUMPPATH=$MYSQLDUMPPATH
  104. MYSQLPATH=$MYSQLPATH
  105. LSDBHOST=$LSDBHOST
  106. LSDB=$LSDB
  107. LSUSER=$LSUSER
  108. LSPASS=$LSPASS
  109. GSDBHOST=$GSDBHOST
  110. GSDB=$GSDB
  111. GSUSER=$GSUSER
  112. GSPASS=$GSPASS
  113. EOF
  114. chmod 600 $CONF
  115. echo "Configuration saved as $CONF"
  116. echo "Permissions changed to 600 (rw- --- ---)"
  117. elif [ "$SAVE" != "n" -a "$SAVE" != "N" ]; then
  118. save_config
  119. fi
  120. }
  121. load_config() {
  122. if [ -n "$1" ]; then
  123. CONF="$1"
  124. else
  125. CONF="database_installer.rc"
  126. fi
  127. if [ -e "$CONF" ] && [ -f "$CONF" ]; then
  128. . $CONF
  129. else
  130. echo "Settings file not found: $CONF"
  131. echo "You can specify an alternate settings filename:"
  132. echo $0 config_filename
  133. echo ""
  134. echo "If file doesn't exist it can be created"
  135. echo "If nothing is specified script will try to work with ./database_installer.rc"
  136. echo ""
  137. configure $CONF
  138. fi
  139. }
  140. asklogin(){
  141. echo "#############################################"
  142. echo "# WARNING: This section of the script CAN #"
  143. echo "# destroy your characters and accounts #"
  144. echo "# information. Read questions carefully #"
  145. echo "# before you reply. #"
  146. echo "#############################################"
  147. echo ""
  148. echo "Choose upgrade (u) if you already have an 'accounts' table but no"
  149. echo "'gameserver' table (ie. your server is a pre LS/GS split version.)"
  150. echo "Choose skip (s) to skip loginserver DB installation and go to"
  151. echo "gameserver DB installation/upgrade."
  152. echo -ne "LOGINSERVER DB install type: (f) full, (u) upgrade or (s) skip or (q) quit? "
  153. read LOGINPROMPT
  154. case "$LOGINPROMPT" in
  155. "f"|"F") logininstall; loginupgrade; gsbackup; asktype;;
  156. "u"|"U") loginupgrade; gsbackup; asktype;;
  157. "s"|"S") gsbackup; asktype;;
  158. "q"|"Q") finish;;
  159. *) asklogin;;
  160. esac
  161. }
  162. logininstall(){
  163. echo "Deleting loginserver tables for new content."
  164. $MYL < login_install.sql &> /dev/null
  165. }
  166. loginupgrade(){
  167. echo "Installling new loginserver content."
  168. $MYL < ../sql/accounts.sql &> /dev/null
  169. $MYL < ../sql/gameservers.sql &> /dev/null
  170. }
  171. gsbackup(){
  172. while :
  173. do
  174. echo ""
  175. echo -ne "Do you want to make a backup copy of your GSDB? (y/n): "
  176. read LSB
  177. if [ "$LSB" == "Y" -o "$LSB" == "y" ]; then
  178. echo "Making a backup of the original gameserver database."
  179. $MYSQLDUMPPATH --add-drop-table -h $GSDBHOST -u $GSUSER --password=$GSPASS $GSDB > gameserver_backup.sql
  180. if [ $? -ne 0 ];then
  181. echo ""
  182. echo "There was a problem accesing your GS database, either it wasnt created or authentication data is incorrect."
  183. exit 1
  184. fi
  185. break
  186. elif [ "$LSB" == "n" -o "$LSB" == "N" ]; then
  187. break
  188. fi
  189. done
  190. }
  191. lsbackup(){
  192. while :
  193. do
  194. echo ""
  195. echo -ne "Do you want to make a backup copy of your LSDB? (y/n): "
  196. read LSB
  197. if [ "$LSB" == "Y" -o "$LSB" == "y" ]; then
  198. echo "Making a backup of the original loginserver database."
  199. $MYSQLDUMPPATH --add-drop-table -h $LSDBHOST -u $LSUSER --password=$LSPASS $LSDB > loginserver_backup.sql
  200. if [ $? -ne 0 ];then
  201. echo ""
  202. echo "There was a problem accesing your LS database, either it wasnt created or authentication data is incorrect."
  203. exit 1
  204. fi
  205. break
  206. elif [ "$LSB" == "n" -o "$LSB" == "N" ]; then
  207. break
  208. fi
  209. done
  210. }
  211. asktype(){
  212. echo ""
  213. echo ""
  214. echo "WARNING: A full install (f) will destroy all existing character data."
  215. echo -ne "GAMESERVER DB install type: (f) full install, (u) upgrade, (s) skip or (q) quit? "
  216. read INSTALLTYPE
  217. case "$INSTALLTYPE" in
  218. "f"|"F") fullinstall; upgradeinstall I; experimental; expinstall;;
  219. "u"|"U") upgradeinstall U; experimental; expinstall;;
  220. "s"|"S") experimental; expinstall;;
  221. "q"|"Q") finish;;
  222. *) asktype;;
  223. esac
  224. }
  225. fullinstall(){
  226. echo "Deleting all gameserver tables for new content."
  227. $MYG < full_install.sql &> /dev/null
  228. }
  229. upgradeinstall(){
  230. if [ "$1" == "I" ]; then
  231. echo "Installling new gameserver content."
  232. else
  233. echo "Upgrading gameserver content"
  234. fi
  235. $MYG < ../sql/account_data.sql &> /dev/null
  236. $MYG < ../sql/armor.sql &> /dev/null
  237. $MYG < ../sql/auction.sql &> /dev/null
  238. $MYG < ../sql/auction_bid.sql &> /dev/null
  239. $MYG < ../sql/auction_watch.sql &> /dev/null
  240. $MYG < ../sql/auto_chat.sql &> /dev/null
  241. $MYG < ../sql/auto_chat_text.sql &> /dev/null
  242. $MYG < ../sql/boxaccess.sql &> /dev/null
  243. $MYG < ../sql/boxes.sql &> /dev/null
  244. $MYG < ../sql/castle.sql &> /dev/null
  245. $MYG < ../sql/castle_door.sql &> /dev/null
  246. $MYG < ../sql/castle_doorupgrade.sql &> /dev/null
  247. $MYG < ../sql/castle_siege_guards.sql &> /dev/null
  248. $MYG < ../sql/char_templates.sql &> /dev/null
  249. $MYG < ../sql/character_friends.sql &> /dev/null
  250. $MYG < ../sql/character_hennas.sql &> /dev/null
  251. $MYG < ../sql/character_macroses.sql &> /dev/null
  252. $MYG < ../sql/character_quests.sql &> /dev/null
  253. $MYG < ../sql/character_recipebook.sql &> /dev/null
  254. $MYG < ../sql/character_shortcuts.sql &> /dev/null
  255. $MYG < ../sql/character_skills.sql &> /dev/null
  256. $MYG < ../sql/character_skills_save.sql &> /dev/null
  257. $MYG < ../sql/character_subclasses.sql &> /dev/null
  258. $MYG < ../sql/characters.sql &> /dev/null
  259. $MYG < ../sql/clan_data.sql &> /dev/null
  260. $MYG < ../sql/clan_wars.sql &> /dev/null
  261. $MYG < ../sql/clanhall.sql &> /dev/null
  262. $MYG < ../sql/class_list.sql &> /dev/null
  263. $MYG < ../sql/droplist.sql &> /dev/null
  264. $MYG < ../sql/etcitem.sql &> /dev/null
  265. $MYG < ../sql/fish.sql &> /dev/null
  266. $MYG < ../sql/fishing_skill_trees.sql &> /dev/null
  267. $MYG < ../sql/fishreward.sql &> /dev/null
  268. $MYG < ../sql/forums.sql &> /dev/null
  269. $MYG < ../sql/games.sql &> /dev/null
  270. $MYG < ../sql/global_tasks.sql &> /dev/null
  271. $MYG < ../sql/helper_buff_list.sql &> /dev/null
  272. $MYG < ../sql/henna.sql &> /dev/null
  273. $MYG < ../sql/henna_trees.sql &> /dev/null
  274. $MYG < ../sql/heroes.sql &> /dev/null
  275. $MYG < ../sql/items.sql &> /dev/null
  276. $MYG < ../sql/locations.sql &> /dev/null
  277. $MYG < ../sql/lvlupgain.sql &> /dev/null
  278. $MYG < ../sql/mapregion.sql &> /dev/null
  279. $MYG < ../sql/merchant_areas_list.sql &> /dev/null
  280. $MYG < ../sql/merchant_buylists.sql &> /dev/null
  281. $MYG < ../sql/merchant_lease.sql &> /dev/null
  282. $MYG < ../sql/merchant_shopids.sql &> /dev/null
  283. $MYG < ../sql/merchants.sql &> /dev/null
  284. $MYG < ../sql/minions.sql &> /dev/null
  285. $MYG < ../sql/npc.sql &> /dev/null
  286. $MYG < ../sql/olympiad_nobles.sql&> /dev/null
  287. $MYG < ../sql/pets.sql &> /dev/null
  288. $MYG < ../sql/pets_stats.sql &> /dev/null
  289. $MYG < ../sql/posts.sql &> /dev/null
  290. $MYG < ../sql/npcskills.sql &> /dev/null
  291. $MYG < ../sql/raidboss_spawnlist.sql &> /dev/null
  292. $MYG < ../sql/random_spawn.sql &> /dev/null
  293. $MYG < ../sql/random_spawn_loc.sql &> /dev/null
  294. $MYG < ../sql/seven_signs.sql &> /dev/null
  295. $MYG < ../sql/seven_signs_festival.sql &> /dev/null
  296. $MYG < ../sql/seven_signs_status.sql &> /dev/null
  297. $MYG < ../sql/siege_clans.sql &> /dev/null
  298. $MYG < ../sql/skill_learn.sql &> /dev/null
  299. $MYG < ../sql/skill_spellbooks.sql &> /dev/null
  300. $MYG < ../sql/skill_trees.sql &> /dev/null
  301. $MYG < ../sql/spawnlist.sql &> /dev/null
  302. $MYG < ../sql/teleport.sql &> /dev/null
  303. $MYG < ../sql/topic.sql &> /dev/null
  304. $MYG < ../sql/weapon.sql &> /dev/null
  305. $MYG < ../sql/zone.sql &> /dev/null
  306. newbie_helper
  307. }
  308. experimental(){
  309. echo ""
  310. echo ""
  311. echo "WARNING: Alternative NPC table is as experimental as standard one for the moment. By comparing the two you can help us to find better values for this table."
  312. echo -ne "Install experimental gameserver DB tables: (y) yes or (n) no or (q) quit?"
  313. read ASKXP
  314. case "$ASKXP" in
  315. "y"|"Y") expinstall;;
  316. "n"|"N") finish;;
  317. "q"|"Q") finish;;
  318. *) experimental;;
  319. esac
  320. finish
  321. }
  322. expinstall(){
  323. while :
  324. do
  325. echo ""
  326. echo -ne "Do you want to make another backup of GSDB before applying experimental? (y/N): "
  327. read LSB
  328. if [ "$LSB" == "Y" -o "$LSB" == "y" ]; then
  329. echo "Making a backup of the default gameserver tables."
  330. $MYSQLDUMPPATH --add-drop-table -h $GSDBHOST -u $GSUSER --password=$GSPASS $GSDB > experimental_backup.sql 2> /dev/null
  331. if [ $? -ne 0 ];then
  332. echo ""
  333. echo "There was a problem accesing your GS database, server down?."
  334. exit 1
  335. fi
  336. break
  337. elif [ "$LSB" == "n" -o "$LSB" == "N" -o "$LSB" == "" ]; then
  338. break
  339. fi
  340. done
  341. echo "Installing experimental content."
  342. $MYG < ../sql/experimental/npc.sql &> /dev/null
  343. #$MYG < ../sql/experimental/npcskills.sql &> /dev/null
  344. #$MYG < ../sql/experimental/spawnlist-experimental.sql &> /dev/null
  345. finish
  346. }
  347. finish(){
  348. echo ""
  349. echo "Script execution finished."
  350. exit 0
  351. }
  352. newbie_helper(){
  353. while :
  354. do
  355. echo ""
  356. echo -ne "If you're not that skilled applying changes within 'updates' folder, i can try to do it for you (y). If you wish to do it on your own, choose (n). Shall i parse updates files? (Y/n)"
  357. read NOB
  358. if [ "$NOB" == "Y" -o "$NOB" == "y" -o "$NOB" == "" ]; then
  359. echo ""
  360. echo "There we go, it may take some time..."
  361. echo "updates parser results. Last run: "`date` >database_installer.log
  362. for file in $(ls ../sql/updates/*sql);do
  363. echo $file|cut -d/ -f4 >> database_installer.log
  364. $MYG < $file 2>> database_installer.log
  365. if [ $? -eq 0 ];then
  366. echo "no errors">> database_installer.log
  367. fi
  368. done
  369. echo ""
  370. echo "Log available at $(pwd)/database_installer.log"
  371. echo ""
  372. break
  373. elif [ "$NOB" == "n" -o "$NOB" == "N" ]; then
  374. break
  375. fi
  376. done
  377. }
  378. clear
  379. load_config $1
  380. MYL="$MYSQLPATH -h $LSDBHOST -u $LSUSER --password=$LSPASS -D $LSDB"
  381. MYG="$MYSQLPATH -h $GSDBHOST -u $GSUSER --password=$GSPASS -D $GSDB"
  382. lsbackup
  383. asklogin