LGiki's Blog

愿每个人都能被这个世界温柔相待

为OpenWrt交叉编译MentoHUST

碎碎念

最近开始读研了,来到了新的学校,最重要的就是赶紧把路由器折腾好,有一个可靠的网络连接,愉快地网上冲浪。虽然手机套餐是无限流量的,可以通过手机开热点给电脑等其他设备使用,但是宿舍区人特别多,基站的承载量根本没法满足这么多用户的上网需求,网络特别慢,断断续续的,并且所谓无限流量实际上也不是真正的无限流量,超过了一定额度之后是会限速的。

这里不得不吐槽一下新学校的网络,简直是垄断中的垄断,虽然是电信、移动和联通这三家运营商都提供校园网络,但是只有联通是通过锐捷认证,能拿到学校内网IP的,其他两家都是各自拉线,无法得到学校内网IP。这就意味着如果需要在宿舍使用学校内网的资源,就必须开通联通的宽带。这里联通的宽带只有50Mbps,比我本科时所用的联通宽带100Mbps速度还慢,而套餐价格却是我本科的两倍左右。特别想念本科学校提供的10元/月教育网,再加上联通10元/月的宽带,一个月20元就能享受到100Mbps的网络连接,且提供了IPv6。

再吐槽一下新学校的方方面面,食堂比本科贵了不少,虽然种类是丰富了一点,但是觉得贵出来的这些钱并不值得。宿舍区离教学区特别远,所以满世界都是电动车、自行车,走在路上都得特别小心,宿舍区也因为四处的电动车显得特别拥挤,特别讨厌这样的环境。宿舍很小,柜子破破烂烂的,阳台也很小,晾衣服的地方也极不合理,衣服很不容易晾干。

如果可以,我真的是一刻都不想再待在这个破地方。本科的时候一直在骂本科的学校不好,到头来,真的觉得本科的学校是哪里都好。哎,有什么办法呢?读完研赶紧去工作吧。

言归正传,今天来聊聊如何为OpenWrt交叉编译MentoHUST,让OpenWrt代替电脑完成锐捷认证。

既然是要编译,首先肯定是需要准备编译环境的,主要就是交叉编译的工具链,幸运的是,OpenWrt已经为我们把所有需要的交叉编译工具链准备好了,我们只需要下载OpenWrt提供的SDK解压出来就能用了。

下面就开始详细介绍一下交叉编译的流程。

需要的工具

  • 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,将其下载下来即可。

下载完成之后,解压:

1
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的目录下:

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

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

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

开始编译

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

更新feeds

首先需要更新feeds:

1
./scripts/feeds update

然后安装libpcap feed:

1
./scripts/feeds install libpcap

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

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

修改为:

1
2
3
4
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:

1
make menuconfig

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

并确保Libraries下的libpcapM

Network下的Ruijie下的mentohustM

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

make!

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

1
make package/mentohust/compile

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

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

安装到OpenWrt

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

上传ipk到OpenWrt

1
2
scp libpcap1_1.9.1-2.1_mips_24kc.ipk [email protected]:/root/
scp mentohust_0.3.1-1_mips_24kc.ipk [email protected]:/root/

安装

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

1
2
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

Buy me a cup of coffee