最近发现我的某些服务器的延迟很不稳定,于是就想将我的路由器添加进我的哪吒探针中,让它去ping我的服务器,这样就可以得到最接近我使用时的延迟。但是苦于我的小米路由器实在是太过于垃圾,哪吒面板官方的agent不知为何无法运行,刚好在网上看到大佬的这篇文章,于是我就打算自己编译,中途按照大佬的步骤来做遇到了一点点坑,但是好在大佬将原理讲得足够清晰,使我可以自行纠正一下小错误。
首先说明一下我的准备工作:
编译平台:WSL的Ubuntu22.04
路由器:小米AC2100
2024/7/3更新:
现在哪吒官方已经提供编译过的Agent了,直接去发布页面下载就行。
首先我们需要先有小米路由器的root权限以及使用ssh连接,这个教程可以自行网上搜索。我们需要在我们用于编译的平台配置好环境变量,需要配置go变量,再按照大佬说的安装upx3.95版本,更新的版本我也没有测试,就按照我参考的这位大佬的来吧,如果更新的upx也可以用那欢迎评论指出,我编译的平台上使用的是root账号,尽量减少权限问题。
首先我们先拉库:
git clone https://github.com/nezhahq/agent.git
cd agent
使用以下命令进行编译:
GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -trimpath -ldflags "-s -w" cmd/agent/main.go
上面的命令什么意思,具体大佬的这篇博客以及讲的非常清楚了,我只是稍微修改了一下,因为大佬那篇博客拉取的库和我们的不一样,那个库已经和我们需要编译的agent库分离了,所以拉的库不一样,自然命令也有细微的不同。
编译完成以后我们再使用upx来为编译好的二进制程序来一个”瘦身“,毕竟我们的路由器的内存还是非常小的。
使用以下命令对编译的程序压缩:
upx --best -o 程序名称 agent
这个程序名称随便是什么都行,只要不重复就好,但是为了后续方便,我建议在路由器上再重命名成agent。
然后将该程序上传到你的路由器中,我上传的路径是/etc,因为我的我的路由器已经没有存储空间了,所以不能够将文件放在root文件夹,将文件放入/etc也可以正常运行。
接下来按照哪吒面板官方的教程,将我们的路由器使用agent。
首先我们需要先给我们编译的程序运行权限:
chmod +x /etc/agent #我的程序名称就是agent,你需要改成你的名称
然后创建一个/etc/init.d/nezha-service文件,内容填写如下:
#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /etc/agent -s 面板通信地址:端口 -p 密钥 -d #这里的/etc/agent就是你的程序的路径
procd_set_param respawn
procd_close_instance
}
stop_service() {
killall agent
}
restart() {
stop
sleep 2
start
}
其实上面的nezha-service文件也可以自定义运行参数,来减少我们路由器的负载,只需要在文件中的procd_set_param command后面再加就行了,至于具体可以加哪些以及有什么作用,可以查看官方教程。
再给/etc/init.d/nezha-service权限:
chmod +x /etc/init.d/nezha-service
再开启自启动并且启动监控:
/etc/init.d/nezha-service enable && /etc/init.d/nezha-service start
或者你也可以查看我页脚的探针链接。
最后感谢呉真大佬,以及他的博客文章:https://blog.kuretru.com/posts/b9934504/