From 2c04812a724e7966bfa9adc5fa440d3d08cca531 Mon Sep 17 00:00:00 2001 From: Jerome Sagnole Date: Wed, 11 Oct 2017 22:07:06 +0200 Subject: [PATCH] adding i686 server & update build --- .../builder/debian/jessie/i686/Dockerfile | 92 +++- .../debian/jessie/i686/build-under-docker.sh | 32 +- .../builder/debian/jessie/i686/build.sh | 39 +- .../server/debian/jessie/i686/Dockerfile | 34 ++ .../jessie/i686/Dockerfile.khanat.container | 33 ++ .../jessie/i686/Dockerfile.khanat.image | 33 ++ .../debian/jessie/i686/server-container.sh | 485 ++++++++++++++++++ .../server/debian/jessie/i686/server-image.sh | 415 +++++++++++++++ 8 files changed, 1127 insertions(+), 36 deletions(-) create mode 100644 dist/docker/server/debian/jessie/i686/Dockerfile create mode 100644 dist/docker/server/debian/jessie/i686/Dockerfile.khanat.container create mode 100644 dist/docker/server/debian/jessie/i686/Dockerfile.khanat.image create mode 100755 dist/docker/server/debian/jessie/i686/server-container.sh create mode 100755 dist/docker/server/debian/jessie/i686/server-image.sh diff --git a/dist/docker/builder/debian/jessie/i686/Dockerfile b/dist/docker/builder/debian/jessie/i686/Dockerfile index ecf52648b..dd5c538cd 100644 --- a/dist/docker/builder/debian/jessie/i686/Dockerfile +++ b/dist/docker/builder/debian/jessie/i686/Dockerfile @@ -17,7 +17,7 @@ # # to build : -# $ docker build . -t builder_debian_8_i686 --file dist/docker/builder/debian-8-i686/Dockerfile +# $ docker build . -t builder_khanat_debian_jessie_i686 --file dist/docker/builder/debian-8-i686/Dockerfile # to use this image : # (on root) @@ -25,34 +25,86 @@ # (with your account) # $ docker run -it --hostname=builder -u "$(id -u $USERNAME):$(id -g $USERNAME)" -v $PWD/dist:/opt/dist -v $PWD/code:/opt/code builder_debian_8_i686 /bin/bash -FROM debian:8 +FROM i386/debian:8 MAINTAINER AleaJactaEst ENV HOSTNAME builder -RUN apt-get update -RUN apt-get dist-upgrade -y - -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server -RUN apt-get install -y apache2 php5 libapache2-mod-php5 php5-mysql apache2-utils php5-gd php5-imagick -RUN apt-get install -y git libcurl4-openssl-dev libluabind-dev libfreetype6-dev libx11-dev libgl1-mesa-dev libxxf86vm-dev libxrandr-dev libxrender-dev libopenal-dev libogg-dev libvorbis-dev libxml2-dev cmake build-essential libpng12-dev libjpeg62-turbo-dev rrdtool bison libxmu-dev autoconf automake libmysqlclient-dev libgif-dev cpputest libssl-dev liblzma-dev unzip - -RUN apt-get install -y wget +RUN apt-get update ; \ + apt-get dist-upgrade -y ; \ + DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server ; \ + apt-get install -y apache2 \ + php5 \ + libapache2-mod-php5 \ + php5-mysql \ + apache2-utils \ + php5-gd \ + php5-imagick \ + git \ + libcurl4-openssl-dev \ + libluabind-dev \ + libfreetype6-dev \ + libx11-dev \ + libgl1-mesa-dev \ + libxxf86vm-dev \ + libxrandr-dev \ + libxrender-dev \ + libopenal-dev \ + libogg-dev \ + libvorbis-dev \ + libxml2-dev \ + cmake \ + build-essential \ + libpng12-dev \ + libjpeg62-turbo-dev \ + rrdtool \ + bison \ + libxmu-dev \ + autoconf \ + automake \ + libmysqlclient-dev \ + libgif-dev \ + cpputest \ + libssl-dev \ + liblzma-dev \ + unzip \ + zlib1g-dev \ + libssh-dev \ + libboost-all-dev \ + libopenal-dev \ + libgl1-mesa-dev \ + libogg-dev \ + mercurial \ + wget ## Build & Install cpptest # Impossible to build release 1.1.0, 1.1.1, 1.1.2 -#RUN apt-get install -y wget autogen autoconf automake libtool libtool-bin -#RUN mkdir -p /opt/src -#RUN wget -q https://github.com/cpptest/cpptest/archive/1.0.5.tar.gz -O /opt/src/cpptest.tar.gz -#RUN rm -rf /opt/src/cpptest -#RUN tar xvf /opt/src/cpptest.tar.gz -C /opt/src --strip 1 -#RUN cd /opt/src/cpptest && ./autogen.sh && ./configure && make && make install +RUN apt-get install -y wget autogen autoconf automake libtool libtool-bin +RUN mkdir -p /opt/src +RUN wget -q https://github.com/cpptest/cpptest/archive/1.0.5.tar.gz -O /opt/src/cpptest.tar.gz +RUN rm -rf /opt/src/cpptest +RUN tar xvf /opt/src/cpptest.tar.gz -C /opt/src --strip 1 +RUN cd /opt/src/cpptest && ./autogen.sh && ./configure && make && make install ## Build & Install Build squish RUN mkdir -p /opt/src RUN cd /opt/src; wget -c https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/libsquish/squish-1.11.zip -RUN cd /opt/src; unzip squish-1.11.zip +RUN cd /opt/src; unzip squish-1.11.zip || exit 2 COPY dist/docker/builder/common/squish-limit.patch /opt/squish-limit.patch -RUN cd /opt/src/squish-1.11; patch -i /opt/squish-limit.patch -RUN cd /opt/src/squish-1.11; make -RUN cd /opt/src/squish-1.11; make install +RUN cd /opt/src/squish-1.11; patch -i /opt/squish-limit.patch || exit 2 +RUN cd /opt/src/squish-1.11; make || exit 2 +RUN cd /opt/src/squish-1.11; make install || exit 2 + +## Build & Install CURL - 7.46.0 +#RUN hg clone http://hg.kervala.net/packaging/ +#RUN mkdir -p packaging/curl/build +#RUN cd packaging/curl/build; cmake -DCMAKE_BUILD_TYPE=Release -DCURL_ZLIB=ON -DBUILD_CURL_EXE=OFF -DBUILD_CURL_TESTS=OFF -DCURL_STATICLIB=ON -DHTTP_ONLY=ON -DENABLE_IPV6=ON -DCMAKE_USE_OPENSSL=ON -DOPENSSL_SSL_LIBRARIES=/usr/lib/libssl.a -DOPENSSL_CRYPTO_LIBRARIES=/usr/lib/libcrypto.a -DCMAKE_USE_LIBSSH2=OFF -DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.a .. +#RUN cd packaging/curl/build; make +#RUN cd packaging/curl/build; make install +RUN wget -q https://curl.haxx.se/download/curl-7.46.0.tar.gz -O /opt/src/curl.tar.gz || exit 2 +RUN mkdir -p /opt/src/curl/build +RUN tar xvf /opt/src/curl.tar.gz -C /opt/src/curl --strip 1 || exit 2 +RUN cd /opt/src/curl/build; cmake -DCMAKE_BUILD_TYPE=Release -DCURL_ZLIB=ON -DBUILD_CURL_EXE=OFF -DBUILD_CURL_TESTS=OFF -DCURL_STATICLIB=ON -DHTTP_ONLY=ON -DENABLE_IPV6=ON -DCMAKE_USE_OPENSSL=ON -DOPENSSL_SSL_LIBRARIES=/usr/lib/libssl.a -DOPENSSL_CRYPTO_LIBRARIES=/usr/lib/libcrypto.a -DCMAKE_USE_LIBSSH2=OFF -DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.a .. || exit 2 +RUN cd /opt/src/curl/build; make || exit 2 +RUN cd /opt/src/curl/build; make install || exit 2 + diff --git a/dist/docker/builder/debian/jessie/i686/build-under-docker.sh b/dist/docker/builder/debian/jessie/i686/build-under-docker.sh index 2fd8f7b11..4226dd58c 100755 --- a/dist/docker/builder/debian/jessie/i686/build-under-docker.sh +++ b/dist/docker/builder/debian/jessie/i686/build-under-docker.sh @@ -17,7 +17,7 @@ # along with this program. If not, see . # -declare DIRBUILD="/opt/code/build/" +declare DIRBUILD="/opt/build/" if [[ -n "$1" ]] then DIRBUILD="$1" @@ -26,28 +26,44 @@ declare LOGFILE="${DIRBUILD}/build.log" function chrashed() { - echo "$(date "+%Y/%m/%d %H:%M:%S") BUILD FAILED (code:$?)" >> $LOGFILE + echo "$(date "+%Y/%m/%d %H:%M:%S") ERROR - BUILD FAILED (code:$?)" >> $LOGFILE exit 2 } +function msg_info() +{ + echo "$(date "+%Y/%m/%d %H:%M:%S") INFO - $1" + echo "$(date "+%Y/%m/%d %H:%M:%S") INFO - $1" >> $LOGFILE +} + trap chrashed EXIT +msg_info "CREATE BUILD DIRECTORY" mkdir -p ${DIRBUILD}/ || exit 2 if [[ -f ${DIRBUILD}/envi.sh ]] then - echo "$(date "+%Y/%m/%d %H:%M:%S") LOAD ENVI" >> $LOGFILE + msg_info "LOAD ENVIRONMENT" source ${DIRBUILD}/envi.sh fi -echo "$(date "+%Y/%m/%d %H:%M:%S") BUILD START" >> $LOGFILE - -cd ${DIRBUILD}; cmake -DWITH_NEL_TESTS=OFF -DWITH_RYZOM_CLIENT=OFF -DWITH_NEL=ON -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_DRIVER_OPENGL=OFF -DWITH_DRIVER_OPENAL=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_SOUND=OFF ${CMAKEOPTS} .. 1>>$LOGFILE 2>&1 || exit 2 +msg_info "PREPARE BUILD" +cd ${DIRBUILD}; cmake -DWITH_NEL=ON \ + -DWITH_STATIC=ON \ + -DWITH_STATIC_DRIVERS=ON \ + -DWITH_STATIC_EXTERNAL=ON \ + -DWITH_SYMBOLS=ON \ + -DWITH_LUA52=ON \ + -DWITH_RYZOM_PATCH=ON \ + -DWITH_RYZOM_CUSTOM_PATCH_SERVER=ON \ + ${CMAKEOPTS} \ + ../../code 1>>$LOGFILE 2>&1 || exit 2 +msg_info "BUILD START" cd ${DIRBUILD}; make $MAKEOPTS 1>>$LOGFILE 2>&1 || exit 2 -echo "$(date "+%Y/%m/%d %H:%M:%S") PACKAGE" > $LOGFILE +msg_info "GENERATE PACKAGE" cd ${DIRBUILD}; make package 1>>$LOGFILE 2>&1 || exit 2 trap '' EXIT -echo "$(date "+%Y/%m/%d %H:%M:%S") BUILD END" >> $LOGFILE +msg_info "BUILD END" diff --git a/dist/docker/builder/debian/jessie/i686/build.sh b/dist/docker/builder/debian/jessie/i686/build.sh index b68f19df2..16ff94cba 100755 --- a/dist/docker/builder/debian/jessie/i686/build.sh +++ b/dist/docker/builder/debian/jessie/i686/build.sh @@ -34,6 +34,9 @@ declare DOCKERBUILDOPT="" declare IMAGEDOCKER="builder_khanat_debian_jessie_i686" declare LOCALBUILDDIR="build/$IMAGEDOCKER" declare LOCALSRC="debian/jessie/i686" +declare DIRPACKAGE="output/khanat_debian_jessie_i686/package" +declare PACKAGEBIN="$DIRPACKAGE/ryzomcore_jessie_i686.tar.gz" +declare PACKAGEREF="$DIRPACKAGE/khanat-ref-ressources.tar.gz" usage() @@ -46,7 +49,7 @@ usage:$0 [options] 1) clean old build directory 2) create image builder 3) launch build under docker (launch script build-under-docker.sh) - 4) remove docker container with state exited + 4) remove docker container with state exited and clean docker images NONE options: -h, --help : Show this help @@ -58,11 +61,13 @@ options: -c, --clean-container : remove all container in state Exited -w, --clean-images-none : Remove images docker (with name 'none') -m OPTS, --add-opts-docker=OPTS : Adding options on docker command (when build) + --only-build-server : adding option to build only server Example : cd [root Khanat directory] - ./build.sh -c -r - ./build.sh -c -r -j 4 -a '-DWITH_SYMBOLS=ON' -a '-DWITH_RYZOM_TOOLS=OFF' -a '-DWITH_NEL_TOOLS=OFF' -m '-m 20g' + ./build.sh -c -r -m '-m 20g' + ./build.sh -c -r -j 4 -a '-DWITH_SYMBOLS=ON' -a '-DWITH_RYZOM_TOOLS=OFF' -a '-DWITH_NEL_TOOLS=OFF' -m '-m 20g' -d + EOF } @@ -113,7 +118,6 @@ do ;; -f|--force-create-image) IMAGE=1 - DOCKERBUILDOPT="$DOCKERBUILDOPT --no-cache" shift ;; -j) @@ -154,6 +158,10 @@ do DOCKEROPTS="$DOCKEROPTS ${1#*=}" shift ;; + --only-build-server) + CMAKEOPTS="$CMAKEOPTS -DWITH_NEL_TESTS=OFF -DWITH_RYZOM_CLIENT=OFF -DWITH_DRIVER_OPENGL=OFF -DWITH_DRIVER_OPENAL=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_SOUND=OFF" + shift + ;; -w|--clean-images-none) CLEANIMAGENONE=1 shift @@ -191,7 +199,7 @@ then fi fi -DIRBUILD="${rootdir}/code/${LOCALBUILDDIR}" +DIRBUILD="${rootdir}/${LOCALBUILDDIR}" msg_debug "calldir: $calldir" msg_debug "basedir: $basedir" @@ -228,11 +236,26 @@ then cd $rootdir; docker run -it \ --hostname=builder \ -u "$(id -u $USERNAME):$(id -g $USERNAME)" \ - -v $rootdir/dist:/opt/dist \ - -v $rootdir/code:/opt/code \ + -v $rootdir/dist:/opt/dist:ro \ + -v $rootdir/code:/opt/code:ro \ + -v $rootdir/build:/opt/build \ + -v /etc/localtime:/etc/localtime:ro \ ${DOCKEROPTS} \ ${IMAGEDOCKER} \ - /opt/dist/docker/builder/${LOCALSRC}/build-under-docker.sh "/opt/code/${LOCALBUILDDIR}" || exit 2 + /opt/dist/docker/builder/${LOCALSRC}/build-under-docker.sh "/opt/${LOCALBUILDDIR}" || exit 2 +fi + +if [[ $BUILD -ne 0 ]] +then + msg_info "COPY PACKAGES" + mkdir -p "$rootdir/$DIRPACKAGE" + cd ${rootdir}; tar czf ${PACKAGEREF} \ + code/ryzom/server/shard.screen.rc \ + code/ryzom/common/* \ + code/ryzom/client/* \ + code/ryzom/server/* \ + code/web/* || exit 2 + cp ${rootdir}/${LOCALBUILDDIR}/ryzomcore-0.12.0..tar.gz ${PACKAGEBIN} || exit 2 fi if [[ $CLEANDOCKER -ne 0 ]] diff --git a/dist/docker/server/debian/jessie/i686/Dockerfile b/dist/docker/server/debian/jessie/i686/Dockerfile new file mode 100644 index 000000000..8099f3c83 --- /dev/null +++ b/dist/docker/server/debian/jessie/i686/Dockerfile @@ -0,0 +1,34 @@ +# 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 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +FROM i386/debian:8 +MAINTAINER AleaJactaEst + +ENV HOSTNAME basic_server + +RUN apt-get update ; \ + apt-get dist-upgrade -y ; \ + apt-get install -y curl nano vim less bash-completion cron logrotate bsd-mailx ; \ + apt-get install -y openssh-server sudo net-tools ; \ + apt-get install -y lzma xdelta p7zip p7zip-full ; \ + DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server ; \ + apt-get install -y apache2 php5 libapache2-mod-php5 php5-mysql apache2-utils php5-gd php5-imagick rrdtool screen mcrypt php5-mcrypt ; \ + DEBIAN_FRONTEND=noninteractive apt-get install -y phpmyadmin + + + diff --git a/dist/docker/server/debian/jessie/i686/Dockerfile.khanat.container b/dist/docker/server/debian/jessie/i686/Dockerfile.khanat.container new file mode 100644 index 000000000..af349591d --- /dev/null +++ b/dist/docker/server/debian/jessie/i686/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 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +FROM server_generic_debian_jessie_i686 +MAINTAINER AleaJactaEst + +ENV HOSTNAME khanat_server + +COPY dist/docker/server/debian/common/servercontainer_function.sh /opt/ +COPY dist/docker/server/debian/common/servercontainer_init_* /opt/ + +COPY output/khanat_debian_jessie_i686/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/dist/docker/server/debian/jessie/i686/Dockerfile.khanat.image b/dist/docker/server/debian/jessie/i686/Dockerfile.khanat.image new file mode 100644 index 000000000..fe4bb7a5a --- /dev/null +++ b/dist/docker/server/debian/jessie/i686/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 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +FROM server_generic_debian_jessie_i686 +MAINTAINER AleaJactaEst + +ENV HOSTNAME khanat_server + +COPY todelete.sh /opt/khanat_config.sh +COPY dist/docker/server/debian/common/ /opt/ + +COPY ryzomcore.tar.gz /opt/ +COPY ryzom-ressources.tar.gz /opt/ +COPY khanat-ressources.tar.gz /opt/ +COPY khanat-data-client.tar.gz /opt/ + +RUN /opt/serverimage_init_khanat.sh + diff --git a/dist/docker/server/debian/jessie/i686/server-container.sh b/dist/docker/server/debian/jessie/i686/server-container.sh new file mode 100755 index 000000000..99525cca4 --- /dev/null +++ b/dist/docker/server/debian/jessie/i686/server-container.sh @@ -0,0 +1,485 @@ +#!/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 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 General Public License for more details. +# +# You should have received a copy of the GNU 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="server_generic_debian_jessie_i686" +declare IMAGEKHANATSERVER="servercontainer_khanat_debian_jessie_i686" +declare LOCALBUILDDIR="build/builder_khanat_debian_jessie_i686" +declare DIROUTPUT="output/khanat_debian_jessie_i686" +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_DATA_CLIENT_DIR="" +declare STEP_CONFIGURE_OK="$ROOTDATAKHANAT/khanat/step_configure.ok" +declare DIRCLIENT="Khanat_Linux32" +declare PACKAGECLIENT="smokey_linux32" + +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 : localization khanat-ressources + --khanat-data-client-dir : localization khanat-data-client + --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 + --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 $(dirname $(dirname ${basedir}))))))" +ressourcedir="$(dirname ${rootdir})/khanat-ressources" +dataclientdir="$(dirname ${rootdir})/khanat-data-client" + +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 + ;; + --client-version*) + KHANAT_CLIENT_VERSION="${1#*=}" + shift + ;; + --khanat-ressources-dir*) + KHANAT_RESSOURCES_DIR="${1#*=}" + shift + ;; + --khanat-data-client-dir*) + KHANAT_DATA_CLIENT_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 "options '$1' not recoginze" + usage + exit 1 + ;; + esac +done + +function chrashed() +{ + msg_error "BUILD FAILED (code:$?)" + exit 2 +} + +trap chrashed EXIT + +if [[ $SHOWIPKHANATSERVER -eq 0 ]] +then + msg_info "START" +fi + +msg_debug "prg: $0" + +docker -v 1>/dev/null +if [[ $? -ne 0 ]] +then + msg_error "docker not installed" + exit 2 +fi + +case "$(uname -m)" in + x86_64) + ;; + i686) + ;; + *) + msg_error "Unknown archi : $(uname -m)" + exit 2 + ;; +esac + +if [[ $REMOVE -ne 0 ]] +then + msg_info "REMOVE DATA KHANAT : $ROOTDATAKHANAT" + if [[ -n "$ROOTDATAKHANAT" ]] + then + rm -rf ${ROOTDATAKHANAT}/* || exit 2 + fi +fi + +msg_debug "Create directory on host ($ROOTDATAKHANAT)" +mkdir -p $ROOTDATAKHANAT || exit 2 +chmod g+s $ROOTDATAKHANAT + + +if [[ ($CONNECTSSHKHANAT -ne 0) || ($SHOWIPKHANATSERVER -ne 0) ]] +then + msg_debug "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 "END SSH" + exit 0 +fi + +if [[ $AUTODETEC -ne 0 ]] +then + msg_debug "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_DATA_CLIENT_DIR" ]] + then + KHANAT_DATA_CLIENT_DIR="$(dirname $rootdir)/khanat-data-client" + fi + if [[ ! (-f $rootdir/$STEP_CONFIGURE_OK) ]] + then + CONFIGUREKHANATSERVER=1 + fi +fi + +DIRBUILD="${rootdir}/${LOCALBUILDDIR}" + +msg_debug "calldir: $calldir" +msg_debug "basedir: $basedir" +msg_debug "rootdir: $rootdir" +msg_debug "ressourcedir: $ressourcedir" +msg_debug "generate basic image: $BASICSERVER" +msg_debug "localization khanat-ressources : ${KHANAT_RESSOURCES_DIR}" +msg_debug "localization khanat-data-client : ${KHANAT_DATA_CLIENT_DIR}" +msg_debug "generate khanat image: $KHANATSERVER" +msg_debug "launch khanat: $LAUNCHKHANAT" +msg_debug "stop khanat: $STOPKHANAT" + +msg_info "check khanat-ressources" +if [[ ! -d ${KHANAT_RESSOURCES_DIR} ]] +then + msg_error "Missing directory khanat-ressources [${KHANAT_RESSOURCES_DIR}]" + cat << EOF +You need clone repo khanat-ressource. + +cd $(dirname ${KHANAT_RESSOURCES_DIR}) +git clone https://git.khanat.net/khanat/khanat-ressources.git + +EOF + exit 2 +fi + + +msg_info "check khanat-data-client" +if [[ ! -d ${KHANAT_DATA_CLIENT_DIR} ]] +then + msg_error "Missing directory khanat-data-client [${KHANAT_DATA_CLIENT_DIR}]" + cat << EOF +You need clone repo khanat-data-client. + +cd $(dirname ${KHANAT_DATA_CLIENT_DIR}) +git clone https://git.khanat.net/khanat/khanat-data-client.git + +EOF + exit 2 +fi + +if [[ $STOPKHANAT -ne 0 ]] +then + msg_info "STOP SERVER KHANAT" + listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')" + msg_debug "CONTAINER KHANAT UP : ${listcontainer[@]}" + if [[ -n "$listcontainer" ]] + then + docker stop "$listcontainer" || exit 2 + fi +fi + +if [[ $CLEANCONTAINERKHANAT -ne 0 ]] +then + msg_info "CLEAN CONTAINER KHANAT" + listcontainer=( $(docker ps -qf 'status=exited' -f 'ancestor='"${IMAGEKHANATSERVER}"'') ) + msg_debug "CONTAINER KHANAT EXITED : ${listcontainer[@]}" + if [[ -n "${listcontainer[@]}" ]] + then + docker rm --force "${listcontainer[@]}" || exit 2 + fi +fi + +if [[ $CLEANIMAGENONE -ne 0 ]] +then + msg_info "CLEAN IMAGE DOCKER 'NONE'" + listimages=( $(docker images | awk '{if ($1=="")print $3}') ) + + msg_debug "IMAGES NONE : ${listimages[@]}" + if [[ -n "${listimages[@]}" ]] + then + docker rmi --force "${listimages[@]}" || exit 2 + fi +fi + +if [[ $BASICSERVER -ne 0 ]] +then + msg_info "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 "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 "CONFIGURE KHANAT SERVER" + mkdir -p $DIRLOG || exit 2 + mkdir -p $DIRDATABASE || exit 2 + cd $rootdir; docker run -it --hostname=khanat \ + -v /etc/localtime:/etc/localtime:ro \ + -v ${rootdir}/${LOCALBUILDDIR}/bin:/usr/local/bin:ro \ + -v ${rootdir}/code/web/:/home/gameserver/ext/khanatweb:ro \ + -v ${rootdir}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \ + -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \ + -v ${KHANAT_DATA_CLIENT_DIR}:/home/gameserver/ext/khanat-data-client:ro \ + -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \ + -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \ + -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \ + -v ${rootdir}/dist/docker/server/debian/common/:/opt/ext:ro \ + ${IMAGEKHANATSERVER} /opt/ext/servercontainer_configure_auto.sh || exit 2 +fi + +if [[ $UPDATEDATA -ne 0 ]] +then + msg_info "UPDATE KHANAT SERVER" + cd $rootdir; docker run -it --hostname=khanat \ + -v /etc/localtime:/etc/localtime:ro \ + -v ${rootdir}/${LOCALBUILDDIR}/bin:/usr/local/bin:ro \ + -v ${rootdir}/code/web/:/home/gameserver/ext/khanatweb:ro \ + -v ${rootdir}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \ + -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \ + -v ${KHANAT_DATA_CLIENT_DIR}:/home/gameserver/ext/khanat-data-client:ro \ + -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \ + -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \ + -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \ + -v ${rootdir}/dist/docker/server/debian/common/:/opt/ext:ro \ + ${IMAGEKHANATSERVER} /opt/ext/servercontainer_update_auto.sh +fi + +if [[ $LAUNCHKHANAT -ne 0 ]] +then + msg_info "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 ${rootdir}/code/web/:/home/gameserver/ext/khanatweb:ro \ + -v ${rootdir}/code/ryzom:/home/gameserver/ext/ryzom-ressources:ro \ + -v ${KHANAT_RESSOURCES_DIR}:/home/gameserver/ext/khanat-ressources:ro \ + -v ${KHANAT_DATA_CLIENT_DIR}:/home/gameserver/ext/khanat-data-client:ro \ + -v ${rootdir}/$DIRLOG:/home/gameserver/log:rw \ + -v ${rootdir}/$DIRDATABASE:/home/gameserver/database:rw \ + -v ${rootdir}/$DIRKHANAT:/home/gameserver/khanat:rw \ + -v ${rootdir}/dist/docker/server/debian/common/:/opt/ext:ro \ + ${IMAGEKHANATSERVER} /opt/ext/servercontainer_launch_auto.sh $METHODSTARTSERVER -d +fi + +trap '' EXIT +msg_info "END" diff --git a/dist/docker/server/debian/jessie/i686/server-image.sh b/dist/docker/server/debian/jessie/i686/server-image.sh new file mode 100755 index 000000000..8a5e8bc31 --- /dev/null +++ b/dist/docker/server/debian/jessie/i686/server-image.sh @@ -0,0 +1,415 @@ +#!/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 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 General Public License for more details. +# +# You should have received a copy of the GNU 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="server_generic_debian_jessie_i686" +declare IMAGEKHANATSERVER="serverimage_khanat_debian_jessie_i686" +declare LOCALBUILDDIR="build/builder_khanat_debian_jessie_i686" +declare DIRCLIENT="Khanat_Linux32" +declare PACKAGECLIENT="smokey_linux32" + +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-data-client : Generate TAR.GZ for khanat-data-client (look directory ../khanat-data-client) + -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" + --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 $(dirname $(dirname ${basedir}))))))" +ressourcedir="$(dirname ${rootdir})/khanat-ressources" +dataclientdir="$(dirname ${rootdir})/khanat-data-client" + +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-data-client) + 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 + ;; + *) + msg_error "options '$1' not recoginze" + usage + exit 1 + ;; + esac +done + +function chrashed() +{ + msg_error "BUILD FAILED (code:$?)" + exit 2 +} + +trap chrashed EXIT + +if [[ $SHOWIPKHANATSERVER -eq 0 ]] +then + msg_info "START" +fi + +msg_debug "prg: $0" + +docker -v 1>/dev/null +if [[ $? -ne 0 ]] +then + msg_error "docker not installed" + exit 2 +fi + +case "$(uname -m)" in + x86_64) + ;; + i686) + ;; + *) + msg_error "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 "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 ${rootdir}/khanat-ressources.tar.gz ]] + then + KHANATRESSOURCES=1 + fi + if [[ ! -f ${rootdir}/khanat-data-client.tar.gz ]] + then + KHANATDATACLIENT=1 + fi + if [[ ! -f ${rootdir}/ryzom-ressources.tar.gz ]] + then + RYZOMRESSOURCES=1 + fi + if [[ $(docker images -f "reference=$IMAGEKHANATSERVER" | wc -l) -lt 2 ]] + then + KHANATSERVER=1 + fi + + if [[ -f ${rootdir}/ryzomcore.tar.gz ]] + then + sumsrc=$(md5sum ${rootdir}/${LOCALBUILDDIR}/ryzomcore-0.12.0..tar.gz | awk '{print $1}') + sumdst=$(md5sum ${rootdir}/ryzomcore.tar.gz | awk '{print $1}') + else + sumsrc=1 + sumdsr=2 + fi + msg_debug "ryzomcore checksum src:$sumsrc dst:$sumdst" + if [[ "$sumsrc" != "$sumdst" ]] + then + msg_debug "copy ryzomcore" + cp ${rootdir}/${LOCALBUILDDIR}/ryzomcore-0.12.0..tar.gz ${rootdir}/ryzomcore.tar.gz || exit 2 + KHANATSERVER=1 + fi +fi + +DIRBUILD="${rootdir}/${LOCALBUILDDIR}" + +msg_debug "calldir: $calldir" +msg_debug "basedir: $basedir" +msg_debug "rootdir: $rootdir" +msg_debug "ressourcedir: $ressourcedir" +msg_debug "generate basic image: $BASICSERVER" +msg_debug "generate tar khanat ressources: $KHANATRESSOURCES" +msg_debug "generate tar khanat data client: $KHANATDATACLIENT" +msg_debug "generate tar ryzom ressources: $RYZOMRESSOURCES" +msg_debug "generate khanat image: $KHANATSERVER" +msg_debug "launch khanat: $LAUNCHKHANAT" +msg_debug "stop khanat: $STOPKHANAT" + +if [[ $KHANATRESSOURCES -ne 0 ]] +then + msg_info "CREATE TAR with KHANAT Ressources" + if [[ ! -d ${ressourcedir} ]] + then + msg_error "Missing khanat-ressources directory ($ressourcedir)" + exit 2 + fi + (cd $ressourcedir; tar --exclude='.git' -czf ${rootdir}/khanat-ressources.tar.gz .) || exit 2 +fi + +if [[ $KHANATDATACLIENT -ne 0 ]] +then + msg_info "CREATE TAR with KHANAT DATA CLIENT" + if [[ ! -d ${dataclientdir} ]] + then + msg_error "Missing khanat-data-client directory ($dataclientdir)" + exit 2 + fi + (cd $dataclientdir; tar --exclude='.git' -czf ${rootdir}/khanat-data-client.tar.gz .) || exit 2 +fi + +if [[ $RYZOMRESSOURCES -ne 0 ]] +then + msg_info "CREATE TAR with RYZOM Ressources" + if [[ ! -d ${ressourcedir} ]] + then + msg_error "Missing khanat-ressources directory ($ressourcedir)" + exit 2 + fi + cd ${rootdir}; tar czf 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 "STOP SERVER KHANAT" + listcontainer="$(docker ps -qf 'status=running' -f 'ancestor='"${IMAGEKHANATSERVER}"'')" + msg_debug "CONTAINER KHANAT UP : ${listcontainer[@]}" + if [[ -n "$listcontainer" ]] + then + docker stop "$listcontainer" || exit 2 + fi +fi + +if [[ $CLEANCONTAINERKHANAT -ne 0 ]] +then + msg_info "CLEAN CONTAINER KHANAT" + listcontainer=( $(docker ps -qf 'status=exited' -f 'ancestor='"${IMAGEKHANATSERVER}"'') ) + msg_debug "CONTAINER KHANAT EXITED : ${listcontainer[@]}" + if [[ -n "${listcontainer[@]}" ]] + then + docker rm --force "${listcontainer[@]}" || exit 2 + fi +fi + +if [[ $CLEANIMAGENONE -ne 0 ]] +then + msg_info "CLEAN IMAGE DOCKER 'NONE'" + listimages=( $(docker images | awk '{if ($1=="")print $3}') ) + + msg_debug "IMAGES NONE : ${listimages[@]}" + if [[ -n "${listimages[@]}" ]] + then + docker rmi --force "${listimages[@]}" || exit 2 + fi +fi + +if [[ $BASICSERVER -ne 0 ]] +then + msg_info "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 "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 "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 "END"