这是一篇从旧播客备份中恢复的文章,简单记录了为OpenWrt交叉编译MentoHUST的过程。

需要的工具

  • Linux环境(大部分主流发行版均可,我使用的是ArchLinux,你也可以选择自己喜欢的发行版)
  • OpenWrt SDK(下文会介绍)
  • 稳定可靠的网络连接
  • 耐心(编译因电脑配置的不同可能会需要较长的时间,需要耐心等待)

搭建编译环境

安装编译工具

这一步参考OpenWrt的官方Wiki:https://openwrt.org/docs/guide-developer/build-system/install-buildsystem#examples_of_package_installations

这个页面里针对各个Linux发行版都列出了所需的所有软件包,如果编译过程中还是有所欠缺,只需要根据报错信息安装对应的工具即可,这里不再详细展开。

下载OpenWrt SDK并解压

下载OpenWrt SDK之前需要先确定你的路由器CPU平台,可以到OpenWrt官网上通过路由器的型号查询,也可以通过搜索引擎去搜索。相信已经为路由器刷过OpenWrt的都知道自己路由器对应的是哪个平台。

这里我以我的Netgear WNDR3800举例,该路由器属于ar71xx平台,所以打开OpenWrt的Download页面(这里我使用tuna的镜像站以加快下载速度),可以看到有很多个目录,每个目录的名称对应的就是各个平台,这里我选择ar71xx,之后进入generic目录,将页面拉到最底下可以看到:openwrt-sdk-19.07.4-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64.tar.xz,将其下载下来即可。

下载完成之后,解压:

tar xvJf openwrt-sdk-19.07.4-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64.tar.xz

同步MentoHUST源码

这里不用原版的MentoHUST,而是使用已经为OpenWrt打包好的MentoHUST-OpenWrt-ipk

首先cd到OpenWrt SDK的目录下:

cd openwrt-sdk-19.07.4-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64

然后通过git clone将MentoHUST源码同步到package目录下:

git clone https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk.git package/mentohust

开始编译

编译环境搭建完成之后就可以正式开始交叉编译了。

更新feeds

首先需要更新feeds:

./scripts/feeds update

然后安装libpcap feed:

./scripts/feeds install libpcap

这里需要注意,OpenWrt SDK编译libpcap时只会编译出libpcap.so而不会编译出libpcap.a,但是mentohust需要libpcap.a,所以需要修改一下libpcap的Makefile,编辑package/feeds/base/libpcap/Makefile文件,将其中的

define Package/libpcap/install
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcap.so.* $(1)/usr/lib/
endef

修改为:

define Package/libpcap/install
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcap.{a,so*} $(1)/usr/lib/
endef

即让编译libpcap的时候同时编译出libpcap.a

接下来如要对编译配置文件进行简单的配置,这里直接使用menuconfig:

make menuconfig

这里需要关闭Advanced configuration options (for developers)中的Automatic removal of build directories

并确保Libraries下的libpcapM

Network下的Ruijie下的mentohustM

这样menuconfig就完成了,保存一下退出即可

make!

好了,到这一步所有的准备工作就都完成了,接下来就可以开始编译了:

make package/mentohust/compile

这一步需要在线下载libpcap的源码,所以请确保有一个良好的网络连接

如果没有什么意外情况的话,等编译完成之后就能在bin/packages/mips_24kc/base下找到libpcap和mentohust的ipk软件包了:

安装到OpenWrt

接下来就只需要把编译出来的这两个ipk软件包安装进OpenWrt路由器就行了

上传ipk到OpenWrt

scp libpcap1_1.9.1-2.1_mips_24kc.ipk root@192.168.1.1:/root/
scp mentohust_0.3.1-1_mips_24kc.ipk root@192.168.1.1:/root/

安装

SSH连接到OpenWrt路由器,然后执行:

opkg install libpcap1_1.9.1-2.1_mips_24kc.ipk
opkg install mentohust_0.3.1-1_mips_24kc.ipk

MentoHUST LuCI App

将上面编译出来地libpcap和mentohust安装到OpenWrt之后就能ssh连接到路由器,在命令行下面使用mentohust命令进行锐捷认证了,但是通过命令行进行锐捷认证总是不方便的。所以我们还需要一个管理页面,通过浏览器就能管理mentohust的配置和运行状态。

而因为管理页面只是执行一些命令的调用,并不需要像MentoHUST那样针对不同的CPU平台编译可执行文件,所以直接到这个仓库https://github.com/BoringCat/luci-app-mentohustRelease页面下载作者编译好的ipk包然后跟前文一样使用opkg install安装到路由器即可。

至此,就可以愉快地让路由器代替电脑完成锐捷认证了,愉快享受网上冲浪的乐趣吧!XD