You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
315 lines
9.4 KiB
Bash
315 lines
9.4 KiB
Bash
# linux script server tarball functions encapsulation
|
|
# Longwei Lai
|
|
###################################################################
|
|
|
|
source "${____LOGIC_SCRIPT_PATH}/lnx_logic_defs.sh"
|
|
source "${____LOGIC_SCRIPT_PATH}/lnx_logic_serverbuild.sh"
|
|
|
|
# 创建启动配置
|
|
function _create_start_file() {
|
|
log_info "create start config ${____APP_START_CONF_NAME} ..."
|
|
local server_name=${1}
|
|
local proj_name=${2}
|
|
local product_opt=${3}
|
|
local working_dir=${4}
|
|
local cfg_file="${SVR_PATH}/${____APP_START_CONF_NAME}"
|
|
|
|
function _append_line() {
|
|
echo "${1}=\"${2}\"" >> ${cfg_file}
|
|
}
|
|
|
|
function _append_include() {
|
|
echo "include \"${1}\"" >> ${cfg_file}
|
|
}
|
|
|
|
rm -rf ${cfg_file}
|
|
|
|
_append_include "framework/snconfig"
|
|
|
|
case ${server_name} in
|
|
loginserver)
|
|
_append_include "login/snconfig"
|
|
_append_line "app_type" "ls"
|
|
;;
|
|
globalserver)
|
|
_append_include "global/snconfig"
|
|
_append_line "app_type" "ms"
|
|
;;
|
|
webserver)
|
|
_append_include "web/snconfig"
|
|
_append_line "app_type" "ws"
|
|
;;
|
|
gameserver)
|
|
_append_include "game/snconfig"
|
|
_append_line "app_type" "gs"
|
|
;;
|
|
ruinsserver)
|
|
_append_include "game/snconfig"
|
|
_append_line "app_type" "rs"
|
|
;;
|
|
devilserver)
|
|
_append_include "game/snconfig"
|
|
_append_line "app_type" "ds"
|
|
;;
|
|
pyramidserver)
|
|
_append_include "game/snconfig"
|
|
_append_line "app_type" "ps"
|
|
;;
|
|
cloudserver)
|
|
_append_include "game/snconfig"
|
|
_append_line "app_type" "cp"
|
|
;;
|
|
*)
|
|
log_info "未知[应用类型]参数"
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
case ${proj_name} in
|
|
boe|ww)
|
|
_append_line "app_project" ${proj_name}
|
|
;;
|
|
*)
|
|
log_info "未知[应用项目]参数"
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
case ${product_opt} in
|
|
product)
|
|
_append_line "app_env" "pro"
|
|
;;
|
|
internal)
|
|
_append_line "app_env" "sit"
|
|
;;
|
|
*)
|
|
log_info "未知[应用环境]参数"
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
\cp -rf "${cfg_file}" "${working_dir}/"
|
|
log_info "`cat ${cfg_file}`"
|
|
|
|
return 0
|
|
}
|
|
|
|
function _copy_skynet() {
|
|
log_info "copy skynet ..."
|
|
|
|
local super_dir=${1}
|
|
local skynet_from="${FRAMEWORK_PATH}/skynet"
|
|
local skynet_to="${super_dir}/skynet"
|
|
mkdir -p "${skynet_to}"
|
|
|
|
local skynet_copy_files=(service cservice lualib luaclib skynet LICENSE HISTORY.md README.md)
|
|
for item in ${skynet_copy_files[@]}; do
|
|
\cp -rf "${skynet_from}/${item}" "${skynet_to}/${item}"
|
|
done
|
|
}
|
|
|
|
function _copy_3rd() {
|
|
log_info "copy 3rd ..."
|
|
|
|
local super_dir=${1}
|
|
local thirdrd_from="${FRAMEWORK_PATH}/3rd"
|
|
local thirdrd_to="${super_dir}/3rd"
|
|
|
|
mkdir -p ${thirdrd_to}
|
|
|
|
for item in `ls ${thirdrd_from}`; do
|
|
local item_from=${thirdrd_from}/${item}
|
|
local item_to=${thirdrd_to}/${item}
|
|
if [ -d "${item_from}" ]; then
|
|
mkdir -p ${item_to}
|
|
|
|
if [ ! -z "`find "${item_from}" -type f -name '*.so'`" ]; then
|
|
\cp -rf "${item_from}/"*.so "${item_to}/"
|
|
fi
|
|
|
|
if [ ! -z "`find "${item_from}" -type f -name '*.lua'`" ]; then
|
|
\cp -rf "${item_from}/"*.lua "${item_to}/"
|
|
fi
|
|
else
|
|
\cp -rf "${item_from}" "${item_to}"
|
|
fi
|
|
done
|
|
}
|
|
|
|
function _copy_luasrc() {
|
|
local working_dir=${1}
|
|
local server_name=${2}
|
|
function _copy_dir() {
|
|
local name=${1}
|
|
log_info "copy ${name} lua src ..."
|
|
\cp -rf "${SVR_PATH}/${name}" "${working_dir}/"
|
|
}
|
|
|
|
case ${server_name} in
|
|
loginserver) _copy_dir "login";;
|
|
globalserver) _copy_dir "global";;
|
|
webserver) _copy_dir "web";;
|
|
gameserver|ruinsserver|devilserver|pyramidserver|cloudserver) _copy_dir "game";;
|
|
*)
|
|
log_info "Unknown application type ${server_name}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function _copy_others() {
|
|
log_info "copy others ..."
|
|
|
|
local working_dir=${1}
|
|
\cp -rf "${____FWK_SVR_OPTIONS_PATH}" "${working_dir}/"
|
|
\cp -rf "${SVR_PATH}/run" "${working_dir}/run"
|
|
}
|
|
|
|
function _create_version_file() {
|
|
log_info "creating server version file[SERVER_VERSION.txt] ..."
|
|
|
|
local working_dir=${1}
|
|
local isdebug_prompt=${2}
|
|
local product_opt=${3}
|
|
local proj_name=${4}
|
|
local server_name=${5}
|
|
local svr_desc_file="${working_dir}/SERVER_VERSION.txt"
|
|
|
|
echo -e "SERVER BUILD OPTION: ${isdebug_prompt}, ${product_opt}\n" > "${svr_desc_file}"
|
|
echo -e "--------------------------------------------------------------------------\n" >> "${svr_desc_file}"
|
|
echo -e "PROJECT NAME: ${proj_name}" >> "${svr_desc_file}"
|
|
echo -e "SERVER NAME: ${server_name}" >> "${svr_desc_file}"
|
|
echo -e "BUILD NUMBER: ${BUILD_NUMBER}" >> "${svr_desc_file}"
|
|
echo -e "WHY BUILD: ${WHY_BUILD}" >> "${svr_desc_file}"
|
|
echo -e "" >> "${svr_desc_file}"
|
|
echo -e "GIT REMOTE INFO:\n`git remote -v`" >> "${svr_desc_file}"
|
|
echo -e "GIT BRANCH: `git branch -v | grep -e '\*\s\+' | cut -d' ' -f2-`" >> "${svr_desc_file}"
|
|
echo -e "LAST 10 COMMITS:\n`git --no-pager log -n 10`" >> "${svr_desc_file}"
|
|
echo -e "BUILD TIME: `date "+%Y-%m-%d %H:%M:%S"`" >> "${svr_desc_file}"
|
|
}
|
|
|
|
function _create_md5() {
|
|
local package_name=${1}
|
|
local checksum_file="${package_name}.md5"
|
|
md5sum "${package_name}" | cut -d' ' -f1 > "${checksum_file}"
|
|
|
|
log_info "file checksum: `cat "${checksum_file}"`"
|
|
}
|
|
|
|
function _clean_tmp_files() {
|
|
log_info "clean tmp files ..."
|
|
|
|
local working_dir=${1}
|
|
find "${working_dir}" -type f -name '.*.pid' -print0 |xargs -0 rm -rf # .*.pid: pid files
|
|
find "${working_dir}" -type f -name '*.log.*' -print0 |xargs -0 rm -rf # *.log.xxxx-xx-xx: log files
|
|
find "${working_dir}" -type f -name '*.nohup' -print0 |xargs -0 rm -rf # .*.nohup: nohup files
|
|
find "${working_dir}" -type f -name '.*.nohup' -print0 |xargs -0 rm -rf # .*.nohup: nohup files
|
|
}
|
|
|
|
function _tarball_files() {
|
|
log_info "tarball files ..."
|
|
|
|
local working_dir=${1}
|
|
local package_name=${2}
|
|
|
|
log_info "build reason: ${WHY_BUILD}"
|
|
log_info "tarball: ${package_name}"
|
|
|
|
( cd "${working_dir}" && tar -jcvf "${package_name}" ./ > /dev/null )
|
|
if [ $? -ne 0 ]; then
|
|
log_err " build server tarball file failed"
|
|
else
|
|
\rm -rf "${working_dir}"
|
|
fi
|
|
}
|
|
|
|
function _copy_framework() {
|
|
local working_dir=${1}
|
|
local item_to="${working_dir}/framework"
|
|
for item in `ls ${FRAMEWORK_PATH}`; do
|
|
case "${item}" in
|
|
skynet) _copy_skynet ${item_to};;
|
|
3rd) _copy_3rd ${item_to};;
|
|
*)
|
|
echo "copy ${item} ..."
|
|
\cp -rf "${FRAMEWORK_PATH}/${item}" "${item_to}/"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
function tar_server() {
|
|
echo tar_server $@
|
|
|
|
local dbg_flag="`echo -n "$1" | tr [:lower:] [:upper:]`"
|
|
local internal_flag="`echo -n "$2" | tr [:lower:] [:upper:]`"
|
|
local pure_opt="`echo -n "$3" | tr [:upper:] [:lower:]`"
|
|
local is_make="`echo -n "$4" | tr [:upper:] [:lower:]`"
|
|
|
|
local dbg_opt=FALSE
|
|
local isdebug_prompt=release
|
|
if [ "${dbg_flag}" = "DEBUG" -o "${dbg_flag}" = "DBG" -o "${dbg_flag}" = "D" ]; then
|
|
dbg_opt=TRUE
|
|
isdebug_prompt=debug
|
|
fi
|
|
|
|
# if not specific compile environment, compile all environments packages
|
|
if [ -z "${internal_flag}" ]; then # TODO: all environments server tarball files build will open at later
|
|
tar_server "${dbg_flag}" product
|
|
test $? -eq 0 || return 1
|
|
return
|
|
fi
|
|
|
|
local begin_tarball_time=`date +%s`
|
|
local product_opt="product"
|
|
if [ "${internal_flag}" = "INTERNAL" -o "${internal_flag}" = "INTERNAL_ENV" -o "${internal_flag}" = "INL" ]; then
|
|
product_opt=internal
|
|
elif [ "${internal_flag}" = "PRESSURE_TEST" -o "${internal_flag}" = "PRESSURE_TEST_ENV" -o "${internal_flag}" = "PT" ]; then
|
|
product_opt=pressure_test
|
|
fi
|
|
|
|
local proj_name="${PROJECT_NAME}"
|
|
if [ -z "${proj_name}" ]; then
|
|
proj_name='ukn_proj'
|
|
fi
|
|
|
|
local server_name="${SERVER_NAME}"
|
|
if [ -z "${server_name}" ]; then
|
|
server_name='ukn_svr'
|
|
fi
|
|
|
|
# is need make
|
|
if [ "${is_make}" != "nomake" ]; then
|
|
log_info "making ..."
|
|
|
|
make_server "${dbg_flag}" $2
|
|
if [ $? -ne 0 ]; then
|
|
log_err "build server failed"
|
|
return 1
|
|
fi
|
|
else
|
|
log_info "no make ..."
|
|
fi
|
|
|
|
local tarball_dir="${SVR_PATH}/tarballs"
|
|
local working_dir="${tarball_dir}/onemt.server"
|
|
local package_name="${tarball_dir}/onemt.${proj_name}.server.${server_name}.${product_opt}.${pure_opt}.tar.bz2"
|
|
|
|
mkdir -p "${tarball_dir}"
|
|
\rm -rf "${working_dir}"
|
|
mkdir -p "${working_dir}"
|
|
|
|
_copy_framework ${working_dir}
|
|
_copy_others ${working_dir}
|
|
_copy_luasrc ${working_dir} ${server_name}
|
|
|
|
_create_start_file ${server_name} ${proj_name} ${product_opt} ${working_dir}
|
|
_create_version_file ${working_dir} ${isdebug_prompt} ${product_opt} ${proj_name} ${server_name}
|
|
_clean_tmp_files ${working_dir}
|
|
_tarball_files ${working_dir} ${package_name}
|
|
_create_md5 ${package_name}
|
|
|
|
local tarball_used=$((`date +%s` - ${begin_tarball_time}))
|
|
log_info "done! used time: ${tarball_used} seconds"
|
|
}
|