这个目录主要用于维护一套面向 NRadio / NROS / OpenWrt AppCenter 的插件接入脚本与相关打包产物。
当前主脚本是 NRadio_plugins_Installer.sh。它的目标不只是“安装一个 ipk”,而是把插件完整接入 OEM 的 AppCenter 体系,包括:
- 下载并安装插件包
- 自动补齐或修正依赖
- 写入 UCI 配置
- 注册
/etc/config/appcenter - 修复或生成 LuCI 兼容页面
- 在安装后给出可用路由和刷新提示
如果你的设备只是普通 OpenWrt,没有 AppCenter,这个脚本不一定适合直接使用。
目前脚本支持以下 4 类插件:
ttydOpenClashKMS(vlmcsd/luci-app-vlmcsd)OpenList(openlist2/luci-app-openlist2)
建议在下面这类设备上使用:
- 基于 OpenWrt 的 NRadio / NROS 固件
- 系统已安装 LuCI
- 系统存在 AppCenter
- 存在
/etc/config/appcenter
脚本运行前会校验关键文件是否存在,不满足条件会直接退出。
相比普通安装脚本,这个脚本额外做了不少兼容工作:
- 将
opkg feeds切换到预设可用镜像 - 统一下载、安装、重装流程
- 对部分不兼容插件做二次处理
- 自动启用并重启相关服务
- 备份关键配置和页面文件到本地
- 把插件注册到 AppCenter 菜单并写入元数据
其中两个重点兼容场景是:
OpenClash:会额外修补 LuCI 兼容问题,smart core 默认跳过,避免安装过程长时间卡住OpenList:会解压上游发布包,批量安装组件,并生成适配 OEM 页面
执行脚本前请确认:
- 必须使用
root - 系统存在
opkg、uci、LuCI、/etc/init.d/* - 设备可以联网下载依赖和插件包
/usr分区有足够空间,尤其是安装OpenList时
脚本内部已经包含部分兜底逻辑,例如:
- 自动运行
opkg update - 自动尝试
curl/wget/uclient-fetch - 必要时使用
--force-depends或--force-overwrite
但这并不意味着所有固件都一定兼容,OEM 魔改较深的系统仍可能需要按实际情况微调。
直接执行:
sh NRadio_plugins_Installer.sh会显示交互菜单:
1. 安装 ttyd
2. 安装 OpenClash
3. 安装 KMS
4. 安装 OpenList
安装 ttyd:
sh NRadio_plugins_Installer.sh ttyd安装 OpenClash:
sh NRadio_plugins_Installer.sh openclash安装 KMS:
sh NRadio_plugins_Installer.sh kms安装 OpenList:
sh NRadio_plugins_Installer.sh openlistttyd 安装流程除了安装 ttyd 与 luci-app-ttyd 之外,还会:
- 自动生成
/etc/config/ttyd - 写入适配 NRadio 风格的终端页与配置概览页
- 注册 AppCenter 路由
admin/services/ttyd/ttyd
适合把 WebShell 以 AppCenter 弹窗方式直接嵌入。
OpenClash 是处理最复杂的一项,脚本会:
- 从镜像源获取版本号和安装包
- 安装必要依赖
- 直接安装上游 ipk,依赖不匹配时由
opkg --force-depends兜底 - 生成 OpenClash 专用 NRadio 入口页,在插件页内提供稳定的顶部 tab 导航
- 清理旧版脚本覆盖过的 OpenClash 模板补丁
- 默认跳过 smart core 下载,可按需手动启用
- 注册路由
admin/services/openclash-nradio,通过专用入口打开 OpenClash 各原生页面 - 保留 OpenClash 原生页面的 header 资源加载,只在 iframe 内用样式隐藏重复导航,避免丢失 OpenClash 自带 CSS/JS
这部分比较依赖固件环境,建议安装后按提示执行一次浏览器强刷。
KMS 部分安装的是:
vlmcsdluci-app-vlmcsd
安装后会启用服务,并注册到:
admin/services/vlmcsd
这部分逻辑相对简单,主要目的是让 AppCenter 能正常打开对应页面。
OpenList 部分会:
- 根据当前
DISTRIB_ARCH下载对应发布包 - 解压上游
tar.gz包并提取内部ipk - 安装
openlist2、luci-app-openlist2和可用的中文语言包 - 生成适配 AppCenter 的封装页面
- 启用并重启
openlist2 - 注册路由
admin/services/openlist2/basic
注意:
- 首次安装后默认密码需要立即修改
- 安装前会检查
/usr可用空间
每个插件大致都会按下面的统一流程执行:
- 检查 root 权限
- 检查 AppCenter 关键文件
- 准备工作目录和镜像源
- 下载插件包或发布归档
- 自动继续安装
- 安装插件及依赖
- 写入兼容页面或配置
- 注册到 AppCenter
- 启动服务并输出提示信息
脚本会把关键文件备份到:
运行时临时目录默认使用:
/tmp/NRadio_plugin
通常会备份这些内容:
distfeeds.conf/etc/config/ttyd/etc/config/openlist2- LuCI controller / view 文件
脚本预留了一些环境变量,适合在执行前覆盖:
OPENCLASH_BRANCHOPENCLASH_MIRRORSOPENCLASH_CORE_VERSION_MIRRORSOPENCLASH_CORE_SMART_MIRRORSINSTALL_OPENCLASH_SMART_COREKMS_CORE_VERSIONKMS_CORE_IPK_BASE_URLKMS_LUCI_IPK_URLOPENLIST_RELEASE_SDKOPENLIST_RELEASE_VERSIONOPENLIST_RELEASE_BASE_URLOPENLIST_GH_PROXYOPENLIST_MIN_FREE_MBDOWNLOAD_CONNECT_TIMEOUTDOWNLOAD_MAX_TIMEDOWNLOAD_RETRIESOPENCLASH_CORE_DOWNLOAD_MAX_TIMEMIRROR_PING_COUNTMIRROR_PING_TIMEOUT
OpenClash 相关镜像下载会先 ping 每个镜像主机,按平均延迟从低到高排序后再下载。设备不支持 ping 或所有镜像 ping 失败时,会自动回退到原始镜像顺序。
示例:
INSTALL_OPENCLASH_SMART_CORE=1 OPENCLASH_CORE_DOWNLOAD_MAX_TIME=240 sh NRadio_plugins_Installer.sh openclash默认不会在安装流程中下载 smart core。需要脚本顺带下载时设置 INSTALL_OPENCLASH_SMART_CORE=1;如果 core 镜像下载失败,脚本会保留已经安装好的 OpenClash LuCI 包并给出 warning,不中断整个安装。
或者:
OPENLIST_GH_PROXY=https://ghproxy.net sh NRadio_plugins_Installer.sh openlist当前目录中除了主脚本,还包含一些辅助文件和历史产物:
NRadio_plugins_Installer.sh:主安装脚本TEMP:一个温控插件的打包展开目录,包含control、init 脚本、LuCI 页面和运行脚本温度监控v0.1.1.ipk/温度监控v0.1.2.ipk:温控插件成品包AppCenter.jpg、TTYD.jpg、温度监控.jpg:效果截图appcenter.htm:现有 AppCenter 页面模板样例,仅作参考,脚本不会修改系统内的 AppCenter 模板
也就是说,这个目录既有“安装脚本”,也有“插件打包实验文件”,README 的重点仍然以前者为主。
在真实设备上运行前,建议先了解下面几点:
- 脚本会修改系统配置和 LuCI 页面文件
- 会重启相关服务
- 会替换
opkg源配置 - 不同 OEM 固件的页面结构可能不完全一致
- 当前版本不会修改系统 AppCenter 模板;如果旧版本已经改过
/usr/lib/lua/luci/view/nradio_appcenter/appcenter.htm,请从脚本目录.backup中恢复对应备份
如果你准备在更多机型上复用,建议先在测试设备验证一轮,再固化默认参数。
如果运行时第一行出现类似 et: not found,通常表示上传到设备的脚本首行被改坏或漏了开头字符。先在设备上执行:
head -n 3 plugin.sh正常第一行应为 #!/bin/sh,第二行应为 set -eu。如果看到单独的 et 或 et -eu,请重新上传脚本后再运行。