forked from Ucas-HaoranWei/Vary-toy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall.sh
executable file
·229 lines (200 loc) · 6.99 KB
/
install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
#!/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