从零开始的 Openwrt 及其衍生版编译
软路由实在是比硬路由好用多了,现有的固件也都差强人意,自己编译固件的时候遇到了许多问题,所以在这里写下。
这里的东西仅代表个人观点,实际操作可能因人而异。
选择最适合你的 OpenWrt 分支
- Openwrt
- Lede
- ImmortalWrt
个人建议使用 ImmortalWrt,Lede 第二推荐,在国内的网络环境下,使用 Openwrt 主分支属于自讨苦吃。
环境配置
系统及存储空间
推荐使用 Linux,我个人使用的是 Arch Linux,环境配置只要跑一遍哪个缺补哪个就行。
不过大部分人用的都是 Ubuntu,我还是在这放下 Ubuntu 的依赖吧。
# ubuntu 20.04
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 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 g++-multilib antlr3 gperf wget curl swig rsync
# ubuntu 18.04
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 gcc-multilib g++-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler antlr3 gperf wget swig rsync
存储空间看你想编译带多少插件的 Wrt,根据本人经验最好分配 100G 的空间给系统,桌面发行版占用存储空间大的自行增加。
网络
需要流畅的国际联网,编译时会下载很多东西。
在网络环境不好的时候,会出现文件校验失败的问题,如果多次重下无果,可以参照下面的解决方案。
-
找到
scripts/download.pl这个文件,使用编辑器打开 -
在 280 行左右找到
exit 0 if $sum eq $file_hash;(以 OpenWrt 为例)。if (-f "$target/$filename") { $hash_cmd and do { if (system("cat '$target/$filename' | $hash_cmd > '$target/$filename.hash'")) { die "Failed to generate hash for $filename\n"; } my $sum = `cat "$target/$filename.hash"`; $sum =~ /^(\w+)\s*/ or die "Could not generate file hash\n"; $sum = $1; cleanup(); exit 0 if $sum eq $file_hash; die "Hash of the local file $filename does not match (file: $sum, requested: $file_hash) - deleting download.\n"; unlink "$target/$filename"; }; } -
在下面添加一行
exit 0 if $sum eq "<your sha256 hash>";。
综上,推荐使用国外的 VPS 进行编译,核心数量自己挑。
准备编译
::: info
确保你不是在用 root 用户执行操作,如果是,请赶紧切换为普通用户
:::
克隆相关仓库
# ImmortalWrt
git clone https://github.com/immortalwrt/immortalwrt.git
# Lede
git clone https://github.com/coolsnowwolf/lede.git
# OpenWrt
git clone https://github.com/openwrt/openwrt.git
进入仓库并执行更新,如果有自定义源需要添加请在更新前添加
./scripts/feeds update -a && ./scripts/feeds install -a
配置编译选项
::: warning
一定要保存!!!
不然有你好受的。
配置中不会提示冲突包,所以在编译后要手动修改,把冲突包去掉,这是很不好的一点。
:::
make menuconfig
下载软件包
make download -j8
开始编译
一次编译
make -j1 V=s
# -j 为线程数,首次编译推荐单线程,不然会出奇奇怪怪的问题
# V=s 为输出详细日志
二次编译
拉取最新源码(可选)
git pull
清理构建文件
make clean
# 需要切换架构的还要
make dirclean
调整配置
make menuconfig
更新软件包
make download -j8
再次编译
make -j$(nproc) || make -j1 V=s
常用软件包列表
luci-app-adguardhomeDNS 和网址过滤luci-app-autoreboot高级重启luci-app-baidupcs-webBaidu PCSluci-app-smartdnsDNS 服务器,我现在最常用的luci-app-unblockneteasemusic解锁网易云音乐luci-app-arpbind绑定 IP 到指定的 MAC 地址luci-app-ddns域名解析luci-app-filetransfer文件传输luci-app-frpcfrp 客户端luci-app-frpsfrp 服务端luci-app-upnpUPnPluci-app-mtwifi闭源 wifi 驱动
有些特殊的包没有放出来,如果你需要它,请自行寻找。