diff --git a/builder/debian/stretch/x86_64/build.sh b/builder/debian/stretch/x86_64/build.sh
index 38afe96..7d2498f 100755
--- a/builder/debian/stretch/x86_64/build.sh
+++ b/builder/debian/stretch/x86_64/build.sh
@@ -34,7 +34,7 @@ declare DOCKERBUILDOPT=""
declare IMAGEDOCKER="builder_khanat_debian_stretch_x86_64"
declare LOCALBUILDDIR="build/$IMAGEDOCKER"
declare LOCALSRC="debian/stretch/x86_64"
-declare DIRPACKAGE="output/khanat_debian_stretch_x86_64/package"
+declare DIRPACKAGE="output/opennel_debian_stretch_x86_64/package"
declare PACKAGEBIN="$DIRPACKAGE/ryzomcore_stretch_x86_64.tar.gz"
declare PACKAGEREF="$DIRPACKAGE/khanat-ref-ressources.tar.gz"
diff --git a/server/debian/common/servercontainer_configure_auto.sh b/server/debian/common/servercontainer_configure_auto.sh
index 66e1294..c162fa7 100755
--- a/server/debian/common/servercontainer_configure_auto.sh
+++ b/server/debian/common/servercontainer_configure_auto.sh
@@ -20,7 +20,7 @@
/opt/ext/servercontainer_configure_mysql.sh || exit 2
sync
/opt/ext/servercontainer_configure_apache.sh || exit 2
-/opt/ext/servercontainer_configure_world.sh || exit 2
+/opt/ext/servercontainer_configure_world.sh -d || exit 2
su -c '/opt/ext/servercontainer_configure_khanat.sh' gameserver || exit 2
su -c '/opt/ext/servercontainer_configure_patch.sh' gameserver || exit 2
su -c '/opt/ext/servercontainer_configure_launcher.sh' gameserver || exit 2
diff --git a/server/debian/common/servercontainer_configure_world.sh b/server/debian/common/servercontainer_configure_world.sh
index 66ab5c9..2fdce5c 100755
--- a/server/debian/common/servercontainer_configure_world.sh
+++ b/server/debian/common/servercontainer_configure_world.sh
@@ -30,24 +30,6 @@ options:
EOF
}
-function msg_debug()
-{
- if [[ $DEBUG -ne 0 ]]
- then
- echo "$(date "+%Y/%m/%d %H:%M:%S") DEBUG - $*"
- fi
-}
-
-function msg_info()
-{
- echo "$(date "+%Y/%m/%d %H:%M:%S") INFO - $*"
-}
-
-function msg_error()
-{
- echo "$(date "+%Y/%m/%d %H:%M:%S") ERROR - $*" >&2
-}
-
#####################
# MAIN
#####################
@@ -79,15 +61,13 @@ done
msg_debug "[$(basename $0):$LINENO] Load environment"
if [[ ! -f /opt/khanat_config.sh ]]
then
- echo "ERROR [$(basename $0):$LINENO] missing /opt/khanat_config.sh"
- exit 2
+ msg_critical "[$(basename $0):$LINENO] missing /opt/khanat_config.sh"
fi
source /opt/khanat_config.sh
if [[ ! -f /home/gameserver/.bashrc ]]
then
- msg_error "[$(basename $0):$LINENO] Missing /home/gameserver/.bashrc"
- exit 2
+ msg_critical "[$(basename $0):$LINENO] Missing /home/gameserver/.bashrc"
fi
source /home/gameserver/.bashrc
@@ -111,7 +91,7 @@ echo ""
sleep 1
msg_debug "start apache"
-sudo service apache2 start || exit 2
+sudo service apache2 start || msg_critical "[$(basename $0):$LINENO] Impossible to start apache"
####################################
@@ -119,15 +99,15 @@ sudo service apache2 start || exit 2
####################################
msg_debug "[$(basename $0):$LINENO] Create account"
# Create account shard on MySQL
-mysql -u root -e "CREATE USER 'shard'@'localhost' IDENTIFIED BY '';" || exit 2
-mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'shard'@'localhost' WITH GRANT OPTION;" || exit 2
+mysql -u root -e "CREATE USER IF NOT EXISTS 'shard'@'localhost' IDENTIFIED BY '';" || msg_critical "[$(basename $0):$LINENO] create use impossible"
+mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'shard'@'localhost' WITH GRANT OPTION;" || msg_critical "[$(basename $0):$LINENO] update privileges impossible"
####################################
# launch web configuration for khanat
####################################
msg_debug "[$(basename $0):$LINENO] launch web configuration for khanat"
-curl 'http://localhost:40916/setup/install.php' \
+httpcode=$(curl -L -w "%{http_code}" 'http://localhost:40916/setup/install.php' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Accept-Language: en-US' \
-H 'Connection: keep-alive' \
@@ -160,12 +140,17 @@ curl 'http://localhost:40916/setup/install.php' \
'&nelDomainName=Lirria'\
'&domainDatabase=ring_mini01'\
'&submit=Configure' \
- -o $KHANAT_HOME/log/configure/world_setup.html || exit 2
+ -o $KHANAT_HOME/log/configure/world_setup.html || msg_critical "[$(basename $0):$LINENO] curl error (impossible to create world)")
+
+if [[ $httpcode != "200" ]]
+then
+ msg_critical "[$(basename $0):$LINENO] impossible to create world (http return:$httpcode)"
+fi
chown_gameserver $KHANAT_HOME/log/configure/world_setup.html
# Check account is create
-grep "Domain role successfully installed" $KHANAT_HOME/log/configure/world_setup.html >/dev/null || exit 2
+grep "Domain role successfully installed" $KHANAT_HOME/log/configure/world_setup.html >/dev/null || msg_critical "[$(basename $0):$LINENO] Missing message 'Domain role successfully installed'"
####################################
@@ -181,7 +166,7 @@ export addressip=${tmp//[[:blank:]]/}
####################################
msg_debug "[$(basename $0):$LINENO] Configure Domain"
mysql -u root -e "use nel;
-INSERT INTO nel.domain (domain_id, domain_name, status, patch_version, backup_patch_url, patch_urls, login_address, session_manager_address, ring_db_name, web_host, web_host_php, description) VALUES ('12', 'Lirria', 'ds_open', '$KHANAT_CLIENT_VERSION', '$addressip:23001', '$addressip/patch', '$addressip:49998', '$addressip:49999', 'ring_mini01', '$addressip:30000', '$addressip:40916', NULL);" || exit 2
+INSERT INTO nel.domain (domain_id, domain_name, status, patch_version, backup_patch_url, patch_urls, login_address, session_manager_address, ring_db_name, web_host, web_host_php, description) VALUES ('12', 'Lirria', 'ds_open', '$KHANAT_CLIENT_VERSION', '$addressip:23001', '$addressip/patch', '$addressip:49998', '$addressip:49999', 'ring_mini01', '$addressip:30000', '$addressip:40916', NULL);" || msg_critical "[$(basename $0):$LINENO] MYSQL - Configure Domain"
####################################
@@ -189,14 +174,14 @@ INSERT INTO nel.domain (domain_id, domain_name, status, patch_version, backup_pa
####################################
msg_debug "[$(basename $0):$LINENO] Configure nel.shard"
mysql -u root -e "use nel;
-INSERT INTO nel.shard (ShardId, domain_id, WsAddr, NbPlayers, Name, Online, Version, FixedSessionId, State, MOTD) VALUES ('302', '12', '$addressip:', '0', 'Lirria shard', '0', '', '0', 'ds_open', '');" || exit 2
+INSERT INTO nel.shard (ShardId, domain_id, WsAddr, NbPlayers, Name, Online, Version, FixedSessionId, State, MOTD) VALUES ('302', '12', '$addressip:', '0', 'Lirria shard', '0', '', '0', 'ds_open', '');" || msg_critical "[$(basename $0):$LINENO] MYSQL - Configure nel.shard"
####################################
# Configure nel_tool.neltool_domains
####################################
msg_debug "[$(basename $0):$LINENO] Configure nel_tool.neltool_domains"
mysql -u root -e "use nel;
-INSERT INTO nel_tool.neltool_domains (domain_id, domain_name, domain_as_host, domain_as_port, domain_rrd_path, domain_las_admin_path, domain_las_local_path, domain_application, domain_sql_string, domain_hd_check, domain_mfs_web, domain_cs_sql_string) VALUES ('12', 'Lirria', '$addressip', '46700', '/home/gameserver/khanat/server/save_shard/rrd_graphs', '', '', 'ryzom_open', '', '0', NULL, NULL);" || exit 2
+INSERT INTO nel_tool.neltool_domains (domain_id, domain_name, domain_as_host, domain_as_port, domain_rrd_path, domain_las_admin_path, domain_las_local_path, domain_application, domain_sql_string, domain_hd_check, domain_mfs_web, domain_cs_sql_string) VALUES ('12', 'Lirria', '$addressip', '46700', '/home/gameserver/khanat/server/save_shard/rrd_graphs', '', '', 'ryzom_open', '', '0', NULL, NULL);" || msg_critical "[$(basename $0):$LINENO] MYSQL - Configure nel_tool.neltool_domains"
####################################
@@ -204,7 +189,7 @@ INSERT INTO nel_tool.neltool_domains (domain_id, domain_name, domain_as_host, do
####################################
msg_debug "[$(basename $0):$LINENO] Configure nel_tool.neltool_shards"
mysql -u root -e "use nel;
-INSERT INTO nel_tool.neltool_shards (shard_id, shard_name, shard_as_id, shard_domain_id, shard_lang, shard_restart) VALUES ('302', 'open', 'open', '12', 'fr', '0');" || exit 2
+INSERT INTO nel_tool.neltool_shards (shard_id, shard_name, shard_as_id, shard_domain_id, shard_lang, shard_restart) VALUES ('302', 'open', 'open', '12', 'fr', '0');" || msg_critical "[$(basename $0):$LINENO] MYSQL - Configure nel_tool.neltool_shards"
####################################
@@ -212,7 +197,7 @@ INSERT INTO nel_tool.neltool_shards (shard_id, shard_name, shard_as_id, shard_do
####################################
msg_debug "[$(basename $0):$LINENO] Configure nel_tool.neltool_user_domains"
mysql -u root -e "use nel;
-INSERT INTO nel_tool.neltool_user_domains (user_domain_id, user_domain_user_id, user_domain_domain_id) VALUES ('1', '1', '12');" || exit 2
+INSERT INTO nel_tool.neltool_user_domains (user_domain_id, user_domain_user_id, user_domain_domain_id) VALUES ('1', '1', '12');" || msg_critical "[$(basename $0):$LINENO] MYSQL - Configure nel_tool.neltool_user_domains"
####################################
@@ -220,7 +205,7 @@ INSERT INTO nel_tool.neltool_user_domains (user_domain_id, user_domain_user_id,
####################################
msg_debug "[$(basename $0):$LINENO] Configure nel_tool.neltool_user_shards"
mysql -u root -e "use nel;
-INSERT INTO nel_tool.neltool_user_shards (user_shard_id, user_shard_user_id, user_shard_shard_id, user_shard_domain_id) VALUES ('1', '1', '302', '12');" || exit 2
+INSERT INTO nel_tool.neltool_user_shards (user_shard_id, user_shard_user_id, user_shard_shard_id, user_shard_domain_id) VALUES ('1', '1', '302', '12');" || msg_critical "[$(basename $0):$LINENO] MYSQL - Configure nel_tool.neltool_user_shards"
####################################
@@ -228,7 +213,7 @@ INSERT INTO nel_tool.neltool_user_shards (user_shard_id, user_shard_user_id, use
####################################
msg_debug "[$(basename $0):$LINENO] Configure ring_mini01.sessions"
mysql -u root -e "use ring_mini01;
-INSERT INTO ring_mini01.sessions (session_id, session_type, title, owner, plan_date, start_date, description, orientation, level, rule_type, access_type, state, host_shard_id, subscription_slots, reserved_slots, free_slots, estimated_duration, final_duration, folder_id, lang, icone, anim_mode, race_filter, religion_filter, guild_filter, shard_filter, level_filter, subscription_closed, newcomer) VALUES ('302', 'st_mainland', '', '0', '2005-09-21 12:41:33.000000', '2005-08-31 00:00:00.000000', '', 'so_other', 'sl_a', 'rt_strict', 'at_private', 'ss_planned', '0', '0', '0', '0', 'et_short', '0', '0', '', '', 'am_dm', '', '', 'gf_only_my_guild', 'sf_shard00,sf_shard01,sf_shard02,sf_shard03,sf_shard04,sf_shard05,sf_shard06,sf_shard07,sf_shard08,sf_shard09,sf_shard10,sf_shard11,sf_shard12,sf_shard13,sf_shard14,sf_shard15,sf_shard16,sf_shard17,sf_shard18,sf_shard19,sf_shard20,sf_shard21,sf_shard22,sf_shard23,sf_shard24,sf_shard25,sf_shard26,sf_shard27,sf_shard28,sf_shard29,sf_shard30', 'lf_a,lf_b,lf_c,lf_d,lf_e,lf_f', '0', '0');" || exit 2
+INSERT INTO ring_mini01.sessions (session_id, session_type, title, owner, plan_date, start_date, description, orientation, level, rule_type, access_type, state, host_shard_id, subscription_slots, reserved_slots, free_slots, estimated_duration, final_duration, folder_id, lang, icone, anim_mode, race_filter, religion_filter, guild_filter, shard_filter, level_filter, subscription_closed, newcomer) VALUES ('302', 'st_mainland', '', '0', '2005-09-21 12:41:33.000000', '2005-08-31 00:00:00.000000', '', 'so_other', 'sl_a', 'rt_strict', 'at_private', 'ss_planned', '0', '0', '0', '0', 'et_short', '0', '0', '', '', 'am_dm', '', '', 'gf_only_my_guild', 'sf_shard00,sf_shard01,sf_shard02,sf_shard03,sf_shard04,sf_shard05,sf_shard06,sf_shard07,sf_shard08,sf_shard09,sf_shard10,sf_shard11,sf_shard12,sf_shard13,sf_shard14,sf_shard15,sf_shard16,sf_shard17,sf_shard18,sf_shard19,sf_shard20,sf_shard21,sf_shard22,sf_shard23,sf_shard24,sf_shard25,sf_shard26,sf_shard27,sf_shard28,sf_shard29,sf_shard30', 'lf_a,lf_b,lf_c,lf_d,lf_e,lf_f', '0', '0');" || msg_critical "[$(basename $0):$LINENO] MYSQL - Configure ring_mini01.sessions"
####################################
@@ -237,7 +222,7 @@ INSERT INTO ring_mini01.sessions (session_id, session_type, title, owner, plan_d
msg_debug "[$(basename $0):$LINENO] Create one user"
declare accountuser="tester"
declare passworduser="tester"
-curl 'http://localhost:40916/ams/index.php' \
+httpcode=$(curl -L -w "%{http_code}" 'http://localhost:40916/ams/index.php' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Accept-Language: en-US' \
-H 'Connection: keep-alive' \
@@ -249,7 +234,12 @@ curl 'http://localhost:40916/ams/index.php' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data 'Username='"$accountuser"'&Password='"$passworduser"'&ConfirmPass=tester&Email=tester%40khaganat.net&TaC=on&function=add_user' \
- -o $KHANAT_HOME/log/configure/world_account_tester.log || exit 2
+ -o $KHANAT_HOME/log/configure/world_account_tester.log || msg_critical "[$(basename $0):$LINENO] curl - Create one user")
+
+if [[ $httpcode != "200" ]]
+then
+ msg_critical "[$(basename $0):$LINENO] curl - Create one user"
+fi
####################################
@@ -258,7 +248,7 @@ curl 'http://localhost:40916/ams/index.php' \
msg_debug "[$(basename $0):$LINENO] Create nel.permission"
mysql -u root -e "use nel;
UPDATE nel.permission SET AccessPrivilege = 'OPEN,DEV,RESTRICTED';
-" || exit 2
+" || msg_critical "[$(basename $0):$LINENO] mysql - Create nel.permission"
####################################
@@ -266,8 +256,8 @@ UPDATE nel.permission SET AccessPrivilege = 'OPEN,DEV,RESTRICTED';
####################################
msg_debug "[$(basename $0):$LINENO] Stop Database & apache"
# start/restart service mysql & apache
-sudo service apache2 stop || exit 2
-sudo service mysql stop || exit 2
+sudo service apache2 stop || msg_critical "[$(basename $0):$LINENO] apache2 stop"
+sudo service mysql stop || msg_critical "[$(basename $0):$LINENO] mysql stop"
# Change right for file mysql
# TODO - remove creation of this file
diff --git a/server/debian/common/servercontainer_init_mysql.sh b/server/debian/common/servercontainer_init_mysql.sh
index 8a41296..05d65bf 100755
--- a/server/debian/common/servercontainer_init_mysql.sh
+++ b/server/debian/common/servercontainer_init_mysql.sh
@@ -99,12 +99,13 @@ else
update_mysql_config '/etc/mysql/mariadb.conf.d/50-server.cnf'
fi
-mkdir -p /home/gameserver/database/ || exit 2
+mkdir -p /home/gameserver/database/ || exit 2
chown gameserver:$(id -g -n gameserver) /home/gameserver/database/ || exit 2
-mkdir -p /home/gameserver/log/mysql || exit 2
+mkdir -p /home/gameserver/log/mysql || exit 2
chown -R gameserver:$(id -g -n gameserver) /home/gameserver/log || exit 2
+mkdir -p /var/run/mysqld || exit 2
chown gameserver:$(id -g -n gameserver) /var/run/mysqld/ || exit 2
####################################
diff --git a/server/debian/stretch/x86_64/Dockerfile b/server/debian/stretch/x86_64/Dockerfile
new file mode 100644
index 0000000..eefb582
--- /dev/null
+++ b/server/debian/stretch/x86_64/Dockerfile
@@ -0,0 +1,29 @@
+# Dockerfile - Build image to prepare khanat 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 .
+#
+
+FROM amd64/debian:9
+MAINTAINER AleaJactaEst
+
+ENV HOSTNAME basic_server
+
+RUN apt-get update ; \
+ apt-get dist-upgrade -y ; \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y curl nano vim less bash-completion cron logrotate bsd-mailx openssh-server sudo net-tools lzma xdelta p7zip p7zip-full mysql-server apache2 php libapache2-mod-php php-mysql apache2-utils php-gd php-imagick rrdtool screen mcrypt php-mcrypt python3 phpmyadmin
+
+
+
diff --git a/server/debian/stretch/x86_64/Dockerfile.khanat.container b/server/debian/stretch/x86_64/Dockerfile.khanat.container
new file mode 100644
index 0000000..7bbf50c
--- /dev/null
+++ b/server/debian/stretch/x86_64/Dockerfile.khanat.container
@@ -0,0 +1,33 @@
+# Dockerfile - Build for server debian
+#
+# 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 .
+#
+
+FROM opennel/server_generic_debian_stretch_x86_64
+MAINTAINER AleaJactaEst
+
+ENV HOSTNAME khanat_server
+
+COPY server/debian/common/servercontainer_function.sh /opt/
+COPY server/debian/common/servercontainer_init_* /opt/
+
+COPY output/opennel_debian_stretch_x86_64/khanat_config.sh /opt/khanat_config.sh
+
+RUN /opt/servercontainer_init_create_account.sh
+RUN /opt/servercontainer_init_mysql.sh
+RUN /opt/servercontainer_init_apache.sh
+RUN /opt/servercontainer_init_configure_envi.sh
+
diff --git a/server/debian/stretch/x86_64/Dockerfile.khanat.image b/server/debian/stretch/x86_64/Dockerfile.khanat.image
new file mode 100644
index 0000000..b8d9152
--- /dev/null
+++ b/server/debian/stretch/x86_64/Dockerfile.khanat.image
@@ -0,0 +1,33 @@
+# Dockerfile - Build for server debian
+#
+# 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 .
+#
+
+FROM opennel/server_generic_debian_stretch_x86_64
+MAINTAINER AleaJactaEst
+
+ENV HOSTNAME khanat_server
+
+COPY todelete.sh /opt/khanat_config.sh
+COPY server/debian/common/ /opt/
+
+COPY output/extra/ryzomcore.tar.gz /opt/
+COPY output/extra/ryzom-ressources.tar.gz /opt/
+COPY output/extra/khanat-ressources.tar.gz /opt/
+COPY output/extra/khanat-client-data.tar.gz /opt/
+
+RUN /opt/serverimage_init_khanat.sh
+
diff --git a/server/debian/stretch/x86_64/server-container.sh b/server/debian/stretch/x86_64/server-container.sh
new file mode 100755
index 0000000..b37b2a9
--- /dev/null
+++ b/server/debian/stretch/x86_64/server-container.sh
@@ -0,0 +1,537 @@
+#!/bin/bash
+#
+# Script to start khanat server (with docker)
+# All data are include on host
+#
+# 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 .
+
+
+declare -i REMOVE=0
+declare -i IMAGE=1
+declare -i BASICSERVER=0
+declare -i KHANATSERVER=0
+declare -i CONFIGUREKHANATSERVER=0
+declare -i LAUNCHKHANAT=1
+declare -i UPDATEDATA=0
+declare -i DEBUG=0
+declare -i AUTODETEC=1
+declare -i STOPKHANAT=0
+declare -i CLEANCONTAINERKHANAT=0
+declare -i CONNECTSSHKHANAT=0
+declare -i KHANAT_CLIENT_VERSION=1
+declare -i SHOWIPKHANATSERVER=0
+declare METHODSTARTSERVER="--start-khanat-with-screen"
+declare -i CLEANIMAGENONE=0
+declare DOCKERBUILDOPT=""
+
+declare IMAGEGENERICSERVER="opennel/server_generic_debian_stretch_x86_64"
+declare IMAGEKHANATSERVER="opennel/servercontainer_debian_stretch_x86_64"
+declare LOCALBUILDDIR="build/builder_khanat_debian_stretch_x86_64"
+declare DIROUTPUT="output/opennel_debian_stretch_x86_64"
+declare ROOTDATAKHANAT="$DIROUTPUT/gameserver"
+declare DIRLOG="$ROOTDATAKHANAT/log"
+declare DIRDATABASE="$ROOTDATAKHANAT/database"
+declare ENVIFILE="$DIROUTPUT/khanat_config.sh"
+declare DIRKHANAT="$ROOTDATAKHANAT/khanat"
+declare KHANAT_RESSOURCES_DIR=""
+declare KHANAT_CLIENT_DATA_DIR=""
+declare OPENNEL_CODE_DIR=""
+declare STEP_CONFIGURE_OK="$ROOTDATAKHANAT/khanat/step_configure.ok"
+declare DIRCLIENT="Khanat_Linux64"
+declare PACKAGECLIENT="smokey_linux64"
+
+usage()
+{
+cat << EOF
+usage:$0 [options]
+ script to build under docker
+
+ Step:
+ 1) create image basic server
+ 2) create image khanat server
+ 3) configure khagant server
+ 4) launch khagant server
+
+options:
+ -h, --help : Show this help
+ -d, --debug : Show debug message
+ -r, --remove : Remove directory data khanat
+ -b, --force-basic : Force create/recreate image basic server
+ -k, --force-khanat : Force create/recreate image khanat server
+ -u, --update-data : generate a new patch (client & update server)
+ -g, --configure-khanat : Force configure khanat server
+ -n, --no-launch-khanat : Doesn't launch khanat server
+ -s, --stop-server : Stop server khanat
+ -c, --clean-container-khanat : Remove old server khanat (stopped)
+ -w, --clean-images-none : Remove images docker (with name 'none')
+ -i, --show-ip-khanat-server : show ip address for khanat server (launch under docker)
+ --option-docker-build=[STRING] : you can add option in "docker build"
+ --khanat-ressources-dir=[DIR] : localization khanat-ressources
+ --khanat-client-data-dir=[DIR] : localization khanat-client-data
+ --opennel-code-dir=[DIR] : localization opennel-code
+ --start-khanat-with-screen : start with screen
+ --start-khanat-with-khanat-log : start server khanat and show khanat log
+ --start-khanat-with-full-log : start server khanat and show full log
+ --start-khanat-with-watch-state : start server khanat and show state (loop)
+ --start-khanat-with-watch-state-nagios : start server khanat and show state [nagios format] (loop)
+ --start-khanat-with-bash-after : start server khanat and launch bash
+ --start-with-manager : start khanat with manager
+ --ssh : connect on khanat server (with ssh) [Exclusive action, can't execute other action]
+ --client-version=[INTEGER] : version client khanat (we need to communicate with our server)
+
+Example :
+ cd [root Khanat directory]
+ ./server.sh
+ ./server.sh -k
+ ./server.sh --ssh
+EOF
+}
+
+function msg_debug()
+{
+ if [[ $DEBUG -ne 0 ]]
+ then
+ echo "$(date "+%Y/%m/%d %H:%M:%S") DEBUG - $*"
+ fi
+}
+
+function msg_info()
+{
+ echo "$(date "+%Y/%m/%d %H:%M:%S") INFO - $*"
+}
+
+function msg_error()
+{
+ echo "$(date "+%Y/%m/%d %H:%M:%S") ERROR - $*" >&2
+}
+
+#
+# MAIN
+#
+
+#msg_info "START"
+
+calldir="$(dirname $0)"
+basedir=$(cd $calldir; pwd)
+rootdir="$(dirname $(dirname $(dirname $(dirname ${basedir}))))"
+ressourcedir="$(dirname ${rootdir})/khanat-ressources"
+dataclientdir="$(dirname ${rootdir})/khanat-client-data"
+
+while test $# -gt 0
+do
+ case "$1" in
+ -h|--help)
+ usage
+ exit 1
+ ;;
+ -d|--debug)
+ DEBUG=1
+ shift
+ ;;
+ --ssh)
+ CONNECTSSHKHANAT=1
+ shift
+ ;;
+ -r|--remove)
+ REMOVE=1
+ CONFIGUREKHANATSERVER=1
+ shift
+ ;;
+ -c|--clean-container-khanat)
+ CLEANCONTAINERKHANAT=1
+ shift
+ ;;
+ -s|--stop-server)
+ STOPKHANAT=1
+ shift
+ ;;
+ -b|--force-basic)
+ BASICSERVER=1
+ shift
+ ;;
+ -n|--no-launch-khanat)
+ LAUNCHKHANAT=0
+ shift
+ ;;
+ -k|--force-khanat)
+ KHANATSERVER=1
+ shift
+ ;;
+ -g|--configure-khanat)
+ CONFIGUREKHANATSERVER=1
+ shift
+ ;;
+ -i|--show-ip-khanat-server)
+ SHOWIPKHANATSERVER=1
+ shift
+ ;;
+ --start-khanat-with-screen)
+ METHODSTARTSERVER="--start-khanat-with-screen"
+ shift
+ ;;
+ --start-khanat-with-khanat-log)
+ METHODSTARTSERVER="--show-khanat-log"
+ shift
+ ;;
+ --start-khanat-with-full-log)
+ METHODSTARTSERVER="--show-all-log"
+ shift
+ ;;
+ --start-khanat-with-watch-state)
+ METHODSTARTSERVER="--show-status"
+ shift
+ ;;
+ --start-khanat-with-watch-state-nagios)
+ METHODSTARTSERVER="--show-status-nagios"
+ shift
+ ;;
+ --start-khanat-with-bash-after)
+ METHODSTARTSERVER="--bash-after-start"
+ shift
+ ;;
+ --start-with-manager)
+ METHODSTARTSERVER="--start-with-manager"
+ shift
+ ;;
+ --client-version*)
+ KHANAT_CLIENT_VERSION="${1#*=}"
+ shift
+ ;;
+ --khanat-ressources-dir=*)
+ KHANAT_RESSOURCES_DIR="${1#*=}"
+ shift
+ ;;
+ --khanat-client-data-dir=*)
+ KHANAT_CLIENT_DATA_DIR="${1#*=}"
+ shift
+ ;;
+ --opennel-code-dir=*)
+ OPENNEL_CODE_DIR="${1#*=}"
+ shift
+ ;;
+ -w|--clean-images-none)
+ CLEANIMAGENONE=1
+ shift
+ ;;
+ -u|--update-data)
+ UPDATEDATA=1
+ shift
+ ;;
+ --option-docker-build)
+ DOCKERBUILDOPT="$DOCKERBUILDOPT ${1#*=}"
+ shift
+ ;;
+ *)
+ msg_error "[$(basename $0):$LINENO] options '$1' not recognize"
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+function chrashed()
+{
+ msg_error "[$(basename $0):$LINENO] BUILD FAILED (code:$?)"
+ exit 2
+}
+
+trap chrashed EXIT
+
+if [[ $SHOWIPKHANATSERVER -eq 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] START"
+fi
+
+msg_debug "[$(basename $0):$LINENO] prg: $0"
+
+docker -v 1>/dev/null
+if [[ $? -ne 0 ]]
+then
+ msg_error "[$(basename $0):$LINENO] docker not installed"
+ exit 2
+fi
+
+case "$(uname -m)" in
+ x86_64)
+ ;;
+ i686)
+ ;;
+ *)
+ msg_error "[$(basename $0):$LINENO] Unknown archi : $(uname -m)"
+ exit 2
+ ;;
+esac
+
+if [[ $REMOVE -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] REMOVE DATA KHANAT : $ROOTDATAKHANAT"
+ if [[ -n "$ROOTDATAKHANAT" ]]
+ then
+ rm -rf ${ROOTDATAKHANAT}/* || exit 2
+ fi
+fi
+
+msg_debug "[$(basename $0):$LINENO] Create directory on host ($ROOTDATAKHANAT)"
+mkdir -p $ROOTDATAKHANAT || exit 2
+chmod g+s $ROOTDATAKHANAT
+
+
+if [[ ($CONNECTSSHKHANAT -ne 0) || ($SHOWIPKHANATSERVER -ne 0) ]]
+then
+ msg_debug "[$(basename $0):$LINENO] clean container"
+ listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')"
+ if [[ ${#listcontainer[@]} -eq 1 ]]
+ then
+ ipaddress=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" ${listcontainer[@]})
+ fi
+fi
+
+if [[ $SHOWIPKHANATSERVER -ne 0 ]]
+then
+ trap '' EXIT
+ echo "$ipaddress"
+ exit 0
+fi
+
+if [[ $CONNECTSSHKHANAT -ne 0 ]]
+then
+ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no gameserver@$ipaddress
+ trap '' EXIT
+ msg_info "[$(basename $0):$LINENO] END SSH"
+ exit 0
+fi
+
+if [[ $AUTODETEC -ne 0 ]]
+then
+ msg_debug "[$(basename $0):$LINENO] Autodetect state"
+ if [[ $(docker images -f "reference=$IMAGEGENERICSERVER" | wc -l) -lt 2 ]]
+ then
+ BASICSERVER=1
+ fi
+ if [[ $(docker images -f "reference=$IMAGEKHANATSERVER" | wc -l) -lt 2 ]]
+ then
+ KHANATSERVER=1
+ fi
+ if [[ -z "$KHANAT_RESSOURCES_DIR" ]]
+ then
+ KHANAT_RESSOURCES_DIR="$(dirname $rootdir)/khanat-ressources"
+ fi
+ if [[ -z "$KHANAT_CLIENT_DATA_DIR" ]]
+ then
+ KHANAT_CLIENT_DATA_DIR="$(dirname $rootdir)/khanat-client-data"
+ fi
+ if [[ -z "$OPENNEL_CODE_DIR" ]]
+ then
+ OPENNEL_CODE_DIR="$(dirname $rootdir)/khanat-opennel-code"
+ fi
+ if [[ ! (-f $rootdir/$STEP_CONFIGURE_OK) ]]
+ then
+ CONFIGUREKHANATSERVER=1
+ fi
+fi
+
+DIRBUILD="${rootdir}/${LOCALBUILDDIR}"
+
+msg_debug "[$(basename $0):$LINENO] calldir: $calldir"
+msg_debug "[$(basename $0):$LINENO] basedir: $basedir"
+msg_debug "[$(basename $0):$LINENO] rootdir: $rootdir"
+msg_debug "[$(basename $0):$LINENO] ressourcedir: $ressourcedir"
+msg_debug "[$(basename $0):$LINENO] generate basic image: $BASICSERVER"
+msg_debug "[$(basename $0):$LINENO] localization khanat-ressources : ${KHANAT_RESSOURCES_DIR}"
+msg_debug "[$(basename $0):$LINENO] localization khanat-client-data: ${KHANAT_CLIENT_DATA_DIR}"
+msg_debug "[$(basename $0):$LINENO] localization opennel-code-client : ${OPENNEL_CODE_DIR}"
+msg_debug "[$(basename $0):$LINENO] generate khanat image: $KHANATSERVER"
+msg_debug "[$(basename $0):$LINENO] launch khanat: $LAUNCHKHANAT"
+msg_debug "stop khanat: $STOPKHANAT"
+
+msg_info "[$(basename $0):$LINENO] check khanat-ressources"
+if [[ ! -d ${KHANAT_RESSOURCES_DIR} ]]
+then
+ msg_error "[$(basename $0):$LINENO] Missing directory khanat-ressources [${KHANAT_RESSOURCES_DIR}]"
+ cat << EOF
+You need clone repo khanat-ressource.
+
+cd $(dirname ${KHANAT_RESSOURCES_DIR})
+git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-ressources.git
+
+EOF
+ exit 2
+fi
+
+
+msg_info "[$(basename $0):$LINENO] check khanat-client-data"
+if [[ ! -d ${KHANAT_CLIENT_DATA_DIR} ]]
+then
+ msg_error "[$(basename $0):$LINENO] Missing directory khanat-client-data [${KHANAT_CLIENT_DATA_DIR}]"
+ cat << EOF
+You need clone repo khanat-client-data.
+
+cd $(dirname ${KHANAT_CLIENT_DATA_DIR})
+git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-client-data.git
+
+EOF
+ exit 2
+fi
+
+if [[ ! -d ${OPENNEL_CODE_DIR} ]]
+then
+ msg_error "[$(basename $0):$LINENO] Missing directory opennel-code [${OPENNEL_CODE_DIR}]"
+ cat << EOF
+You need clone repo khanat-opennel-code.
+
+cd $(dirname ${KHANAT_RESSOURCES_DIR})
+git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-opennel-code.git
+
+EOF
+ exit 2
+fi
+if [[ $STOPKHANAT -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] STOP SERVER KHANAT"
+ listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')"
+ msg_debug "[$(basename $0):$LINENO] CONTAINER KHANAT UP : ${listcontainer[@]}"
+ if [[ -n "$listcontainer" ]]
+ then
+ docker stop "$listcontainer" || exit 2
+ fi
+fi
+
+if [[ $CLEANCONTAINERKHANAT -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CLEAN CONTAINER KHANAT"
+ listcontainer=( $(docker ps -qf 'status=exited' -f 'ancestor='"${IMAGEKHANATSERVER}"'') )
+ msg_debug "[$(basename $0):$LINENO] CONTAINER KHANAT EXITED : ${listcontainer[@]}"
+ if [[ -n "${listcontainer[@]}" ]]
+ then
+ docker rm --force "${listcontainer[@]}" || exit 2
+ fi
+fi
+
+if [[ $CLEANIMAGENONE -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CLEAN IMAGE DOCKER 'NONE'"
+ listimages=( $(docker images --filter "dangling=true" --format "{{.ID}}") )
+
+ msg_debug "[$(basename $0):$LINENO] IMAGES NONE : ${listimages[@]}"
+ if [[ -n "${listimages[@]}" ]]
+ then
+ docker rmi --force "${listimages[@]}" || exit 2
+ fi
+fi
+
+if [[ $BASICSERVER -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] GENERATE DOCKER IMAGE BASIC SERVER"
+ cd $rootdir; docker build . ${DOCKERBUILDOPT} -t ${IMAGEGENERICSERVER} \
+ --file "${basedir}/Dockerfile" || exit 2
+fi
+
+if [[ $KHANATSERVER -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] GENERATE DOCKER IMAGE KHANAT SERVER"
+ cat << EOF > $rootdir/${ENVIFILE}
+#!/bin/bash
+# Temporary file, use only to send some information on build docker
+export KHANAT_CLIENT_VERSION=$KHANAT_CLIENT_VERSION
+export UIDGAMESERVER=$(id -u)
+export GIDGAMESERVER=$(id -g)
+export DIRCLIENT="$DIRCLIENT"
+export PACKAGECLIENT="$PACKAGECLIENT"
+EOF
+ cd $rootdir; docker build . ${DOCKERBUILDOPT} -t ${IMAGEKHANATSERVER} \
+ --file "${basedir}/Dockerfile.khanat.container" || exit 2
+fi
+
+if [[ $CONFIGUREKHANATSERVER -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CONFIGURE KHANAT SERVER"
+ mkdir -p $DIRLOG || exit 2
+ mkdir -p $DIRDATABASE || exit 2
+ msg_debug "[$(basename $0):$LINENO] command : cd $rootdir; docker run -it --hostname=khanat \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ${rootdir}/${LOCALBUILDDIR}/bin:/usr/local/bin:ro \
+ -v ${OPENNEL_CODE_DIR}/code/web/:/home/gameserver/ext/khanatweb:ro \
+ -v ${OPENNEL_CODE_DIR}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \
+ -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \
+ -v ${KHANAT_CLIENT_DATA_DIR}:/home/gameserver/ext/khanat-client-data:ro \
+ -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \
+ -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \
+ -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \
+ -v ${rootdir}/server/debian/common/:/opt/ext:ro \
+ ${IMAGEKHANATSERVER} /opt/ext/servercontainer_configure_auto.sh"
+ cd $rootdir; docker run -it --hostname=khanat \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ${rootdir}/${LOCALBUILDDIR}/bin:/usr/local/bin:ro \
+ -v ${OPENNEL_CODE_DIR}/code/web/:/home/gameserver/ext/khanatweb:ro \
+ -v ${OPENNEL_CODE_DIR}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \
+ -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \
+ -v ${KHANAT_CLIENT_DATA_DIR}:/home/gameserver/ext/khanat-client-data:ro \
+ -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \
+ -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \
+ -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \
+ -v ${rootdir}/server/debian/common/:/opt/ext:ro \
+ ${IMAGEKHANATSERVER} /opt/ext/servercontainer_configure_auto.sh || exit 2
+fi
+
+if [[ $UPDATEDATA -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] UPDATE KHANAT SERVER"
+ msg_debug "[$(basename $0):$LINENO] command: cd $rootdir; docker run -it --hostname=khanat \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ${rootdir}/${LOCALBUILDDIR}/bin:/usr/local/bin:ro \
+ -v ${OPENNEL_CODE_DIR}/code/web/:/home/gameserver/ext/khanatweb:ro \
+ -v ${OPENNEL_CODE_DIR}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \
+ -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \
+ -v ${KHANAT_CLIENT_DATA_DIR}:/home/gameserver/ext/khanat-client-data:ro \
+ -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \
+ -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \
+ -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \
+ -v ${rootdir}/server/debian/common/:/opt/ext:ro \
+ ${IMAGEKHANATSERVER} /opt/ext/servercontainer_update_auto.sh"
+ cd $rootdir; docker run -it --hostname=khanat \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ${rootdir}/${LOCALBUILDDIR}/bin:/usr/local/bin:ro \
+ -v ${OPENNEL_CODE_DIR}/code/web/:/home/gameserver/ext/khanatweb:ro \
+ -v ${OPENNEL_CODE_DIR}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \
+ -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \
+ -v ${KHANAT_CLIENT_DATA_DIR}:/home/gameserver/ext/khanat-client-data:ro \
+ -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \
+ -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \
+ -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \
+ -v ${rootdir}/server/debian/common/:/opt/ext:ro \
+ ${IMAGEKHANATSERVER} /opt/ext/servercontainer_update_auto.sh
+fi
+
+if [[ $LAUNCHKHANAT -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] START KHANAT SERVER"
+ cd $rootdir; docker run -it --hostname=khanat \
+ -u "$(id -u $USERNAME):$(id -g $USERNAME)" \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ${rootdir}/${LOCALBUILDDIR}/bin:/usr/local/bin:ro \
+ -v ${OPENNEL_CODE_DIR}/code/web/:/home/gameserver/ext/khanatweb:ro \
+ -v ${OPENNEL_CODE_DIR}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \
+ -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \
+ -v ${KHANAT_CLIENT_DATA_DIR}:/home/gameserver/ext/khanat-client-data:ro \
+ -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \
+ -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \
+ -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \
+ -v ${rootdir}/server/debian/common/:/opt/ext:ro \
+ ${IMAGEKHANATSERVER} /opt/ext/servercontainer_launch_auto.sh $METHODSTARTSERVER -d
+fi
+
+trap '' EXIT
+msg_info "[$(basename $0):$LINENO] END"
diff --git a/server/debian/stretch/x86_64/server-image.sh b/server/debian/stretch/x86_64/server-image.sh
new file mode 100755
index 0000000..6c6e6d6
--- /dev/null
+++ b/server/debian/stretch/x86_64/server-image.sh
@@ -0,0 +1,441 @@
+#!/bin/bash
+#
+# Script to start khanat 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 .
+
+declare -i IMAGE=1
+declare -i BASICSERVER=0
+declare -i KHANATSERVER=0
+declare -i KHANATRESSOURCES=0
+declare -i KHANATDATACLIENT=0
+declare -i RYZOMRESSOURCES=0
+declare -i LAUNCHKHANAT=1
+declare -i DEBUG=0
+declare -i AUTODETEC=1
+declare -i STOPKHANAT=0
+declare -i CLEANCONTAINERKHANAT=0
+declare -i CONNECTSSHKHANAT=0
+declare -i KHANAT_CLIENT_VERSION=1
+declare -i SHOWIPKHANATSERVER=0
+declare -i METHODSTARTSERVER=1
+declare -i CLEANIMAGENONE=0
+declare DOCKERBUILDOPT=""
+
+declare IMAGEGENERICSERVER="opennel/server_generic_debian_stretch_x86_64"
+declare IMAGEKHANATSERVER="opennel/serverimage_debian_stretch_x86_64"
+declare LOCALBUILDDIR="build/opennel/builder_debian_stretch_x86_64"
+declare DIRCLIENT="Khanat_Linux64"
+declare PACKAGECLIENT="smokey_linux64"
+declare DIROUTPUT="output/extra"
+
+usage()
+{
+cat << EOF
+usage:$0 [options]
+ script to build under docker
+
+ Step:
+ 1) generate tar with khanat-ressources
+ 2) generate tar with ryzom-ressources
+ 3) create image basic server
+ 4) create image khanat server
+ 5) launch khanat server
+
+options:
+ -h, --help : Show this help
+ -d, --debug : Show debug message
+ -b, --force-basic : Force create/recreate image basic server
+ -t, --force-tar-ressources : Generate TAR.GZ for khanat-ressources (look directory ../khanat-ressources)
+ -q, --force-tar-client-data : Generate TAR.GZ for khanat-client-data (look directory ../khanat-client-data)
+ -z, --force-tar-ryzom-ressources : Generate TAR.GZ in data khanat-code
+ -k, --force-khanat : Force create/recreate image khanat server
+ -n, --no-launch-khanat : Doesn't launch khanat server
+ -s, --stop-server : Stop server khanat
+ -c, --clean-container-khanat : Remove old server khanat (stopped)
+ -w, --clean-images-none : Remove images docker (with name 'none')
+ -i, --show-ip-khanat-server : show ip address for khanat server (launch under docker)
+ --option-docker-build=[STRING] : you can add option in "docker build"
+ --opennel-code-dir=[DIR] : localization opennel-code
+ --start-khanat-with-screen : [default] start khanat with screen
+ --start-khanat-with-full-log : start server khanat and show full log
+ --start-khanat-with-watch-state : start server khanat and show state (loop)
+ --ssh : connect on khanat server (with ssh) [Exclusive action, can't execute other action]
+ --client-version=[INTEGER] : version client khanat (we need to communicate with our server)
+
+Example :
+ cd [root Khanat directory]
+ ./server.sh
+ ./server.sh -k
+ ./server.sh --ssh
+EOF
+}
+
+function msg_debug()
+{
+ if [[ $DEBUG -ne 0 ]]
+ then
+ echo "$(date "+%Y/%m/%d %H:%M:%S") DEBUG - $*"
+ fi
+}
+
+function msg_info()
+{
+ echo "$(date "+%Y/%m/%d %H:%M:%S") INFO - $*"
+}
+
+function msg_error()
+{
+ echo "$(date "+%Y/%m/%d %H:%M:%S") ERROR - $*" >&2
+}
+
+#
+# MAIN
+#
+
+#msg_info "START"
+
+calldir="$(dirname $0)"
+basedir=$(cd $calldir; pwd)
+rootdir="$(dirname $(dirname $(dirname $(dirname ${basedir}))))"
+ressourcedir="$(dirname ${rootdir})/khanat-ressources"
+dataclientdir="$(dirname ${rootdir})/khanat-client-data"
+
+while test $# -gt 0
+do
+ case "$1" in
+ -h|--help)
+ usage
+ exit 1
+ ;;
+ -d|--debug)
+ DEBUG=1
+ shift
+ ;;
+ --ssh)
+ CONNECTSSHKHANAT=1
+ shift
+ ;;
+ -c|--clean-container-khanat)
+ CLEANCONTAINERKHANAT=1
+ shift
+ ;;
+ -s|--stop-server)
+ STOPKHANAT=1
+ shift
+ ;;
+ -b|--force-basic)
+ BASICSERVER=1
+ shift
+ ;;
+ -n|--no-launch-khanat)
+ LAUNCHKHANAT=0
+ shift
+ ;;
+ -t|--force-tar-ressources)
+ KHANATRESSOURCES=1
+ shift
+ ;;
+ -q|--force-tar-client-data)
+ KHANATDATACLIENT=1
+ shift
+ ;;
+ -z|--force-tar-ryzom-ressources)
+ RYZOMRESSOURCES=1
+ shift
+ ;;
+ -k|--force-khanat)
+ KHANATSERVER=1
+ shift
+ ;;
+ -i|--show-ip-khanat-server)
+ SHOWIPKHANATSERVER=1
+ shift
+ ;;
+ --start-khanat-with-screen)
+ METHODSTARTSERVER=1
+ shift
+ ;;
+ --start-khanat-with-full-log)
+ METHODSTARTSERVER=2
+ shift
+ ;;
+ --start-khanat-with-watch-state)
+ METHODSTARTSERVER=3
+ shift
+ ;;
+ --client-version*)
+ KHANAT_CLIENT_VERSION="${1#*=}"
+ shift
+ ;;
+ -w|--clean-images-none)
+ CLEANIMAGENONE=1
+ shift
+ ;;
+ --option-docker-build)
+ DOCKERBUILDOPT="$DOCKERBUILDOPT ${1#*=}"
+ shift
+ ;;
+ --opennel-code-dir=*)
+ OPENNEL_CODE_DIR="${1#*=}"
+ shift
+ ;;
+ *)
+ msg_error "options '$1' not recognize"
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+function chrashed()
+{
+ msg_error "BUILD FAILED (code:$?)"
+ exit 2
+}
+
+trap chrashed EXIT
+
+if [[ $SHOWIPKHANATSERVER -eq 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] START"
+fi
+
+msg_debug "[$(basename $0):$LINENO] prg: $0"
+
+extradir="${rootdir}/${DIROUTPUT}"
+mkdir -p ${extradir} || exit 2
+
+
+docker -v 1>/dev/null
+if [[ $? -ne 0 ]]
+then
+ msg_error "[$(basename $0):$LINENO] docker not installed"
+ exit 2
+fi
+
+case "$(uname -m)" in
+ x86_64)
+ ;;
+ i686)
+ ;;
+ *)
+ msg_error "[$(basename $0):$LINENO] Unknown archi : $(uname -m)"
+ exit 2
+ ;;
+esac
+
+if [[ ($CONNECTSSHKHANAT -ne 0) || ($SHOWIPKHANATSERVER -ne 0) ]]
+then
+ listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')"
+ if [[ ${#listcontainer[@]} -eq 1 ]]
+ then
+ ipaddress=$(docker inspect --format="{{ .NetworkSettings.IPAddress }}" ${listcontainer[@]})
+ fi
+fi
+
+if [[ $SHOWIPKHANATSERVER -ne 0 ]]
+then
+ trap '' EXIT
+ echo "$ipaddress"
+ exit 0
+fi
+
+if [[ $CONNECTSSHKHANAT -ne 0 ]]
+then
+ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no gameserver@$ipaddress
+ trap '' EXIT
+ msg_info "[$(basename $0):$LINENO] END SSH"
+ exit 0
+fi
+
+if [[ $AUTODETEC -ne 0 ]]
+then
+ if [[ $(docker images -f "reference=$IMAGEGENERICSERVER" | wc -l) -lt 2 ]]
+ then
+ BASICSERVER=1
+ fi
+ if [[ ! -f ${extradir}/khanat-ressources.tar.gz ]]
+ then
+ KHANATRESSOURCES=1
+ fi
+ if [[ ! -f ${extradir}/khanat-client-data.tar.gz ]]
+ then
+ KHANATDATACLIENT=1
+ fi
+ if [[ ! -f ${extradir}/ryzom-ressources.tar.gz ]]
+ then
+ RYZOMRESSOURCES=1
+ fi
+ if [[ $(docker images -f "reference=$IMAGEKHANATSERVER" | wc -l) -lt 2 ]]
+ then
+ KHANATSERVER=1
+ fi
+ if [[ -z "$OPENNEL_CODE_DIR" ]]
+ then
+ OPENNEL_CODE_DIR="$(dirname $rootdir)/khanat-opennel-code"
+ fi
+
+ if [[ -f ${extradir}/ryzomcore.tar.gz ]]
+ then
+ sumsrc=$(md5sum ${rootdir}/${LOCALBUILDDIR}/ryzomcore-0.12.0..tar.gz | awk '{print $1}')
+ sumdst=$(md5sum ${extradir}/ryzomcore.tar.gz | awk '{print $1}')
+ else
+ sumsrc=1
+ sumdsr=2
+ fi
+ msg_debug "[$(basename $0):$LINENO] ryzomcore checksum src:$sumsrc dst:$sumdst"
+ if [[ "$sumsrc" != "$sumdst" ]]
+ then
+ msg_debug "[$(basename $0):$LINENO] copy ryzomcore"
+ cp ${rootdir}/${LOCALBUILDDIR}/ryzomcore-0.12.0..tar.gz ${extradir}/ryzomcore.tar.gz || exit 2
+ KHANATSERVER=1
+ fi
+fi
+
+DIRBUILD="${rootdir}/${LOCALBUILDDIR}"
+
+msg_debug "[$(basename $0):$LINENO] calldir: $calldir"
+msg_debug "[$(basename $0):$LINENO] basedir: $basedir"
+msg_debug "[$(basename $0):$LINENO] rootdir: $rootdir"
+msg_debug "[$(basename $0):$LINENO] ressourcedir: $ressourcedir"
+msg_debug "[$(basename $0):$LINENO] generate basic image: $BASICSERVER"
+msg_debug "[$(basename $0):$LINENO] generate tar khanat ressources: $KHANATRESSOURCES"
+msg_debug "[$(basename $0):$LINENO] generate tar khanat data client: $KHANATDATACLIENT"
+msg_debug "[$(basename $0):$LINENO] generate tar ryzom ressources: $RYZOMRESSOURCES"
+msg_debug "[$(basename $0):$LINENO] generate khanat image: $KHANATSERVER"
+msg_debug "[$(basename $0):$LINENO] launch khanat: $LAUNCHKHANAT"
+msg_debug "[$(basename $0):$LINENO] stop khanat: $STOPKHANAT"
+
+if [[ ! -d ${OPENNEL_CODE_DIR} ]]
+then
+ msg_error "[$(basename $0):$LINENO] Missing directory opennel-code [${OPENNEL_CODE_DIR}]"
+ cat << EOF
+You need clone repo khanat-opennel-code.
+
+cd $(dirname ${KHANAT_RESSOURCES_DIR})
+git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-opennel-code.git
+
+EOF
+ exit 2
+fi
+
+if [[ $KHANATRESSOURCES -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CREATE TAR with KHANAT Ressources"
+ if [[ ! -d ${ressourcedir} ]]
+ then
+ msg_error "[$(basename $0):$LINENO] Missing khanat-ressources directory ($ressourcedir)"
+ exit 2
+ fi
+ (cd $ressourcedir; tar --exclude='.git' -czf ${extradir}/khanat-ressources.tar.gz .) || exit 2
+fi
+
+if [[ $KHANATDATACLIENT -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CREATE TAR with KHANAT DATA CLIENT"
+ if [[ ! -d ${dataclientdir} ]]
+ then
+ msg_error "[$(basename $0):$LINENO] Missing khanat-client-data directory ($dataclientdir)"
+ exit 2
+ fi
+ (cd $dataclientdir; tar --exclude='.git' -czf ${extradir}/khanat-client-data.tar.gz .) || exit 2
+fi
+
+if [[ $RYZOMRESSOURCES -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CREATE TAR with RYZOM Ressources"
+ if [[ ! -d ${ressourcedir} ]]
+ then
+ msg_error "[$(basename $0):$LINENO] Missing khanat-ressources directory ($ressourcedir)"
+ exit 2
+ fi
+ cd ${OPENNEL_CODE_DIR}; tar czf ${extradir}/ryzom-ressources.tar.gz \
+ code/ryzom/server/shard.screen.rc \
+ code/ryzom/common/* \
+ code/ryzom/client/* \
+ code/ryzom/server/* \
+ code/ryzom/tools/scripts/linux/* \
+ code/web/* || exit 2
+fi
+
+if [[ $STOPKHANAT -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] STOP SERVER KHANAT"
+ listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')"
+ msg_debug "[$(basename $0):$LINENO] CONTAINER KHANAT UP : ${listcontainer[@]}"
+ if [[ -n "$listcontainer" ]]
+ then
+ docker stop "$listcontainer" || exit 2
+ fi
+fi
+
+if [[ $CLEANCONTAINERKHANAT -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CLEAN CONTAINER KHANAT"
+ listcontainer=( $(docker ps -qf 'status=exited' -f 'ancestor='"${IMAGEKHANATSERVER}"'') )
+ msg_debug "[$(basename $0):$LINENO] CONTAINER KHANAT EXITED : ${listcontainer[@]}"
+ if [[ -n "${listcontainer[@]}" ]]
+ then
+ docker rm --force "${listcontainer[@]}" || exit 2
+ fi
+fi
+
+if [[ $CLEANIMAGENONE -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] CLEAN IMAGE DOCKER 'NONE'"
+ listimages=( $(docker images --filter "dangling=true" --format "{{.ID}}") )
+
+ msg_debug "[$(basename $0):$LINENO] IMAGES NONE : ${listimages[@]}"
+ if [[ -n "${listimages[@]}" ]]
+ then
+ docker rmi --force "${listimages[@]}" || exit 2
+ fi
+fi
+
+if [[ $BASICSERVER -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] GENERATE DOCKER IMAGE BASIC SERVER"
+ cd $rootdir; docker build . ${DOCKERBUILDOPT} -t ${IMAGEGENERICSERVER} \
+ --file "${basedir}/Dockerfile" || exit 2
+fi
+
+if [[ $KHANATSERVER -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] GENERATE DOCKER IMAGE KHANAT SERVER"
+ cat << EOF > $rootdir/todelete.sh
+#!/bin/bash
+# Temporary file, use only to send some information on build docker
+export KHANAT_CLIENT_VERSION=$KHANAT_CLIENT_VERSION
+export DIRCLIENT="$DIRCLIENT"
+export PACKAGECLIENT="$PACKAGECLIENT"
+EOF
+ cd $rootdir; docker build . ${DOCKERBUILDOPT} -t ${IMAGEKHANATSERVER} \
+ --file "${basedir}/Dockerfile.khanat.image" || exit 2
+ rm $rootdir/todelete.sh
+fi
+
+if [[ $LAUNCHKHANAT -ne 0 ]]
+then
+ msg_info "[$(basename $0):$LINENO] START KHANAT SERVER"
+ cd $rootdir; docker run -it --hostname=khanat \
+ -v /etc/localtime:/etc/localtime:ro \
+ ${IMAGEKHANATSERVER} /opt/serverimage_autostart.sh $METHODSTARTSERVER
+ clear
+fi
+
+trap '' EXIT
+msg_info "[$(basename $0):$LINENO] END"