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

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

我只是想知道相当于什么

apt-get upgrade
apt upgrade
yum update

使用 OpenWRT 还是 LEDE?

答案1

没有单身的命令或参数,但您可以轻松做到。要升级所有软件包,LEDE 建议,

opkg list-upgradable | cut -f 1 -d ' ' | xargs -r opkg upgrade  

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

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

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

答案2

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

有一个OpenWRT 用户指南的信息框警告解决了这个主题,其中部分内容是:

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

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

总结如下:

盲目升级软件包(手动或通过脚本)可能会给您带来各种麻烦。

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

最后

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

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

我原来的帖子的其余内容保留在下面

引用自 OpenWrt 论坛:

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

不要使用 OPKG 升级!

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

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

简而言之,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 团队核实这是否是使用所提供工具的合理方式。我很希望被证明是错的。

答案3

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

它可以在 github 上找到:
https://github.com/tavinus/opkg-upgrade

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

Curl / Wget 安装说明在这里!


正如上面提到的自述文件.md文件,但升级可能会出现问题。

可能出现的问题:

  • 南瓜问题(ROM 是只读的,因此升级需要闪存或 extroot 上的额外空间)
  • 开发/主干(测试版)问题(测试版可以在升级时软砖化)
  • 空间问题(需要足够的可用空间用于下载和安装)

我还应该提到,从 CRON 升级是一个非常糟糕的主意!
我想说,即使在常规的 Linux 发行版上,盲目升级也不是一个好主意。
升级过程中可能会出现很多问题,而且由于 OpenWrt 通常运行在可能会变砖的设备上,因此在无人值守的情况下进行升级就更没有意义了。

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

  • 如果在一个巨大的 USB 记忆棒上使用 extroot
  • 如果内部闪存为 32Mb 或更大
  • 如果不是使用 dev/trunk(测试版)
  • 如果在有足够空间的 ext4 FS 上运行(x86 金属、VM 等)

尽管如此,我永远不会从 cron 升级。
在升级内部闪存(甚至是大闪存)之前,我还会考虑 20 次,因为这会使其性能下降得更快。

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

干杯!
格斯

答案4

如果你遇到这样的错误

尝试在 while 中分别升级每个文件:

opkg list-upgradable | cut -f 1 -d ' ' | while IFS='$\n' read -r line; do opkg install $line ; done

相关内容