diff --git a/linux/getmangos.sh b/linux/getmangos.sh index 37c9ccb9..6408f196 100755 --- a/linux/getmangos.sh +++ b/linux/getmangos.sh @@ -120,7 +120,36 @@ function Log() # Function to install prerequisite libraries function GetPrerequisites() { - # First, let's check that we have the necessary tools to define the OS version. + # First, we need to check the installer. + installer=0 + + which apt-get + + if [ $? -ne 0 ]; then + Log "apt-get isn't the installer by default" 1 + else + installer=1 + apt-get -y install git lsb_release curl + fi + + which yum + + if [ $? -ne 0 ]; then + Log "yum isn't the installer by default" 1 + else + installer=1 + yum -y install git redhat-lsb curl + fi + + which aptitude + if [ $? -ne 0 ]; then + Log "aptitude isn't the installer by default" 1 + else + installer=1 + aptitude -y install git lsb_release curl + fi + + # Then, let's check that we have the necessary tools to define the OS version. which lsb_release if [ $? -ne 0 ]; then @@ -158,31 +187,31 @@ function GetPrerequisites() case ${VER} in "sarah") # Linux Mint 18 - Ubuntu Xenial based - su -c "aptitude -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.3.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root + su -c "aptitude -y install build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.3.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root ;; "rosa") # Linux Mint 17.3 - Ubuntu Trusty based - su -c "apt-get -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root + su -c "apt-get -y install build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root ;; "rafaela") # Linux Mint 17.2 - Ubuntu Trusty based - su -c "apt-get -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root + su -c "apt-get -y install build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root ;; "rebecca") # Linux Mint 17.1 - Ubuntu Trusty based - su -c "apt-get -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root + su -c "apt-get -y install build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root ;; "qiana") # Linux Mint 17 - Ubuntu Trusty based - su -c "apt-get -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root + su -c "apt-get -y install build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.3 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root ;; "maya") # Linux Mint 13 - Ubuntu Precise based - su -c "apt-get -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.1 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root + su -c "apt-get -y install build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.0.1 libssl-dev libmysqlclient-dev libtool zlib1g-dev" root ;; "betsy") # LMDE 2 - Debian Jessie based - su -c "aptitude -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.2.8 libssl-dev libmysqlclient-dev libtool zliblg-dev" root + su -c "aptitude -y install build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.2.8 libssl-dev libmysqlclient-dev libtool zliblg-dev" root ;; *) OS_VER=0 @@ -232,20 +261,59 @@ function GetPrerequisites() case ${VER} in "santiago") # Red Hat 6.x - su -c "yum -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.2.8 libssl-dev libmysqlclient-dev libtool zliblg-dev" root + su -c "yum -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev ace-6.3.3 libssl-dev libmysqlclient-dev libtool zliblg-dev" root ;; "maipo") # Red Hat 7.x - su -c "yum -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev libace-6.3.3 libssl-dev libmysqlclient-dev libtool zliblg-dev" root + su -c "yum -y install curl build-essential linux-headers-$(uname -r) autoconf automake cmake libbz2-dev libace-dev ace-6.3.3 libssl-dev libmysqlclient-dev libtool zliblg-dev" root ;; *) OS_VER=0 ;; esac + ;; + "CentOS") + case ${VER} in + "Core") + # Default CentOS - Adding necessary RPM third-party. + rpm -Uv ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/devel:/libraries:/ACE:/micro/CentOS_7/x86_64/ace-6.3.3-55.1.x86_64.rpm + rpm -Uv ftp://rpmfind.net/linux/centos/7.3.1611/os/x86_64/Packages/perl-Net-Telnet-3.03-19.el7.noarch.rpm + rpm -Uv ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/devel:/libraries:/ACE:/micro:/versioned/CentOS_7/x86_64/mpc-6.3.3-42.1.x86_64.rpm + rpm -Uv ftp://rpmfind.net/linux/centos/7.3.1611/os/x86_64/Packages/libtool-2.4.2-21.el7_2.x86_64.rpm + rpm -Uv ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/devel:/libraries:/ACE:/micro/CentOS_7/x86_64/ace-devel-6.3.3-55.1.x86_64.rpm + su -c "yum -y install curl autoconf automake cmake ace-devel ace-6.3.3 openssl-devel mysql-devel libtool gcc-c++" root + ;; + *) + OS_VER=0 + ;; + esac ;; *) OS_VER=0 ;; + "Fedora") + case ${VER} in + "TwentyFive") + # Fedora 25 - Adding necessary RPM third-party. + su -c "yum install autoconf automake libtool gcc-c++" root + # Getting and building ACE. Not provided in RPM for Fedora... + wget ftp://download.dre.vanderbilt.edu/previous_versions/ACE-6.4.2.tar.bz2 + tar xjvf ACE-6.4.2.tar.bz2 + export ACE_ROOT=/root/ACE_wrappers + echo "#include \"ace/config-linux.h\"" >> $ACE_ROOT/ace/config.sh + echo 'include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU' >> $ACE_ROOT/include/makeinclude/platform_macros.GNU + echo 'INSTALL_PREFIX=/usr/local' >> $ACE_ROOT/include/makeinclude/platform_macros.GNU + export LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PATH + make + make install + # Installing remaining dependencies.. + su -c "yum -y install cmake openssl-devel mariadb-devel" root + ;; + *) + OS_VER=0 + ;; + esac + ;; esac # See if a supported OS was detected @@ -817,19 +885,21 @@ function InstallMaNGOS() function UpdateDatabases() { local DB_HOST="$1" - local DB_USER="$2" - local DB_UPW="$3" - local DB_REALM="$4" - local DB_WORLD="$5" - local DB_TOONS="$6" + local DB_TYPE="$2" + local DB_COMMAND="$3" + local DB_USER="$4" + local DB_UPW="$5" + local DB_REALM="$6" + local DB_WORLD="$7" + local DB_TOONS="$8" # Loop through the character files - for pFile in $(ls $SRCPATH/database/Character/Updates/$(ls -a $SRCPATH/database/Character/Updates/ | tail -1)/*.sql); do + for pFile in $(ls $SRCPATH/database/Character/Updates/$(ls -a $SRCPATH/database/Character/Updates/ | tail -1)/*.sql 2>>/dev/null); do if [ ! -f "$pFile" ]; then continue fi # Attempt to apply the update - mysql --login-path=local -q -s $DB_TOONS < "$pFile" > /dev/null 2>&1 + $DB_COMMAND $DB_TOONS < "$pFile" > /dev/null 2>&1 # Notify the user of which updates were and were not applied if [ $? -ne 0 ]; then @@ -840,12 +910,12 @@ function UpdateDatabases() done # Loop through the realm files - for pFile in $(ls $SRCPATH/database/Realm/Updates/$(ls -a $SRCPATH/database/Realm/Updates/ | tail -1)/*.sql); do + for pFile in $(ls $SRCPATH/database/Realm/Updates/$(ls -a $SRCPATH/database/Realm/Updates/ | tail -1)/*.sql 2>>/dev/null); do if [ ! -f "$pFile" ]; then continue fi # Attempt to apply the update - mysql --login-path=local -q -s $DB_REALM < "$pFile" > /dev/null 2>&1 + $DB_COMMAND $DB_REALM < "$pFile" > /dev/null 2>&1 # Notify the user of which updates were and were not applied if [ $? -ne 0 ]; then @@ -856,12 +926,12 @@ function UpdateDatabases() done # Loop through the world files - for pFile in $(ls $SRCPATH/database/World/Updates/$(ls -a $SRCPATH/database/World/Updates/ | tail -1)/*.sql); do + for pFile in $(ls $SRCPATH/database/World/Updates/$(ls -a $SRCPATH/database/World/Updates/ | tail -1)/*.sql 2>>/dev/null); do if [ ! -f "$pFile" ]; then continue fi # Attempt to apply the update - mysql --login-path=local -q -s $DB_WORLD < "$pFile" > /dev/null 2>&1 + $DB_COMMAND $DB_WORLD < "$pFile" > /dev/null 2>&1 # Notify the user of which updates were and were not applied if [ $? -ne 0 ]; then @@ -876,14 +946,16 @@ function UpdateDatabases() function InstallDatabases() { local DB_HOST="$1" - local DB_USER="$2" - local DB_UPW="$3" - local DB_REALM="$4" - local DB_WORLD="$5" - local DB_TOONS="$6" + local DB_TYPE="$2" + local DB_COMMAND="$3" + local DB_USER="$4" + local DB_UPW="$5" + local DB_REALM="$6" + local DB_WORLD="$7" + local DB_TOONS="$8" # First create the realm database structure - mysql --login-path=local -q -s $DB_REALM < $SRCPATH/database/Realm/Setup/realmdLoadDB.sql + $DB_COMMAND $DB_REALM < $SRCPATH/database/Realm/Setup/realmdLoadDB.sql # Check for success if [ $? -ne 0 ]; then @@ -892,7 +964,7 @@ function InstallDatabases() fi # Now create the characters database structure - mysql --login-path=local -q -s $DB_TOONS < $SRCPATH/database/Character/Setup/characterLoadDB.sql + $DB_COMMAND $DB_TOONS < $SRCPATH/database/Character/Setup/characterLoadDB.sql # Check for success if [ $? -ne 0 ]; then @@ -901,7 +973,7 @@ function InstallDatabases() fi # Next create the world database structure - mysql --login-path=local -q -s $DB_WORLD < $SRCPATH/database/World/Setup/mangosdLoadDB.sql + $DB_COMMAND $DB_WORLD < $SRCPATH/database/World/Setup/mangosdLoadDB.sql # Check for success if [ $? -ne 0 ]; then @@ -912,7 +984,7 @@ function InstallDatabases() # Finally, loop through and build the world database database for fFile in $SRCPATH/database/World/Setup/FullDB/*.sql; do # Attempt to execute the SQL file - mysql --login-path=local -q -s $DB_WORLD < $fFile + $DB_COMMAND $DB_WORLD < $fFile # Check for success if [ $? -ne 0 ]; then @@ -922,13 +994,15 @@ function InstallDatabases() done # Now apply any updates - UpdateDatabases $DB_HOST $DB_USER $DB_UPW $DB_REALM $DB_WORLD $DB_TOONS + UpdateDatabases $DB_HOST $DB_TYPE "$DB_COMMAND" $DB_USER $DB_UPW $DB_REALM $DB_WORLD $DB_TOONS } # Function to install or update the MySQL/MariaDB databases function HandleDatabases() { local DBMODE="0" + local DB_TYPE="0" + local DB_COMMAND="" local DB_TMP="0" local DB_USER="mangos" local DB_UPW="mangos" @@ -959,6 +1033,20 @@ function HandleDatabases() return 0 fi + # Ask the user the DB type + DBTYPE=$($DLGAPP --backtitle "MaNGOS Linux Build Configuration" --title "Database Type" \ + --menu "Which database are you using?" 0 0 3 \ + 0 "MariaDB" \ + 1 "MySQL" \ + 2 "PostgreSQL" \ + 3>&2 2>&1 1>&3) + + # Exit if cancelled + if [ $? -ne 0 ]; then + Log "Database type selection cancelled. No modifications have been made to your databases." 1 + return 0 + fi + # Get the database hostname or IP address DB_TMP=$($DLGAPP --backtitle "MaNGOS Linux Build Configuration" --title "Database Hostname Or IP Address" \ --inputbox "Default: localhost" 0 0 3>&2 2>&1 1>&3) @@ -1018,9 +1106,21 @@ function HandleDatabases() if [ ! -z "$DB_TMP" ]; then DB_UPW="$DB_TMP" fi - - printf "Confirm your MySQL password\t, " - mysql_config_editor set --login-path=local --host=$DB_HOST --port=$DB_PORT --user=$DB_USER --password --skip-warn + + case "${DB_TYPE}" in + "0") + DB_COMMAND="mysql -u ${DB_USER} -p${DB_UPW} " + ;; + "1") + printf "Confirm your MySQL password\t, " + mysql_config_editor set --login-path=local --host=$DB_HOST --port=$DB_PORT --user=$DB_USER --password --skip-warn + DB_COMMAND="mysql --login-path=local -q -s " + ;; + "2") + Log "Currently not supported." 1 + return 0 + ;; + esac # Setup database names based on release DB_REALM="$DB_PREFIX$DB_REALM" @@ -1046,20 +1146,20 @@ function HandleDatabases() # Remove and create the realm DB if selected if [[ $DBSEL == *0* ]]; then - mysql --login-path=local -q -s -e "DROP DATABASE IF EXISTS $DB_REALM;" - mysql --login-path=local -q -s -e "CREATE DATABASE $DB_REALM;" + $DB_COMMAND -e "DROP DATABASE IF EXISTS $DB_REALM;" + $DB_COMMAND -e "CREATE DATABASE $DB_REALM;" fi # Remove and create the world DB if selected if [[ $DBSEL == *1* ]]; then - mysql --login-path=local -q -s -e "DROP DATABASE IF EXISTS $DB_WORLD;" - mysql --login-path=local -q -s -e "CREATE DATABASE $DB_WORLD;" + $DB_COMMAND -e "DROP DATABASE IF EXISTS $DB_WORLD;" + $DB_COMMAND -e "CREATE DATABASE $DB_WORLD;" fi # Remove and create the character DB if selected if [[ $DBSEL == *2* ]]; then - mysql --login-path=local -q -s -e "DROP DATABASE IF EXISTS $DB_TOONS;" - mysql --login-path=local -q -s -e "CREATE DATABASE $DB_TOONS;" + $DB_COMMAND -e "DROP DATABASE IF EXISTS $DB_TOONS;" + $DB_COMMAND -e "CREATE DATABASE $DB_TOONS;" fi # Validate success @@ -1069,17 +1169,17 @@ function HandleDatabases() fi # Finally, populate the databases - InstallDatabases $DB_HOST $DB_USER $DB_UPW $DB_REALM $DB_WORLD $DB_TOONS + InstallDatabases $DB_HOST $DB_TYPE "$DB_COMMAND" $DB_USER $DB_UPW $DB_REALM $DB_WORLD $DB_TOONS # Updating the realmlist if [[ $DBSEL == *3* ]]; then - mysql --login-path=local -q -s $DB_REALM < $SRCPATH/database/Tools/updateRealm.sql + $DB_COMMAND $DB_REALM < $SRCPATH/database/Tools/updateRealm.sql fi fi # Update the databases if requested if [ "$DBMODE" = "1" ]; then - UpdateDatabases $DB_HOST $DB_USER $DB_UPW $DB_REALM $DB_WORLD $DB_TOONS + UpdateDatabases $DB_HOST $DB_TYPE "$DB_COMMAND" $DB_USER $DB_UPW $DB_REALM $DB_WORLD $DB_TOONS fi } @@ -1397,13 +1497,13 @@ UseDialog # Select which activities to do TASKS=$($DLGAPP --backtitle "MaNGOS Linux Build Configuration" --title "Select Tasks" \ --checklist "Please select the tasks to perform" 0 70 8 \ - 1 "Install Prerequisites" Off \ + 1 "Install Prerequisites" On \ 2 "Set Download And Install Paths" On \ 3 "Clone Source Repositories" On \ 4 "Build MaNGOS" On \ 5 "Install MaNGOS" On \ - 6 "Install Databases" Off \ - 7 "Extract Resources" Off \ + 6 "Install Databases" On \ + 7 "Extract Resources" On \ 8 "Create Code::Blocks Project File" Off \ 3>&2 2>&1 1>&3)