mihomo-up

一个 bash 脚本,用来在 Linux 服务器上检查、安装、升级、回滚 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 <(curl -fsSL https://git.im0o.top/im0o/mihomo-up/raw/branch/main/mihomo-up.sh)

命令行:

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 出错

例子——有新版时自动升级:

mihomo-up.sh check && exit 0
[ $? -eq 10 ] && mihomo-up.sh update -y

加 --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

任何一步失败都不会留下半个新系统:要么没动,要么已回滚。

S
Description
No description provided
Readme
258 KiB
Languages
Shell 100%