# 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://你的地址/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 ` | 指定版本,如 `v1.19.28` | | `--no-restart` | 装完不启动服务 | | `--json` | `check` 时额外输出一行 JSON | | `--arch ` | 覆盖自动识别的架构:`amd64` / `arm64` / `armv7` | | `--variant ` | amd64 微架构变体:`v1` / `v2` / `v3` / `compatible` | | `--bin ` | 二进制路径,默认 `/usr/local/bin/mihomo` | | `--conf-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` 任何一步失败都不会留下半个新系统:要么没动,要么已回滚。