家里面的路由器一直在使用非常古老的小米路由器Pro 3,这么多年都没有换过,原因就是因为我已经使用OpenWrt替换了原厂的操作系统,并且在github上构建了自己的Github Action,每周六早上自行编译操作系统,并且通过SSH上传到路由器上,自行刷机。

过去几年,这个机制运转很正常,但大约两三个月前,却突然中断了,每周六早上收到的都是Github Actions failed的邮件通知。但由于工作繁忙,也一直没有时间深度挖掘这事情。

上周末有点儿时间,决定认真研究一下,看了单线程的编译日志,发现问题出现在NodeJS的编译上。小米路由器Pro 3采用的是MT7621,但NodeJS现在已经停止支持ramips平台了。所以造成了这个问题。

从配置文件中仔细看了一上,发现我选择的组件中并没有NodeJS依赖,那就直接不再选择NodeJS编译就可以了呗?结果发现根本无法取消选择,在.config文件中将所有的含有Node字样的组件都替换为"N"也不行。后来看了一下,NodeJS会根据平台SOFT_FLOAT选择是否编译,那简单了,直接到NodeJS的Makefile中移除这个就可以了。

下面就是我的解决方案:

sed -i 's/DEPENDS:=@(HAS_FPU||KERNEL_MIPS_FPU_EMULATOR||SOFT_FLOAT)/DEPENDS:=@(HAS_FPU||KERNEL_MIPS_FPU_EMULATOR)/g' ./openwrt/feeds/packages/lang/node/Makefile