在目标设备上以 root 执行:
curl -fsSL https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | shcurl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | shSimAdmin 提供四种功能形态的产物包,安装脚本支持根据设备架构与版本参数自动解析并下载:
| 版本形态 | CLI 参数 / 环境变量 | 产物命名规则 (以 aarch64 为例) | 功能定位 |
|---|---|---|---|
| 标准版 | (默认) | simadmin-aarch64-v{ver}.tar.gz |
基础核心功能、设备管理、短信智能收发、集中管理 Hub 协同通信 |
| VoLTE 版 | --volte / VARIANT=volte |
simadmin-volte-aarch64-v{ver}.tar.gz |
标准版全部功能 + 原生 IMS 客户端、SIP/IPsec 协议栈、TS 24.011 短信引擎 |
| VoWiFi 版 | --vowifi (或 --wfc) / VARIANT=vowifi |
simadmin-vowifi-aarch64-v{ver}.tar.gz |
标准版全部功能 + WiFi Calling / VoWiFi 协议栈、IPsec IKEv2、EAP-AKA 鉴权 |
| 完整版 | --full / VARIANT=full |
simadmin-full-aarch64-v{ver}.tar.gz |
全功能旗舰,同时集成 VoLTE 与 VoWiFi 双 IMS 引擎及全部通信协议栈 |
# 安装最新标准版
curl -fsSL https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh
# 安装最新标准版(国内加速代理)
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh
# 安装最新 VoLTE 版
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- --volte
# 安装最新 VoWiFi 版 (兼容旧版 --wfc)
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- --vowifi
# 安装最新 完整版
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- --full脚本完整支持安装指定历史版本或特定发布版本(版本号支持 v1.2.0 或 1.2.0 两种写法),推荐以下三种安装姿势:
在管道末端的 sh 前注入环境变量指定目标版本与版本形态,可完全避免 Shell 选项解析歧义:
# 指定安装 v1.2.0 标准版
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | VERSION=v1.2.0 sh
# 指定安装 v1.2.0 完整版
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | VERSION=v1.2.0 VARIANT=full sh
# 指定安装 v1.2.0 VoLTE 版
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | VERSION=v1.2.0 VARIANT=volte sh
# 指定安装 v1.2.0 VoWiFi 版
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | VERSION=v1.2.0 VARIANT=vowifi sh当通过管道向 Shell 脚本传递命令行参数时,必须使用 sh -s -- 引导参数列表:
# 使用 -v 指定版本号
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- -v 1.2.0
# 同时指定版本号与版本形态(完整版 / VoLTE 版 / VoWiFi 版)
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- -v 1.2.0 --full
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- -v 1.2.0 --volte
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- -v 1.2.0 --vowifi
# 也支持紧凑参数写法或位置参数
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- -v1.2.0 --volte
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh | sh -s -- 1.2.0 --full先将脚本保存到本地,再直接传参运行:
# 下载安装脚本到当前目录
curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh -o install_latest.sh
# 查看脚本所有支持的选项
sh install_latest.sh --help
# 本地执行指定版本与形态安装
sh install_latest.sh -v 1.2.0 --fullWarning
常见注意事项与排错指南:
- 切勿写成
curl ... | sh -v 1.2.0: 在 Unix/Linux Shell 中,/bin/sh -v是 Shell 解释器自身的内置参数(Verbose,打印读入脚本代码),随后的1.2.0会被系统 Shell 误当成要运行的文件路径,导致报错1.2.0: No such file or directory。管道传参请务必写成sh -s -- -v 1.2.0或采用环境变量写法VERSION=1.2.0 sh。 - 版本号格式兼容性:
版本号写作
1.2.0或v1.2.0均可,脚本内部会自动规范化为 Release Tag 命名。 - 跳过校验(离线或 GitHub API 异常应急):
若设备网络因代理限制导致拉取 GitHub Release API Digest 失败,可通过添加
SIMADMIN_VERIFY_ASSET=0跳过 SHA-256 校验:curl -fsSL ... | SIMADMIN_VERIFY_ASSET=0 sh
| 参数 | 说明 |
|---|---|
-v, --version VERSION |
指定安装目标版本(例如 v1.2.0 或 1.2.0),默认通过代理动态嗅探 latest 真实 Tag |
--volte |
安装 VoLTE 版产物包 |
--vowifi |
安装 VoWiFi 版产物包 |
--full |
安装完整版(全功能旗舰)产物包 |
--wfc |
安装 WiFi Calling 版(VoWiFi 版的兼容别名) |
-a, --asset NAME |
自定义 Release 产物文件名或别名(如 volte、vowifi、full、wfc) |
--install-dir PATH |
指定安装目录,默认 /opt/simadmin |
--service-name NAME |
指定 systemd 主服务名,默认 simadmin |
--deps-mode MODE |
依赖策略:auto、minimal、full、skip,默认 auto |
--modem-protocol MODE |
modem 工具策略:auto、qmi、mbim、at、all,默认 auto |
--refresh-modem |
强制刷新 udev 设备并重启 ModemManager |
--no-refresh-modem |
不刷新 udev 设备,也不为刷新动作重启 ModemManager |
--no-lpac |
跳过 lpac (eSIM CLI) 的自动下载与安装 |
--lpac-only |
仅安装或更新共享 lpac 运行时,不安装 SimAdmin 服务 |
-h, --help |
显示帮助信息 |
curl -fsSL https://raw.githubusercontent.com/3899/SimAdmin/main/install_latest.sh \
| REPO=3899/SimAdmin INSTALL_DIR=/opt/simadmin SERVICE_NAME=simadmin VERSION=latest VARIANT=full sh常用安装策略环境变量:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
VARIANT |
空 | 指定版本形态:volte、vowifi、full、wfc |
WFC |
0 |
设为 1 等价于 VARIANT=vowifi,用于兼容旧版 |
SIMADMIN_DEPS_MODE |
auto |
依赖策略,含义见下文 |
SIMADMIN_APT_UPDATE |
auto |
auto 仅缺包时更新索引;always 每次运行更新一次;never 不更新索引 |
SIMADMIN_MODEM_PROTOCOL |
auto |
自动检测 QMI/MBIM;也可显式指定 qmi、mbim、at 或 all |
SIMADMIN_INSTALL_SYSTEM_DEPS |
1 |
设为 0 等价于依赖策略 skip,用于兼容旧调用方式 |
SIMADMIN_ENABLE_NETWORKMANAGER |
1 |
是否安装(auto 模式)并启用 NetworkManager |
SIMADMIN_REFRESH_MODEM_DEVICES |
auto |
首装、依赖变化或未枚举到 modem 时刷新;也可设为 0/1 |
SIMADMIN_VERIFY_ASSET |
auto |
官方 Release 自动校验 GitHub asset SHA-256;可设为 0 禁用或 1 强制 |
SIMADMIN_ASSET_SHA256 |
空 | 自定义 ASSET_URL 时提供可信 SHA-256 |
SIMADMIN_TMPDIR |
空 | 优先使用的临时目录;不可用时自动回退 |
SIMADMIN_MIN_MODEMMANAGER_VERSION |
空 | 可选的 ModemManager 最低 Debian 版本要求 |
SIMADMIN_MIN_NETWORKMANAGER_VERSION |
空 | 可选的 NetworkManager 最低 Debian 版本要求 |
GH_PROXY |
https://gh-proxy.com/ |
首个 GitHub 代理前缀 |
GH_PROXY_FALLBACKS |
https://ghproxy.net/ https://githubproxy.cc/ |
以空格分隔的备用 GitHub 代理前缀,按书写顺序尝试 |
对于 github.com、raw.githubusercontent.com、objects.githubusercontent.com 和 api.github.com 地址,安装脚本依次尝试 GH_PROXY、GH_PROXY_FALLBACKS 中的每个代理,全部失败后才使用官方 GitHub 地址直连兜底。该顺序同时用于 Release 应用包、源码仓库中的 unit/recovery 文件、Release API 和 lpac;非 GitHub 自定义 URL 不拼接代理前缀,始终直接访问。
脚本先通过 dpkg-query 检查每个 Debian 软件包是否已安装,并在配置了最低版本时通过 dpkg --compare-versions 校验版本。所有要求都已满足时,默认不会执行 apt-get update,也不会重复执行 apt-get install;缺少依赖时只安装缺少或版本不足的包。
| 模式 | 自动补齐内容 | 适用场景 |
|---|---|---|
auto |
显式安装核心依赖与基础网络/诊断工具。具备可选依赖容错机制:当 iproute2、unzip、psmisc 等可选辅助工具因源 404 或镜像失效安装失败时,只要核心依赖(ca-certificates curl tar dbus udev modemmanager)已满足,安装器会自动降级警告并继续完成部署,不会阻塞安装流程 |
默认推荐,兼顾完整功能与老旧/异常镜像源的容错能力 |
minimal |
只保证下载安装和主路径运行所需的核心包:ca-certificates curl tar dbus udev modemmanager(若启用 NM 则加 network-manager);完全不请求安装 iproute2、unzip、psmisc 等辅助包 |
极端裁剪系统、内网或老旧系统无法获取新软件包的场景 |
full |
auto 的能力检测结果,加上 NetworkManager 和可选 iptables 只读诊断工具,严格要求所有包必须安装成功 |
希望同时准备完整诊断能力的通用镜像 |
skip |
不执行任何 apt 操作,已有的 curl、tar 等命令仍必须可用 |
只读系统、离线部署或由镜像预装全部依赖 |
默认 auto 模式中,ca-certificates、curl、tar、dbus、udev、modemmanager 为必须的核心依赖;而 iproute2(网卡 IP 回退查询)、unzip(可选 lpac 离线解压)、psmisc(重启前 killall 辅助)为可选辅助依赖。如果由于系统镜像源失效导致可选依赖无法通过 apt 下载,auto 模式会自动跳过缺失的可选包并完成主服务部署。如果需要完全跳过系统依赖检查,可使用 SIMADMIN_DEPS_MODE=minimal 或 SIMADMIN_INSTALL_SYSTEM_DEPS=0。
SIMADMIN_APT_UPDATE=never 只禁止刷新软件包索引,不会忽略缺包;如果本地索引无法解析所需包,安装仍会明确失败。卸载脚本不会自动移除这些系统依赖,因为它们可能正被其他服务使用。
常规 SimAdmin 版本的 GitHub Release 只发布最终 SimAdmin 应用包。simadmin.service、simadmin-modem-recovery.sh 和 simadmin-modem-recovery.service 不进入 Release,也不塞入应用 tar 包:
- 安装
latest时,应用包来自 latest Release,三个受管脚本从源码仓库main分支下载; - 指定
VERSION=1.2.3或-v1.2.3时,应用包来自v1.2.3Release,三个受管脚本从源码仓库v1.2.3tag 下载; - 脚本先下载并校验全部远程输入,再停止或替换现有服务;自定义安装目录时会同步重写 unit 的
WorkingDirectory和ExecStart。
官方 Release 包使用 GitHub Release API 返回的 asset digest 做 SHA-256 校验,不需要额外发布 checksum、unit 或 recovery 附件。自定义 ASSET_URL 若未同时设置 SIMADMIN_ASSET_SHA256,auto 模式会告警;强制校验模式会直接拒绝安装。
- 根据
uname -m自动选择 GitHub Release 中的 ARM64、ARMv7 hard-float 或 x86_64 musl 包,并拒绝与真机架构不一致的SIMADMIN_TARGET_ARCH覆盖。 - 校验 Release SHA-256、tar 路径/文件类型、
meta.json架构和 ELF class/machine;ARMv7 额外校验 hard-float 标志。 - 临时目录按
SIMADMIN_TMPDIR、TMPDIR、/tmp、/var/tmp顺序回退;/tmp缺失时自动创建为1777,不会依赖/data/local/tmp必然存在。 - 在 Debian / Ubuntu 上检查并增量安装所选策略真正缺少的运行依赖;已满足时跳过耗时的 apt 索引刷新。
- 启用 ModemManager 与按配置启用 NetworkManager;仅在首装、系统依赖变化、未发现 modem 或显式要求时刷新 modem。
- 安装后端二进制到
/opt/simadmin/simadmin。 - 安装前端到
/opt/simadmin/www。 - 在 AArch64/x86_64 上下载带 QMI APDU 后端的架构匹配
lpac,在替换旧版本前校验qmi/curl驱动和动态库完整性;ARMv7 MVP 跳过 lpac 安装。 - 安装并启用
simadmin.service。 - 安装并启用
simadmin-modem-recovery.service。 - 删除旧版本遗留的 NetworkManager
wwan*unmanaged 配置,使nmcli能管理蜂窝连接。 - 应用、前端、元数据、unit 和 recovery 文件使用 staging + 原子替换;服务未通过 systemd 与
/api/health检查时恢复旧文件及原启用/运行状态。 - 重复安装完全相同的内容时不替换应用文件,也不重启 SimAdmin。
当前官方构建目标为 aarch64-unknown-linux-musl、armv7-unknown-linux-musleabihf 和 x86_64-unknown-linux-musl。如需覆盖自动检测,可设置 SIMADMIN_TARGET_ARCH=arm64、SIMADMIN_TARGET_ARCH=armv7 或 SIMADMIN_TARGET_ARCH=amd64;也可以通过 ASSET_NAME / ASSET_URL 指定自定义产物。
ARMv7 MVP 暂不提供 lpac/eSIM 支持。前端会隐藏“工作模式”设置和 eSIM 管理 Tab,安装脚本会跳过 ARMv7 的 lpac 下载,不会把 ARM64 lpac 安装到 32 位 ARMv7 设备上;后端仍会拒绝直接 eSIM/lpac API 调用。
如需保留宿主机现有网络管理方式,可设置 SIMADMIN_ENABLE_NETWORKMANAGER=0;默认 auto 依赖模式不会为此安装或启用 NetworkManager,也不会改变已在运行的 NetworkManager 状态,此时安装器不保证 SimAdmin 的 WLAN 和蜂窝数据连接功能可用。还可以用 SIMADMIN_INSTALL_SYSTEM_DEPS=0 跳过 apt 依赖安装,或用 SIMADMIN_REFRESH_MODEM_DEVICES=0 跳过 udev 设备刷新。
安装成功并运行服务后,您可以通过浏览器访问管理后台:
- 访问地址:
http://<设备IP>:3000 - 密码设定:SimAdmin 未设默认初始密码。首次访问时将自动跳转到
/login的“设置管理员密码”页面,设定强密码后会自动登录并进入系统。
SimAdmin 采用单管理员登录模式,不包含多用户和权限细分系统。首次运行配置要求如下:
- 8-64 个字符。
- 只能使用英文字母、数字和符号,不允许空格或中文。
- 至少包含两类字符,例如字母 + 数字、字母 + 符号或数字 + 符号。
系统默认开启密码安全保护。如果您希望在局域网内免密直接使用,或需要修改密码的强度规则:
- 关闭密码保护:登录后台后,前往 「系统配置 - 安全性设置」 页面,将“密码保护”开关关闭并保存。在此之后,访问 Web 后台将不再要求输入密码。
- 调整强度规则:在 「系统配置 - 安全性设置」 页面中,可以自定义设置密码的最小长度(1-64 位)以及是否强制要求包含英文字母、数字和符号等强度校验规则。
忘记密码时,可通过 SSH 登录目标设备后执行交互式重置:
/opt/simadmin/simadmin auth reset-password如需清除管理员密码并让 Web UI 下次重新进入首次设置:
/opt/simadmin/simadmin auth clear如果使用了自定义安装目录,请将 /opt/simadmin/simadmin 替换为实际后端二进制路径。
默认彻底卸载,删除服务、程序文件、前端文件、OTA 临时目录、NetworkManager 配置以及用户数据:
curl -fsSL https://raw.githubusercontent.com/3899/SimAdmin/main/uninstall.sh | shcurl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/3899/SimAdmin/main/uninstall.sh | sh如需保留短信数据库和配置文件:
curl -fsSL https://raw.githubusercontent.com/3899/SimAdmin/main/uninstall.sh \
| sh -s -- --keep-user-data自定义安装路径或服务名时,需要和安装时保持一致:
curl -fsSL https://raw.githubusercontent.com/3899/SimAdmin/main/uninstall.sh \
| INSTALL_DIR=/opt/simadmin SERVICE_NAME=simadmin sh -s -- --keep-user-data| 参数 | 说明 |
|---|---|
--purge |
删除全部 SimAdmin 文件和用户数据,默认行为 |
--keep-user-data |
保留数据库、SQLite sidecar、config.json、备份和其他用户数据 |
--install-dir PATH |
指定安装目录,默认 /opt/simadmin |
--service-name NAME |
指定主服务名,默认 simadmin |
- 停止并禁用
simadmin.service、simadmin-modem-recovery.service以及simadmin-secondary-qmi.service。 - 删除 systemd 单元文件;确有 unit/override 变化时才执行
daemon-reload,并清理失败状态(reset-failed)。 - 删除
/usr/local/bin/simadmin-modem-recovery.sh。 - 删除 secondary-qmi 相关的 udev 规则文件(
/etc/udev/rules.d/与/run/udev/rules.d/),并自动调用udevadm control --reload-rules && udevadm trigger重载内核规则。 - 删除
/etc/NetworkManager/conf.d/99-simadmin-unmanaged-modem.conf;仅当该文件实际存在且 NetworkManager 正在运行时重启它。 - 默认
--purge模式下自动清理 SimAdmin 创建的simadmin-modem蜂窝网络连接配置。 - 删除 SimAdmin 创建的 ModemManager debug override;仅当该文件实际存在且 ModemManager 正在运行时重启它。
- 删除
/tmp/ota_staging、/tmp/simadmin.*临时目录及运行时状态目录/run/simadmin。 - 清理安装事务遗留的
.new/.previous文件。 - 默认删除
/opt/simadmin、/data/config.json、/data/hub-agent.db及其 SQLite sidecar;使用--keep-user-data时只删除受管应用文件,保留数据库、配置和备份。 - 与安装器共用
/run/lock/simadmin-install.lock,拒绝并发安装/卸载;重复卸载具有幂等性,不会无意义重启 NM/MM。 - 不卸载 Debian 系统依赖(如 curl, iproute2, psmisc, unzip 等),避免破坏其他程序与系统网络底层。