OpenWrt 24.10自 2024 年 11 月起:包管理器从 opkg 更改为 apk
介绍
自 2024 年 11 月起,OpenWrt 的主要开发分支和未来稳定版本(可能包括即将推出的openwrt 24.10 系列)构建的快照中,包管理器已从传统的 opkg 更换为 Alpine Linux 的 apk(Alpine Package Keeper)。这是 OpenWrt 平台发展的重要里程碑,标志着软件包管理方式的根本转变。
需要注意的是,这一变更不影响 23.05 版本。此外,截至 2024 年 11 月 15 日,24.10 分支的稳定构建仍在使用 opkg,但未来将全面过渡至 apk。
为什么选择 apk?
与旧版 opkg 相比,apk 提供了以下显著优势:
- 包管理效率更高:apk支持更强大的依赖管理和更高效的包操作。
- 签名验证:所有软件包都需要有效签名,提升了安全性。
- 更丰富的功能集:apk提供了更多命令和选项,支持复杂的包管理操作。
常见命令对比
以下是 apk 和 opkg 的常用命令对比:
基本操作
| 命令 | opkg | apk | 描述 | 
|---|---|---|---|
| 更新包索引 | opkg update | apk update | 刷新包源 | 
| 安装包 | opkg install pkg | apk add pkg | 安装指定包 | 
| 卸载包 | opkg remove pkg | apk del pkg | 卸载指定包 | 
包列表和信息
| 命令 | opkg | apk | 描述 | 
|---|---|---|---|
| 显示所有可用包 | opkg list | apk list | 列出所有包 | 
| 显示已安装包 | opkg list-installed | apk list --installed | 列出已安装包 | 
| 显示可升级包 | opkg list-upgradable | apk list --upgradeable | 列出可升级包 | 
| 显示包提供者 | opkg -A whatprovides P | apk list --providers [P] | 显示提供某功能的包 | 
| 显示包的文件内容 | opkg files P | apk info --contents P | 列出包包含的文件 | 
详细对比:签名验证
apk 强制要求所有软件包必须具有有效签名,这是与 opkg 的显著区别:
# 在 apk 中尝试安装未签名包
$ apk add ./owut_2024.07.01~189b2721-r1.apk
ERROR: ./owut_2024.07.01~189b2721-r1.apk: UNTRUSTED signature
# 使用 --allow-untrusted 选项安装
$ apk add --allow-untrusted ./owut_2024.07.01~189b2721-r1.apk
OK: 2313 MiB in 569 packages而在 opkg 中,本地包的签名通常会被忽略,无需额外处理。
列表命令示例
apk 的列出命令支持更丰富的选项,例如孤立依赖(orphaned packages)的列出:
# 显示所有孤立的依赖包
$ apk list --installed --orphaned而在 opkg 中,类似的功能需要依赖其他工具实现。
使用体验:Alpine 的“原生感”
为了更深入地了解 apk,笔者在一台笔记本电脑上安装了 Alpine Linux,并使用了 apk 进行包管理。与 opkg 相比,apk 的语法更加直观,操作体验流畅。以下是一些常用命令的对比示例:
# 旧版 opkg
$ opkg update && opkg install dnsmasq-full
# 新版 apk
$ apk --update-cache add dnsmasq-full总结
apk 的引入为 OpenWrt 带来了更强大的包管理能力和更高的安全性。虽然这一转变需要一定的学习成本,但长期来看,将显著提升 OpenWrt 的可维护性和用户体验。对于使用 24.10 系列及以后的用户,建议尽早熟悉 apk 的用法,顺利完成过渡。
注意:opkg 的老用户需特别留意命令语法的差异,以免影响实际操作。

