Skip to content

Instantly share code, notes, and snippets.

@dragon-fish
Created June 27, 2025 22:39
Show Gist options
  • Select an option

  • Save dragon-fish/dd2f2be5b8b98c8e89d0b9214bf99faa to your computer and use it in GitHub Desktop.

Select an option

Save dragon-fish/dd2f2be5b8b98c8e89d0b9214bf99faa to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
# =============================
# 参数与配置
# =============================
MONGOSH_FALLBACK_VERSION="2.5.1"
MONGOTOOLS_FALLBACK_VERSION="100.12.1"
# =============================
# 函数定义
# =============================
log() {
echo -e "🔧 $1"
}
error() {
echo -e "❌ $1" >&2
exit 1
}
require_root() {
if [ "$EUID" -ne 0 ]; then
error "请使用 root 用户运行此脚本。"
fi
}
install_packages() {
log "安装必要依赖..."
if command -v apt >/dev/null 2>&1; then
apt update -y
apt install -y wget curl tar gnupg lsb-release
elif command -v yum >/dev/null 2>&1; then
yum install -y wget curl tar gnupg redhat-lsb-core
elif command -v dnf >/dev/null 2>&1; then
dnf install -y wget curl tar gnupg redhat-lsb-core
else
error "不支持的包管理器。"
fi
}
download_file() {
local url="$1"
local output="${2:-$(basename "$url")}"
log "下载文件:$url"
curl -fLo "$output" --retry 3 --retry-delay 2 "$url" || error "下载失败:$url"
}
detect_platform() {
if [ -f /etc/os-release ]; then
. /etc/os-release
case "$ID" in
ubuntu|debian) echo "debian10" ;;
centos|rhel|amzn) echo "rhel70" ;;
*) echo "rhel70" ;;
esac
else
echo "rhel70"
fi
}
install_mongosh() {
log "开始安装 mongosh..."
ARCH=$(uname -m)
[ "$ARCH" != "x86_64" ] && error "当前架构 $ARCH 不支持,仅支持 x86_64。"
MONGOSH_LATEST=$(curl -s https://www.mongodb.com/try/download/shell | grep -oP 'mongosh-linux-x64-\K[0-9.]+(?=\.tgz)' | head -n 1)
[ -z "$MONGOSH_LATEST" ] && MONGOSH_LATEST="$MONGOSH_FALLBACK_VERSION"
log "使用 mongosh 版本:$MONGOSH_LATEST"
local url="https://downloads.mongodb.com/compass/mongosh-${MONGOSH_LATEST}-linux-x64.tgz"
download_file "$url"
tar -xzf "mongosh-${MONGOSH_LATEST}-linux-x64.tgz"
install -m 755 "mongosh-${MONGOSH_LATEST}-linux-x64/bin/mongosh" /usr/local/bin/
log "✅ mongosh 安装完成"
}
install_dbtools() {
log "开始安装 MongoDB Database Tools..."
local platform
platform=$(detect_platform)
TOOLS_LATEST=$(curl -s https://www.mongodb.com/try/download/database-tools | grep -oP "mongodb-database-tools-${platform}-x86_64-\K[0-9.]+" | head -n 1 | sed 's/\.$//')
[ -z "$TOOLS_LATEST" ] && TOOLS_LATEST="$MONGOTOOLS_FALLBACK_VERSION"
log "使用 MongoDB Database Tools 版本:$TOOLS_LATEST"
local url="https://fastdl.mongodb.org/tools/db/mongodb-database-tools-${platform}-x86_64-${TOOLS_LATEST}.tgz"
download_file "$url"
tar -xzf "mongodb-database-tools-${platform}-x86_64-${TOOLS_LATEST}.tgz"
install -m 755 "mongodb-database-tools-${platform}-x86_64-${TOOLS_LATEST}/bin/"* /usr/bin/
log "✅ MongoDB Database Tools 安装完成"
}
verify_versions() {
echo -e "\n📦 安装完成,版本验证如下:"
echo "mongosh version:"
mongosh --version
echo "mongodump version:"
mongodump --version
}
# =============================
# 脚本主流程
# =============================
require_root
TMP_DIR=$(mktemp -d)
trap 'rm -rf "$TMP_DIR"' EXIT
log "创建临时目录:$TMP_DIR"
cd "$TMP_DIR"
install_packages
install_mongosh
install_dbtools
verify_versions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment