编译 OpenWRT 平台上的 gdut8021xclient 校园网客户端

背景

gdut8021xclient

gdut8021xclienthazytintnjit8021xclient 基础上进行修改的、适用于广东某工业大学的 802.1X 客户端

项目地址:https://github.com/hazytint/gdut8021xclient

路由器

在上一年很早很早之前,我就买了这个路由器,并不是什么大品牌,只是根据他的宣传,比较适合我们折腾党折腾,所以就买了。在我折腾之后有一次返厂的经历,因为被我刷成了砖,除此之外,感觉还是可以的。

之前一直都是刷了极路由 1S 的固件,因为极路由固件中带有一个名为「华 3 认证」的功能,可以不用另行安装就直接可以接入校园网。

但过了一段时间之后,莫名其妙的在使用这个路由器上网的时候会提示「您真的要上网吗」,然后需要我回答一个问题,然而这真是十分莫名其妙。

虽然直接 F12 在 Console 中输入 login() 调用登录函数就可以了,但是依然是十分不爽的,于是重刷了 OpenWRT,便有了这篇文章。

路由器硬件信息:

编译过程

在编译 OpenWRT 的 ipk 的时候,我们通常采用 Ubuntu 的系统。

在这次的编译中,我采用的是 Ubuntu 14.04 LTS 64bit

由于采用的是一个全新的系统(我用 lxc 新开的),因此建议把软件源换成服务器最快的,减少我们等待的时间,这里建议使用 apt-select 这个项目。

更新系统并安装依赖

apt-get clean
apt-get update && apt-get dist-upgrade -y
apt-get install -y git-core subversion build-essential gcc-multilib libncurses5-dev libssl-dev zlib1g-dev gawk flex gettext wget unzip python ccache sudo vim libxml-parser-perl dh-autoreconf

创建编译过程中所用的普通用户

在编译过程中,不允许使用 root 用户进行编译,因此我们需要新建一个普通用户并且赋予这个新增加的用户 sudo 权限

useradd -m openwrt
echo 'openwrt ALL=NOPASSWD: ALL' > /etc/sudoers.d/openwrt

切换到刚刚新建的用户

su openwrt
cd ~

下载 SDK

你可以通过这个页面,根据 CPU 的厂家、型号找到适合的 SDK

正如上文所提到的,我的路由器 CPU 是 mt7620 的,因此我在 /ramips/mt7620/ 目录下找到了这个 SDK

具体的下载地址为:https://downloads.openwrt.org/chaos_calmer/15.05/ramips/mt7620/OpenWrt-SDK-15.05-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2

下载地址因不同的路由器 CPU 而异

wget https://downloads.openwrt.org/chaos_calmer/15.05/ramips/mt7620/OpenWrt-SDK-15.05-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
tar xf OpenWrt-SDK-15.05-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
cd OpenWrt-SDK-15.05-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64

下载 gdut8021xclient

我们通过 git 获取源代码,并且将 OpenWRT 的 makefile 设置为默认,然后生成 configure 文件

git clone https://github.com/hazytint/gdut8021xclient package/gdut8021xclient
cd package/gdut8021xclient
cp Makefile_OpenWrt Makefile
autoreconf --install
cd ../../

选择需要编译的模块

首先,我们通过这个命令进入选择界面

make menuconfig

进入 Network

默认情况下,这两个 package 都是标记为 M 的,意思就是编译打包出来。

其中,njit8021xclient 是主要的客户端,njit8021xclient-webnjit8021xclient 的 luci 界面,我个人感觉这个并没有什么用,功能比较鸡肋,因此可以取消编译这个 njit8021xclient-web

选中 njit8021xclient-web 然后按一下空格即可,让前面的 M 去掉

确认完自己所需要安装的东西后,退出这个界面。

开始编译

这里的话,一般来说是比较废时间的,但是在 SDK 上面编译的话速度还是比较快的。

先来看看这台机子有多少核,待会编译的时候为了节省速度可以跑满所有核心

cat /proc/cpuinfo | grep processor | wc -l

根据我这台机子的话,16核,因此输入这个命令编译

make -j 16 V=99

如果不需要调试信息的话把后面的 V=99 去掉即可。

一般来说,几分钟就可以编译完成了

编译完成之后,在 /bin/ramips/packages/base (ramips 根据 CPU 的不同有所不同请主要分别) 就可以找到我们刚刚编译的 njit8021xclient_1.3-testing_ramips_24kec.ipk 文件。

开始安装

编译完成之后,当然你就可以有很多种方式可以将这个 ipk 文件拉到你的电脑上,再拉进你的路由器上面。

添加下面几行到 /etc/opkg.conf

arch all 100
arch ralink 200
arch ramips 300
arch ramips_24kec 300

安装的话也是一条命令的事

opkg install njit8021xclient_1.3-testing_ramips_24kec.ipk`

重启路由器

然后,我们可以通过 njit-client 简单测试是否安装成功

[root@PandoraBox:/root]#njit-client 
命令行参数错误!
正确的调用格式例子如下:
    njit-client username password
    njit-client username password eth0
    njit-client username password eth1
(注:若不指明网卡,默认情况下将使用eth0)

显示上述信息即表示安装成功

注:由于我之前安装了一些其他的库,因此可能你的会有所报错,希望你可以回帖指出或者自行搜索解决方案。

参考资料

简易指南:使用 OpenWrt 的交叉编译 SDK 来编译 ipk 软件包

NemoAlex/openwrt-buildroot: A buildroot for OpenWrt project

gdut8021xclient