调整目录结构,增加RPM打包功能

* 调整目录结构,原conf目录分拆为conf和resource目录。其中,conf目录在软件更新时不会更新,resource则更新;
* 增加RPM打包功能,利用CI发布软件的RPM,对应调整GitLAB-CI脚本。
This commit is contained in:
Lu Qiuwen
2018-11-16 20:27:36 +08:00
parent 3da25a31ff
commit 88e9eecf09
22 changed files with 154 additions and 33 deletions

View File

@@ -1,8 +1,54 @@
variables:
GIT_STRATEGY: "clone"
stages:
- build
- package
build:
stage: build
before_script:
- mkdir -p /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_NAMESPACE/
- ln -s $CI_PROJECT_DIR /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_PATH
- cd /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_PATH
.build_by_travis:
script:
- chmod +x ./ci/travis.sh
- ./ci/travis.sh
- chmod +x ./ci/travis.sh
- ./ci/travis.sh
build_debug:
stage: build
variables:
BUILD_TYPE: Debug
extends: .build_by_travis
build_release:
stage: build
variables:
BUILD_TYPE: RelWithDebInfo
extends: .build_by_travis
package_debug:
stage: package
variables:
BUILD_TYPE: Debug
PACKAGE: 1
extends: .build_by_travis
artifacts:
name: "tfe-install-$CI_COMMIT_REF_NAME-debug"
paths:
- build/*.rpm
only:
- tags
package_release:
stage: package
variables:
BUILD_TYPE: RelWithDebInfo
PACKAGE: 1
extends: .build_by_travis
artifacts:
name: "tfe-install-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
only:
- tags

View File

@@ -3,18 +3,62 @@ project(tfe)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(Version)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 11)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(Package)
add_definitions(-D_GNU_SOURCE)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 11)
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -Wall -fsanitize=address -fno-omit-frame-pointer")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -Wall -fsanitize=address -fno-omit-frame-pointer")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()
# It is not a legal location.
# Consider to the convention, we install the binary tree in /home
if(NOT CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX /home/mesasoft/tfe)
endif()
# Global compile options
option(ENABLE_PIC "Generate position independent code (necessary for shared libraries)" TRUE)
option(ENABLE_WARNING_ALL "Enable all optional warnings which are desirable for normal code" TRUE)
option(ENABLE_SANITIZE_ADDRESS "Enable AddressSanitizer" FALSE)
option(ENABLE_SANITIZE_THREAD "Enable ThreadSanitizer" FALSE)
# Plugins
option(ENABLE_PLUGIN_HTTP "Enable HTTP support" TRUE)
option(ENABLE_PLUGIN_DECRYPT_MIRRORING "Enable decrypt mirroring" FALSE)
option(ENABLE_PLUGIN_PANGU_HTTP "Enable Pangu-HTTP business" TRUE)
if(ENABLE_PIC)
set(CMAKE_POSITION_INDEPENDENT_CODE 1)
endif()
if(ENABLE_WARNING_ALL)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()
if(ENABLE_SANITIZE_ADDRESS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
elseif(ENABLE_SANITIZE_THREAD)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
endif()
if(ENABLE_SANITIZE_ADDRESS AND ENABLE_SANITIZE_THREAD)
message(WARNING "Both ENABLE_SANITIZE_ADDRESS and ENABLE_SANITIZE_THREAD set, only ENABLE_SANITIZE_ADDRESS effected.")
endif()
add_custom_target("install-program" COMMAND ${CMAKE_COMMAND} ARGS -DCOMPONENT=Program -P cmake_install.cmake)
add_custom_target("install-profile" COMMAND ${CMAKE_COMMAND} ARGS -DCOMPONENT=Profile -P cmake_install.cmake)
enable_testing()
add_subdirectory(conf)
add_subdirectory(resource)
add_subdirectory(vendor)
add_subdirectory(common)
add_subdirectory(plugin)

View File

@@ -32,10 +32,13 @@ env | sort
mkdir build || true
cd build
export BUILD_TYPE=Debug
cmake -DCMAKE_CXX_FLAGS=$CXX_FLAGS \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
..
make
CTEST_OUTPUT_ON_FAILURE=1 make test
if [ -n "${PACKAGE}" ]; then
make package
fi

View File

@@ -9,7 +9,7 @@ message(STATUS "Package: ${CPACK_PACKAGE_NAME}")
set(CPACK_PACKAGE_VENDOR "MESASOFT")
set(CPACK_PACKAGE_VERSION_MAJOR "${TFE_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${TFE_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${TFE_VERSION_PATCH}.${TFE_VERSION_BUILD}")
set(CPACK_PACKAGE_VERSION_PATCH "${TFE_VERSION_PATCH}.${TFE_DESCRIBE}")
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
# RPM Build
@@ -19,9 +19,9 @@ set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_AUTOREQPROV "no")
set(CPACK_RPM_PACKAGE_RELEASE_DIST on)
set(CPACK_RPM_DEBUGINFO_PACKAGE on)
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/PostInstall.in)
set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/PostUninstall.in)
set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/PreUninstall.in)
#set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/PostInstall.in)
#set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/PostUninstall.in)
#set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/cmake/PreUninstall.in)
# Must uninstall the debug package before install release package
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
@@ -31,11 +31,7 @@ else()
endif()
# setup %config(noreplace)
set(CPACK_RPM_USER_FILELIST "/usr/lib/systemd/system/mrenv.service"
"/usr/lib/systemd/system/mrzcpd.service"
"/usr/lib/systemd/system/mrtunnat.service"
"/usr/lib/systemd/system/mrmonit.service"
"%config(noreplace) ${CMAKE_INSTALL_PREFIX}/etc/mrglobal.conf"
"%config(noreplace) ${CMAKE_INSTALL_PREFIX}/etc/mrtunnat.conf"
"%config(noreplace) /etc/sysconfig/mrzcpd")
set(CPACK_RPM_USER_FILELIST "%config(noreplace) ${CMAKE_INSTALL_PREFIX}/conf/pangu/pangu_pxy.conf"
"%config(noreplace) ${CMAKE_INSTALL_PREFIX}/conf/tfe/decrypt_mirror.conf"
"%config(noreplace) ${CMAKE_INSTALL_PREFIX}/conf/tfe/tfe.conf")
include(CPack)

View File

@@ -37,6 +37,6 @@ set(TFE_GIT_VERSION "${TFE_VERSION_MAJOR}.${TFE_VERSION_MINOR}.${TFE_VERSION_PAT
set(TFE_VAR_VERSION "${TFE_VERSION_MAJOR}_${TFE_VERSION_MINOR}_${TFE_VERSION_PATCH}_${TFE_DESCRIBE}")
# print information
message(STATUS "TFE Version: ${TFE_GIT_VERSION}")
message(STATUS "Welcome to Tango Frontend Engine, Version: ${TFE_GIT_VERSION}")
add_definitions(-DTFE_GIT_VERSION=\"${TFE_GIT_VERSION}\")
add_definitions(-DTFE_VAR_VERSION=${TFE_VAR_VERSION})

2
conf/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
install(DIRECTORY tfe DESTINATION conf COMPONENT Profile)
install(DIRECTORY pangu DESTINATION conf COMPONENT Profile)

View File

@@ -1,4 +1,6 @@
add_executable(tfe src/key_keeper.cpp src/kni_acceptor.cpp src/ssl_stream.cpp src/ssl_sess_cache.cpp src/ssl_trusted_cert_storage.cpp src/ssl_utils.cc src/tcp_stream.cpp src/main.cpp src/proxy.cpp)
add_executable(tfe src/key_keeper.cpp src/kni_acceptor.cpp src/ssl_stream.cpp
src/ssl_sess_cache.cpp src/ssl_trusted_cert_storage.cpp
src/ssl_utils.cc src/tcp_stream.cpp src/main.cpp src/proxy.cpp)
target_include_directories(tfe PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include/external)
target_include_directories(tfe PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include/internal)
@@ -18,11 +20,19 @@ target_link_libraries(tfe pthread dl
MESA_htable wiredcfg
MESA_field_stat)
target_link_libraries(tfe -Wl,--whole-archive http -Wl,--no-whole-archive)
target_link_libraries(tfe -Wl,--whole-archive pangu-http -Wl,--no-whole-archive)
#target_link_libraries(tfe -Wl,--whole-archive decrypt-mirroring -Wl,--no-whole-archive)
if(ENABLE_PLUGIN_HTTP)
target_link_libraries(tfe -Wl,--whole-archive http -Wl,--no-whole-archive)
endif()
install(TARGETS tfe RUNTIME DESTINATION ./)
if(ENABLE_PLUGIN_DECRYPT_MIRRORING)
target_link_libraries(tfe -Wl,--whole-archive decrypt-mirroring -Wl,--no-whole-archive)
endif()
if(ENABLE_PLUGIN_PANGU_HTTP)
target_link_libraries(tfe -Wl,--whole-archive pangu-http -Wl,--no-whole-archive)
endif()
install(TARGETS tfe RUNTIME DESTINATION bin COMPONENT Program)
### test_key_keeper
add_executable(test_key_keeper test/test_key_keeper.cpp src/key_keeper.cpp src/ssl_sess_cache.cpp src/ssl_utils.cc )

View File

@@ -54,11 +54,9 @@ struct http_session_private
int release_lock;
/* thread id */
unsigned int thread_id;
/* SUSPEND COUNTER, ONLY FOR DEBUG AND LOG */
#ifndef NDEBUG
/* SUSPEND COUNTER, only for debug and log */
int suspend_counter;
#endif
/* IN GC QUEUE, means the connection of session has destroyed */
bool in_gc_queue;
};

3
resource/CMakeLists.txt Normal file
View File

@@ -0,0 +1,3 @@
install(DIRECTORY tfe DESTINATION resource COMPONENT Program)
install(DIRECTORY misc DESTINATION resource COMPONENT Program)
install(DIRECTORY pangu DESTINATION resource COMPONENT Program)

2
script/r2_tfe Normal file
View File

@@ -0,0 +1,2 @@
killall r3_tfe tfe
./r3_tfe &> /dev/null &

17
script/r3_tfe Normal file
View File

@@ -0,0 +1,17 @@
#!/bin/sh
while [ 1 ]; do
count=`ls -l core.* |wc -l`
echo $count
if [ $count -lt 5 ]
then
echo "set unlimited"
ulimit -c unlimited
else
ulimit -c 0
fi
./tfe > log/screen.log 2>&1
echo program crashed, restart at `date +"%w %Y/%m/%d, %H:%M:%S"` >> RESTART.log
sleep 10
done