Files
docker-jupyterhub/spawnerdockerfile/install.sh

230 lines
7.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 安装所需依赖
install_dependencies() {
# 检查并安装 jq, curl, tar, bzip2
for dep in jq curl tar bzip2; do
if ! command -v $dep >/dev/null 2>&1; then
sudo apt-get update && sudo apt-get install -y $dep
fi
done
}
# 在脚本开始时调用依赖安装函数
install_dependencies
# 默认的MAMBA_ROOT_PREFIX路径
DEFAULT_MAMBA_ROOT_PREFIX="/usr/local/bin"
# 显示用法信息
usage() {
echo "用法: sudo $0 [--silent-install [custom_root_prefix]] [--silent-uninstall] [--silent-update]"
echo " --silent-install 静默模式安装,不进行任何交互"
echo " custom_root_prefix (可选) 在静默模式下设置 MAMBA_ROOT_PREFIX 的路径"
echo " --silent-uninstall 静默模式卸载,不进行任何交互"
echo " --silent-update 静默模式更新,不进行任何交互"
exit 1
}
# 安装micromamba
install_micromamba() {
local mamba_prefix="$1"
# 自动检测操作系统和处理器架构
OS="$(uname)"
ARCH="$(uname -m)"
# 根据操作系统和架构设置下载链接
case "$OS" in
"Linux")
case "$ARCH" in
"x86_64") URL="https://micro.mamba.pm/api/micromamba/linux-64/latest" ;;
"aarch64") URL="https://micro.mamba.pm/api/micromamba/linux-aarch64/latest" ;;
"ppc64le") URL="https://micro.mamba.pm/api/micromamba/linux-ppc64le/latest" ;;
*) echo "不支持的架构: $ARCH"; exit 1 ;;
esac
;;
"Darwin")
case "$ARCH" in
"x86_64") URL="https://micro.mamba.pm/api/micromamba/osx-64/latest" ;;
"arm64") URL="https://micro.mamba.pm/api/micromamba/osx-arm64/latest" ;;
*) echo "不支持的架构: $ARCH"; exit 1 ;;
esac
;;
*)
echo "不支持的操作系统: $OS"; exit 1 ;;
esac
# 下载并解压 micromamba 到指定的路径
echo "正在下载 micromamba..."
if curl -Ls "$URL" | tar -xvj -C "$mamba_prefix"; then
echo "micromamba 下载并解压完成。"
ls -l /usr/local/bin/bin/micromamba
echo "micromamba 赋予执行权限"
chmod +x /usr/local/bin/bin/micromamba
echo "micromamba 安装完成"
echo "MAMBA_ROOT_PREFIX 路径:$mamba_prefix"
# 初始化 shell 环境
echo "正在为root初始化 micromamba shell 环境..."
"$mamba_prefix/bin/micromamba" shell init -s bash -p "~/micromamba"
ln -s /usr/local/bin/bin/micromamba /usr/local/bin/micromamba
else
echo "micromamba 下载失败"
fi
}
# 清理 .bashrc 文件
cleanup_bashrc() {
local mamba_bin_path="$1"
# 删除 .bashrc 中相关的行
sed -i '/MICROMAMBA_BIN_PATH/d' ~/.bashrc
sed -i '/MAMBA_ROOT_PREFIX/d' ~/.bashrc
sed -i '/alias mba=/d' ~/.bashrc
}
# 删除micromamba
uninstall_micromamba() {
echo "正在卸载 micromamba..."
rm -rf /usr/local/bin/micromamba /usr/local/bin/bin /usr/local/bin/info /usr/local/bin/etc
# 清理 .bashrc 文件
cleanup_bashrc "$mamba_prefix"
echo "micromamba 已卸载。"
}
# 获取当前 micromamba 版本
get_current_version() {
local mamba_path="$1/micromamba"
if [ -f "$mamba_path" ]; then
local current_version
current_version=$("$mamba_path" --version | grep -o 'version [^ ]*' | cut -d ' ' -f2 | cut -d '-' -f1)
echo "$current_version"
else
echo "未安装"
fi
}
# 获取最新的 micromamba 版本
get_latest_version() {
local latest_version
latest_version=$(curl -s https://api.github.com/repos/mamba-org/micromamba-releases/releases/latest | jq -r '.tag_name' | cut -d '-' -f1)
echo "$latest_version"
}
# 检查是否有更新并提示用户
check_for_updates() {
local current_version latest_version
current_version=$(get_current_version "$1")
latest_version=$(get_latest_version)
if [ "$latest_version" != "$current_version" ]; then
echo "有可用的更新:当前版本 $current_version, 最新版本 $latest_version"
read -p "是否更新到最新版本? (y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
update_micromamba "$1"
else
echo "更新已取消"
fi
else
echo "当前已是最新版本 ($current_version)"
fi
}
# 更新micromamba
update_micromamba() {
local mamba_prefix="$1"
local current_version latest_version
current_version=$(get_current_version "$mamba_prefix")
latest_version=$(get_latest_version)
if [ "$latest_version" != "$current_version" ]; then
echo "有可用的更新:当前版本 $current_version, 最新版本 $latest_version"
read -p "是否更新到最新版本? (y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
echo "正在卸载旧版本 micromamba..."
uninstall_micromamba "$mamba_prefix"
echo "正在安装最新版本 micromamba..."
install_micromamba "$mamba_prefix"
else
echo "更新已取消"
fi
else
echo "当前已是最新版本 ($current_version)"
fi
}
# 交互式安装、卸载和更新菜单
interactive_menu() {
local current_version latest_version
current_version=$(get_current_version "$DEFAULT_MAMBA_ROOT_PREFIX")
latest_version=$(get_latest_version)
# 检测并显示当前和最新版本
echo "当前 micromamba 版本: $current_version"
echo "最新 micromamba 版本: $latest_version"
if [ "$latest_version" != "$current_version" ]; then
echo "有可用的更新。"
fi
echo "选择操作:"
echo "1) 安装 micromamba"
echo "2) 删除 micromamba"
echo "3) 更新 micromamba"
echo "q) 退出"
read -p "请输入选项1、2、3或q: " main_choice
case "$main_choice" in
1)
echo "MAMBA_ROOT_PREFIX 的路径: $DEFAULT_MAMBA_ROOT_PREFIX: "
install_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
;;
2)
uninstall_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
;;
3)
update_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
;;
q)
echo "退出。"
exit 0
;;
*)
echo "无效的选项。退出。"
exit 1
;;
esac
}
# 静默卸载
silent_uninstall() {
# 在卸载之前保留虚拟环境目录
local envs_dir="$DEFAULT_MAMBA_ROOT_PREFIX/envs"
mkdir -p "$envs_dir"
mv "$DEFAULT_MAMBA_ROOT_PREFIX/envs" "$(mktemp -d)"
uninstall_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
mv "$(mktemp -d)/envs" "$envs_dir"
}
# 静默更新
silent_update() {
update_micromamba "$DEFAULT_MAMBA_ROOT_PREFIX"
}
# 解析命令行参数
if [ "$1" = "--silent-install" ]; then
silent_install "$2"
elif [ "$1" = "--silent-uninstall" ]; then
silent_uninstall
elif [ "$1" = "--silent-update" ]; then
silent_update
elif [ "$1" = "--help" ]; then
usage
else
interactive_menu
fi