#!/bin/bash ############################################ ## WARNING! WARNING! WARNING! WARNING! ## ## ## ## DON'T USE NOTEPAD TO CHANGE THIS FILE ## ## INSTEAD USE SOME DECENT TEXT EDITOR. ## ## NEWLINE CHARACTERS DIFFER BETWEEN DOS/ ## ## WINDOWS AND UNIX. ## ## ## ## USING NOTEPAD TO SAVE THIS FILE WILL ## ## LEAVE IT IN A BROKEN STATE!!! ## ############################################ ## Writen by DrLecter ## ## License: GNU GPL ## ## Based on Tiago Tagliaferri's script ## ## E-mail: tiago_tagliaferri@msn.com ## ## From "L2J-DataPack" ## ## Bug reports: http://trac.l2jdp.com/ ## ############################################ trap finish 2 configure() { echo "#############################################" echo "# You entered script configuration area #" echo "# No change will be performed in your DB #" echo "# I will just ask you some questions about #" echo "# your hosts and DB. #" echo "#############################################" MYSQLDUMPPATH=`which -a mysqldump 2>/dev/null` MYSQLPATH=`which -a mysql 2>/dev/null` if [ $? -ne 0 ]; then echo "We were unable to find MySQL binaries on your path" while : do echo -ne "\nPlease enter MySQL binaries directory (no trailing slash): " read MYSQLBINPATH if [ -e "$MYSQLBINPATH" ] && [ -d "$MYSQLBINPATH" ] && \ [ -e "$MYSQLBINPATH/mysqldump" ] && [ -e "$MYSQLBINPATH/mysql" ]; then MYSQLDUMPPATH="$MYSQLBINPATH/mysqldump" MYSQLPATH="$MYSQLBINPATH/mysql" break else echo "The data you entered is invalid. Please verify and try again." exit 1 fi done fi #LS echo -ne "\nPlease enter MySQL Login Server hostname (default localhost): " read LSDBHOST if [ -z "$LSDBHOST" ]; then LSDBHOST="localhost" fi echo -ne "\nPlease enter MySQL Login Server database name (default l2jls): " read LSDB if [ -z "$LSDB" ]; then LSDB="l2jls" fi echo -ne "\nPlease enter MySQL Login Server user (default root): " read LSUSER if [ -z "$LSUSER" ]; then LSUSER="root" fi echo -ne "\nPlease enter MySQL Login Server $LSUSER's password (won't be displayed) :" stty -echo read LSPASS stty echo echo "" if [ -z "$LSPASS" ]; then echo "Hum.. I'll let it be but don't be stupid and avoid empty passwords" elif [ "$LSUSER" == "$LSPASS" ]; then echo "You're not too brilliant choosing passwords huh?" fi #CB echo -ne "\nPlease enter MySQL Community Server hostname (default localhost): " read CBDBHOST if [ -z "$CBDBHOST" ]; then CBDBHOST="localhost" fi echo -ne "\nPlease enter MySQL Community Server database name (default l2jcs): " read CBDB if [ -z "$CBDB" ]; then CBDB="l2jcs" fi echo -ne "\nPlease enter MySQL Community Server user (default root): " read CBUSER if [ -z "$CBUSER" ]; then CBUSER="root" fi echo -ne "\nPlease enter MySQL Community Server $CBUSER's password (won't be displayed) :" stty -echo read CBPASS stty echo echo "" if [ -z "$CBPASS" ]; then echo "Hum.. I'll let it be but don't be stupid and avoid empty passwords" elif [ "$CBUSER" == "$CBPASS" ]; then echo "You're not too brilliant choosing passwords huh?" fi #GS echo -ne "\nPlease enter MySQL Game Server hostname (default $LSDBHOST): " read GSDBHOST if [ -z "$GSDBHOST" ]; then GSDBHOST="localhost" fi echo -ne "\nPlease enter MySQL Game Server database name (default l2jgs): " read GSDB if [ -z "$GSDB" ]; then GSDB="l2jgs" fi echo -ne "\nPlease enter MySQL Game Server user (default $LSUSER): " read GSUSER if [ -z "$GSUSER" ]; then GSUSER="root" fi echo -ne "\nPlease enter MySQL Game Server $GSUSER's password (won't be displayed): " stty -echo read GSPASS stty echo echo "" if [ -z "$GSPASS" ]; then echo "Hum.. I'll let it be but don't be stupid and avoid empty passwords" elif [ "$GSUSER" == "$GSPASS" ]; then echo "You're not too brilliant choosing passwords huh?" fi save_config $1 } save_config() { if [ -n "$1" ]; then CONF="$1" else CONF="database_installer.rc" fi echo "" echo "With these data I can generate a configuration file which can be read" echo "on future updates. WARNING: this file will contain clear text passwords!" echo -ne "Shall I generate config file $CONF? (Y/n):" read SAVE if [ "$SAVE" == "y" -o "$SAVE" == "Y" -o "$SAVE" == "" ];then cat <$CONF #Configuration settings for L2J-Datapack database installer script MYSQLDUMPPATH=$MYSQLDUMPPATH MYSQLPATH=$MYSQLPATH LSDBHOST=$LSDBHOST LSDB=$LSDB LSUSER=$LSUSER LSPASS=$LSPASS CBDBHOST=$CBDBHOST CBDB=$CBDB CBUSER=$CBUSER CBPASS=$CBPASS GSDBHOST=$GSDBHOST GSDB=$GSDB GSUSER=$GSUSER GSPASS=$GSPASS EOF chmod 600 $CONF echo "Configuration saved as $CONF" echo "Permissions changed to 600 (rw- --- ---)" elif [ "$SAVE" != "n" -a "$SAVE" != "N" ]; then save_config fi } load_config() { if [ -n "$1" ]; then CONF="$1" else CONF="database_installer.rc" fi if [ -e "$CONF" ] && [ -f "$CONF" ]; then . $CONF else echo "Settings file not found: $CONF" echo "You can specify an alternate settings filename:" echo $0 config_filename echo "" echo "If file doesn't exist it can be created" echo "If nothing is specified script will try to work with ./database_installer.rc" echo "" configure $CONF fi } asklogin(){ clear echo "#############################################" echo "# WARNING: This section of the script CAN #" echo "# destroy your characters and accounts #" echo "# information. Read questions carefully #" echo "# before you reply. #" echo "#############################################" echo "" echo "Choose full (f) if you don't have and 'accounts' table or would" echo "prefer to erase the existing accounts information." echo "Choose skip (s) to skip loginserver DB installation and go to" echo "communityserver DB installation/upgrade." echo -ne "LOGINSERVER DB install type: (f) full, (s) skip or (q) quit? " read LOGINPROMPT case "$LOGINPROMPT" in "f"|"F") logininstall; loginupgrade; cbbackup; askcbtype;; "s"|"S") cbbackup; askcbtype;; "q"|"Q") finish;; *) asklogin;; esac } logininstall(){ echo "Deleting loginserver tables for new content." $MYL < ls_cleanup.sql } loginupgrade(){ clear echo "Installling new loginserver content." for login in $(ls ../sql/login/*.sql);do echo "Installing loginserver table : $login" $MYL < $login done } gsbackup(){ while : do echo "" echo -ne "Do you want to make a backup copy of your GSDB? (y/n): " read LSB if [ "$LSB" == "Y" -o "$LSB" == "y" ]; then echo "Making a backup of the original gameserver database." $MYSQLDUMPPATH --add-drop-table -h $GSDBHOST -u $GSUSER --password=$GSPASS $GSDB > gs_backup.sql if [ $? -ne 0 ];then clear echo "" echo "There was a problem accesing your GS database, either it wasnt created or authentication data is incorrect." exit 1 fi break elif [ "$LSB" == "n" -o "$LSB" == "N" ]; then break fi done } cbbackup(){ while : do clear echo "" echo -ne "Do you want to make a backup copy of your CBDB? (y/n): " read LSB if [ "$LSB" == "Y" -o "$LSB" == "y" ]; then echo "Making a backup of the original communityserver database." $MYSQLDUMPPATH --add-drop-table -h $CBDBHOST -u $CBUSER --password=$CBPASS $CBDB > cs_backup.sql if [ $? -ne 0 ];then clear echo "" echo "There was a problem accesing your CB database, either it wasnt created or authentication data is incorrect." exit 1 fi break elif [ "$LSB" == "n" -o "$LSB" == "N" ]; then break fi done } lsbackup(){ while : do clear echo "" echo -ne "Do you want to make a backup copy of your LSDB? (y/n): " read LSB if [ "$LSB" == "Y" -o "$LSB" == "y" ]; then echo "Making a backup of the original loginserver database." $MYSQLDUMPPATH --add-drop-table -h $LSDBHOST -u $LSUSER --password=$LSPASS $LSDB > ls_backup.sql if [ $? -ne 0 ];then clear echo "" echo "There was a problem accesing your LS database, either it wasnt created or authentication data is incorrect." exit 1 fi break elif [ "$LSB" == "n" -o "$LSB" == "N" ]; then break fi done } asktype(){ echo "" echo "" echo "WARNING: A full install (f) will destroy all existing character data." echo -ne "GAMESERVER DB install type: (f) full install, (u) upgrade, (s) skip or (q) quit? " read INSTALLTYPE case "$INSTALLTYPE" in "f"|"F") fullinstall; upgradeinstall I; custom;; "u"|"U") upgradeinstall U; custom;; "s"|"S") custom;; "q"|"Q") finish;; *) asktype;; esac } askcbtype(){ clear echo "" echo "" echo "WARNING: A full install (f) will destroy all existing community data." echo -ne "COMMUNITYSERVER DB install type: (f) full install, (u) upgrade, (s) skip or (q) quit? " read INSTALLTYPE case "$INSTALLTYPE" in "f"|"F") fullcbinstall; upgradecbinstall I; gsbackup; asktype;; "u"|"U") upgradecbinstall U; gsbackup; asktype;; "s"|"S") gsbackup; asktype;; "q"|"Q") finish;; *) asktype;; esac } fullcbinstall(){ echo "Deleting all communityserver tables for new content." $MYC < cs_cleanup.sql } upgradecbinstall(){ clear if [ "$1" == "I" ]; then echo "Installling new communityserver content." else echo "Upgrading communityserver content" fi if [ "$1" == "I" ]; then for cb in $(ls ../sql/community/*.sql);do echo "Installing Community Board table : $cb" $MYC < $cb done fi newbie_helper_cb } fullinstall(){ clear echo "Deleting all gameserver tables for new content." $MYG < gs_cleanup.sql } upgradeinstall(){ clear if [ "$1" == "I" ]; then echo "Installling new gameserver content." else echo "Upgrading gameserver content" fi for gs in $(ls ../sql/game/*.sql);do echo "Installing GameServer table : $gs" $MYG < $gs done newbie_helper } custom(){ echo "" echo "" echo -ne "Install custom gameserver DB tables: (y) yes or (n) no or (q) quit?" read ASKCS case "$ASKCS" in "y"|"Y") cstinstall;; "n"|"N") finish;; "q"|"Q") finish;; *) custom;; esac finish } cstinstall(){ while : do clear echo "" echo -ne "Do you want to make another backup of GSDB before applying custom contents? (y/N): " read LSB if [ "$LSB" == "Y" -o "$LSB" == "y" ]; then echo "Making a backup of the default gameserver tables." $MYSQLDUMPPATH --add-drop-table -h $GSDBHOST -u $GSUSER --password=$GSPASS $GSDB > custom_backup.sql 2> /dev/null if [ $? -ne 0 ];then echo "" echo "There was a problem accesing your GS database, server down?." exit 1 fi break elif [ "$LSB" == "n" -o "$LSB" == "N" -o "$LSB" == "" ]; then break fi done clear echo "Installing custom content." for custom in $(ls ../sql/game/custom/*.sql);do echo "Installing custom table: $custom" $MYG < $custom done # L2J mods that needed extra tables to work properly, should be # listed here. To do so copy & paste the following 6 lines and # change them properly: # MOD: Wedding. echo -ne "Install "Wedding Mod" tables? (y/N): " read modprompt if [ "$modprompt" == "y" -o "$modprompt" == "Y" ]; then for mod in $(ls ../sql/game/mods/*.sql);do echo "Installing custom mod table : $mod" $MYG < $mod done fi finish } finish(){ clear echo "Script execution finished." echo "" echo "L2JDP database_installer version 0.2.2" echo "(C) 2007-2011 L2J Datapack Team" echo "database_installer comes with ABSOLUTELY NO WARRANTY;" echo "This is free software, and you are welcome to redistribute it" echo "under certain conditions; See the file gpl.txt for further" echo "details." echo "" echo "Thanks for using our software." echo "visit http://www.l2jdp.com for more info about" echo "the L2J Datapack project." exit 0 } newbie_helper(){ while : do echo "" 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). Should i parse updates files? (Y/n)" read NOB if [ "$NOB" == "Y" -o "$NOB" == "y" -o "$NOB" == "" ]; then clear echo "" echo "There we go, it may take some time..." echo "Installing Gameserver Updates" for file in $(ls ../sql/game/updates/*.sql);do $MYG < $file 2>> gserror.log done echo "Installing Loginserver Updates" for file in $(ls ../sql/login/updates/*.sql);do $MYL < $file 2>> lserror.log done break elif [ "$NOB" == "n" -o "$NOB" == "N" ]; then break fi done } newbie_helper_cb(){ while : do echo "" 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). Should i parse updates files? (Y/n)" read NOB if [ "$NOB" == "Y" -o "$NOB" == "y" -o "$NOB" == "" ]; then clear echo "" echo "There we go, it may take some time..." echo "updates parser results. Last run: "`date` >cb_database_installer.log for file in $(ls ../sql/community/updates/*sql);do echo $file|cut -d/ -f4 >> cb_database_installer.log $MYC < $file 2>> cb_database_installer.log if [ $? -eq 0 ];then echo "no errors">> cb_database_installer.log fi done clear echo "" echo "Log available at $(pwd)/cb_database_installer.log" echo "" break elif [ "$NOB" == "n" -o "$NOB" == "N" ]; then break fi done } clear load_config $1 MYL="$MYSQLPATH -h $LSDBHOST -u $LSUSER --password=$LSPASS -D $LSDB" MYG="$MYSQLPATH -h $GSDBHOST -u $GSUSER --password=$GSPASS -D $GSDB" MYC="$MYSQLPATH -h $CBDBHOST -u $CBUSER --password=$CBPASS -D $CBDB" lsbackup asklogin