KaiwuDBKaiwuDB

KWDB 创作者计划 | KWDB 部署之 deploy.sh uninstall 命令分析

2025-05-20

原文链接:【KWDB创作者计划】_KWDB部署之deploy.sh uninstall命令分析 - OSCHINA - 中文开源技术交流社区

作者:万少


本博客是在完成了 KWDB 部署的基础上,对 KWDB 部署脚本的进一步分析,关于安装 Ubuntu22.04 和 KWDB 的文档可以参考官方资料。

参考文档

KWDB2.2 的下载页面如下: https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0

下载地址: https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz

安装的参考过程如下: https://gitee.com/kwdb/kwdb

安装的参考过程如下: https://blog.itpub.net/69947868/viewspace-3081066

文后有提供 KWDB 安装的极简版说明。

安装脚本分析

deploy.sh 中,根据输入参数的不同,可以执行如下操作:

KWDB 创作者计划 | KWDB 部署之 deploy.sh uninstall 命令分析(图1)

KWDB 创作者计划 | KWDB 部署之 deploy.sh uninstall 命令分析(图2)

前文基于 install 完成了单节点安装,本文基于 uninstall 参数完成卸载步骤。

deploy.sh uninstall 分析

在前面博客中,

链接:【KWDB 创作者计划】_KWDB 部署之 deploy.sh install --single 命令分析

对 KWDB 的部署命令进行了分析,如果项更换 KWDB 版本,就需要使用更新或是卸载再安装的方式,本文提供基于 deploy.sh 的卸载 KWDB 再安装的方案分析。

关于 KWDB 的 deploy.sh 脚本,我们在上一篇博客中,已经从

1. 脚本初始化

2. 命令行参数解析

3. 获取本地节点密码

4. 初始化日志

5. 安装前检查和准备

6. 硬件检测

7. 配置文件检测

8.SSH 免密检测

9. 安装过程

10. 安装完成提示

等 10 个方面进行分析,前 4 个步骤是执行安装 KWDB 或卸载 KWDB 的通用步骤,前四个步骤的内容可参考上篇博客,本文接下来分析 KWDB 的卸载过程。

下面针对按照过程中的 deploy.sh uninstall 进行分析,该脚本一共 870 行,下面对安装过程进行分析

操作目的

执行 deploy.sh uninstall --single 命令的主要目的是卸载 KaiwuDB 数据库,并且根据用户的选择决定是否删除所有用户数据。

执行流程

1. 脚本初始化

脚本启动后,首先会进行一些基础的全局变量初始化:

# basic golbal variablesg_deploy_path=$(cd $(dirname $0);pwd)
g_cur_usr=$(whoami)

func_info=""# define export varsdeclare -a global_varssource $g_deploy_path/utils/KWDB_common.shsource $g_deploy_path/utils/utils.shsource $g_deploy_path/utils/KWDB_log.shfunction global_usage() {
...
}

这部分代码解释如下:

g_deploy_path 对应当前目录

g_cur_usr 对应当前用户名

declare -a global_vars 声明一个名为 global_vars 的数组变量

source 命令会在当前 Shell 进程中读取并执行指定文件的内容。将指定路径下的三个脚本文件内容引入到当前的 deploy.sh 脚本中执行。关于这个是三个脚本的功能不进行拓展。

global_usage 函数用于输出一些提示信息

2. 命令行参数解析

调用 cmd_check 函数对输入的命令行参数 install --single 进行解析:

# 350-351行# cmd line parameter parsingcmd_check $@

在 cmd_check 函数中,会使用 getopt 工具解析参数,识别出 install 命令,并调用 install_usage 函数处理 --single 选项:

# 182-238行function cmd_check() {    # ... 其他代码 ...
    case "$g_kw_cmd" in
        install)
            install_usage $options
        ;;        # ... 其他代码 ...
    esac}# 33-65行function install_usage() {    eval set -- "$@"
    push_back "g_install_mode"
    if [ $# -eq 3 ];then
        case "$1" in
            --single)
                g_install_mode="single"
                return
                ;;            # ... 其他代码 ...
        esac
    fi}

这一步将安装模式设置为 single

3. 获取本地节点密码

# 353-354行# fetch local node passwdlocal_privileged

调用 local_privileged 函数获取本地节点的密码。

local_privileged 函数位于 KWDB_common.sh 的第 271-288 行

function local_privileged() {  if privileged;then
    local_cmd_prefix="sudo"
  else
    local_cmd_prefix="echo '$(read_passwd $g_cur_usr)' | sudo -S -p \"\""
    echo
    eval $local_cmd_prefix -k -s >/dev/null 2>&1    if [ $? -ne 0 ];then
      echo -e "\033[31m[ERROR]\033[0m Incorrect password." >&2      exit 1    fi
  fi
  eval $local_cmd_prefix bash -c "exit" >/dev/null 2>&1  if [ $? -ne 0 ];then
    echo -e "\033[31m[ERROR]\033[0m Can not use command: 'sudo bash'." >&2    exit 1  fi}

4. 初始化日志

# init loglog_init $g_deploy_path $g_cur_usrpush_back "LOG_FILE"push_back "LOG_LEVEL"

调用 log_init 函数初始化日志系统。

log_init 函数位于 KWDB_log.sh 的 13-28 行

5. 检查 KaiwuDB 状态

如果输入的参数为 uninstall,则进入卸载环节,位于 500-521 行。

if [ "$g_kw_cmd" = "uninstall" ];then
    source $g_deploy_path/utils/kaiwudb_uninstall.sh    if ! $(install_check  >/dev/null 2>&1);then
        log_err "KaiwuDB does not exist. Please install KaiwuDB first."
        exit 1    fi
    if $(kw_status >/dev/null 2>&1);then
        log_err "Please stop KaiwuDB first."
        exit 1    fi

引入 kaiwudb_uninstall.sh 脚本,该脚本包含卸载相关的函数。具体函数信息如下:

| 函数名称 | 开始行数 | 结束行数 | 函数作用 | 核心命令 | | --------------- | -------- | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | uninstall | 4 | 34 | 卸载 KaiwuDB 软件包,根据安装类型(裸机安装或容器安装)采取不同的卸载方式 | 裸机安装时:dpkg -r 或 rpm -e 卸载软件包,sudo rm -rf 删除安装目录;容器安装时:docker rm 删除容器,docker rmi 删除镜像 | | umount_loop | 36 | 49 | 卸载指定前缀的挂载设备,在卸载过程中若出现错误会输出错误信息并返回非零状态码 | losetup -a 列出所有环回设备,awk 和 tr 处理输出,umount 卸载设备 | | uninstall_dir | 51 | 73 | 卸载 KaiwuDB 相关目录,根据用户选择决定是否删除数据目录,在卸载过程中会先尝试卸载挂载设备 | rm -rf 删除配置文件和服务文件(/etc/kaiwudb/etc/systemd/system/kaiwudb.service),调用 umount_loop 卸载设备,rm -rf 删除数据目录 | | delete_user | 75 | 86 | 在裸机安装模式下,删除 KaiwuDB 相关用户和组,并从 /etc/sudoers 文件中移除该用户的免密权限 | userdel -r 删除用户,sed -i 从 /etc/sudoers 文件中删除用户相关行 |

调用 install_check 函数检查 KaiwuDB 是否已经安装,如果未安装则输出错误信息并退出脚本。该函数的实现位于 kaiwudb_common.sh 中的 40-48 行,如下,主要通过!-e /etc/systemd/system/kaiwudb.service 确定 kaiwudb 是否安装

# whether installing KaiwuDBfunction install_check() {  if [ ! -e /etc/systemd/system/kaiwudb.service ];then    echo "KaiwuDB is not install."
    return 1
  fi  echo "KaiwuDB is already installed."
  return 0}

调用 kw_status 函数检查 KaiwuDB 是否正在运行,该函数位于 kaiwudb_common.sh 中 185-203 行,如果正在运行则输出错误信息并退出脚本。

6. 询问用户是否删除数据

510-511 行主要用于询问用户是否删除数据,代码如下

clear_opt="n"
read -t60 -p "When uninstalling KaiwuDB, you can either delete or keep all user data. Please confirm your choice: Do you want to delete the data? (y/N)" -e clear_opt

使用 read 命令提示用户在 60 秒内输入是否删除用户数据的选择,默认值为 n(不删除)。

clear_opt 变量会在 kaiwudb_uninstall.sh 的 65 行被使用,65 行位于 uninstall_dir 函数中,代码如下

function uninstall_dir() {  local ret=""
  if [ "$REMOTE" = "ON" ];then
    prefix=$node_cmd_prefix
  else
    prefix=$local_cmd_prefix
  fi
  local data_root=$(kw_data_dir)  eval $prefix rm -rf /etc/kaiwudb /etc/systemd/system/kaiwudb.service  if [ -n "$data_root" ];then
    # 看这里
    if [ "$clear_opt" = "yes" ] || [ "$clear_opt" = "y" ]; then
      ret=$(umount_loop $data_root)      if [ $? -ne 0 ];then
        echo $ret
        return 1      fi
      ret=$(eval $prefix rm -rf $data_root 2>&1)      if [ $? -ne 0 ];then
        echo $ret
        return 1      fi
    fi
  fi}

7. 执行卸载操作

512-518 行调用了 kaiwudb_uninstall.sh 中对应的函数,命令如下:

uninstall
delete_user
func_info=$(uninstall_dir)if [ $? -ne 0 ];then
    log_err "dir uninstall error:$func_info"
    exit 1
fi
  • 调用 uninstall 函数执行主要的卸载操作。
  • 调用 delete_user 函数删除相关用户。
  • 调用 uninstall_dir 函数删除相关目录,如果删除失败则输出错误信息并退出脚本。

8. 输出卸载完成提示

519-520 行是输出卸载完成提示,

echo -e "\e[1;32m[UNINSTALL COMPLETED]:\e[0mKaiwuDB has been uninstalled successfully."exit 0

输出绿色的卸载完成提示信息,并退出脚本。

519 行的代码如下:

  echo -e "\e[1;32m[UNINSTALL COMPLETED]:\e[0mKaiwuDB has been uninstalled successfully."

下面详细解释这行命令的各个部分:

echo 命令

echo` 是 Shell 脚本中常用的命令,用于将指定的文本输出到标准输出(通常是终端)。

-e 选项

-e 是 echo 命令的一个选项,它的作用是启用对反斜杠转义字符的解释。在没有这个选项的情况下,echo 会将反斜杠和后面的字符作为普通字符输出;加上 -e 选项后,就可以识别并处理像 \n(换行符)、\t(制表符)等转义字符。

转义序列 \e[1;32m 和 \e[0m

这两个是 ANSI 转义序列,用于在终端中设置文本的样式和颜色:

  • \e[1;32m\e 代表转义字符(也可以用 \033 表示),1 表示设置文本为粗体,32 表示设置文本颜色为绿色。所以 \e[1;32m 的作用是将后续输出的文本设置为绿色粗体。
  • \e[0m:这个转义序列的作用是将文本样式和颜色恢复为默认值。在输出绿色粗体文本后,使用 \e[0m 可以确保后续输出的文本不会继续保持绿色粗体样式。

输出文本

[UNINSTALL COMPLETED]:KaiwuDB has been uninstalled successfully. 是实际要输出的提示信息,表明 KaiwuDB 已经成功卸载。

这个输出过程还是蛮上心的:100:

到此通过如上 8 个步骤,deploy.sh uninstall 命令会依次完成参数解析、环境检查、询问用户是否删除数据、执行卸载操作等步骤,最终完成 KaiwuDB 的卸载。

部署 KWDB 极简版

安装完操作系统,就可以安装 KWDB 了,按照 gitee 的 README 文档 https://gitee.com/kwdb/kwdb,

准备基础环境

sudo apt update sudo apt install cmake -y sudo snap install go --classic sudo apt install libprotobuf-dev

下载

wget https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz

解压 KWDB

tar zxvf KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz

进入 kwdb 安装目录

cd kwdb_install/

编辑配置文件

sudo vi deploy.cfg

在~/.bashrc 与 /etc/profile 目录下新增一行

export GO111MODULE=off

生效~/.bashrc 与 /etc/profile 配置

source ~/.bashrc source /etc/profile

安装 KWDB

./deploy.sh install --single

启动 kwdb

systemctl daemon-reload

systemctl start kaiwudb.service systemctl status kaiwudb.service

执行 add_user.sh 脚本创建数据库用户

./add_user.sh

通过 kwbase 命令行链接 kwbase

sudo /usr/local/kaiwudb/bin/kwbase sql --host=xxx.xxx.xxx.xxx:26257 --certs-dir=/etc/kaiwudb/certs

以上提供了 KWDB 的安装基本过程,更详细参考对应文档。


体验全新的分布式多模数据库解决方案

企业版 社区版

KaiwuDB 是浪潮控股的数据库企业,面向工业物联网、数字能源、车联网、智慧产业等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务。

关注官方微信

友情链接:浪潮  

© 上海沄熹科技有限公司 Shanghai Yunxi Technology Co., Ltd.    沪ICP备2023002175号-1    网站服务协议   |   隐私政策
400-624-5688-7
服务与支持
marketing@kaiwudb.org.cn