如何在 OpenWRT 中升级所有已安装的软件包?

Eva*_*oll 53 openwrt upgrade opkg lede

我只是想知道什么是等价的

apt-get upgrade
apt upgrade
yum update
Run Code Online (Sandbox Code Playgroud)

用 OpenWRT 还是 LEDE?

Eva*_*oll 104

没有单一的命令或参数,但您可以轻松完成。要升级所有包,LEDE 建议

opkg list-upgradable | cut -f 1 -d ' ' | xargs -r opkg upgrade  
Run Code Online (Sandbox Code Playgroud)

人们使用 AWK 等还有其他效率较低的方法。

一个重要的警告通常伴随着 LEDE / OpenWRT 的广泛使用opkg

由于 OpenWrt 固件将基础系统存储在一个压缩的只读分区中,因此对基础系统包的任何更新都将写入读写分区,因此比仅覆盖压缩基础中的旧版本使用更多的空间系统分区。建议检查内部闪存中的可用空间以及基本系统包更新的空间要求。


J. *_*eis 16

据我所知,这个问题的正确答案是,在 OpenWrt 上没有apt upgrade 的等效项,也没有可以创建等效功能的命令集。维护 OpenWrt 存储库的目的不是为了保持最终用户的包更新(您应该通过刷机从一个版本移动到另一个版本)并且 opkg 不处理甚至检查依赖项。

OpenWRT 用户指南有一个信息框警告,该警告部分解决了这个主题:

一般来说,非常不鼓励使用 opkg upgrade。几乎在所有情况下都应该避免这种情况。特别是批量升级极有可能导致大问题,但即使升级单个包也可能导致问题。还需要强调的是,这与升级 OpenWrt 版本(主要版本以及维护升级)的 sysupgrade 路径明显不同。opkg upgrade 不会更新 OpenWrt 版本。只有 sysupgrade 可以做到这一点。两者并不等价。

与 Linux 的“大发行版”不同,OpenWrt 经过优化以在资源有限的系统上运行。这包括 opkg 包管理器,它没有内置的 ABI(应用程序二进制接口)兼容性和内核版本依赖性验证。虽然有时可能没有问题,但无法保证,升级可能会导致从轻微到严重的各种类型的不兼容,并且可能很难排除故障。此外,opkg 升级过程会消耗闪存空间。由于它不会(也不能)覆盖原始(存储在 ROM 中),因此它必须将升级后的包存储在 r/w 覆盖中。

它总结为:

盲目升级软件包(手动或通过脚本)可能会导致您遇到各种麻烦。

仅仅因为给定软件包的更新版本并不意味着它应该被安装或它会正常运行。在进行任何升级之前通知自己,以确定升级是否安全。

最后

在 OpenWrt 中有两种管理/安装软件包的方法:使用 LuCI 网络界面软件菜单(系统 > 软件),以及通过命令行界面(CLI)。这两种方法都调用相同的 CLI opkg 可执行文件,从 OpenWrt 19.07.0 开始,LuCI 界面现在有一个“更新”选项卡,其中列出了具有可用升级的软件包列表。LuCI 升级...按钮执行本文中讨论的相同 opkg 升级命令。相同的警告适用于使用 LuCI 和 CLI 升级包。

整个信息框都值得一读。它出现在有关显示可用软件包升级的用户指南本部分的顶部。

我的原始帖子的剩余内容保留在下面

来自 OpenWrt 论坛的引用:

我们这些对 OpenWrt 有更多经验的人都知道,使用 opkg upgrade 是一个坏主意(除非有非常具体的原因),因为事情可能会破裂。但是许多其他用户不知道——他们认为它就像任何其他 linux 安装一样,并且升级应该在大多数时间有效。

不要使用 OPKG 升级!

说真的,不要。曾经。除非您知道自己在做什么,否则有充分的理由去做,并且愿意承担如果您在路由器运行不佳时弄乱了路由器的后果。它将消耗闪存空间,但更重要的是,可能存在内核不匹配和其他损坏的依赖关系,这可能会导致 OpenWrt 出现各种问题——其中一些只是令人讨厌的级别,其他可能非常严重,需要重新刷机等等.

永远不要使用 opkg upgrade - 这种方法可能会给您带来重大问题,并且实际上不会升级版本。有些人会说他们已经成功地使用了 opkg upgrade,但是对于这些人中的每一个人来说,还有更多的人遇到了完全由该过程引起的问题——有些是小问题,有些是大问题。只是不要这样做

简而言之,LUCI 中没有包含用于执行此操作的 GUI 选项是有原因的。此处建议用于其他答案的方法将实现类似于 apt/apt-get 的效果,但底层工具的工作方式与 apt 或 yum 不同。可能的问题超出了提到的存储空间不足的可能性(这很糟糕,但如果小心,可以避免)。

参考资料:https : //forum.openwrt.org/t/okpg-upgrade-safeguards/30326
https://forum.openwrt.org/t/opkg-upgrade-vs-flashing-sysupgrade/58906
https://forum。 openwrt.org/t/sysupgrade-instead-of-opkg-upgrade/32897/4

我不是 OpenWRT 专家,我来到这个线程是因为它仍然是“更新 wrt”的顶级网络搜索结果。阅读完这个帖子后,我继续访问 OpenWrt 论坛,包括上面链接的帖子。我只是试图通过传递我发现的信息来帮助最终用户避免未来的问题,这些信息大概是由比我更熟悉/知识渊博的人编写的。

那些希望继续提倡使用各种命令来使 OpenWrt 上的软件包保持最新的人,请考虑花时间与 OpenWrt 团队验证这是使用所提供工具的合理方式。我很想被证明是错误的。

  • 从广义上讲,因为我不是声称从 repo 和 xarg 将该列表中的更新包列表拉入 opkg 是一个好主意的人。这是你的主张,如果你关心你将此建议传递给的人,你会检查我自己提出的担忧。安全检查您的答案不是我的工作。这是您在提供答案并公开发布时应该承担的责任。我提供的答案是“OpenWrt 上没有等同于 'apt upgrade'||'yum update' 的功能。我相信答案是正确的。 (4认同)
  • 我们为什么要进行这样的对话?我有一个带有 OpenWrt 的路由器,并且对更新感兴趣,来到这个线程。然后我做了更多的阅读并意识到 opkg 不是 apt 的完全重新实现,并且不处理 deps 等,因此如果将系统用于多个 pkg,则存在使系统崩溃的真正风险,现场升级。所以我试图用这些信息更新这个线程,以造福后来者。您显然对与这些信息进行有意义的互动不感兴趣,那么您为什么要关心它在这里呢?未来的读者可以自己决定是吗? (4认同)
  • 论坛上的那些建议简直是荒谬的。路由器必须始终保持最新状态,它们是 SOHO 网络的主要攻击面。没有什么比破坏一个可以稍后修复的设置更好的方法了。https://www.arnnet.com.au/article/685702/flaws-widely-used-dnsmasq-software-leave-millions-linux-based-devices-expose/ (2认同)

Gus*_*ves 8

我创建了一个小脚本opkg-upgrade,用于以更好的方式处理升级。

它在 github 上可用:https :
//github.com/tavinus/opkg-upgrade

它将使升级变得如此简单:
opkg-upgrade

Curl / Wget 安装说明在这里!


正如readme.md文件中提到的,升级可能会出现问题。

可能的问题:

  • squashfs 问题(ROM 是只读的,因此升级需要额外的闪存或 extroot 空间)
  • 开发/中继(测试版)问题(测试版可以在升级时变软)
  • 空间问题(下载和安装需要足够的可用空间)

我还应该提到,从 CRON 升级是一个非常糟糕的主意!
我想说,即使在常规的 Linux 发行版上,盲目升级也不是一个好主意。
升级时有很多事情可能会出错,而且由于 OpenWrt 通常在可以变砖的设备上运行,所以在无人看管的情况下进行更没有意义。

简而言之,我永远升级的唯一情况是:

  • 如果在巨大的 U 盘上使用 extroot
  • 如果内部闪存为 32Mb 或更大
  • 如果使用 dev/trunk(测试版)
  • 如果在具有足够空间的 ext4 FS 上运行(x86 metal、VM 等)

不过,我永远不会从 cron 升级。
在升级内部闪存(即使是大闪存)之前,我也会考虑 20 次,因为那样会更快地降低它的性能。

我的脚本可以选择发送包含可用更新的电子邮件报告。
所以我建议在cron中添加报表工具,然后人们可以在收到电子邮件后手动升级。这使事情变得更安全,同时还提供了修改升级的选项。

干杯!
格斯


小智 5

从 OpenWrt 19.07 开始,执行opkg upgrade [pkgname]可能会抛出此错误。

Collected errors:
 * pkg_hash_add_from_file: Failed to open /var/opkg-lists/openwrt_routing: Out of memory.
Run Code Online (Sandbox Code Playgroud)

解决方法是使用opkg install替代方法,这与升级软件包的方式相同luci-app-opkg

opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg install 
Run Code Online (Sandbox Code Playgroud)