344 lines
11 KiB
Bash
Executable file
344 lines
11 KiB
Bash
Executable file
#!/bin/bash
|
||
#
|
||
# Prepare and launch server khanat
|
||
# Copyright (C) 2017 AleaJactaEst
|
||
#
|
||
# This program is free software: you can redistribute it and/or modify
|
||
# it under the terms of the GNU Affero General Public License as published by
|
||
# the Free Software Foundation, either version 3 of the License, or
|
||
# (at your option) any later version.
|
||
#
|
||
# This program is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU Affero General Public License for more details.
|
||
#
|
||
# You should have received a copy of the GNU Affero General Public License
|
||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
||
usage()
|
||
{
|
||
cat << EOF
|
||
usage:$0 [options]
|
||
Prepare and launch server khanat
|
||
|
||
options:
|
||
-h, --help : Show this help
|
||
-d, --debug : Show debug message
|
||
--start-khanat-with-screen : start with screen
|
||
--show-khanat-log : Show khanat log (after start)
|
||
--show-all-log : Show all log (after start) [apache, mysql, khanat]
|
||
--show-status-nagios : show status (ater start)
|
||
--show-status : show status (ater start)
|
||
--bash-after-start : command bash after start
|
||
EOF
|
||
}
|
||
|
||
status_program()
|
||
{
|
||
pid=$(cat /home/gameserver/khanat/server/$1/$1.pid)
|
||
ps -p $pid >/dev/null
|
||
if [[ $? -eq 0 ]]
|
||
then
|
||
pidstate="ok"
|
||
else
|
||
pidstate="ko"
|
||
fi
|
||
state=$(cat /home/gameserver/khanat/server/$1/$1.state)
|
||
echo "$1 $2 [$state] pid:$pid => $pidstate"
|
||
}
|
||
|
||
status_all()
|
||
{
|
||
# aes : admin_executor_service.log
|
||
status_program 'aes' 'ryzom_admin_service'
|
||
|
||
# bms_master : backup_service.log
|
||
status_program 'bms_master' 'ryzom_backup_service'
|
||
|
||
# bms_pd_master
|
||
# status_program 'bms_pd_master' 'ryzom_backup_service'
|
||
|
||
# egs : entities_game_service.log
|
||
status_program 'egs' 'ryzom_entities_game_service'
|
||
|
||
# gpms : gpm_service.log
|
||
status_program 'gpms' 'ryzom_gpm_service'
|
||
|
||
# ios : input_output_service.log
|
||
status_program 'ios' 'ryzom_ios_service'
|
||
|
||
# rns : naming_service.log
|
||
status_program 'rns' 'ryzom_naming_service'
|
||
|
||
# rws : welcome_service.log
|
||
status_program 'rws' 'ryzom_welcome_service'
|
||
|
||
# ts : tick_service.log
|
||
status_program 'ts' 'ryzom_tick_service'
|
||
|
||
# ms : mirror_service.log
|
||
status_program 'ms' 'ryzom_mirror_service'
|
||
|
||
# ais_newbyland : ai_service.log
|
||
status_program 'ais_newbyland' 'ryzom_ai_service'
|
||
|
||
# mfs : mail_forum_service.log
|
||
status_program 'mfs' 'ryzom_mail_forum_service'
|
||
|
||
# su : shard_unifier_service.log
|
||
status_program 'su' 'ryzom_shard_unifier_service'
|
||
|
||
# fes : frontend_service.log
|
||
status_program 'fes' 'ryzom_frontend_service'
|
||
|
||
# sbs : session_browser_server.log
|
||
status_program 'sbs' 'ryzom_session_browser_service'
|
||
|
||
# lgs : logger_service.log
|
||
status_program 'lgs' 'ryzom_logger_service'
|
||
|
||
# mos
|
||
# status_program 'mos' 'ryzom_monitor_service'
|
||
|
||
# pdss
|
||
#status_program 'pdss' 'ryzom_pd_support_service'
|
||
|
||
# ras : admin_service.log
|
||
status_program 'ras' 'ryzom_admin_service'
|
||
}
|
||
|
||
function create_default_file_for_screen()
|
||
{
|
||
# on screen mode, we launch with root right
|
||
# But file are created on root, so , to solve that, we generate directory and file before
|
||
|
||
create_dir_gameserver '/home/gameserver/khanat/server/bms_master' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/rws' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/characters_offline_commands' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/characters' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/characters/002' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/ai_script_data' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/sale_store' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/www' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/www/302' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/www/302/ke' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/www/302/ke/kem' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/totems' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/logs' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/save_shard/sdb' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/pds' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/pds/00000000' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/pds/00000000/logs' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/gpms' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/aes' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/lgs' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/data_shard/primitive_cache' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/su' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/ms' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/egs' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/data_shard_local' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/data_shard_local/statistics' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/fes' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/mfs' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/ras' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/ios' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/sbs' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/ais_newbyland' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/rns' || exit 2
|
||
create_dir_gameserver '/home/gameserver/khanat/server/ts' || exit 2
|
||
}
|
||
|
||
#####################
|
||
# MAIN
|
||
#####################
|
||
source /opt/ext/servercontainer_function.sh
|
||
msg_info "START : $(basename $0)"
|
||
|
||
while test $# -gt 0
|
||
do
|
||
case "$1" in
|
||
-h|--help)
|
||
usage
|
||
exit 1
|
||
;;
|
||
-d|--debug)
|
||
set_debug 1
|
||
shift
|
||
;;
|
||
--start-khanat-with-screen)
|
||
METHOD_START=0
|
||
shift
|
||
;;
|
||
--show-khanat-log)
|
||
METHOD_START=1
|
||
shift
|
||
;;
|
||
--show-all-log)
|
||
METHOD_START=3
|
||
shift
|
||
;;
|
||
--show-status-nagios)
|
||
METHOD_START=2
|
||
shift
|
||
;;
|
||
--show-status)
|
||
METHOD_START=4
|
||
shift
|
||
;;
|
||
--bash-after-start)
|
||
METHOD_START=5
|
||
shift
|
||
;;
|
||
--start-with-manager)
|
||
METHOD_START=6
|
||
shift
|
||
;;
|
||
*)
|
||
msg_error "options '$1' not recognize"
|
||
usage
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
|
||
####################################
|
||
# Load Environment
|
||
####################################
|
||
msg_debug "Load environment"
|
||
if [[ ! -f /opt/khanat_config.sh ]]
|
||
then
|
||
echo "ERROR - missing /opt/khanat_config.sh"
|
||
exit 2
|
||
fi
|
||
source /opt/khanat_config.sh
|
||
|
||
if [[ ! -f /home/gameserver/.bashrc ]]
|
||
then
|
||
echo "ERROR - missing /home/gameserver/.bashrc"
|
||
exit 2
|
||
fi
|
||
source /home/gameserver/.bashrc
|
||
|
||
|
||
#####################
|
||
# Start mysql, apache & ssh
|
||
#####################
|
||
msg_debug "Start mysql, apache & ssh"
|
||
sudo /etc/init.d/mysql restart
|
||
sudo /etc/init.d/apache2 restart
|
||
sudo /etc/init.d/ssh restart
|
||
|
||
|
||
#####################
|
||
# Update configuration with new IP
|
||
#####################
|
||
msg_debug "Update configuration with new IP"
|
||
tmp=$(hostname -I)
|
||
export addressip=${tmp//[[:blank:]]/}
|
||
sudo sed -i -r 's/(FSListenHost)(.*)(=)(.*)(;)/FSListenHost = "'"$addressip"'";/g' $KHANAT_PATH/server/frontend_service.cfg || exit 2
|
||
|
||
#####################
|
||
# Update configuration
|
||
#####################
|
||
msg_debug "Update configuration with new path"
|
||
newpath="$KHANAT_PATH/server/common/"
|
||
newpath=${newpath//\//\\\/}
|
||
for filecfg in $KHANAT_PATH/server/*.cfg
|
||
do
|
||
msg_debug "[$(basename $0):$LINENO] update $filecfg"
|
||
#sudo sed -i -r "s/..\/common\//$newpath/g" $filecfg
|
||
#sudo sed -i -r "s/..\/common\//common\//g" $filecfg
|
||
done
|
||
|
||
#####################
|
||
# Reconfigure database
|
||
#####################
|
||
msg_debug "Reconfigure database : Configure Domain"
|
||
## Configure Domain
|
||
sudo mysql -u root -e "use nel;
|
||
UPDATE nel.domain
|
||
SET backup_patch_url = '$addressip:23001'
|
||
, patch_urls = '$addressip/patch'
|
||
, login_address = '$addressip:49998'
|
||
, session_manager_address = '$addressip:49999'
|
||
, web_host = '$addressip:30000'
|
||
, web_host_php = '$addressip:40916'
|
||
WHERE domain_id = 12;" || exit 2
|
||
|
||
# Configure nel.shard
|
||
msg_debug "Reconfigure database : Configure nel.shard"
|
||
sudo mysql -u root -e "use nel;
|
||
UPDATE nel.shard
|
||
SET WsAddr = '$addressip:'
|
||
WHERE ShardId = 302;" || exit 2
|
||
|
||
# Configure nel_tool.neltool_domains
|
||
msg_debug "Reconfigure database : Configure nel_tool.neltool_domains"
|
||
sudo mysql -u root -e "use nel;
|
||
UPDATE nel_tool.neltool_domains
|
||
SET domain_as_host = '$addressip'
|
||
WHERE domain_id = 12;" || exit 2
|
||
|
||
|
||
#####################
|
||
# Start khanat
|
||
#####################
|
||
msg_debug "Start khanat"
|
||
if [ -f /home/gameserver/opennelmanager.flag ]
|
||
then
|
||
rm /home/gameserver/opennelmanager.flag || exit 2
|
||
fi
|
||
if [[ $METHOD_START -eq 0 ]]
|
||
then
|
||
msg_debug "start with screen"
|
||
source /home/gameserver/.bashrc; export RYZOM_PATH=$KHANAT_PATH; cd "$RYZOM_PATH"; $KHANAT_HOME/khanat/tools/scripts/linux/shard start
|
||
elif [[ $METHOD_START -eq 1 ]]
|
||
then
|
||
msg_debug "start with show-khanat-log"
|
||
/opt/ext/servercontainer_launch_service.sh
|
||
sleep 10
|
||
tail -n+0 -f /home/gameserver/log/khanat/log.log
|
||
elif [[ $METHOD_START -eq 2 ]]
|
||
then
|
||
msg_debug "start with show-status-nagios"
|
||
/opt/ext/servercontainer_launch_service.sh
|
||
sleep 10
|
||
watch cat /home/gameserver/khanat/server/aes_nagios_report.txt
|
||
elif [[ $METHOD_START -eq 3 ]]
|
||
then
|
||
msg_debug "start with show-all-log"
|
||
/opt/ext/servercontainer_launch_service.sh
|
||
sleep 10
|
||
tail -n+0 -f /home/gameserver/log/apache2/* /home/gameserver/log/mysql/* /home/gameserver/log/khanat/*
|
||
elif [[ $METHOD_START -eq 4 ]]
|
||
then
|
||
msg_debug "start with status"
|
||
/opt/ext/servercontainer_launch_service.sh
|
||
sleep 10
|
||
watch /opt/ext/servercontainer_launch_status.sh --no-color
|
||
elif [[ $METHOD_START -eq 5 ]]
|
||
then
|
||
msg_debug "start with show-status"
|
||
/opt/ext/servercontainer_launch_service.sh
|
||
#sleep 10
|
||
bash
|
||
elif [[ $METHOD_START -eq 6 ]]
|
||
then
|
||
mkdir -p /home/gameserver/log/khanat || exit 2
|
||
msg_debug "start with OpenNelManager"
|
||
touch /home/gameserver/opennelmanager.flag
|
||
python3 -m pymanager.manager -c /home/gameserver/khanat/khaganat.cfg --log DEBUG --filelog /home/gameserver/log/khanat/OpenNelManager.log --launch-program &
|
||
#sleep 10
|
||
#screen -t terminal /bin/bash -l
|
||
/bin/bash -l
|
||
else
|
||
msg_error 'Bad option'
|
||
exit 2
|
||
fi
|
||
|
||
|
||
######################
|
||
#
|
||
######################
|