SHELL赋能:JumpServer自动化部署的灵动乐章
脚本概述
脚本自动化了在Linux服务器上安装Jumpserver的过程,确保所需工具的安装,从GitHub下载安装包并进行解压,配置安装程序并启动Jumpserver应用程序。
#!/usr/bin/env bash
#
# Jumpserver 安装脚本优化版
#
# 版本号
VERSION=v3.6.2
# 下载地址
DOWNLOAD_URL=https://github.com
# 默认安装目录,可通过环境变量 INSTALL_DIR 自定义
INSTALL_DIR=${INSTALL_DIR:-/opt}
# 下载重试次数
DOWNLOAD_RETRIES=3
# 日志打印函数
log() {
echo -e "[`date '+%Y-%m-%d %H:%M:%S'`] $1"
}
# 安装必要软件包的函数
function install_soft() {
package="$1"
log "尝试安装依赖:$package"
if command -v dnf > /dev/null; then
dnf -q -y install "$package"
elif command -v yum > /dev/null; then
yum -q -y install "$package"
elif command -v apt > /dev/null; then
apt-get -qqy install "$package"
elif command -v zypper > /dev/null; then
zypper -q -n install "$package"
elif command -v apk > /dev/null; then
apk add -q "$package"
# 安装gettext-dev和python3(如果未安装gettext)
command -v gettext >/dev/null || apk add -q gettext-dev python3
else
echo -e "[\033[31m ERROR \033[0m] 未找到适用的包管理器,请先手动安装 $package"
exit 1
fi
}
# 准备安装:检查并安装所需工具
function prepare_install() {
local deps=(curl wget tar iptables)
for dep in "${deps[@]}"; do
if ! command -v $dep &>/dev/null; then
install_soft $dep
else
log "$dep 已安装"
fi
done
}
# 下载并解压安装包
function get_installer() {
log "准备将安装脚本下载到 ${INSTALL_DIR}/jumpserver-installer-${VERSION}"
cd "${INSTALL_DIR}" || { log "无法进入 ${INSTALL_DIR} 目录,退出。"; exit 1; }
if [ ! -d "${INSTALL_DIR}/jumpserver-installer-${VERSION}" ]; then
local tarball="jumpserver-installer-${VERSION}.tar.gz"
local download_url="${DOWNLOAD_URL}/jumpserver/installer/releases/download/${VERSION}/${tarball}"
# 下载重试逻辑
local attempt=1
while [ $attempt -le $DOWNLOAD_RETRIES ]; do
log "下载尝试 $attempt/$DOWNLOAD_RETRIES:$download_url"
if wget --tries=1 --timeout=60 -qO "$tarball" "$download_url"; then
log "下载成功"
break
else
log "下载失败,正在重试..."
((attempt++))
fi
done
if [ $attempt -gt $DOWNLOAD_RETRIES ]; then
rm -f "$tarball"
echo -e "[\033[31m ERROR \033[0m] 下载 jumpserver-installer-${VERSION} 失败,退出。"
exit 1
fi
# 解压文件
if tar -xf "$tarball" -C "${INSTALL_DIR}"; then
log "解压成功"
else
rm -rf "${INSTALL_DIR}/jumpserver-installer-${VERSION}"
echo -e "[\033[31m ERROR \033[0m] 解压 jumpserver-installer-${VERSION} 失败,退出。"
exit 1
fi
# 删除压缩包以节省空间
rm -f "$tarball"
else
log "安装目录已存在,跳过下载和解压步骤"
fi
}
# 配置安装程序并启动 Jumpserver
function config_installer() {
local installer_path="${INSTALL_DIR}/jumpserver-installer-${VERSION}"
cd "$installer_path" || { log "无法进入安装目录 $installer_path,退出。"; exit 1; }
# 修改配置文件中的 VERSION 变量
if sed -i "s/VERSION=.*/VERSION=${VERSION}/g" static.env; then
log "配置文件 static.env 更新成功"
else
echo -e "[\033[31m ERROR \033[0m] 更新 static.env 失败,退出。"
exit 1
fi
# 安装 Jumpserver
if ./jmsctl.sh install; then
log "Jumpserver 安装成功"
else
echo -e "[\033[31m ERROR \033[0m] Jumpserver 安装失败,退出。"
exit 1
fi
# 启动 Jumpserver
if ./jmsctl.sh start; then
log "Jumpserver 启动成功"
else
echo -e "[\033[31m ERROR \033[0m] Jumpserver 启动失败,请检查日志。"
exit 1
fi
}
# 主函数,组织安装流程
function main(){
# 检查操作系统是否为 macOS(Darwin)
if [ "$(uname)" == "Darwin" ]; then
echo -e "[\033[31m ERROR \033[0m] macOS 系统不支持该安装脚本,退出。"
exit 1
fi
log "开始准备安装环境..."
prepare_install
log "开始下载并解压安装包..."
get_installer
log "开始配置并启动 Jumpserver..."
config_installer
log "安装和启动过程完成!"
}
# 执行主函数
main
详细分解
1. 初始化变量
VERSION
: 指定要安装的Jumpserver版本。DOWNLOAD_URL
: 用于从GitHub下载Jumpserver安装包的URL。
2. install_soft
函数
该函数检查系统中是否存在某些包管理器(如
dnf
、yum
、apt
、zypper
、apk
)。根据系统中可用的包管理器,安装必要的工具,如
curl
、wget
、tar
和iptables
。如果找不到任何支持的包管理器,则打印错误信息并退出脚本。
3. prepare_install
函数
确保所需的工具(如
curl
、wget
、tar
和iptables
)已经安装。使用
command -v
检查这些工具是否已安装,若未安装,则调用install_soft()
安装它们。
4. get_installer
函数
该函数从GitHub下载Jumpserver安装包到
/opt/
目录。检查安装目录是否已存在,如果不存在,它将:
下载压缩包 (
jumpserver-installer-${VERSION}.tar.gz
)。解压文件到
/opt/
目录。解压后删除压缩包以节省空间。
如果任何步骤(下载或解压)失败,脚本会清理掉部分下载或解压的文件,并退出脚本,显示错误信息。
5. config_installer
函数
该函数修改
static.env
配置文件中的VERSION
变量,以确保版本号正确。然后运行安装脚本 (
./jmsctl.sh install
),并启动Jumpserver服务 (./jmsctl.sh start
)。
6. main
函数
这是脚本的入口点。
它首先检查操作系统是否为macOS(
Darwin
)。如果是,脚本会退出并显示错误信息,因为macOS不受支持。然后,它依次执行以下步骤:
调用
prepare_install()
确保所需工具已安装。调用
get_installer()
下载并解压安装包。调用
config_installer()
配置并启动安装程序。
7. 执行脚本
调用
main
函数,执行整个安装过程。
Reasoned for 4 seconds
这是一个优化版的Jumpserver 安装脚本,版本为 v3.6.2
,以下是该脚本的详细功能和步骤:
主要功能:
版本号与下载信息:
该脚本专为 Jumpserver v3.6.2 版本设计。
默认安装目录为
/opt
,可以通过环境变量INSTALL_DIR
自定义修改。下载地址指向 GitHub 的 Jumpserver 仓库。
日志打印功能:
log()
函数会输出带有时间戳的日志信息,方便记录和追踪安装过程。
安装依赖包:
脚本会检查并根据当前系统的包管理工具(
dnf
、yum
、apt
、zypper
、apk
等)自动安装必要的依赖包,如curl
、wget
、tar
和iptables
等。如果系统中没有找到相应的包管理工具,会提示用户手动安装。
准备安装:
prepare_install()
函数会确保所需工具已经安装。如果工具缺失,会自动安装对应的依赖。
下载并解压安装包:
脚本会从指定的下载 URL 获取 Jumpserver 安装包(
tar.gz
格式),并将其解压到指定的安装目录。如果下载失败,脚本会尝试重新下载最多三次。
配置文件与安装 Jumpserver:
config_installer()
函数会检查并更新static.env
配置文件,确保安装使用正确的版本。然后,脚本会通过
jmsctl.sh
脚本安装 Jumpserver 并启动服务。
系统检查:
脚本会检查当前操作系统是否为 macOS(Darwin),如果是macOS,会输出错误信息并退出,因为该脚本不支持 macOS。
关键特性与考虑事项
操作系统兼容性:
脚本显式声明不支持macOS(即
Darwin
)。如果操作系统是macOS,脚本将提前退出并显示错误信息。支持多种Linux发行版,依赖包管理器如
dnf
、yum
、apt
、zypper
和apk
。
依赖管理:
脚本确保安装必需的工具(如
curl
、wget
、tar
和iptables
),避免因缺少依赖而导致安装失败。
错误处理:
如果安装过程中任何部分(如下载、解压)失败,脚本会清理临时文件并打印错误信息。
这样可以确保即使出现问题,系统仍处于干净状态。
安装目录:
脚本假设安装目录为
/opt/
。这是Linux系统上常用的系统级安装路径。它将解压安装包文件到
/opt/jumpserver-installer-${VERSION}
。
安装过程:
下载并解压安装包后,脚本修改
static.env
配置文件,设置正确的版本号。然后,它使用
jmsctl.sh
安装Jumpserver并自动启动服务。
评论