opkg 到 apk 对照速查表

opkg 过渡到 apk

禁止使用 apk upgrade !

将会导致设备变砖。当前多个软件包存在缺失的冲突声明、不完整的依赖关系,或其它配置错误 (例如hostapd-*, wpad-*, ucode-mod-*, 各种库文件等)。

正确方式是使用 ASU 客户端: LuCI Attended Sysupgrade、 owut 或 Firmware Selector。

其他参考资料:

  • apk命令的帮助信息仅需运行 apk 即可查看子命令(sub-command);只需要在子命令后加 -h (例如apk add -h)便可以获取到该命令的详细说明。
  • apk-tools 是主流发行版的一部分,其手册页(man pages)在各大常用网站上均有发布。例如:Arch Linux wiki entry

opkg 类似,大多数命令都支持一个可选的软件包名称模式(下文用 [P] 表示)。这些模式使用通配符(glob),例如 *dns* 会匹配名称中包含 dns 的所有软件包。

命令 描述
apk -h 显示所有子命令及其简要说明
apk subcmd -h 显示特定子命令(在 apk-tools 文档中称为“applets”)的帮助信息
apk update 强制更新本地索引,功能与 opkg 中的同名命令一致
apk adbdump file 解析并显示 APK v3 格式文件的内容,包括软件包索引文件 (通常名为 packages.adb) 和软件包文件 (即*.apk)
apk opkg 描述
apk update opkg update 刷新软件源
apk add pkg opkg install pkg 安装 pkg
apk del pkg opkg remove pkg 卸载 pkg

两者在安装操作基本一致。区别在于:apk要求所有软件包都必须具有有效的签名,而 opkg 对本地软件包则忽略签名验证。因此,如果您要安装非标准(如自行构建)的软件包,请使用 --allow-untrusted 选项:

$ apk add ./owut_2024.07.01~189b2721-r1.apk
ERROR: ./owut_2024.07.01~189b2721-r1.apk: UNTRUSTED signature

$ apk add --allow-untrusted ./owut_2024.07.01~189b2721-r1.apk
OK: 2313 MiB in 569 packages

有趣的改变

apk--update-cache 选项允许您在执行 add 操作的同时自动执行 update,从而将传统的 opkg 链式命令简化为一条 apk 命令:

opkg update && opkg install dnsmasq-full

简化为:

apk --update-cache add dnsmasq-full

--simulate 选项可用于模拟执行命令,预览实际效果而不做任何更改:

$ apk del --simulate nmap
(1/1) Purging nmap (7.95-r1)
OK: 47 MiB in 288 packages

默认软件源操作

默认情况下,当首次使用apk add时,apk 会尝试更新 /etc/apk/repositories.d/ 中定义的软件源。在某些离线(或物理隔离)场景中,这可能导致 apk 尝试连接远程软件源以更新本地数据库,即使您只想安装本地 .apk 文件:

$ apk add ./owut_2024.07.01~189b2721-r1.apk 
fetch https://downloads.openwrt.org/snapshots/targets/x86/64/packages/packages.adb
Failed to send request: Operation not permitted
WARNING: updating and opening https://downloads.openwrt.org/snapshots/targets/x86/64/packages/packages.adb: network error (check Internet connection and firewall)
...snip...
OK: 2313 MiB in 569 packages

若要禁用此行为,可使用 --repositories-file /dev/null

$ apk add --repositories-file /dev/null ./owut_2024.07.01~189b2721-r1.apk
...snip...
OK: 2313 MiB in 569 packages

若要永久禁用, 需要移除 /etc/apk/repositories.d 目录,因此运行: mv /etc/apk/repositories.d /etc/apk/repositories.d-disabled

注意: [P] 均为通配符模式。

apk opkg 描述
apk list opkg list 列出所有可用软件包
apk list P opkg list P 列出匹配 P 的软件包(也可通过 grep 使用正则
apk list --installed [P] opkg list-installed 列出所有已安装的软件包,或匹配 P 的已安装包
apk list --upgradeable [P] opkg list-upgradable 列出可升级的软件包
apk list --providers [P] opkg -A whatprovides P 列出所有提供 P 功能的软件包

变体

  • apk list --installed --manifest - 生成易于用 awksed 解析的“软件包名 版本号”列表。
  • apk info - 不带参数 仅列出已安装的软件包名称,无需额外解析。
  • apk list --orphaned - 显示可能被遗弃的依赖包(即没有顶层依赖声明的软件包)。这可能是卸载其他软件包时残留的结果,但也可能是依赖声明有误。如需删除此类软件包,请务必先确认其确实不再被系统所需。

软件包列表对比示例

通过 opkg 列出所有提供 dnsmasq 的候选包:

$ opkg -A whatprovides dnsmasq  
What provides dnsmasq
    dnsmasq-dhcpv6
    dnsmasq
    dnsmasq-full

通过 apk 列出所有提供 dnsmasq 的候选包:

$ apk list --providers dnsmasq
<dnsmasq> dnsmasq-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0)
<dnsmasq> dnsmasq-dhcpv6-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0)
<dnsmasq> dnsmasq-full-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0) [installed]

通过 opkg 查看当前已安装包中 dnsmasq 的提供者:

$ opkg whatprovides dnsmasq
What provides dnsmasq
    dnsmasq-full

通过 apk 查看当前已安装包中 dnsmasq 的提供者:

$ apk list --installed --providers dnsmasq
<dnsmasq> dnsmasq-full-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0) [installed]
apk opkg 描述
apk info no equivalent 仅显示已安装的软件包名称
apk info P opkg info P 显示软件包 P 的摘要信息
apk info --all P no equivalent 显示软件包 P 的详细信息
apk info --contents P opkg files P 列出软件包 P 包含的所有文件
apk info --who-owns <file> opkg search <file> 查找安装了 <file> 的软件包
apk info --depends P opkg depends P 列出软件包 P 所依赖的所有软件包
apk info --rdepends P opkg whatdepends P 列出所有依赖于软件包 P 的软件包
apk opkg Description
apk extract --allow-untrusted P tar -xvf P 解压软件包 P
apk -p </path/to/root> opkg -d <dest> 调整包到root以外的位置 (例如:ramdisk)
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2026/01/31 06:48
  • by starsfall