解决软路由无法安装软件包的问题

描述

家内网的媒体服务器已经部署好了流媒体，但目前只能在内网进行访问，如果出门在外也能看家里的动漫就好了，所以准备给 openwrt 公开到外网去。

采用的方案自然是动态 ddns，因为电信宽带有动态公网 IP。

当我准备去开启 ddns 功能的时候发现软件包被禁用了，启动项也无法重启 ddns。

虽然不确定是不是固件版本的问题，但重装软件包可能可以解决，抱着试一试的心态打开软件包准备安装的时候，不出意外的话这种时候就出意外了

Copy
* pkg_hash_check_unresolved: cannot find dependency kernel (= 5.15.104-1-c3ae984cf3530f6fa5bf8738be620d7b) for kmod-crypto-aead
* pkg_hash_check_unresolved: cannot find dependency kernel (= 5.15.104-1-c3ae984cf3530f6fa5bf8738be620d7b) for kmod-crypto-manager
* pkg_hash_check_unresolved: cannot find dependency kernel (= 5.15.104-1-c3ae984cf3530f6fa5bf8738be620d7b) for kmod-crypto-ecb
* pkg_hash_check_unresolved: cannot find dependency kernel (= 5.15.104-1-c3ae984cf3530f6fa5bf8738be620d7b) for kmod-mppe

由于内核版本问题，无法安装 ddns 插件

原因

openwrt 中每个大小版本均有对应的 md5 值，即指纹，例如’c3ae984cf3530f6fa5bf8738be620d7b‘这样一串字符。报错是因为个人编译的版本的指纹是经过修改的，通常论坛或者其他途径下载来的大佬编译的” 高大全 “版均经过修改，导致与官方软件包的指纹不匹配，进而产生无法安装软件包的问题

解决办法

通过 ssh 的方式连接 openwrt

Copy
cd /usr/lib/opkg/ && cp status status.bak
vi status
:%s/c3ae984cf3530f6fa5bf8738be620d7b/e469f5589b4c7b368924a6e4f8f7407f/g

替换 status 文件中的指纹，例如我的 openwrt 指纹是c3ae984cf3530f6fa5bf8738be620d7b用官方版本e469f5589b4c7b368924a6e4f8f7407f进行替换

Tip
在 vi 编辑器中%s是替换文字的指令，用冒号呼出编辑器的控制台进行执行

如果这样也没能解决😱。。。那还是重新换一个固件进行安装吧