使用 WSL 编译 OpenWrt

前言

使用 WSL ( Windows Subsystem for Linux ) 编译 OpenWrt 只需要一台装有 Windows 10 的电脑。相较于虚拟机编译,不需要知道如何安装 Linux ,也不需要考虑磁盘要分配多少空间,且对硬件的要求相对更低。唯一缺点是编译所需的时间是虚拟机的近两倍,不过对于内存较少或者CPU不支持虚拟化的电脑来说结果可能恰恰相反。

安装 WSL

首先需要开启“适用于 Linux 的 Windows 子系统”功能,以管理员身份运行 PowerShell ( WIN+X , A ),执行以下命令并重启。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

从 Microsoft Store 安装 WSL

WSL 默认安装位置在系统盘,如果不希望编译产生的文件撑爆系统盘则需要在安装前修改应用安装位置:设置系统储存更改新内容保存位置

在应用商店下载安装 Linux 发行版,实测 Ubuntu 和 Debian 都是可以编译成功的,对于刚接触编译的萌新建议选择 Ubuntu 。

下载安装后打开,会提示输入用户名和密码。

TIPS: 这里千万要注意不要关闭窗口,否则以后将会默认以 root 用户登录。因为编译 OpenWrt 不能使用 root 用户,所以就需要手动添加用户和设置默认登录账户,或者重置、重装 WSL 应用才能解决。

使用 LxRunOffline 安装 WSL

如果你对自己的技术有信心且喜欢折腾,还可以使用 LxRunOffline 对 WSL 进行自定义安装,而且后续还可以打包整个编译环境到另外一台电脑进行部署,非常方便。感兴趣的小伙伴可以去看《WSL 自定义安装目录、备份转移、设置默认用户 - LxRunOffline 使用教程》,这里就不做赘述了。

配置编译环境

设置代理(加速国际互联网访问)

因为编译所需的软件包散落在世界各地的服务器上,所以加速国际互联网访问在这片有特色的土地上尤为重要。

如果路由器有访问国际互联网的能力是坠吼滴,把这台电脑单独设置为成绕过中国大陆或者全局即可。如果不具备这样的条件,可以在电脑上开启代理软件,通过代理软件的本地端口来加速国际互联网。

输入以下命令进行代理设置:

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
TIPS: 端口根据实际情况修改,前两行是 socks5 端口,后两行是 http 端口。

然后执行以下命令应用配置:

source ~/.bashrc

最后执行以下命令进行验证,无报错并显示代理 IP 则为成功。

sudo apt update && curl ip.sb

想知道为什么这样设置可以看《WSL 代理设置》这篇文章(咕

安装编译依赖软件包

首先更新软件包列表和软件包。

sudo sh -c "apt update && apt upgrade -y"

以下是 Lean 大佬给出的依赖软件包安装指令,原封不动执行即可。

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
TIPS: 这行命令建议执行两次,提示0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.说明安装完整了。

开始编译

编译的过程就像复读机,几乎就是复制粘贴的过程。详细的编译步骤可以去看《OpenWrt 编译步骤与命令详解》,这里不做赘述了。

TIPS: 虽然 WSL 可以通过通过/mnt目录下的cde等目录可分别访问本地的C、D、E等盘,但通过此路径进行编译会因为文件大小写不敏感文件权限问题而导致编译失败。所以编译一定要在家目录中进行。

找到编译的固件

在资源管理器地址栏输入\\wsl$即可访问 WSL 下的文件。以 x86_64 平台为例子,固件所在路径为:

\\wsl$\WSL名称\home\用户名\lede\bin\targets\x86\64

尾巴

在 WSL 中编译 OpenWrt 原本只是一个无聊的尝试,在经历过最初的几次失败后本打算放弃,不过后来经过努力排除了各种坑还是顺利编译成功了。因为编译效率太低,感觉没什么卵用,两个月前就打算水的文章就弃坑了,后来发现那几篇与 WSL 有关的 OpenWrt 编译问题解决文章访问量很大,所以决定还是把这个坑补上。希望这篇文章对看到的小伙伴有所帮助。


更多 OpenWrt 相关文章点这里

欢迎随手订阅博客的 Telegram 频道,接收最新的文章推送和有趣的内容。你还可以加入博主的 Telegram 群组,和小伙伴们一同交流、学习、成♂长。

添加新评论

评论列表