384 lines
14 KiB
Bash
Executable file
384 lines
14 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Configure Patch Server
|
|
# 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/>.
|
|
|
|
#declare DIRCLIENT="Khanat_Linux64"
|
|
#declare PREPARE_CLIENT_DIR="khanat/prepare_client/$DIRCLIENT"
|
|
#declare CLIENT_DIR="khanat/client_service"
|
|
|
|
usage()
|
|
{
|
|
cat << EOF
|
|
usage:$0 [options]
|
|
Configure Patch Server
|
|
|
|
options:
|
|
-h, --help : Show this help
|
|
-d, --debug : Show debug message
|
|
EOF
|
|
}
|
|
|
|
|
|
#####################
|
|
# MAIN
|
|
#####################
|
|
source /opt/ext/servercontainer_function.sh
|
|
msg_info "[$(basename $0):$LINENO] => START"
|
|
|
|
while test $# -gt 0
|
|
do
|
|
case "$1" in
|
|
-h|--help)
|
|
usage
|
|
exit 1
|
|
;;
|
|
-d|--debug)
|
|
set_debug 1
|
|
shift
|
|
;;
|
|
--client-dir=*)
|
|
DIRCLIENT="${1#*=}"
|
|
shift
|
|
;;
|
|
*)
|
|
msg_error "[$(basename $0):$LINENO] options '$1' not recognize"
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
|
|
####################################
|
|
# Load Environment
|
|
####################################
|
|
msg_debug "Load environment"
|
|
if [[ ! -f /opt/khanat_config.sh ]]
|
|
then
|
|
msg_error "[$(basename $0):$LINENO] Missing /opt/khanat_config.sh"
|
|
exit 2
|
|
fi
|
|
source /opt/khanat_config.sh
|
|
|
|
if [[ ! -f /home/gameserver/.bashrc ]]
|
|
then
|
|
msg_error "[$(basename $0):$LINENO] Missing /home/gameserver/.bashrc"
|
|
exit 2
|
|
fi
|
|
source /home/gameserver/.bashrc
|
|
|
|
#declare HOME_PREPARE_CLIENT="$KHANAT_HOME/$PREPARE_CLIENT_DIR"
|
|
#declare HOME_CLIENT="$KHANAT_HOME/$CLIENT_DIR"
|
|
|
|
####################################
|
|
# Prepare language directory
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Create language directory"
|
|
listlang=$(ls $KHANAT_PATH/server/translation/translated | cut -f 1 -d '.' | sed 's/^.*\(.\{2\}\)$/\1/' | sort | uniq | tr '\n' ' ')
|
|
msg_info "[$(basename $0):$LINENO] LIST LANG : ${listlang[@]}"
|
|
|
|
create_dir_gameserver "$PATCH_CLIENT_SYSTEM/dataserver"
|
|
for lang in $listlang
|
|
do
|
|
create_dir_gameserver "$PATCH_CLIENT_SYSTEM/dataserver/kh_translate_$lang" || exit 2
|
|
done
|
|
|
|
|
|
####################################
|
|
# Create link with data
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] COPY DATA TO GENERATE PATCH"
|
|
create_link "$KHANAT_PATH/server/common/data_common/database.xml" "$PATCH_CLIENT_SYSTEM/kh_server"
|
|
create_link "$KHANAT_PATH/server/common/data_common/msg.xml" "$PATCH_CLIENT_SYSTEM/kh_server"
|
|
for file in $KHANAT_PATH/server/client/data/*.packed_sheets
|
|
do
|
|
create_link "$file" "$PATCH_CLIENT_SYSTEM/kh_server"
|
|
done
|
|
|
|
for file in $KHANAT_PATH/server/client/data/*.packed
|
|
do
|
|
create_link "$file" "$PATCH_CLIENT_SYSTEM/kh_server"
|
|
done
|
|
|
|
create_link "$KHANAT_PATH/visual_slot.tab" "$PATCH_CLIENT_SYSTEM/kh_server/" || exit 2
|
|
create_link "$KHANAT_PATH/server/leveldesign/game_elem/sheet_id.bin" "$PATCH_CLIENT_SYSTEM/kh_server/" || exit 2
|
|
# create_link "$KHANAT_HOME/ext/khanat-client-data/data" "$PATCH_CLIENT_SYSTEM/dataserver" || exit 2
|
|
#create_recursive_link "$KHANAT_HOME/ext/khanat-client-data/data" "$PATCH_CLIENT_SYSTEM/dataserver/data" || exit 2
|
|
|
|
|
|
####################################
|
|
# Copy Language
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Create other directory"
|
|
# language : copy to client (to generate client patch)
|
|
for lang in $listlang
|
|
do
|
|
# cp $KHANAT_PATH/server/translation/translated/*$lang.* $PATCH_CLIENT_SYSTEM/dataserver/kh_translate_$lang/ || exit 2
|
|
for file in $KHANAT_PATH/server/translation/translated/*$lang.*
|
|
do
|
|
create_link "$file" "$PATCH_CLIENT_SYSTEM/dataserver/kh_translate_$lang/" || exit 2
|
|
done
|
|
done
|
|
|
|
|
|
####################################
|
|
# prepare package languages
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Prepare package languages"
|
|
init_job
|
|
for lang in $listlang
|
|
do
|
|
comment[${#comment[@]}]="$lang"
|
|
launch_job "(cd $PATCH_CLIENT_SYSTEM/dataserver/; bnp_make -o$PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_$lang -p kh_translate_$lang 2>$KHANAT_HOME/log/configure/patch_kh_translate_$lang.err 1>$KHANAT_HOME/log/configure/patch_kh_translate_$lang.out)" "kh_translate_$lang"
|
|
done
|
|
wait_all_job || exit 2
|
|
|
|
|
|
####################################
|
|
# prepare package fonts
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Prepare package fonts"
|
|
init_job
|
|
#launch_job "(cd $PATCH_CLIENT_SYSTEM/dataserver/; bnp_make -o$PATCH_CLIENT_SYSTEM/patch_game/bnp/fonts -p fonts 2>$KHANAT_HOME/log/configure/patch_fonts.err 1>$KHANAT_HOME/log/configure/patch_fonts.out)" "fonts"
|
|
launch_job "(cd $KHANAT_HOME/ext/khanat-client-data/data; bnp_make -o$HOME_PREPARE_CLIENT/data -p fonts 2>$KHANAT_HOME/log/configure/patch_fonts.err 1>$KHANAT_HOME/log/configure/patch_fonts.out)" "fonts"
|
|
wait_all_job || exit 2
|
|
|
|
|
|
####################################
|
|
# prepare package kh
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Prepare package kh"
|
|
init_job
|
|
#for dir in $PATCH_CLIENT_SYSTEM/dataserver/data/kh/*
|
|
#do
|
|
# filename=$(basename "$dir")
|
|
# msg_info "filename:$filename"
|
|
# launch_job "(cd $dir/..; bnp_make -p $filename 2>$KHANAT_HOME/log/configure/dataserver_data_$filename.err 1>$KHANAT_HOME/log/configure/dataserver_data_$filename.out)" "dataserver_data_$filename"
|
|
#done
|
|
for dir in $KHANAT_HOME/ext/khanat-client-data/data/kh/*
|
|
do
|
|
filename=$(basename "$dir")
|
|
msg_debug "filename:$filename"
|
|
launch_job "(cd $KHANAT_HOME/ext/khanat-client-data/data/kh; bnp_make -o$PATCH_CLIENT_SYSTEM/patch_game/bnp/$filename -p $filename 2>$KHANAT_HOME/log/configure/dataserver_data_$filename.err 1>$KHANAT_HOME/log/configure/patch_kh_$filename.out)" "patch_kh_$filename"
|
|
done
|
|
wait_all_job || exit 2
|
|
|
|
|
|
####################################
|
|
# prepare package kh_shard
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Prepare package kh_shard"
|
|
init_job
|
|
for dir in $KHANAT_HOME/ext/khanat-client-data/data/kh_shard/*
|
|
do
|
|
filename=$(basename "$dir")
|
|
msg_debug "filename:$filename"
|
|
launch_job "(cd $KHANAT_HOME/ext/khanat-client-data/data/kh_shard; bnp_make -o$PATCH_CLIENT_SYSTEM/patch_game/bnp/$filename -p $filename 2>$KHANAT_HOME/log/configure/patch_kh_shard_$filename.err 1>$KHANAT_HOME/log/configure/patch_kh_shard_$filename.out)" "patch_kh_shard_$filename"
|
|
done
|
|
wait_all_job || exit 2
|
|
|
|
|
|
####################################
|
|
# prepare package ryz
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Prepare package ryz"
|
|
init_job
|
|
for dir in $KHANAT_HOME/ext/khanat-client-data/data/ryz/*
|
|
do
|
|
filename=$(basename "$dir")
|
|
msg_debug "filename:$filename"
|
|
launch_job "(cd $KHANAT_HOME/ext/khanat-client-data/data/ryz; bnp_make -o$PATCH_CLIENT_SYSTEM/patch_game/bnp/$filename -p $filename 2>$KHANAT_HOME/log/configure/patch_ryz_$filename.err 1>$KHANAT_HOME/log/configure/patch_ryz_$filename.out)" "patch_ryz_$filename"
|
|
done
|
|
wait_all_job || exit 2
|
|
|
|
|
|
####################################
|
|
# prepare package client
|
|
####################################
|
|
## TODO - check how generate '.ref' files
|
|
msg_info "[$(basename $0):$LINENO] Prepare package patch_client"
|
|
init_job
|
|
for dir in $KHANAT_HOME/ext/khanat-client-data/client/*
|
|
do
|
|
filename=$(basename "$dir")
|
|
msg_debug "filename:$filename"
|
|
launch_job "(cd $KHANAT_HOME/ext/khanat-client-data/client; bnp_make -o$KHANAT_HOME/khanat/patch_service/dataserver/client/$filename -p $filename 2>$KHANAT_HOME/log/configure/patch_client_$filename.err 1>$KHANAT_HOME/log/configure/patch_client_$filename.out)" "patch_client_$filename"
|
|
done
|
|
wait_all_job || exit 2
|
|
|
|
for file in $KHANAT_HOME/khanat/patch_service/dataserver/client/*.bnp
|
|
do
|
|
filename="$(basename ${file%.bnp})_.ref"
|
|
mv "$file" "$PATCH_CLIENT_SYSTEM/patch_game/bnp/$filename" || exit 2
|
|
done
|
|
|
|
|
|
####################################
|
|
# prepare package kh_server
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Prepare package kh_server"
|
|
init_job
|
|
launch_job "(cd $PATCH_CLIENT_SYSTEM/; bnp_make -o$PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_server -p kh_server 2>$KHANAT_HOME/log/configure/patch_kh_server.err 1>$KHANAT_HOME/log/configure/patch_kh_server.out)" "kh_server"
|
|
wait_all_job || exit 2
|
|
|
|
|
|
####################################
|
|
# prepare patch
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Prepare Patch"
|
|
|
|
# TODO - if ryzom.xml exist what's command to update (replace patch_gen createNewProduct)
|
|
if [ -f $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml ]
|
|
then
|
|
mv $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml.old || exit 2
|
|
fi
|
|
cd $PATCH_CLIENT_SYSTEM;patch_gen createNewProduct patch_game/ryzom.xml 2>$KHANAT_HOME/log/configure/patch_createNewProduct.err 1>$KHANAT_HOME/log/configure/patch_createNewProduct.out || exit 2
|
|
cd $PATCH_CLIENT_SYSTEM;touch patch_game/Lirria.version || exit 2
|
|
sed -i -r 's/value="main"/value="khanat_lirria"/g' $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml || exit 2
|
|
sed -i -r 's/_NextVersionFile type="STRING" value=""/_NextVersionFile type="STRING" value="patch_game\/Lirria.version"/g' $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml || exit 2
|
|
|
|
|
|
# Edit RYZOM file
|
|
# search all ref files
|
|
ADDREF=""
|
|
for file in $PATCH_CLIENT_SYSTEM/patch_game/bnp/*.ref
|
|
do
|
|
ADDREF="$ADDREF"'<_Files type=\"STRING\" value=\"'$(basename $file)'\"/>'
|
|
done
|
|
|
|
cp $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml.ref || exit 2
|
|
awk 'BEGIN{found=0}{
|
|
if(found==0 && $1 == "<_Category>") {
|
|
found = 1;
|
|
} else if(found == 1 && $1 == "</_Category>") {
|
|
found = 2;
|
|
print "'"$ADDREF"'";
|
|
print $0;
|
|
} else if(found == 2 && $1 == "</_Categories>") {
|
|
found = 3;
|
|
}
|
|
if ( found != 2 ) {
|
|
print $0
|
|
}
|
|
}' $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml.ref > $PATCH_CLIENT_SYSTEM/patch_game/ryzom.xml || exit 2
|
|
|
|
if [[ -f $PATCH_CLIENT_SYSTEM/patch_game/Lirria.version ]]
|
|
then
|
|
export KHANAT_CLIENT_VERSION=$(cat $PATCH_CLIENT_SYSTEM/patch_game/Lirria.version)
|
|
else
|
|
if [[ -z "$KHANAT_CLIENT_VERSION" ]]
|
|
then
|
|
KHANAT_CLIENT_VERSION=1
|
|
fi
|
|
fi
|
|
|
|
msg_info "[$(basename $0):$LINENO] CLIENT VERSION SELECTED : $KHANAT_CLIENT_VERSION"
|
|
echo -n "$KHANAT_CLIENT_VERSION" > $PATCH_CLIENT_SYSTEM/patch_game/Lirria.version
|
|
|
|
####################################
|
|
# prepare patch
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Generate patch"
|
|
cd $PATCH_CLIENT_SYSTEM; patch_gen updateProduct patch_game/ryzom.xml 2>$KHANAT_HOME/log/configure/patch_${KHANAT_CLIENT_VERSION}_updateProduct.err 1>$KHANAT_HOME/log/configure/patch_${KHANAT_CLIENT_VERSION}_updateProduct.out || exit 2
|
|
|
|
####################################
|
|
# Edit release note
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] Edit release note"
|
|
|
|
# Added files for version
|
|
REALVERSION=$(awk '{if($0 ~ /patch_gen_common.cpp 330 addVersion <Unknown> : Added files for version:/){print $12}}' $KHANAT_HOME/log/configure/patch_${KHANAT_CLIENT_VERSION}_updateProduct.out)
|
|
|
|
msg_info "[$(basename $0):$LINENO] CLIENT VERSION REAL: $REALVERSION"
|
|
cat << EOF > $PATCH_CLIENT_SYSTEM/patch_game/patch/index.php
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
|
</head>
|
|
<body>
|
|
<h1>New test data - Release $REALVERSION</h1>
|
|
<p>An update will now be performed to your client(the /user directory to be exact).
|
|
Please help us test the deployment of our free MMORPG server!!
|
|
</body>
|
|
</html>
|
|
EOF
|
|
|
|
|
|
# TODO - Strange, we need update patch - to be check
|
|
cat << EOF > $PATCH_CLIENT_SYSTEM/patch_game/patch/Lirria.version
|
|
$REALVERSION $REALVERSION
|
|
EOF
|
|
|
|
####################################
|
|
# Prepare client package
|
|
####################################
|
|
if [[ ! -f $HOME_CLIENT/${PACKAGECLIENT}.tar.gz ]]
|
|
then
|
|
msg_info "[$(basename $0):$LINENO] Prepare client package"
|
|
cp /usr/local/bin/khanat_client $HOME_PREPARE_CLIENT/. || exit 2
|
|
cp /home/gameserver/ext/ryzom-ressources/client/client_default.cfg $HOME_PREPARE_CLIENT/. || exit 2
|
|
sed -i -r 's/PatchWanted = 0;/PatchWanted = 1;/g' $HOME_PREPARE_CLIENT/client_default.cfg || exit 2
|
|
|
|
cp $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_translate_{wk,fr,en}.bnp $HOME_PREPARE_CLIENT/data/. || exit 2
|
|
cp $KHANAT_HOME/ext/khanat-client-data/client/exedll_linux64/khanat.png $HOME_PREPARE_CLIENT/data/. || exit 2
|
|
# cp $PATCH_CLIENT_SYSTEM/dataserver/data/fonts.bnp $HOME_PREPARE_CLIENT/data/. || exit 2
|
|
cp $PATCH_CLIENT_SYSTEM/patch_game/bnp/kh_interfaces.bnp $HOME_PREPARE_CLIENT/data/. || exit 2
|
|
cp $PATCH_CLIENT_SYSTEM/patch_game/bnp/ryz_zzz_bazaar.bnp $HOME_PREPARE_CLIENT/data/. || exit 2
|
|
cp $KHANAT_HOME/ext/ryzom-ressources/client/cfg/* $HOME_PREPARE_CLIENT/cfg/. || exit 2
|
|
|
|
# TODO - we need search where are define some files
|
|
# .DS_Store : function ?
|
|
# khanat_install_desktop_menu.sh : script to install khanat on desktop
|
|
# khanat.desktop.in : config desktop for khanat
|
|
# khanat_install_desktop_menu.sh : script to uninstall khanat on desktop
|
|
fi
|
|
|
|
####################################
|
|
# Generate client package
|
|
####################################
|
|
# Generate package
|
|
msg_info "[$(basename $0):$LINENO] Generate client package"
|
|
if [[ ! -f $HOME_CLIENT/$PACKAGECLIENT.tar.gz ]]
|
|
then
|
|
msg_info "[$(basename $0):$LINENO] Generate package"
|
|
(cd $HOME_PREPARE_CLIENT/..; tar cfz $HOME_CLIENT/$PACKAGECLIENT.tar.gz $DIRCLIENT)
|
|
fi
|
|
|
|
####################################
|
|
# Create web page to present this package
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] create index.html for client"
|
|
cat << EOF > $HOME_CLIENT/index.html
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>KHANAT CLIENT</title>
|
|
</head>
|
|
<body>
|
|
|
|
<h1>You can download khanat client - release $KHANAT_CLIENT_VERSION</h1>
|
|
<a href="$PACKAGECLIENT.tar.gz">khanat client</a>
|
|
|
|
</body>
|
|
</html>
|
|
EOF
|
|
|
|
####################################
|
|
# End
|
|
####################################
|
|
msg_info "[$(basename $0):$LINENO] => END"
|
|
|