diff --git a/diff.patch b/diff.patch index 1de3e92e3a5380b603a6a4f6d9f1c9652dcd1f37..028952fa915ba50b8447bd69a612affbf8749264 100644 --- a/diff.patch +++ b/diff.patch @@ -1,8 +1,90 @@ +diff --git a/.secignore b/.secignore +index 1085ab2..d951c07 100644 +--- a/.secignore ++++ b/.secignore +@@ -188,6 +188,8 @@ + http://helloworld.com/* + http://1.1.1.1:8080/* + https://mirrors.aliyun.com/* ++ https://mirrors.oceanbase.com/* ++ http://mirrors.oceanbase.com/* + https://bixense.com/clicolors/ + martin.gieseking@uos.de + jloup@gzip.org diff --git a/cmake/RPM.cmake b/cmake/RPM.cmake -index f0cec90..9affad8 100644 +index f0cec90..5771ba3 100644 --- a/cmake/RPM.cmake +++ b/cmake/RPM.cmake -@@ -230,171 +230,6 @@ install(FILES +@@ -64,27 +64,31 @@ set(CPACK_RPM_SPEC_MORE_DEFINE + if (OB_BUILD_OPENSOURCE) + set(CPACK_RPM_PACKAGE_REQUIRES "jq, systemd") + +- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/oceanbase-service.sh.template +- ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/oceanbase-service.sh ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/oceanbase-service.sh.template ++ ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/oceanbase-service.sh + @ONLY) +- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/telemetry.sh.template +- ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/telemetry.sh ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/telemetry.sh.template ++ ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/telemetry.sh + @ONLY) + +- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_install.sh.template +- ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_install.sh ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_install.sh.template ++ ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_install.sh + @ONLY) +- set(CPACK_RPM_SERVER_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_install.sh) ++ set(CPACK_RPM_SERVER_PRE_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_install.sh) ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_install.sh.template ++ ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_install.sh ++ @ONLY) ++ set(CPACK_RPM_SERVER_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_install.sh) + +- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/pre_uninstall.sh.template +- ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/pre_uninstall.sh ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_uninstall.sh.template ++ ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_uninstall.sh + @ONLY) +- set(CPACK_RPM_SERVER_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/pre_uninstall.sh) ++ set(CPACK_RPM_SERVER_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/pre_uninstall.sh) + +- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_uninstall.sh.template +- ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_uninstall.sh ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_uninstall.sh.template ++ ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_uninstall.sh + @ONLY) +- set(CPACK_RPM_SERVER_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_uninstall.sh) ++ set(CPACK_RPM_SERVER_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/systemd/profile/post_uninstall.sh) + endif() + + ## TIPS +@@ -134,14 +138,15 @@ install( + + if (OB_BUILD_OPENSOURCE) + install(FILES +- tools/rpm/systemd/profile/oceanbase.cnf +- tools/rpm/systemd/profile/oceanbase-pre.json +- tools/rpm/systemd/profile/oceanbase.service +- tools/rpm/systemd/profile/oceanbase-service.sh +- tools/rpm/systemd/profile/post_install.sh +- tools/rpm/systemd/profile/post_uninstall.sh +- tools/rpm/systemd/profile/pre_uninstall.sh +- tools/rpm/systemd/profile/telemetry.sh ++ tools/systemd/profile/oceanbase.cnf ++ tools/systemd/profile/oceanbase-pre.json ++ tools/systemd/profile/oceanbase.service ++ tools/systemd/profile/oceanbase-service.sh ++ tools/systemd/profile/pre_install.sh ++ tools/systemd/profile/post_install.sh ++ tools/systemd/profile/post_uninstall.sh ++ tools/systemd/profile/pre_uninstall.sh ++ tools/systemd/profile/telemetry.sh + DESTINATION profile + COMPONENT server) + endif() +@@ -230,171 +235,6 @@ install(FILES DESTINATION include COMPONENT sql-parser) @@ -174,7 +256,7 @@ index f0cec90..9affad8 100644 if (OB_BUILD_LIBOBTABLE) if (ENABLE_THIN_LTO) -@@ -406,14 +241,6 @@ if (OB_BUILD_LIBOBTABLE) +@@ -406,14 +246,6 @@ if (OB_BUILD_LIBOBTABLE) COMMAND_EXPAND_LISTS) list(APPEND BITCODE_TO_ELF_LIST libobtable_static_to_elf) endif() @@ -190,7 +272,7 @@ index f0cec90..9affad8 100644 if(OB_BUILD_OPENSOURCE) diff --git a/deps/init/dep_create.sh b/deps/init/dep_create.sh -index ad5f149..aaa0b41 100644 +index ad5f149..4ad0adb 100644 --- a/deps/init/dep_create.sh +++ b/deps/init/dep_create.sh @@ -80,6 +80,9 @@ function get_os_release() { @@ -198,17 +280,26 @@ index ad5f149..aaa0b41 100644 version_ge "33" && compat_centos7 && return ;; + openEuler) -+ version_ge "22" && compat_centos9 && return ++ version_ge "20" && compat_centos9 && return + ;; opensuse-leap) version_ge "15" && compat_centos7 && return ;; -@@ -110,6 +113,9 @@ function get_os_release() { +@@ -106,10 +109,18 @@ function get_os_release() { + version_ge "8.0" && compat_centos8 && return + version_ge "7.0" && compat_centos7 && return + ;; ++ anolis) ++ version_ge "23.0" && compat_centos9 && return ++ version_ge "8.0" && compat_centos8 && return ++ version_ge "7.0" && compat_centos7 && return ++ ;; + centos) version_ge "8.0" && OS_RELEASE=8 && return version_ge "7.0" && OS_RELEASE=7 && return ;; + openEuler) -+ version_ge "22" && compat_centos9 && return ++ version_ge "20" && compat_centos9 && return + ;; ubuntu) version_ge "22.04" && compat_centos9 && return @@ -362,3 +453,562 @@ index e9712b3..a359e80 100644 [test-utils] ob-deploy-1.6.0-41.el8.x86_64.rpm target=community +diff --git a/tools/rpm/systemd/README-CN.md b/tools/rpm/systemd/README-CN.md +deleted file mode 100644 +index 2af52a9..0000000 +--- a/tools/rpm/systemd/README-CN.md ++++ /dev/null +@@ -1,27 +0,0 @@ +-# 通过yum和systemd的方式安装OceanBase数据库 +-如果你想在linux rpm平台上部署oceanbase,可以使用yum进行单节点安装,并通过systemd进行简单管理 +- +-**注意** +- +-- 该方法仅能用做学习研究或测试使用; +-- 千万不要使用此方法用于带有重要数据的场景,比如生产环境。 +- +-## 安装方法 +-现在暂时只支持RPM平台系统,可以通过以下指令进行安装和启动: +-```bash +-yum install oceanbase-ce +-systemctl start oceanbase +-``` +-可以通过以下指令将oceanbase服务设置为开机自启动: +-```bash +-systemctl enable oceanbase +-``` +- +-## systemd介绍 +-Systemd提供了自动化管理oceanbase的启动和停止,可以通过systemctl指令对oceanbase进行管理控制,例如: +-```bash +-systemctl {start|stop|restart|status} oceanbase +-``` +- +-## 通过systemd配置oceanbase +-systemd提供了配置文件`/etc/oceanbase.cnf`,可以在启动前修改配置进行带参启动 +diff --git a/tools/rpm/systemd/README.md b/tools/rpm/systemd/README.md +deleted file mode 100644 +index 89bb399..0000000 +--- a/tools/rpm/systemd/README.md ++++ /dev/null +@@ -1,27 +0,0 @@ +-# Installing OceanBase Database via yum and systemd +-If you want to deploy OceanBase on a Linux RPM platform, you can use yum for single-node installation and simple management with systemd. +- +-**WARNING** +- +-- The installation method is just used for study or test; +-- You should not deploy it with important data as it is not used in production environment. +- +-## Installation Method +-Now systemd only support RPM platform and you can install and run oceanbase service using the following command: +-```bash +-yum install oceanbase-ce +-systemctl start oceanbase +-``` +-You can set the OceanBase service to start automatically on boot using the following command: +-```bash +-systemctl enable oceanbase +-``` +- +-## Overview of systemd +-Systemd provides automatic oceanbase startup and shutdown. It also enables manual server management using the systemctl command. For example: +-```bash +-systemctl {start|stop|restart|status} oceanbase +-``` +- +-## Oceanbase configuration by systemd +-Systemd provide `/etc/oceanbase.cnf` to config oceanbase before startup. +diff --git a/tools/rpm/systemd/profile/post_install.sh.template b/tools/rpm/systemd/profile/post_install.sh.template +deleted file mode 100644 +index 94df4dc..0000000 +--- a/tools/rpm/systemd/profile/post_install.sh.template ++++ /dev/null +@@ -1,14 +0,0 @@ +-#!/bin/bash +- +-echo "execute post install script" +-prefix=@CPACK_PACKAGING_INSTALL_PREFIX@ +- +-# prepare the systemd service unit +-cp -f $prefix/profile/oceanbase.service /etc/systemd/system/oceanbase.service +-chmod 644 /etc/systemd/system/oceanbase.service +-chmod +x $prefix/profile/oceanbase-service.sh +-cp -f $prefix/profile/oceanbase.cnf /etc/oceanbase.cnf +-systemctl daemon-reload +- +-# telemetry +-/bin/bash $prefix/profile/telemetry.sh $1 >/dev/null 2>&1 +\ No newline at end of file +diff --git a/tools/rpm/systemd/profile/post_uninstall.sh.template b/tools/rpm/systemd/profile/post_uninstall.sh.template +deleted file mode 100644 +index 0b3666c..0000000 +--- a/tools/rpm/systemd/profile/post_uninstall.sh.template ++++ /dev/null +@@ -1,6 +0,0 @@ +-#!/bin/bash +- +-echo "execute post uninstall script" +-prefix=@CPACK_PACKAGING_INSTALL_PREFIX@ +- +-rm -rf $prefix/.meta $prefix/log_obshell +\ No newline at end of file +diff --git a/tools/systemd/README-CN.md b/tools/systemd/README-CN.md +new file mode 100644 +index 0000000..3911528 +--- /dev/null ++++ b/tools/systemd/README-CN.md +@@ -0,0 +1,54 @@ ++# 通过软件源安装 OceanBase 数据库 ++如果你想在Linux rpm或deb平台上部署OceanBase,可以使用yum或apt进行单节点安装,并通过systemd进行简单管理 ++ ++**注意** ++ ++- 该方法仅能用做学习研究或测试使用; ++- 千万不要使用此方法用于带有重要数据的场景,比如生产环境。 ++ ++## 通过 YUM 仓库安装 OceanBase ++配置yum源,安装OceanBase,会自动安装所需依赖 ++```bash ++yum install -y yum-utils ++yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo ++yum install -y oceanbase-ce ++``` ++ ++## 通过 APT 仓库安装 OceanBase ++配置apt源,安装OceanBase,会自动安装所需依赖 ++```bash ++apt update ++apt install -y lsb-release wget gnupg2 mysql-client curl ++wget http://mirrors.oceanbase.com/oceanbase/oceanbase_deb.pub && apt-key add oceanbase_deb.pub ++echo "deb http://mirrors.oceanbase.com/oceanbase/community/stable/$(lsb_release -is | awk '{print tolower($0)}')/$(lsb_release -cs)/$(dpkg --print-architecture)/ ./" | tee -a /etc/apt/sources.list.d/oceanbase.list ++apt update ++apt install -y oceanbase-ce ++``` ++ ++## 依赖列表说明: ++| 组件 | 版本 | ++|-------|-------| ++| oceanbase-ce-libs | 与oceanbase-ce相同版本 | ++| jq | / | ++| oniguruma | / | ++| curl | / | ++ ++# 启动方法 ++可以通过以下指令进行启动: ++```bash ++systemctl start oceanbase ++``` ++ ++可以通过以下指令将oceanbase服务设置为开机自启动: ++```bash ++systemctl enable oceanbase ++``` ++ ++## systemd介绍 ++Systemd提供了自动化管理oceanbase的启动和停止,可以通过systemctl指令对oceanbase进行管理控制,例如: ++```bash ++systemctl {start|stop|restart|status} oceanbase ++``` ++ ++## 通过systemd配置OceanBase ++systemd提供了配置文件`/etc/oceanbase.cnf`,可以在启动前修改配置进行带参启动 +diff --git a/tools/systemd/README.md b/tools/systemd/README.md +new file mode 100644 +index 0000000..2d0832f +--- /dev/null ++++ b/tools/systemd/README.md +@@ -0,0 +1,53 @@ ++# Installing OceanBase Database via yum/apt ++If you want to deploy OceanBase on a Linux RPM platform, you can use yum/apt for single-node installation and simple management with systemd. ++ ++**WARNING** ++ ++- The installation method is just used for study or test; ++- You should not deploy it with important data as it is not used in production environment. ++ ++## Installing OceanBase via yum ++Config yum repo then install OceanBase, it will automatically install the required dependencies. ++```bash ++yum install -y yum-utils ++yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo ++yum install -y oceanbase-ce ++``` ++ ++## Installing OceanBase via apt ++Config apt repo then install OceanBase, it will automatically install the required dependencies. ++```bash ++apt update ++apt install -y lsb-release wget gnupg2 mysql-client curl ++wget http://mirrors.oceanbase.com/oceanbase/oceanbase_deb.pub && apt-key add oceanbase_deb.pub ++echo "deb http://mirrors.oceanbase.com/oceanbase/community/stable/$(lsb_release -is | awk '{print tolower($0)}')/$(lsb_release -cs)/$(dpkg --print-architecture)/ ./" | tee -a /etc/apt/sources.list.d/oceanbase.list ++apt update ++apt install -y oceanbase-ce ++``` ++ ++## Dependencies list: ++| dependency | version | ++|-------|-------| ++| oceanbase-ce-libs | same version with oceanbase-ce | ++| jq | / | ++| oniguruma | / | ++| curl | / | ++ ++# Startup Method ++You can install and run OceanBase service using the following command: ++```bash ++systemctl start oceanbase ++``` ++You can set the OceanBase service to start automatically on boot using the following command: ++```bash ++systemctl enable oceanbase ++``` ++ ++## Overview of systemd ++Systemd provides automatic OceanBase startup and shutdown. It also enables manual server management using the systemctl command. For example: ++```bash ++systemctl {start|stop|restart|status} oceanbase ++``` ++ ++## Oceanbase configuration by systemd ++Systemd provide `/etc/oceanbase.cnf` to config OceanBase before startup. +diff --git a/tools/rpm/systemd/profile/oceanbase-pre.json b/tools/systemd/profile/oceanbase-pre.json +similarity index 100% +rename from tools/rpm/systemd/profile/oceanbase-pre.json +rename to tools/systemd/profile/oceanbase-pre.json +diff --git a/tools/rpm/systemd/profile/oceanbase-service.sh.template b/tools/systemd/profile/oceanbase-service.sh.template +similarity index 85% +rename from tools/rpm/systemd/profile/oceanbase-service.sh.template +rename to tools/systemd/profile/oceanbase-service.sh.template +index c726e6d..04184ee 100644 +--- a/tools/rpm/systemd/profile/oceanbase-service.sh.template ++++ b/tools/systemd/profile/oceanbase-service.sh.template +@@ -2,12 +2,14 @@ + + DATE=`date '+%Y-%m-%d %H:%M:%S'` + cnf_file='/etc/oceanbase.cnf' +-ip=`hostname -i` ++ip=`hostname -I | awk '/^[0-9]/ {print $1; exit}'` + port=2886 + url="http://localhost" + prefix=@CPACK_PACKAGING_INSTALL_PREFIX@ + unix_socket="$prefix/run/obshell.sock" + obshell="$prefix/bin/obshell" ++etc_folder="$prefix/etc" ++current_user=`whoami` + report=3 + + function prepare_config_json { +@@ -43,6 +45,11 @@ function prepare_config_json { + sed -i "s|HOSTIP|${ip}|g" $json_file + } + ++function prepare_env { ++ echo "change etc owner to ${current_user}" ++ chown $current_user:$current_user "${etc_folder}" ++} ++ + function do_reload_observer { + echo "Not support reload now" + } +@@ -72,8 +79,8 @@ function check_obagent_process { + echo "obshell process with PID $pid is not running." + $obshell admin start --ip $ip --port $port + if [ $? -ne 0 ]; then +- echo "start ob_agent failed" +- exit ++ echo "start ob_shell failed" ++ exit 1 + fi + fi + else +@@ -103,10 +110,10 @@ function check_trace { + state=$(echo "$response" | jq -r '.data.state') + echo "the response state is $state" + if [ "x$state" = "xSUCCEED" ]; then +- echo "request successfully" ++ echo "$content request successfully" + break + elif [ "x$state" = "xFAILED" ]; then +- echo "request failed" ++ echo "$content request failed" + exit 1 + else + count=$((count + 1)) +@@ -123,8 +130,8 @@ function check_trace { + function start_obshell { + $obshell admin start --ip $ip --port $port > /dev/null 2>&1 + if [ $? -ne 0 ]; then +- echo "start ob_agent failed" +- exit ++ echo "start ob_shell failed" ++ exit 1 + fi + } + +@@ -169,19 +176,10 @@ function do_config_observer { + check_trace $trace "config observer" 3 3 + } + +-function deploy_observer { +- echo "oceanbase service deployed at ${DATE}" +- prepare_config_json +- start_obshell +- do_config_observer +-} +- +-function start_observer { +- systemd-notify --ready ++function do_start_observer { + # check observer status + response=$(curl --silent -H "Content-Type: application/json" -X GET --unix-socket $unix_socket $url/api/v1/status) + identity=$(echo "$response" | jq -r '.data.agent.identity') +- systemd-notify "STATUS=Service is running" + if [ "x$identity" = "xCLUSTER AGENT" ]; then + echo "The observer is already bootstrap, please start it immediately" + response=$(curl --silent -H "Content-Type: application/json" -X POST -d '{ +@@ -222,41 +220,40 @@ function start_observer { + echo "The observer has been installed before" + fi + +- systemd-notify --status="Service is ready" +- + if [ -f $prefix/run/observer.pid ]; then + pid=$(cat $prefix/run/observer.pid) +- while true; do +- if [ ! -d "/proc/$pid" ]; then +- echo "Observer process with PID $pid has exited." +- break +- fi ++ if [ ! -d "/proc/$pid" ]; then ++ echo "Observer process with PID $pid has exited." ++ break ++ fi + +- echo "Observer process with PID $pid is still running." +- # check observer state +- response=$(curl --silent -H "Content-Type: application/json" -X GET -d '{ +- "scope": +- { +- "type":"global", +- "target":[] +- }, +- "force": true +- }' --unix-socket $unix_socket $url/api/v1/status) +- ob_state=$(echo "$response" | jq -r '.data.obState') +- if [ "x$ob_state" = "x1" ]; then +- echo "The agent dose not know the observer password" +- echo "1. Please set environment: export OB_ROOT_PASSWORD={root_passowrd}" +- echo "2. Kill all the obshell process" +- echo "3. Restart the agent process: $prefix/bin/obshell admin start --ip $ip --port $port" +- fi +- sleep 30 +- done ++ # check observer state ++ response=$(curl --silent -H "Content-Type: application/json" -X GET --unix-socket $unix_socket $url/api/v1/status) ++ ob_state=$(echo "$response" | jq -r '.data.obState') ++ if [ "x$ob_state" = "x1" ]; then ++ echo "The agent dose not know the observer password" ++ echo "1. Please set environment: export OB_ROOT_PASSWORD={root_passowrd}" ++ echo "2. Kill all the obshell process" ++ echo "3. Restart the agent process: $prefix/bin/obshell admin start --ip $ip --port $port" ++ fi + else + echo "observer PID file not found." + exit 1 + fi + } + ++function start_observer { ++ /bin/bash $prefix/profile/telemetry.sh $report "10" >/dev/null 2>&1 ++ prepare_config_json ++ prepare_env ++ if check_daemon_process; then ++ echo "The agent service is exist" ++ else ++ start_obshell ++ fi ++ do_start_observer ++} ++ + function stop_observer { + check_obagent_process + response=$(curl --silent -H "Content-Type: application/json" -X POST -d '{ +@@ -274,7 +271,6 @@ function stop_observer { + fi + trace=$(echo "$response" | jq -r '.data.id') + check_trace $trace "stop observer" 20 6 +- systemd-notify --status='STOPPING=1' + } + + function reload_observer { +@@ -285,15 +281,7 @@ function reload_observer { + + if [ "x$1" = "xstart" ]; then + echo "oceanbase service started at ${DATE}" +- /bin/bash $prefix/profile/telemetry.sh $report "10" >/dev/null 2>&1 +- prepare_config_json +- if check_daemon_process; then +- echo "The agent service is exist" +- else +- start_obshell +- fi + start_observer +- + elif [ "x$1" = "xstop" ]; then + echo "oceanbase service stopped at ${DATE}" + stop_observer +@@ -306,7 +294,7 @@ elif [ "x$1" = "xdestroy" ]; then + $obshell admin stop > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "stop obshell failed" +- exit ++ exit 1 + fi + fi + +diff --git a/tools/rpm/systemd/profile/oceanbase.cnf b/tools/systemd/profile/oceanbase.cnf +similarity index 100% +rename from tools/rpm/systemd/profile/oceanbase.cnf +rename to tools/systemd/profile/oceanbase.cnf +diff --git a/tools/rpm/systemd/profile/oceanbase.service b/tools/systemd/profile/oceanbase.service +similarity index 52% +rename from tools/rpm/systemd/profile/oceanbase.service +rename to tools/systemd/profile/oceanbase.service +index bc3b05f..7e135fa 100644 +--- a/tools/rpm/systemd/profile/oceanbase.service ++++ b/tools/systemd/profile/oceanbase.service +@@ -3,11 +3,22 @@ Description=oceanbase + + [Service] + User=root +-Type=notify ++Type=forking + KillMode=none + ExecStart=/bin/bash /home/admin/oceanbase/profile/oceanbase-service.sh start + ExecStop=/bin/bash /home/admin/oceanbase/profile/oceanbase-service.sh stop + ExecReload=/bin/bash /home/admin/oceanbase/profile/oceanbase-service.sh reload ++PIDFile=/home/admin/oceanbase/run/observer.pid ++TimeoutSec=2000 ++TimeoutStopSec=300 ++Restart=on-failure ++RestartSec=10 ++SuccessExitStatus=SIGKILL ++SendSIGKILL=no ++LimitNOFILE=infinity ++LimitNPROC=infinity ++LimitCORE=infinity ++LimitSTACK=infinity + + [Install] + WantedBy=multi-user.target +\ No newline at end of file +diff --git a/tools/systemd/profile/post_install.sh.template b/tools/systemd/profile/post_install.sh.template +new file mode 100644 +index 0000000..21ad989 +--- /dev/null ++++ b/tools/systemd/profile/post_install.sh.template +@@ -0,0 +1,20 @@ ++#!/bin/bash ++echo "execute post install script" ++prefix=@CPACK_PACKAGING_INSTALL_PREFIX@ ++ ++# prepare the systemd service unit ++cp -f $prefix/profile/oceanbase.service /etc/systemd/system/oceanbase.service ++chmod 644 /etc/systemd/system/oceanbase.service ++chmod +x $prefix/profile/oceanbase-service.sh ++cp -f $prefix/profile/oceanbase.cnf /etc/oceanbase.cnf ++systemctl daemon-reload ++ ++# telemetry ++/bin/bash $prefix/profile/telemetry.sh $1 >/dev/null 2>&1 ++ ++GREEN='\033[32m' ++NC="\033[0m" ++echo -e "${GREEN}To configure OceanBase${NC} : edit /etc/oceanbase.cnf" ++echo -e "${GREEN}To start OceanBase${NC} : systemctl start oceanbase" ++echo -e "${GREEN}To enable OceanBase auto reboot ${NC} : systemctl enable oceanbase" ++echo -e "${GREEN}To get more infomation${NC} : https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000640297" +\ No newline at end of file +diff --git a/tools/systemd/profile/post_uninstall.sh.template b/tools/systemd/profile/post_uninstall.sh.template +new file mode 100644 +index 0000000..65e826f +--- /dev/null ++++ b/tools/systemd/profile/post_uninstall.sh.template +@@ -0,0 +1,24 @@ ++#!/bin/bash ++echo "execute post uninstall script" ++prefix=@CPACK_PACKAGING_INSTALL_PREFIX@ ++json_file=$prefix/profile/oceanbase.json ++GREEN='\033[32m' ++NC="\033[0m" ++ ++if [ $1 -eq 0 ]; then ++ rm -rf $prefix/.meta $prefix/log_obshell ++ ++ # prepare clean script ++ echo "find $prefix/ -mindepth 1 -maxdepth 1 ! -name lib -exec rm -rf {} +" > $prefix/oceanbase_clean.sh ++ ++ if [ -f "$json_file" ] && [ -s "$json_file" ]; then ++ redo_dir=$(cat "$json_file" | jq -r '.oceanbase_ce.server.observerConfig.redo_dir') ++ echo "rm -rf $redo_dir" >> $prefix/oceanbase_clean.sh ++ data_dir=$(cat "$json_file" | jq -r '.oceanbase_ce.server.observerConfig.data_dir') ++ echo "rm -rf $data_dir" >> $prefix/oceanbase_clean.sh ++ echo "echo OK" >> $prefix/oceanbase_clean.sh ++ fi ++ ++ echo "Clean oceanbase script can clean ob all configuration files and all data files." ++ echo -e "${GREEN}To clean OceanBase${NC} : bash $prefix/oceanbase_clean.sh" ++fi +\ No newline at end of file +diff --git a/tools/systemd/profile/pre_install.sh.template b/tools/systemd/profile/pre_install.sh.template +new file mode 100644 +index 0000000..b87b154 +--- /dev/null ++++ b/tools/systemd/profile/pre_install.sh.template +@@ -0,0 +1,11 @@ ++#!/bin/bash ++echo "execute pre install script" ++version=@OceanBase_CE_VERSION@ ++ ++if [ "$1" -gt 1 ]; then ++ parent_name=$(cat /proc/$PPID/comm) ++ if [[ "$parent_name" != "ocp_mgragent" ]]; then ++ echo "The upgrade of the oceanbase $version is not allowed." >&2 ++ exit 1 ++ fi ++fi +\ No newline at end of file +diff --git a/tools/rpm/systemd/profile/pre_uninstall.sh.template b/tools/systemd/profile/pre_uninstall.sh.template +similarity index 84% +rename from tools/rpm/systemd/profile/pre_uninstall.sh.template +rename to tools/systemd/profile/pre_uninstall.sh.template +index 23c699d..5c50bde 100644 +--- a/tools/rpm/systemd/profile/pre_uninstall.sh.template ++++ b/tools/systemd/profile/pre_uninstall.sh.template +@@ -1,5 +1,4 @@ + #!/bin/bash +- + echo "execute pre uninstall script" + prefix=@CPACK_PACKAGING_INSTALL_PREFIX@ + +diff --git a/tools/rpm/systemd/profile/telemetry.sh.template b/tools/systemd/profile/telemetry.sh.template +similarity index 100% +rename from tools/rpm/systemd/profile/telemetry.sh.template +rename to tools/systemd/profile/telemetry.sh.template +diff --git a/tools/systemd/profile/telemetry.sh.template.rej b/tools/systemd/profile/telemetry.sh.template.rej +new file mode 100644 +index 0000000..96945a4 +--- /dev/null ++++ b/tools/systemd/profile/telemetry.sh.template.rej +@@ -0,0 +1,10 @@ ++diff a/tools/systemd/profile/telemetry.sh.template b/tools/systemd/profile/telemetry.sh.template (rejected hunks) ++@@ -4,7 +4,7 @@ url="https://openwebapi.oceanbase.com/api/web/oceanbase/report" ++ type=@CPACK_PACKAGE_NAME@ ++ version=@CPACK_PACKAGE_VERSION@ ++ release=@CPACK_RPM_PACKAGE_RELEASE@ ++-ip=$(hostname -i) +++ip=$(hostname -I | awk '/^[0-9]/ {print $1; exit}') ++ hostHash=$(echo -n "$ip" | sha1sum | awk '{print $1}') ++ osName=$(cat /etc/os-release | grep "^ID=" | cut -f2 -d=) ++ osRelease=$(cat /etc/os-release | grep "^VERSION_ID=" | cut -f2 -d=) diff --git a/oceanbase-ce.spec b/oceanbase-ce.spec index cea2de90408e4826d23c6854ea8d7e31df89c1ee..913d7d1696b9b17281b06c0da8c7da5739f3e89c 100644 --- a/oceanbase-ce.spec +++ b/oceanbase-ce.spec @@ -2,10 +2,10 @@ Name: oceanbase-ce Version: 4.2.1.4 -Release: %{euler_release}%{?dist} +Release: %{euler_release} Summary: oceanbase-ce Group: Applications/Databases -License: Mulan PubL v2. +License: Mulan PubL v2 Url: https://open.oceanbase.com/ Vendor: OceanBase Inc. Prefix: /home/admin/oceanbase @@ -83,7 +83,7 @@ package or when debugging this package. chmod u+x build.sh bash build.sh clean bash build.sh release -DOB_BUILD_RPM=ON -DENABLE_FATAL_ERROR_HANG=OFF -DENABLE_AUTO_FDO=ON -DENABLE_THIN_LTO=ON \ - -DOB_STATIC_LINK_LGPL_DEPS=OFF -DCMAKE_INSTALL_PREFIX=%{_prefix} -DLTO_JOBS=%{lto_jobs} --init + -DOB_STATIC_LINK_LGPL_DEPS=OFF -DCMAKE_INSTALL_PREFIX=%{_prefix} -DLTO_JOBS=%{lto_jobs} --init cd build_release make observer ob_sql_proxy_parser_static obtable obtable_static ob_admin ob_error -j16; @@ -154,6 +154,18 @@ echo "/usr/lib/debug/usr/bin/ob_error.debug" >> %{buildroot}/utils_debuginfo_fil %files utils-debuginfo -f %{buildroot}/utils_debuginfo_filelist %defattr(-,root,root,0777) +%pre +echo "execute pre install script" +version=%{version} + +if [ "$1" -gt 1 ]; then + parent_name=$(cat /proc/$PPID/comm) + if [[ "$parent_name" != "ocp_mgragent" ]]; then + echo "The upgrade of the oceanbase $version is not allowed." >&2 + exit 1 + fi +fi + %post echo "execute post install script" cp -f %{_prefix}/profile/oceanbase.service /etc/systemd/system/oceanbase.service @@ -165,6 +177,13 @@ systemctl daemon-reload # telemetry /bin/bash %{_prefix}/profile/telemetry.sh $1 >/dev/null 2>&1 +GREEN='\033[32m' +NC="\033[0m" +echo -e "${GREEN}To configure OceanBase${NC} : edit /etc/oceanbase.cnf" +echo -e "${GREEN}To start OceanBase${NC} : systemctl start oceanbase" +echo -e "${GREEN}To enable OceanBase auto reboot ${NC} : systemctl enable oceanbase" +echo -e "${GREEN}To get more infomation${NC} : https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000640297" + %preun echo "execute pre uninstall script" systemctl stop %{daemon_name} @@ -178,9 +197,33 @@ systemctl daemon-reload %postun echo "execute post uninstall script" -rm -rf %{_prefix}/.meta %{_prefix}/log_obshell +json_file=%{_prefix}/profile/oceanbase.json +GREEN='\033[32m' +NC="\033[0m" + +if [ $1 -eq 0 ]; then + rm -rf %{_prefix}/.meta %{_prefix}/log_obshell + + # prepare clean script + echo "find %{_prefix}/ -mindepth 1 -maxdepth 1 ! -name lib -exec rm -rf {} +" > %{_prefix}/oceanbase_clean.sh + + if [ -f "$json_file" ] && [ -s "$json_file" ]; then + redo_dir=$(cat "$json_file" | jq -r '.oceanbase_ce.server.observerConfig.redoDir') + echo "rm -rf $redo_dir" >> %{_prefix}/oceanbase_clean.sh + data_dir=$(cat "$json_file" | jq -r '.oceanbase_ce.server.observerConfig.dataDir') + echo "rm -rf $data_dir" >> %{_prefix}/oceanbase_clean.sh + echo "echo OK" >>%{_prefix}/oceanbase_clean.sh + fi + + echo "Clean oceanbase script can clean ob all configuration files and all data files." + echo -e "${GREEN}To clean OceanBase${NC} : bash %{_prefix}/oceanbase_clean.sh" +fi %changelog +* Thu Apr 25 2024 wangzelin - 4.2.1.4-104000052024022918 +- new features: optimize systemd +- fix bugs: update license + * Mon Mar 18 2024 wangzelin - 4.2.1.4-104000052024022918 - new features: support for packaging with spec files - new features: support for packaging on euler