now we can make final installer package of teleport server for windows with zip format.

pull/32/merge
apexliu 2017-03-12 13:02:38 +08:00
parent f88a21a2b0
commit 4b594ed274
9 changed files with 154 additions and 158 deletions

46
.gitignore vendored
View File

@ -28,6 +28,7 @@ __pycache__
**/.idea/watcherTasks.xml **/.idea/watcherTasks.xml
**/.idea/codeStyleSettings.xml **/.idea/codeStyleSettings.xml
**/.idea/inspectionProfiles **/.idea/inspectionProfiles
**/.idea/vcs.xml
# for tmp folder or files. # for tmp folder or files.
/out /out
@ -37,33 +38,38 @@ __pycache__
/external/mongoose /external/mongoose
/external/openssl /external/openssl
/external/python /external/python
/external/libssh-win-static/include/libssh
/external/libssh-win-static/src
/external/libssh-win-static/lib
/external/mbedtls
/external/sqlite
/client/tools/putty
/client/tools/winscp
# for dist folder # for dist folder
/dist/*.zip
/dist/*.tar.gz
/dist/installer/linux/server/_tmp_
**/_tmp_ **/_tmp_
# /dist/*.zip
# /dist/*.tar.gz
/dist/windows/server/script/data
/dist/windows/client/assist/apps
/dist/windows/client/assist/cfg
/server/share/data/ts_db.db /server/share/etc/core.ini
/server/share/data/replay /server/share/etc/web.ini
# /server/share/data/ts_db.db
/server/share/data
/server/share/log
# /server/share/data/replay
/server/www/teleport/.idea/vcs.xml /server/www/teleport/.idea/vcs.xml
/server/www/teleport/static/js/var.js # /server/www/teleport/static/js/var.js
/server/www/packages/packages-windows/x64 /server/www/packages/packages-windows/x64
# for generated files.
/config.ini
/build.bat
# for not finished code # for not finished code
/common/libex/test /common/libex/test
/external/mbedtls
/external/sqlite
/server/share/etc/core.ini
/server/share/etc/web.ini
/client/tp_rdp /client/tp_rdp
/external/libssh-win-static/lib
/server/share/log
/config.ini
/build.bat
/dist/windows/client/assist/apps
/dist/windows/client/assist/cfg
/client/tools/putty
/client/tools/winscp
/external/libssh-win-static/include/libssh
/external/libssh-win-static/src

View File

@ -1,4 +1,3 @@
#!/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import shutil import shutil
@ -6,13 +5,12 @@ import shutil
from core import colorconsole as cc from core import colorconsole as cc
from core import makepyo from core import makepyo
from core import utils from core import utils
from core.env import env
from core.context import * from core.context import *
from core.ver import * from core.ver import *
ctx = BuildContext() ctx = BuildContext()
ROOT_PATH = utils.cfg.ROOT_PATH
# COMMON_MODULES = ['paste', 'pyasn1', 'pymemcache', 'pymysql', 'rsa', 'tornado', 'six.py'] # COMMON_MODULES = ['paste', 'pyasn1', 'pymemcache', 'pymysql', 'rsa', 'tornado', 'six.py']
@ -26,9 +24,9 @@ class BuilderBase:
def _build_web(self, base_path, dist, target_path): def _build_web(self, base_path, dist, target_path):
cc.n('make Teleport Web package...') cc.n('make Teleport Web package...')
# src_path = os.path.join(ROOT_PATH, 'server', 'www', 'teleport') # src_path = os.path.join(env.root_path, 'server', 'www', 'teleport')
# pkg_path = os.path.join(ROOT_PATH, 'server', 'www', 'packages') # pkg_path = os.path.join(env.root_path, 'server', 'www', 'packages')
src_path = os.path.join(ROOT_PATH, 'server', 'www') src_path = os.path.join(env.root_path, 'server', 'www')
pkg_path = os.path.join(src_path, 'packages') pkg_path = os.path.join(src_path, 'packages')
tmp_path = os.path.join(base_path, '_tmp_web_') tmp_path = os.path.join(base_path, '_tmp_web_')
@ -50,14 +48,18 @@ class BuilderBase:
# shutil.copy(s, t) # shutil.copy(s, t)
cc.n(' - copy packages...') cc.n(' - copy packages...')
pkgs = ['packages-common', 'packages-{}'.format(dist)] utils.copy_ex(pkg_path, os.path.join(tmp_path, 'packages'), 'packages-common')
for d in pkgs: utils.copy_ex(os.path.join(pkg_path, 'packages-{}'.format(dist)), os.path.join(tmp_path, 'packages', 'packages-{}'.format(dist)), ctx.bits_path)
s = os.path.join(pkg_path, d)
t = os.path.join(tmp_path, 'packages', d)
if os.path.isdir(s): # pkgs = ['packages-common', 'packages-{}'.format(dist)]
shutil.copytree(s, t) # for d in pkgs:
else: # s = os.path.join(pkg_path, d)
shutil.copy(s, t) # t = os.path.join(tmp_path, 'packages', d)
# if os.path.isdir(s):
# shutil.copytree(s, t)
# else:
# shutil.copy(s, t)
makepyo.remove_cache(tmp_path) makepyo.remove_cache(tmp_path)
@ -73,7 +75,7 @@ class BuilderBase:
# if not os.path.exists(os.path.join(tmp_path, 'static', 'download')): # if not os.path.exists(os.path.join(tmp_path, 'static', 'download')):
# utils.makedirs(os.path.join(tmp_path, 'static', 'download')) # utils.makedirs(os.path.join(tmp_path, 'static', 'download'))
# utils.copy_file(os.path.join(ROOT_PATH, 'dist'), os.path.join(tmp_path, 'static', 'download'), 'teleport-assist-win.zip') # utils.copy_file(os.path.join(env.root_path, 'dist'), os.path.join(tmp_path, 'static', 'download'), 'teleport-assist-win.zip')
shutil.copytree(tmp_path, os.path.join(target_path, 'www')) shutil.copytree(tmp_path, os.path.join(target_path, 'www'))
utils.remove(tmp_path) utils.remove(tmp_path)
@ -82,15 +84,15 @@ class BuilderBase:
class BuilderWin(BuilderBase): class BuilderWin(BuilderBase):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
# now = time.localtime(time.time())
# _ver = '1.0.{:2d}.{:d}{:02d}'.format(now.tm_year - 2000, now.tm_mon, now.tm_mday)
# self.name = 'teleport-server-windows-{}-{}'.format(ctx.bits_path, _ver)
self.name = 'teleport-server-windows-{}-{}'.format(ctx.bits_path, VER_TELEPORT_SERVER) self.name = 'teleport-server-windows-{}-{}'.format(ctx.bits_path, VER_TELEPORT_SERVER)
self._final_file = os.path.join(env.root_path, 'out', 'installer', '{}.zip'.format(self.name))
self.base_path = os.path.join(ROOT_PATH, 'dist', 'installer', ctx.dist, 'server') self.dist_path = os.path.join(env.root_path, 'dist', ctx.dist, 'server')
self.base_path = os.path.join(env.root_path, 'out', 'installer')
self.base_tmp = os.path.join(self.base_path, '_tmp_') self.base_tmp = os.path.join(self.base_path, '_tmp_')
self.tmp_path = os.path.join(self.base_tmp, self.name, 'data', 'teleport')
self.path_tmp = os.path.join(self.base_tmp, self.name)
self.path_tmp_data = os.path.join(self.path_tmp, 'data')
def build_installer(self): def build_installer(self):
cc.n('make teleport installer package...') cc.n('make teleport installer package...')
@ -98,78 +100,45 @@ class BuilderWin(BuilderBase):
if os.path.exists(self.base_tmp): if os.path.exists(self.base_tmp):
utils.remove(self.base_tmp) utils.remove(self.base_tmp)
# self._build_web_backend(self.base_path, 'windows', self.tmp_path) self._build_web(self.base_path, 'windows', self.path_tmp_data)
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'web-backend.conf') utils.copy_file(os.path.join(env.root_path, 'server', 'share', 'etc'), os.path.join(self.path_tmp_data, 'tmp', 'etc'), ('web.ini.in', 'web.ini'))
# utils.copy_file(os.path.join(env.root_path, 'server', 'share', 'etc'), os.path.join(self.path_tmp_data, 'tmp', 'etc'), ('core.ini.in', 'core.ini'))
# self._build_web_frontend(self.base_path, 'windows', self.tmp_path) utils.copy_file(os.path.join(env.root_path, 'server', 'share', 'etc'), os.path.join(self.path_tmp_data, 'tmp', 'etc'), 'tp_ssh_server.key')
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'web-frontend.conf')
self._build_web(self.base_path, 'windows', self.tmp_path) out_path = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path)
utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'web.conf') bin_path = os.path.join(self.path_tmp_data, 'bin')
utils.copy_ex(out_path, bin_path, 'tp_web.exe')
utils.copy_ex(out_path, bin_path, 'tp_core.exe')
utils.copy_ex(out_path, bin_path, 'tpssh.dll')
# utils.copy_ex(out_path, bin_path, 'pysrt')
# out_path = os.path.join(ROOT_PATH, 'out', 'eom_ts', ctx.target_path, ctx.dist_path) utils.copy_ex(os.path.join(env.root_path, 'out', 'pysrt'), bin_path, (ctx.dist_path, 'pysrt'))
# bin_path = os.path.join(self.tmp_path, 'bin')
# utils.copy_file(out_path, bin_path, 'eom_ts')
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'etc'), 'eom_ts.ini')
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'etc'), 'ts_ssh_server.key')
out_path = os.path.join(ROOT_PATH, 'out', 'eom_ts', ctx.bits_path, ctx.target_path) # 复制安装所需的脚本
bin_path = os.path.join(self.tmp_path, 'bin') utils.copy_ex(os.path.join(self.dist_path, 'script'), self.path_tmp, 'setup.bat')
utils.copy_ex(out_path, bin_path, 'eom_ts.exe') utils.copy_ex(os.path.join(self.dist_path, 'script'), self.path_tmp, 'script')
utils.copy_ex(out_path, bin_path, 'pysrt')
utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'eom_ts.ini') if os.path.exists(self._final_file):
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'license.key') utils.remove(self._final_file)
utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'ts_ssh_server.key')
# utils.copy_ex(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'ssl')
# utils.copy_ex(os.path.join(ROOT_PATH, 'share', 'data'), os.path.join(self.tmp_path, 'tmp', 'data'), ('ts_db_release.db', 'ts_db.db')) utils.make_zip(self.path_tmp, self._final_file)
utils.copy_ex(os.path.join(ROOT_PATH, 'share', 'data'), os.path.join(self.tmp_path, 'tmp', 'data'), 'main.sql')
# utils.copy_ex(os.path.join(ROOT_PATH, 'share', 'data'), os.path.join(self.tmp_path, 'data'), ('ts_db_release.db', 'ts_db.db')) utils.remove(self.base_tmp)
# utils.make_zip(os.path.join(self.tmp_path, '..'), os.path.join(self.tmp_path, '..', '..', 'teleport.zip'))
# utils.copy_file(os.path.join(self.tmp_path, '..', '..'), os.path.join(self.tmp_path, '..'), 'teleport.zip')
# utils.remove(os.path.join(self.tmp_path, '..', '..', 'teleport.zip'))
# utils.remove(self.tmp_path)
# make final installer.
cc.n('pack final server installer...')
out_file = os.path.join(ROOT_PATH, 'dist', '{}.zip'.format(self.name))
if os.path.exists(out_file):
utils.remove(out_file)
# # copy installer scripts.
# for i in ['daemon', 'install.sh', 'start.sh', 'stop.sh', 'status.sh']:
# shutil.copy(os.path.join(self.base_path, 'script', i), os.path.join(self.base_tmp, self.name, i))
for i in ['install.bat', 'uninst.bat']:
shutil.copy(os.path.join(self.base_path, 'script', i), os.path.abspath(os.path.join(self.tmp_path, '..', '..', i)))
# for i in ['7z.exe']:
# shutil.copy(os.path.join(self.base_path, 'script', i), os.path.abspath(os.path.join(self.tmp_path, '..', '..', 'data', i)))
utils.make_zip(os.path.join(self.base_tmp, self.name, '..'), out_file)
class BuilderLinux(BuilderBase): class BuilderLinux(BuilderBase):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
# now = time.localtime(time.time())
# _ver = '1.0.{:2d}.{:d}{:02d}'.format(now.tm_year - 2000, now.tm_mon, now.tm_mday)
# self.name = 'teleport-server-linux-{}-{}'.format(ctx.bits_path, _ver)
self.name = 'teleport-server-linux-{}-{}'.format(ctx.bits_path, VER_TELEPORT_SERVER) self.name = 'teleport-server-linux-{}-{}'.format(ctx.bits_path, VER_TELEPORT_SERVER)
self.dist_path = os.path.join(ROOT_PATH, 'dist', ctx.dist, 'server') self.dist_path = os.path.join(env.root_path, 'dist', ctx.dist, 'server')
self.base_path = os.path.join(ROOT_PATH, 'out', 'installer', 'server') self.base_path = os.path.join(env.root_path, 'out', 'installer', 'server')
self.base_tmp = os.path.join(self.base_path, '_tmp_') self.base_tmp = os.path.join(self.base_path, '_tmp_')
self.tmp_path = os.path.join(self.base_tmp, self.name, 'data', 'teleport') self.tmp_path = os.path.join(self.base_tmp, self.name, 'data', 'teleport')
# self.server_path = os.path.join(ROOT_PATH, 'dist', 'installer', ctx.dist, 'server') # self.server_path = os.path.join(env.root_path, 'dist', 'installer', ctx.dist, 'server')
# self.script_path = self.tmp_path = os.path.join(self.server_path, 'script') # self.script_path = self.tmp_path = os.path.join(self.server_path, 'script')
# self.src_path = os.path.join(ROOT_PATH, 'source') # self.src_path = os.path.join(env.root_path, 'source')
# self.out_tmp_path = os.path.join(self.tmp_path, self.name, 'server') # self.out_tmp_path = os.path.join(self.tmp_path, self.name, 'server')
def build_installer(self): def build_installer(self):
@ -178,36 +147,31 @@ class BuilderLinux(BuilderBase):
if os.path.exists(self.base_tmp): if os.path.exists(self.base_tmp):
utils.remove(self.base_tmp) utils.remove(self.base_tmp)
# self._build_web_backend(self.base_path, 'linux', self.tmp_path)
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'web-backend.conf')
#
# self._build_web_frontend(self.base_path, 'linux', self.tmp_path)
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'web-frontend.conf')
self._build_web(self.base_path, 'linux', self.tmp_path) self._build_web(self.base_path, 'linux', self.tmp_path)
utils.copy_file(os.path.join(ROOT_PATH, 'server', 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), ('web.ini.in', 'web.ini'))
utils.copy_file(os.path.join(ROOT_PATH, 'server', 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), ('core.ini.in', 'core.ini'))
# out_path = os.path.join(ROOT_PATH, 'out', 'eom_ts', ctx.target_path, ctx.dist_path) utils.copy_file(os.path.join(env.root_path, 'server', 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), ('web.ini.in', 'web.ini'))
# out_path = os.path.join(ROOT_PATH, 'out', 'eom_ts', ctx.bits_path, 'bin') utils.copy_file(os.path.join(env.root_path, 'server', 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), ('core.ini.in', 'core.ini'))
utils.copy_file(os.path.join(env.root_path, 'server', 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'tp_ssh_server.key')
# out_path = os.path.join(env.root_path, 'out', 'eom_ts', ctx.target_path, ctx.dist_path)
# out_path = os.path.join(env.root_path, 'out', 'eom_ts', ctx.bits_path, 'bin')
# bin_path = os.path.join(self.tmp_path, 'bin') # bin_path = os.path.join(self.tmp_path, 'bin')
# utils.copy_file(out_path, bin_path, 'eom_ts') # utils.copy_file(out_path, bin_path, 'eom_ts')
out_path = os.path.join(ROOT_PATH, 'out', 'server', ctx.bits_path, 'bin') out_path = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, 'bin')
bin_path = os.path.join(self.tmp_path, 'bin') bin_path = os.path.join(self.tmp_path, 'bin')
utils.copy_ex(out_path, bin_path, 'tp_web') utils.copy_ex(out_path, bin_path, 'tp_web')
utils.copy_ex(out_path, bin_path, 'tp_core') utils.copy_ex(out_path, bin_path, 'tp_core')
utils.copy_ex(out_path, bin_path, 'libtpssh.so') utils.copy_ex(out_path, bin_path, 'libtpssh.so')
utils.copy_ex(os.path.join(ROOT_PATH, 'out', 'pysrt'), bin_path, (ctx.dist_path, 'pysrt')) utils.copy_ex(os.path.join(env.root_path, 'out', 'pysrt'), bin_path, (ctx.dist_path, 'pysrt'))
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'eom_ts.ini') # utils.copy_file(os.path.join(env.root_path, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'eom_ts.ini')
# utils.copy_file(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'license.key') # utils.copy_file(os.path.join(env.root_path, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'license.key')
utils.copy_file(os.path.join(ROOT_PATH, 'server', 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'tp_ssh_server.key') # utils.copy_ex(os.path.join(env.root_path, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'ssl')
# utils.copy_ex(os.path.join(ROOT_PATH, 'share', 'etc'), os.path.join(self.tmp_path, 'tmp', 'etc'), 'ssl')
# utils.copy_ex(os.path.join(ROOT_PATH, 'share', 'data'), os.path.join(self.tmp_path, 'tmp', 'data'), ('ts_db_release.db', 'ts_db.db')) # utils.copy_ex(os.path.join(env.root_path, 'share', 'data'), os.path.join(self.tmp_path, 'tmp', 'data'), ('ts_db_release.db', 'ts_db.db'))
utils.copy_ex(os.path.join(ROOT_PATH, 'server', 'share', 'data'), os.path.join(self.tmp_path, 'tmp', 'data'), 'main.sql') utils.copy_ex(os.path.join(env.root_path, 'server', 'share', 'data'), os.path.join(self.tmp_path, 'tmp', 'data'), 'main.sql')
# utils.make_zip(self.tmp_path, os.path.join(self.tmp_path, '..', 'eom_ts.zip')) # utils.make_zip(self.tmp_path, os.path.join(self.tmp_path, '..', 'eom_ts.zip'))
utils.make_targz(os.path.join(self.tmp_path, '..'), 'teleport', 'teleport.tar.gz') utils.make_targz(os.path.join(self.tmp_path, '..'), 'teleport', 'teleport.tar.gz')
@ -215,8 +179,8 @@ class BuilderLinux(BuilderBase):
# make final installer. # make final installer.
cc.n('pack final server installer...') cc.n('pack final server installer...')
# out_file = os.path.join(ROOT_PATH, 'dist', '{}.zip'.format(self.name)) # out_file = os.path.join(env.root_path, 'dist', '{}.zip'.format(self.name))
out_file = os.path.join(ROOT_PATH, 'out', 'installer', '{}.tar.gz'.format(self.name)) out_file = os.path.join(env.root_path, 'out', 'installer', '{}.tar.gz'.format(self.name))
if os.path.exists(out_file): if os.path.exists(out_file):
utils.remove(out_file) utils.remove(out_file)
@ -248,6 +212,9 @@ def gen_builder(dist):
def main(): def main():
if not env.init():
return
builder = None builder = None
argv = sys.argv[1:] argv = sys.argv[1:]

View File

@ -6,8 +6,8 @@
from core import colorconsole as cc from core import colorconsole as cc
# from core import makepyo # from core import makepyo
from core import utils from core import utils
from core.context import *
from core.env import env from core.env import env
from core.context import *
ctx = BuildContext() ctx = BuildContext()

View File

@ -422,10 +422,29 @@ def strip(filename):
def make_zip(src_path, to_file): def make_zip(src_path, to_file):
cc.v('compress folder into .zip...') cc.v('compress folder into .zip...')
n, _ = os.path.splitext(to_file) # n, _ = os.path.splitext(to_file)
# x = os.path.split(to_file)[1].split('.') # # x = os.path.split(to_file)[1].split('.')
p = os.path.dirname(to_file) # p = os.path.dirname(to_file)
shutil.make_archive(os.path.join(p, n), 'zip', src_path) # shutil.make_archive(os.path.join(p, n), 'zip', src_path)
# ensure_file_exists(to_file)
if env.is_win:
src_path = os.path.abspath(src_path)
print('src_path', src_path)
_parent = os.path.abspath(os.path.join(src_path, '..'))
print('_parent', _parent)
_folder = src_path[len(_parent) + 1:]
old_p = os.getcwd()
os.chdir(_parent)
cmd = '""{}" a "{}" "{}""'.format(env.zip7, to_file, _folder)
print(cmd)
os.system(cmd)
os.chdir(old_p)
elif env.is_linux:
pass
else:
raise RuntimeError('not support this platform.')
ensure_file_exists(to_file) ensure_file_exists(to_file)
@ -435,6 +454,8 @@ def unzip(file_name, to_path):
os.system(cmd) os.system(cmd)
elif env.is_linux: elif env.is_linux:
os.system('unzip "{}" -d "{}"'.format(file_name, to_path)) os.system('unzip "{}" -d "{}"'.format(file_name, to_path))
else:
raise RuntimeError('not support this platform.')
def make_targz(work_path, folder, to_file): def make_targz(work_path, folder, to_file):

View File

@ -1,4 +0,0 @@
# -*- coding: utf8 -*-
TS_VER = "2.0.0.1"
TP_ASSIST_LAST_VER = "2.0.0.1"
TP_ASSIST_REQUIRE = "1.5.46.5"

View File

@ -6,7 +6,6 @@ import time
from core.env import env from core.env import env
import core.colorconsole as cc import core.colorconsole as cc
import core.utils as utils import core.utils as utils
from core.eom_ver import *
WIN_CORE_SERVICE_NAME = 'EOM Teleport Core Service' WIN_CORE_SERVICE_NAME = 'EOM Teleport Core Service'
WIN_WEB_SERVICE_NAME = 'EOM Teleport Web Service' WIN_WEB_SERVICE_NAME = 'EOM Teleport Web Service'
@ -21,11 +20,22 @@ class InstallerBase:
self._log_path = '' self._log_path = ''
self._installed_ver_str = 'UNKNOWN' self._installed_ver_str = 'UNKNOWN'
# self._installed_ver = [0, 0, 0, 0] self._current_ver = 'UNKNOWN'
# self._current_ver = self._ver_str_to_ver(TS_VER)
self._def_install_path = '' self._def_install_path = ''
ver_file = os.path.join(env.root_path, 'data', 'www', 'teleport', 'app', 'eom_ver.py')
try:
with open(ver_file) as f:
x = f.readlines()
for i in x:
s = i.split('=', 1)
if 'TS_VER' == s[0].strip():
self._current_ver = s[1].strip()[1:-1]
break
except FileNotFoundError:
raise RuntimeError('Cannot detect installer version.')
def init(self): def init(self):
_width = 79 _width = 79
cc.v('') cc.v('')
@ -33,7 +43,7 @@ class InstallerBase:
_str = 'Teleport Server Installation' _str = 'Teleport Server Installation'
cc.o((cc.CR_VERBOSE, ' | '), (cc.CR_INFO, _str), (cc.CR_VERBOSE, '{}|'.format(' ' * (_width - 5 - len(_str))))) cc.o((cc.CR_VERBOSE, ' | '), (cc.CR_INFO, _str), (cc.CR_VERBOSE, '{}|'.format(' ' * (_width - 5 - len(_str)))))
cc.v(' |{}|'.format('=' * (_width - 4))) cc.v(' |{}|'.format('=' * (_width - 4)))
cc.o((cc.CR_VERBOSE, ' | ver: '), (cc.CR_NORMAL, TS_VER), (cc.CR_VERBOSE, '{}|'.format(' ' * (_width - 13 - len(TS_VER))))) cc.o((cc.CR_VERBOSE, ' | ver: '), (cc.CR_NORMAL, self._current_ver), (cc.CR_VERBOSE, '{}|'.format(' ' * (_width - 13 - len(self._current_ver)))))
_str = 'author: apexliu@eomsoft.net' _str = 'author: apexliu@eomsoft.net'
cc.v(' | {}{}|'.format(_str, ' ' * (_width - 5 - len(_str)))) cc.v(' | {}{}|'.format(_str, ' ' * (_width - 5 - len(_str))))
cc.v('[]{}[]'.format('=' * (_width - 4))) cc.v('[]{}[]'.format('=' * (_width - 4)))
@ -56,9 +66,9 @@ class InstallerBase:
self.install() self.install()
else: else:
cc.v('') cc.v('')
cc.v('Found teleport server already installed, now what are you want to do?') cc.v('Found teleport server have installed at `{}` already.'.format(self._install_path))
while True: while True:
x = self._prompt_choice('Please choice', [('Upgrade', 2, True), ('Uninstall', 0, False), ('Quit', 0, False)]) x = self._prompt_choice('What are you wanna to do?', [('upgrade', 2, True), ('uninstall', 0, False), ('quit', 0, False)])
x = x.lower() x = x.lower()
if 'q' == x: if 'q' == x:
return return
@ -138,11 +148,11 @@ class InstallerBase:
pass pass
def _upgrade(self): def _upgrade(self):
x = self._ver_compare(TS_VER, self._installed_ver_str) x = self._ver_compare(self._current_ver, self._installed_ver_str)
if x == 0: if x == 0:
while True: while True:
cc.v('') cc.v('')
x = self._prompt_choice('The same version `{}` installed, are you sure to overwrite?'.format(TS_VER), [('Yes', 0, False), ('No', 0, True)]) x = self._prompt_choice('The same version `{}` installed, are you sure to overwrite?'.format(self._current_ver), [('Yes', 0, False), ('No', 0, True)])
x = x.lower() x = x.lower()
if 'y' == x: if 'y' == x:
break break
@ -151,7 +161,7 @@ class InstallerBase:
elif x < 0: elif x < 0:
while True: while True:
cc.v('') cc.v('')
x = self._prompt_choice('A new version `{}` installed, rollback to old version `{}` may cause Teleport Server not functionally.\nAre you sure to rollback to old version?'.format(self._installed_ver_str, TS_VER), [('Yes', 0, False), ('No', 0, True)]) x = self._prompt_choice('A new version `{}` installed, rollback to old version `{}` may cause Teleport Server not functionally.\nAre you sure to rollback to old version?'.format(self._installed_ver_str, self._current_ver), [('Yes', 0, False), ('No', 0, True)])
x = x.lower() x = x.lower()
if 'y' == x: if 'y' == x:
break break
@ -160,7 +170,7 @@ class InstallerBase:
else: else:
while True: while True:
cc.v('') cc.v('')
x = self._prompt_choice('Now upgrade from version `{}` to `{}`, \nAre you sure to upgrade to new version?'.format(self._installed_ver_str, TS_VER), [('Yes', 0, False), ('No', 0, True)]) x = self._prompt_choice('Now upgrade from version `{}` to `{}`, \nAre you sure to upgrade to new version?'.format(self._installed_ver_str, self._current_ver), [('Yes', 0, False), ('No', 0, True)])
x = x.lower() x = x.lower()
if 'y' == x: if 'y' == x:
break break
@ -237,20 +247,6 @@ class InstallerBase:
return x return x
# @staticmethod
# def _ver_str_to_ver(ver_str):
# x = ver_str.split('.')
# if len(x) > 4:
# x = x[:4]
# elif len(x) < 4:
# for i in range(4 - len(x)):
# x.append('0')
#
# for i in range(4):
# x[i] = int(x[i])
#
# return x
@staticmethod @staticmethod
def _ver_compare(left, right): def _ver_compare(left, right):
l = left.split('.') l = left.split('.')
@ -374,7 +370,7 @@ class InstallerWin(InstallerBase):
utils.copy_ex(os.path.join(env.src_path, 'www'), os.path.join(self._install_path, 'www')) utils.copy_ex(os.path.join(env.src_path, 'www'), os.path.join(self._install_path, 'www'))
if not os.path.exists(self._config_path): if not os.path.exists(self._config_path):
utils.copy_ex(os.path.join(env.src_path, 'etc'), self._config_path) utils.copy_ex(os.path.join(env.src_path, 'tmp', 'etc'), self._config_path)
def _delete_files(self, del_settings): def _delete_files(self, del_settings):
utils.remove(os.path.join(self._install_path, 'bin')) utils.remove(os.path.join(self._install_path, 'bin'))

View File

@ -248,7 +248,18 @@ int _app_main(int argc, wchar_t** argv)
if (!_process_cmd_line(argc, argv)) if (!_process_cmd_line(argc, argv))
return 1; return 1;
if (!g_env.init()) if (g_run_type == RUN_PY_SCRIPT)
{
if (!g_env.init(false))
{
EXLOGE("[tpweb] env init failed.\n");
return 1;
}
return _main_loop();
}
if (!g_env.init(true))
{ {
EXLOGE("[tpweb] env init failed.\n"); EXLOGE("[tpweb] env init failed.\n");
return 1; return 1;
@ -258,12 +269,8 @@ int _app_main(int argc, wchar_t** argv)
EXLOG_LEVEL(EX_LOG_LEVEL_DEBUG); EXLOG_LEVEL(EX_LOG_LEVEL_DEBUG);
#endif #endif
if (g_run_type == RUN_PY_SCRIPT)
{
return _main_loop();
}
#ifdef EX_OS_WIN32 #ifdef EX_OS_WIN32
else if (g_run_type == RUN_INSTALL_SRV) if (g_run_type == RUN_INSTALL_SRV)
{ {
return service_install(); return service_install();
} }

View File

@ -8,7 +8,7 @@ TsEnv::TsEnv()
TsEnv::~TsEnv() TsEnv::~TsEnv()
{} {}
bool TsEnv::init(void) bool TsEnv::init(bool for_web)
{ {
EXLOG_LEVEL(EX_LOG_LEVEL_INFO); EXLOG_LEVEL(EX_LOG_LEVEL_INFO);
@ -17,6 +17,9 @@ bool TsEnv::init(void)
m_exec_path = m_exec_file; m_exec_path = m_exec_file;
ex_dirname(m_exec_path); ex_dirname(m_exec_path);
if (!for_web)
return true;
// 定位 log, etc, www 路径 // 定位 log, etc, www 路径
// 默认情况下,以上三个目录均位于本可执行程序的 ../ 相对位置, // 默认情况下,以上三个目录均位于本可执行程序的 ../ 相对位置,
// 如果不存在则可能是开发调试模式则尝试从源代码仓库根目录下的share目录中查找。 // 如果不存在则可能是开发调试模式则尝试从源代码仓库根目录下的share目录中查找。

View File

@ -9,7 +9,7 @@ public:
TsEnv(); TsEnv();
~TsEnv(); ~TsEnv();
bool init(void); bool init(bool for_web);
public: public:
ex_wstr m_exec_file; ex_wstr m_exec_file;