使用 WSL 从源码编译小米路由器青春版 R1CL 带 v2ray 的 LEDE

在使用 Portainer 部署容器时在 glances 看到几乎没流量, 知道又需要走代理了, 然而既然选择了使用 Portainer 这种集成度高的 wrapper 类工具, 就无法避免看不到实际指令只能靠它自动完成, 也就无法自己配置代理, 而且 Portainer 本身也没给出代理配置, 同时也为了以后各种服务不用再重复配置代理, 于是开始考虑路由器级代理.

刚好小米路由器青春版刚被斐讯 K2P 取代而退役, 就顺便编译个 LEDE 加上 v2ray 来做旁路由进行路由器代理吧.

尝试使用 WSL 下 Manjaro 配置依赖

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler

这堆包, LEDE 官方 README 推荐用的是 Ubuntu, 刚开始看到时就感到不妙, 但本着没必要就不装多一个 WSL 发行版的心态, 先看看 Arch 源里有没有替代包.

前面没有问题, 替代包都有, 遗憾的是进行到 make menuconfig 时开始报错, 缺少包. 懒得再折腾, 老老实实去装 WSL Ubuntu.

期间看到 LxRunOffline 可以灵活管理 WSL, 之后试试看.

编译前配置

根据这里配置好 WSL 下的全局代理, 关键语句摘抄如下.

echo "export ALL_PROXY=\"socks5://127.0.0.1:1080\"" >> ~/.bashrc
echo "export all_proxy=\"socks5://127.0.0.1:1080\"" >> ~/.bashrc
sudo tee -a /etc/apt/apt.conf <<< 'Acquire::http::Proxy "http://127.0.0.1:1080";' > /dev/null
sudo tee -a /etc/apt/apt.conf <<< 'Acquire::https::Proxy "http://127.0.0.1:1080";' > /dev/null

继续根据官方 README, 这次 make menuconfig 后成功进入图形配置界面, 不过面对各选项有点不知所措, 从此处得知关键的配置选项, 摘抄如下.

  • Target System: MediaTed Ralink MIPS
  • Subtarget: MT78x8 based boards
  • Target Profile: Xiaomi MiWiFi Nano
  • Target Images: 勾选 squashfs

参考这里进入 LuCI 配置, 选自己需要的插件. 启用 v2ray 的选项如图.

LuCI

生成的 config 存了个 gist.

下载, 编译

然后都是标准流程.

make download -j8 V=s
make -j8 V=s

各命令解释可再次看这里.

第一次用 8 线程编译出错, 第二次用单线程, 成功. 怀疑是 LuCI 插件选太多导致包太大而出错, 调整了一下插件数量直接 10 线程编译, 没问题.

开刷

之后就是进小米路由器青春版的 breed 刷固件了, 这里直接选编译输出里的 squashfs-sysupgrade.bin 后缀文件就可以, 不需要用 initramfs-kernel.bin 后缀的打底.

又因为本人之前在小米官方开发版固件下直接用坊间重置 SSH 密码办法直刷 PandoraBox, 导致 u-boot 分区锁死, 又经历一番探索才成功刷入 breed, 留待下回分解了.

后续

有了自己的 config 文件之后, 后续还可以薅 Github 羊毛利用 Github Action 自动 CI, 解放本地运算/硬盘资源. 这里就不展开了.

参考链接

使用 Windows 子系统 (WSL) 编译 OpenWrt

OpenWrt 编译步骤与命令详解

编译 Lean 的 Openwrt 固件全攻略

OpenWrt 从下载到编译 — 个性化定制内容以斐讯 K2 路由器为例

使用源码编译固件及软件包