OpenWrt
基础指南
新手折腾第一步,必看!
Padavan
基础指南
老毛子、PDCN教程中心
固件集合
下载指南
固件官网下载链接
网络共享
设置教程
U盘无线共享 USB网络共享
https://shop109263549.taobao.com/ (你好多多淘宝店铺)
路由改打印共享交流QQ群:905685622 普通用户交流QQ群:940581499 (验证 dd)此群只是爱好者的交流群!
热度:0您当前的位置:首页 > 教程 > OpenWrt / LEDE

解决OpenWrt下安装插件缺少依赖、架构不兼容、依赖冲突的问题

时间:2022-06-08 02:12:18 / 来源:csdn.net / 作者:大奖装

我使用的路由器是小米AX3600,使用的固件是lean大的闭源驱动openwrt固件,固件版本OpenWrt R21.12.17,内核版本4.4.60。
由于固件是lean编译,且lean不提供源码,所以遇到没有的插件,只能采用ipk方式安装,本次我需要安装的插件是xxxxx。

捐助 / 购买付费资源请扫码

环境描述

我使用的路由器是小米AX3600,使用的固件是lean大的闭源驱动openwrt固件,固件版本OpenWrt R21.12.17,内核版本4.4.60。

由于固件是lean编译,且lean不提供源码,所以遇到没有的插件,只能采用ipk方式安装,本次我需要安装的插件是xxxxx。

xxxxx需要安装4个ipk,分别是:

luci-app-xxxxx_2.0-19_all

luci-i18n-xxxxx-zh-cn_2.0-19_all

xxxxx-easy-rsa_3.0.8-3_all

xxxx-xxxxx_2.5.4-1_aarch64_cortex-a53+crypto

其中,xxxxx-xxxxx和xxxx-easy-rsa是主程序。luci开头的是界面文件,luci开头带zh的是中文翻译包。先安装主程序,再安装luci包。

安装主程序xxxxx-xxxxx时,出现依赖报错

看到dependencies,就要知道是缺少依赖,根据提示,是缺少liblzo2这个依赖,所以我下载了 liblzo2_2.10-4_aarch64_cortex-a72。

安装liblzo2时,出现架构报错

pkg_hash_fetch_best_installation_candidate: Packages for liblzo2 found, but incompatible with the architectures configured。

这是由于opkg没有配置好对应的架构信息(配置文件路径/etc/opkg.conf),导致ipk无法安装的情况.

如果机器硬件架构和ipk文件架构本来就不是一样的,那肯定就是安装不上的,即使强行安装上了也是运行不了的。例如,你在arm硬件架构的机器上,试图安装x86架构的ipk,那肯定是装不上的,也用不了的。

一般来说,从.ipk文件的文件名就可以猜测ipk文件可能对应的硬件架构。例如liblzo2_2.10-4_aarch64_cortex-a72表明它是aarch64_cortex-a72架构的ipk包;

如果无法从文件名判断架构信息,可以将ipk包解压,查看里面的control文件,即可看到对应的架构信息。具体方法:将xxx.ipk改后缀成xxx.tar,然后使用WinRAR(Windows)或者tar工具(Linux)即可解压。解压完之后,找到control.tar.gz文件,再解压control.tar.gz,即可找到control文件,control文件的内容可能如下:

其中,Architecture后的字符串即是该ipk对应的架构,例如aarch64_cortex-a72

注意,如果使用WinRAR,那么第一次解压之后可能需要将得到的文件手动添加上.tar后缀才能继续解压
解决架构报错方法
查清路由器上所有已装软件的架构
错误的做法:很多人只是简单地将上述待安装的ipk的架构(例如aarch64_cortex-a72)添加进opkg.conf(如下所示):

那么可能在试图安装该ipk时遇到输出大量的已安装软件的架构不匹配信息。

此时你不应该试图补充安装libc,也不应该试图补充其他报架构不匹配的任何软件。
因为此时你的openwrt并不是真的缺失支持库,而是你修改配置文件(/etc/opkg.conf)之后并没有把以前已安装的软件架构信息补上,导致openwrt不认识已安装的软件了。
先编辑/etc/opkg.conf,删除刚刚添加的所有架构信息,即删除所有以arch开头的行。并且保存文件。
然后使用putty等虚拟终端软件连接openwrt终端,然后输入:

你会看到类似下面的输出:

可以看到,当前openwrt系统里只有两种不同的软件架构。一种是all,另一种是aarch64_cortex-a53+crypto。

提示:架构信息不同系统可能不一样。因此请在你自己的OpenWrt终端里亲手输入(or复制粘贴,whatever)以上命令,然后看清楚你自己的输出,根据实际的输出情况自行替换。请不要直接照抄我的结果。你我的结果很可能不一样,你直接照抄我的结果是很可能用不了的。

修改/etc/opkg.conf
从上面的操作中,我们已经了解到以下事实:当前的openwrt里只有all和aarch64_cortex-a53+crypto两种架构的软件。而我们现在试图安装的ipk架构是aarch64_cortex-a72。那么,我们希望系统能够正确识别3种架构的软件:原来的all和aarch64_cortex-a53+crypto,以及将要安装的aarch64_cortex-a72。
因此,我们编辑/etc/opkg.conf,追加3行架构信息(以arch开头):

改好后的完整的/etc/opkg.conf可能是下面这样的:

保存文件,然后重新安装ipk,应该就可以正常安装IPK了。
同理,如果你的路由器存在很多种架构的软件,或者你打算安装很多种不同架构的软件,你应该把这些架构全部都按格式加入/etc/opkg.conf(每种架构只需要加入一次)。
提示:后面的数字(例如100)表示多种架构的软件同时存在时安装采用的优先级,数字越小优先级越高。如果你的路由器不只有2种架构的软件,请灵活变通,按格式通通加到/etc/opkg.conf里来。

解决了架构问题后,liblzo2安装时还是报错,提示:

猜测应该是之前安装时,虽然安装失败,但是相关配置文件已经写入系统目录导致。并不是真正的依赖冲突。

解决依赖冲突方法
上述并不是真正的依赖冲突,所以我们手动删除提示中的/usr/lib/liblzo2.so.2、/usr/lib/liblzo2.so.2.0.0,再进行安装,就可以成功!

参考链接:
修改opkg.conf解决incompatible with the architectures configured问题
解决Openwrt安装插件提示依赖冲突的方法
————————————————
版权声明:本文为CSDN博主「大奖状」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010857736/article/details/123543325