102 lines
4.0 KiB
Markdown
102 lines
4.0 KiB
Markdown
# mihomo-up
|
||
|
||
一个 bash 脚本,用来在 Linux 服务器上**检查、安装、升级、回滚 [mihomo](https://github.com/MetaCubeX/mihomo) 内核**(Clash.Meta 的继任者,MetaCubeX 维护的代理核心)。可以直接跑交互菜单,也可以用子命令接进 cron / CI。
|
||
|
||
脚本只管内核二进制本身:它**不会**替你创建 systemd 服务、生成配置文件或设置订阅,这些需要你自己先准备好。
|
||
|
||
## 特性
|
||
|
||
- **双模式**:终端下无参数运行进入交互菜单;被管道/cron 调用时自动退化为安静的 `check`
|
||
- **两道安全闸门**:替换前先验证新二进制能运行且版本号对得上,再用新二进制 `-t` 校验你现有的配置,任一失败就中止、不动任何文件
|
||
- **自动备份与回滚**:替换前把旧版备份到 `/var/backups/mihomo/`(保留最近 3 份);升级后服务起不来会自动回滚并重启旧版
|
||
- **curl 一键运行友好**:交互输入读 `/dev/tty`,`bash <(curl ...)` 管道方式运行菜单照样能按键
|
||
- 支持 amd64 / arm64 / armv7,amd64 可指定微架构变体(v1/v2/v3/compatible)
|
||
|
||
## 环境要求
|
||
|
||
- Linux + bash
|
||
- 依赖命令:`curl`、`gzip`、`install`、`awk`(一般发行版自带)
|
||
- 升级操作需要 **root**(要写 `/usr/local/bin` 并重启服务)
|
||
- 服务的启停依赖 systemd 中名为 `mihomo` 的 service;没有的话脚本只替换二进制、跳过重启
|
||
|
||
## 快速开始
|
||
|
||
**交互菜单**:
|
||
|
||
```bash
|
||
bash <(curl -fsSL https://git.im0o.top/im0o/mihomo-up/raw/branch/main/mihomo-up.sh)
|
||
```
|
||
|
||
**命令行**:
|
||
|
||
```bash
|
||
chmod +x mihomo-up.sh
|
||
|
||
./mihomo-up.sh check # 只查不改:当前版本 vs 最新版本
|
||
sudo ./mihomo-up.sh update # 升级到最新版
|
||
sudo ./mihomo-up.sh update --version v1.19.28 # 装指定版本
|
||
sudo ./mihomo-up.sh rollback # 回滚到上一个备份
|
||
./mihomo-up.sh list # 查看本地备份
|
||
```
|
||
|
||
菜单里另有:校验配置文件、服务控制(启停/状态/最近日志)等入口。
|
||
|
||
## 在 cron / CI 里用
|
||
|
||
`check` 的退出码专为脚本化设计:
|
||
|
||
| 退出码 | 含义 |
|
||
|---|---|
|
||
| 0 | 已是最新 |
|
||
| 10 | 有新版(或未安装) |
|
||
| 1 | 出错 |
|
||
|
||
例子——有新版时自动升级:
|
||
|
||
```bash
|
||
mihomo-up.sh check && exit 0
|
||
[ $? -eq 10 ] && mihomo-up.sh update -y
|
||
```
|
||
|
||
加 `--json` 会额外输出一行机器可读的 JSON,方便接入监控:
|
||
|
||
```json
|
||
{"current":"v1.19.27","latest":"v1.19.28","outdated":true}
|
||
```
|
||
|
||
## 选项一览
|
||
|
||
| 选项 | 作用 |
|
||
|---|---|
|
||
| `-y, --yes` | 非交互确认,全部默认同意 |
|
||
| `-n, --dry-run` | 只打印会做什么,不实际执行 |
|
||
| `--force` | 即使版本相同也重装(`install` 子命令等价于 `update --force`) |
|
||
| `--version <v>` | 指定版本,如 `v1.19.28` |
|
||
| `--no-restart` | 装完不启动服务 |
|
||
| `--json` | `check` 时额外输出一行 JSON |
|
||
| `--arch <a>` | 覆盖自动识别的架构:`amd64` / `arm64` / `armv7` |
|
||
| `--variant <v>` | amd64 微架构变体:`v1` / `v2` / `v3` / `compatible` |
|
||
| `--bin <path>` | 二进制路径,默认 `/usr/local/bin/mihomo` |
|
||
| `--conf-dir <dir>` | 配置目录,默认 `/etc/mihomo` |
|
||
|
||
## 默认值与环境变量
|
||
|
||
| 默认值 | 环境变量 |
|
||
|---|---|
|
||
| `/usr/local/bin/mihomo` | `MIHOMO_BIN` |
|
||
| `/etc/mihomo` | `MIHOMO_CONF_DIR` |
|
||
| `mihomo`(systemd 服务名) | `MIHOMO_SERVICE` |
|
||
| `/var/backups/mihomo` | `MIHOMO_BACKUP_DIR` |
|
||
|
||
备份最多保留 3 份(脚本内常量 `KEEP=3`)。
|
||
|
||
## 升级时发生了什么
|
||
|
||
1. 从 GitHub Releases 下载对应架构的 `.gz` 包并解压
|
||
2. **闸门 1**:新二进制必须能执行,且 `-v` 报告的版本号与目标一致
|
||
3. **闸门 2**:若存在 `config.yaml`,用新二进制 `-t` 校验现有配置,失败即中止
|
||
4. 备份旧二进制 → 停服务 → 安装新版 → 启动服务
|
||
5. 启动失败则**自动回滚**到刚才的备份并重启,最后提示你查 `journalctl -u mihomo -n 50`
|
||
|
||
任何一步失败都不会留下半个新系统:要么没动,要么已回滚。
|