From c64c3acc1a3ea83c340520df2c3bc5e19291aaf7 Mon Sep 17 00:00:00 2001 From: iaretechnician Date: Wed, 29 Apr 2026 20:12:28 -0400 Subject: [PATCH] xml edits --- .../server_configs/dayz_arma2co_win32.xml | 51 +++++++++++++---- .../server_configs/dayz_epoch_mod_win32.xml | 56 ++++++++++++++++++- modules/mysql/module.php | 4 ++ ...databases_connection_profile_migration.sql | 20 +++++++ 4 files changed, 119 insertions(+), 12 deletions(-) create mode 100644 modules/mysql/mysql_databases_connection_profile_migration.sql diff --git a/modules/config_games/server_configs/dayz_arma2co_win32.xml b/modules/config_games/server_configs/dayz_arma2co_win32.xml index b79466b3..806275e4 100644 --- a/modules/config_games/server_configs/dayz_arma2co_win32.xml +++ b/modules/config_games/server_configs/dayz_arma2co_win32.xml @@ -84,24 +84,55 @@ rm -f dayzmod1.9.0.tar dbPass=$(</dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) srvID=${PWD##*/} dbID=server_${srvID} +mysqlServerID=2 + +# Panel DB connection (where gsp_mysql_servers / gsp_mysql_databases live) +panelDB=panel +panelPrefix=gsp_ +panelHost=mysql.iaregamer.com +panelPort=3307 +panelUser=remoteuser +panelPass=Pkloyn7yvpht! + +# Resolve target game DB server/profile from panel metadata (default: mysql_server_id=2 -> MySQL 5.7) +mysqlProfile=$(mysql -N -B -u${panelUser} -p${panelPass} -h${panelHost} -P${panelPort} -e "SELECT mysql_ip,mysql_port,COALESCE(NULLIF(mysql_admin_user,''),'root'),mysql_root_passwd FROM ${panelDB}.${panelPrefix}mysql_servers WHERE mysql_server_id = ${mysqlServerID} LIMIT 1") + +if [ -z "${mysqlProfile}" ]; then + echo "ERROR: Could not resolve mysql server profile id ${mysqlServerID} from ${panelDB}.${panelPrefix}mysql_servers" + exit 1 +fi + +IFS=$'\t' read -r mysqlHost mysqlPort mysqlAdminUser mysqlAdminPass <<EOF +${mysqlProfile} +EOF + +mysqlPort=${mysqlPort:-3306} # sed -i "s/dayz_dayzmod/${dbID}/g" 1.9.0_fresh.sql -sed -i "s/Host = .*/Host = mysql.iaregamer.com/g" cfg/hiveext.ini -sed -i "s/Port = .*/Port = 3307/g" cfg/hiveext.ini +sed -i "s/Host = .*/Host = ${mysqlHost}/g" cfg/hiveext.ini +sed -i "s/Port = .*/Port = 3306/g" cfg/hiveext.ini sed -i "s/Database = .*/Database = ${dbID}/g" cfg/hiveext.ini sed -i "s/Username = .*/Username = ${dbID}/g" cfg/hiveext.ini sed -i "s/Password = .*/Password = ${dbPass}/g" cfg/hiveext.ini +sed -i "s/Port = .*/Port = ${mysqlPort}/g" cfg/hiveext.ini -mysql -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -e "CREATE DATABASE IF NOT EXISTS ${dbID}" -mysql -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -e "GRANT ALL ON ${dbID}.* TO '${dbID}'@'localhost' IDENTIFIED BY '${dbPass}'" -mysql -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -e "GRANT ALL ON ${dbID}.* TO 'dayzhivemind'@'%' IDENTIFIED BY 'Pkloyn7yvpht!'" -mysql -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -e "GRANT ALL ON ${dbID}.* TO '${dbID}'@'%' IDENTIFIED BY '${dbPass}'" -mysql -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -e "FLUSH PRIVILEGES;" -mysql --force -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -D ${dbID} < 1.9.0_fresh.sql +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "CREATE DATABASE IF NOT EXISTS \`${dbID}\`" -mysql -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -e "DELETE FROM panel.gsp_mysql_databases WHERE db_user = '${dbID}'" -mysql -uremoteuser -pPkloyn7yvpht! -hmysql.iaregamer.com -P3307 -e "INSERT INTO panel.gsp_mysql_databases(mysql_server_id, home_id, db_user, db_passwd, db_name, enabled) VALUES (2,${srvID},'${dbID}','${dbPass}','${dbID}',1)" +# MySQL 5.7/8 compatible user creation + grants +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "CREATE USER IF NOT EXISTS '${dbID}'@'localhost' IDENTIFIED BY '${dbPass}'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "CREATE USER IF NOT EXISTS '${dbID}'@'%' IDENTIFIED BY '${dbPass}'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "CREATE USER IF NOT EXISTS 'dayzhivemind'@'%' IDENTIFIED BY 'Pkloyn7yvpht!'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "GRANT ALL ON \`${dbID}\`.* TO '${dbID}'@'localhost'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "GRANT ALL ON \`${dbID}\`.* TO '${dbID}'@'%'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "GRANT ALL ON \`${dbID}\`.* TO 'dayzhivemind'@'%'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "FLUSH PRIVILEGES;" + +# Import with compatibility flags for routines/events under binary logging +mysql --force --init-command="SET SESSION sql_mode=''; SET SESSION log_bin_trust_function_creators=1;" -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -D ${dbID} < 1.9.0_fresh.sql + +mysql -u${panelUser} -p${panelPass} -h${panelHost} -P${panelPort} -e "DELETE FROM ${panelDB}.${panelPrefix}mysql_databases WHERE db_user = '${dbID}'" +mysql -u${panelUser} -p${panelPass} -h${panelHost} -P${panelPort} -e "INSERT INTO ${panelDB}.${panelPrefix}mysql_databases(mysql_server_id, home_id, db_user, db_passwd, db_name, enabled, db_mysql_ip, db_mysql_port, db_admin_user, db_admin_passwd) VALUES (${mysqlServerID},${srvID},'${dbID}','${dbPass}','${dbID}',1,'${mysqlHost}','${mysqlPort}','${mysqlAdminUser}','${mysqlAdminPass}')" # Create alsoRun.bat ----------------------------------- diff --git a/modules/config_games/server_configs/dayz_epoch_mod_win32.xml b/modules/config_games/server_configs/dayz_epoch_mod_win32.xml index f10041d4..14097e6a 100644 --- a/modules/config_games/server_configs/dayz_epoch_mod_win32.xml +++ b/modules/config_games/server_configs/dayz_epoch_mod_win32.xml @@ -72,8 +72,60 @@ wget http://files.iaregamer.com/addons/arma2Addons.tar.gz . wget http://files.iaregamer.com/addons/epochmod-1.0.7.1.tar.gz . tar -zxvf arma2Addons.tar.gz tar -zxvf epoch_mod.tar.gz -chmod +x setup_db.sh -./setup_db.sh + +#Create Database --------------------------------------- + +dbPass=$(</dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) +srvID=${PWD##*/} +dbID=server_${srvID} +mysqlServerID=2 + +# Panel DB connection (where gsp_mysql_servers / gsp_mysql_databases live) +panelDB=panel +panelPrefix=gsp_ +panelHost=mysql.iaregamer.com +panelPort=3307 +panelUser=remoteuser +panelPass=Pkloyn7yvpht! + +# Resolve target game DB server/profile from panel metadata (default: mysql_server_id=2 -> MySQL 5.7) +mysqlProfile=$(mysql -N -B -u${panelUser} -p${panelPass} -h${panelHost} -P${panelPort} -e "SELECT mysql_ip,mysql_port,COALESCE(NULLIF(mysql_admin_user,''),'root'),mysql_root_passwd FROM ${panelDB}.${panelPrefix}mysql_servers WHERE mysql_server_id = ${mysqlServerID} LIMIT 1") + +if [ -z "${mysqlProfile}" ]; then + echo "ERROR: Could not resolve mysql server profile id ${mysqlServerID} from ${panelDB}.${panelPrefix}mysql_servers" + exit 1 +fi + +IFS=$'\t' read -r mysqlHost mysqlPort mysqlAdminUser mysqlAdminPass <<EOF +${mysqlProfile} +EOF + +mysqlPort=${mysqlPort:-3306} + +sed -i "s/dayzhivemind/${dbID}/g" epoch.sql + +sed -i "s/Host = .*/Host = ${mysqlHost}/g" cfg/hiveext.ini +sed -i "s/Database = .*/Database = ${dbID}/g" cfg/hiveext.ini +sed -i "s/Username = .*/Username = ${dbID}/g" cfg/hiveext.ini +sed -i "s/Password = .*/Password = ${dbPass}/g" cfg/hiveext.ini +sed -i "s/Port = .*/Port = ${mysqlPort}/g" cfg/hiveext.ini + +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "CREATE DATABASE IF NOT EXISTS \`${dbID}\`" + +# MySQL 5.7/8 compatible user creation + grants +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "CREATE USER IF NOT EXISTS '${dbID}'@'localhost' IDENTIFIED BY '${dbPass}'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "CREATE USER IF NOT EXISTS '${dbID}'@'%' IDENTIFIED BY '${dbPass}'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "GRANT ALL ON \`${dbID}\`.* TO '${dbID}'@'localhost'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "GRANT ALL ON \`${dbID}\`.* TO '${dbID}'@'%'" +mysql -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -e "FLUSH PRIVILEGES;" + +# Import with compatibility flags for routines/events under binary logging +mysql --force --init-command="SET SESSION sql_mode=''; SET SESSION log_bin_trust_function_creators=1;" -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -D ${dbID} < epoch.sql +mysql --force --init-command="SET SESSION sql_mode=''; SET SESSION log_bin_trust_function_creators=1;" -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -D ${dbID} < add_events.sql +mysql --force --init-command="SET SESSION sql_mode=''; SET SESSION log_bin_trust_function_creators=1;" -u${mysqlAdminUser} -p${mysqlAdminPass} -h${mysqlHost} -P${mysqlPort} -D ${dbID} < update1071.sql + +mysql -u${panelUser} -p${panelPass} -h${panelHost} -P${panelPort} -e "DELETE FROM ${panelDB}.${panelPrefix}mysql_databases WHERE db_user = '${dbID}'" +mysql -u${panelUser} -p${panelPass} -h${panelHost} -P${panelPort} -e "INSERT INTO ${panelDB}.${panelPrefix}mysql_databases(mysql_server_id, home_id, db_user, db_passwd, db_name, enabled, db_mysql_ip, db_mysql_port, db_admin_user, db_admin_passwd) VALUES (${mysqlServerID},${srvID},'${dbID}','${dbPass}','${dbID}',1,'${mysqlHost}','${mysqlPort}','${mysqlAdminUser}','${mysqlAdminPass}')" rm *.sh rm *.gz diff --git a/modules/mysql/module.php b/modules/mysql/module.php index 5d8ebea1..86fe1906 100644 --- a/modules/mysql/module.php +++ b/modules/mysql/module.php @@ -52,6 +52,10 @@ $install_queries[0] = array( `db_passwd` varchar(50) NOT NULL, `db_name` varchar(50) NOT NULL, `enabled` int(11) NOT NULL, + `db_mysql_ip` varchar(255) NULL, + `db_mysql_port` int(11) NULL, + `db_admin_user` varchar(64) NULL, + `db_admin_passwd` varchar(255) NULL, PRIMARY KEY (`db_id`), UNIQUE KEY (`mysql_server_id`,`db_name`), UNIQUE KEY (`mysql_server_id`,`db_user`) diff --git a/modules/mysql/mysql_databases_connection_profile_migration.sql b/modules/mysql/mysql_databases_connection_profile_migration.sql new file mode 100644 index 00000000..e7bfd0b5 --- /dev/null +++ b/modules/mysql/mysql_databases_connection_profile_migration.sql @@ -0,0 +1,20 @@ +-- GSP migration: persist MySQL connection profile snapshot in gsp_mysql_databases +-- Run this against the panel database (adjust prefix if needed). + +ALTER TABLE `gsp_mysql_databases` + ADD COLUMN `db_mysql_ip` varchar(255) NULL AFTER `enabled`, + ADD COLUMN `db_mysql_port` int(11) NULL AFTER `db_mysql_ip`, + ADD COLUMN `db_admin_user` varchar(64) NULL AFTER `db_mysql_port`, + ADD COLUMN `db_admin_passwd` varchar(255) NULL AFTER `db_admin_user`; + +-- Backfill from gsp_mysql_servers for existing rows. +UPDATE `gsp_mysql_databases` d +JOIN `gsp_mysql_servers` s ON s.mysql_server_id = d.mysql_server_id +SET d.db_mysql_ip = s.mysql_ip, + d.db_mysql_port = s.mysql_port, + d.db_admin_user = COALESCE(NULLIF(s.mysql_admin_user, ''), 'root'), + d.db_admin_passwd = s.mysql_root_passwd +WHERE d.db_mysql_ip IS NULL + OR d.db_mysql_port IS NULL + OR d.db_admin_user IS NULL + OR d.db_admin_passwd IS NULL;