高级卸载:适配OpenWrt 25.apk 格式与压缩包自动解压

一、背景说明

OpenWrt 官方在 25.x 版本(及 ImmortalWrt 25.12+ 等衍生版)中,已将包管理器从 opkg 全面迁移至基于 Alpine Linux 的 apk 包管理系统。这意味着:
  • 旧系统(24.10 及更早):使用 opkg,安装 .ipk 包
  • 新系统(25.x+):使用 apk,安装 .apk 包
参考:
目前社区已有大量用户开始尝鲜 25.x 内核的 iStoreOS / ImmortalWrt 固件,但现有插件生态仍以 .ipk 为主,导致新系统用户无法直接安装使用。同时,很多插件作者发布的安装包并非直接的 .ipk 或 .apk 文件,而是各种压缩包格式,安装过程繁琐。

二、需求一:增加 .apk 格式支持,适配 OpenWrt 25.x+ / iStoreOS 新版

当前遇到的问题

在 VUM星球插件中心下载的「高级卸载」安装包(luci-app-uninstall.run),经解压确认内部打包的是 .ipk 格式,依赖 opkg 进行安装。
在基于 25.x 的 iStoreOS / OpenWrt 系统上执行安装时,会出现以下情况:
  • .run 脚本内部调用 opkg install,但系统实际包管理器为 apk
  • 安装失败或提示包格式不兼容
  • 用户不得不手动解压 .run 文件,再尝试用 apk add --allow-untrusted 强制安装,体验极差且容易破坏依赖关系

期望的解决方案

希望「高级卸载」插件在发布下个版本时,能够同时提供两种格式的安装包:
 
系统版本 包管理器 建议的安装包命名
OpenWrt 24.10 / iStoreOS 旧版 opkg luci-app-uninstall-v1.2.4-ipk-x86_64.run
OpenWrt 25.x+ / iStoreOS 新版 apk luci-app-uninstall-v1.2.4-apk-x86_64.run
ARM64 设备(如 E20C/R4S 等) apk luci-app-uninstall-v1.2.4-apk-aarch64.run
具体建议:
  1. 双格式 .run 包:参考 sirpdboy/buildrun 等项目的做法,在构建时同时输出 ipk 和 apk 两种内核的 .run 自解压包,通过文件名区分。
  2. 安装脚本自适应:在 .run 包内的 install.sh 中增加系统检测逻辑,自动判断当前系统使用 opkg 还是 apk,调用对应的包管理器安装。
  3. 架构覆盖:继续保留对 X86_64 和 ARM64(aarch64_cortex-a53 / aarch64_generic)的支持。

三、需求二:增加自动解压压缩包安装功能

当前遇到的问题

很多插件作者发布的安装包并非直接的 .ipk 或 .apk 文件,而是以压缩包形式提供(如 GitHub Releases 中的 .zip、.tar.gz 等)。目前「高级卸载」插件没有便捷的安装方式,用户需要:
  1. 先在其他设备上下载并解压,提取出里面的 .ipk 文件,再上传到路由器用「高级卸载」安装;或
  2. 上传到路由器后,通过 SSH 命令行手动解压,但不同压缩格式的解压命令各不相同(tar -zxvf、unzip、tar -jxvf 等),对普通用户来说门槛很高,过程繁琐。
典型例子:

期望的解决方案

希望「高级卸载」插件能够支持在线下载并自动解压常见压缩格式,从中提取 .ipk 或 .apk 文件后直接安装。
建议支持的压缩格式:
.tar.gz    .tgz    .tar.bz2    .tar.xz    .tar    .zip    .gz    .bz2
 
实现逻辑建议:
  1. 用户在插件界面粘贴压缩包的下载链接(如 GitHub Releases 直链)
  2. 插件自动下载该压缩包到临时目录
  3. 根据文件后缀识别压缩格式,调用对应的解压命令自动解压
  4. 扫描解压后的目录,自动识别其中的 .ipk 或 .apk 文件
  5. 根据当前系统类型(opkg 或 apk)自动选择匹配的包进行安装
  6. 安装完成后清理临时文件,并提示用户安装结果
或者更简单的方案: 在「手动安装」功能中,增加一个”上传压缩包”的选项,用户直接上传 .zip / .tar.gz 等文件,插件自动解压并列出其中可安装的包,用户勾选后一键安装。

四、技术可行性参考

社区已有成熟方案可供参考:
  • sirpdboy/buildrun 项目已实现对同一插件同时构建 ipk 和 apk 两种格式的 .run 安装包,且通过文件名明确区分(如 *-ipk-x86_64-*.run 与 *-apk-x86_64-*.run)。
  • apk 包的手动安装命令为:apk add --allow-untrusted xxx.apk,与 opkg install xxx.ipk 用法类似,迁移成本不高。
  • 压缩包解压功能在 OpenWrt 系统中已有 tar、unzip、gzip、bzip2 等基础工具支持,无需额外安装大量依赖。

五、我的使用环境(供参考)

  • 设备型号:Radxa E20C
  • 系统版本:iStoreOS 25.12.5 2026080812(内核:6.12.94)
  • 系统架构:aarch64_cortex-a53
  • 当前包管理器:apk(运行 which apk 或 which opkg 可确认)
  • 当前遇到的问题:
    • 无法通过 iStore 手动安装或命令行直接安装现有的 .run 包
    • 从 GitHub 下载的 .zip / .tar.gz 插件包需要手动解压,步骤繁琐

六、其他说明

  • 「高级卸载」插件本身功能非常实用,能够彻底解决 iStoreOS 插件残留问题,避免频繁恢复出厂设置,是软路由用户的刚需工具。
  • 如果短期内实现双格式构建有难度,也建议至少先提供一版 .apk 格式的手动安装包,满足 25.x 系统用户的迫切需求。
  • 自动解压功能如果能实现,将极大提升用户体验,让「高级卸载」成为真正意义上的”一站式”插件管理工具。
  • 社区愿意协助测试,如有测试版可及时反馈安装与卸载体验。
感谢 VUM星球团队的开发工作,期待「高级卸载」插件能持续进化,继续为广大软路由用户提供便利!
请登录后发表评论

    • vee的头像-VUM星球钻石会员veelove徽章-原创达人-VUM星球等级-LV10-VUM星球超级版主0