OpenWrt编译
环境配置
本地编译
本地编译推荐使用虚拟机,这里仅仅说明vmware下的配置,系统推荐Ubuntu 20.04 LTS 64位服务器版,做如下配置:
- 配置好网络
- 方法一:vmware中将该虚拟机桥接至宿主机联网的网卡,使之成为局域网内的一个设备,在路由器上设置该虚拟机为全局代理。
- 方法二:新建一个虚拟机安装软路由系统,该软路由虚拟机一个网卡桥接至宿主机网络,另一个网卡位于一个仅主机且关闭vmware自带DHCP的虚拟网络内,充当路由器的角色。编译用的虚拟机位于仅主机的虚拟网络内,通过该软路由虚拟机进行上网。在软路由虚拟机中设置编译虚拟机为全局代理。(此方法会导致局域网无法访问虚拟网络,若想ssh登陆编译虚拟机操作,简单方法就是在软路由虚拟机中将编译虚拟机的22端口转发出来)。
- 更换apt源为国内源(e.g. 清华源)
- 一定不要使用root用户进行编译⚠️⚠️⚠️
- 虚拟机磁盘尽量大点,测试分配60G空间编译Docker是不够的😅
更新软件包:
1 | sudo apt-get update |
个人习惯,这里安装好了会重启一下👌
安装编译的依赖:
1 | sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk \ |
由于之前在路由上设置了全局代理,这一步时候可以将全局代理关闭,完成后再打开。
到这里基本的准备工作就做好了。
Github Action
这个没啥好说的,有一个超级大佬做好了一切工作🧱
https://p3terx.com/archives/build-openwrt-with-github-actions.html
定制自己的OpenWrt
一些帖子:
下载OpenWrt源码
直接使用Lean大佬的lede源码,在这里表示由衷的感谢🙏,省去了很多麻烦
1 | git clone https://github.com/coolsnowwolf/lede.git |
添加feeds缝合插件
切换到源码目录下,将以下内容追加到feeds.conf.default
文件末尾并保存:
1 | src-git kenzo https://github.com/kenzok8/openwrt-packages |
根据需求也可以添加其他的插件源,插件源内容打开GitHub仓库就可以看到了
更新feeds:
1 | ./scripts/feeds update -a && ./scripts/feeds install -a |
menuconfig配置
本次编译原则是精简自用固件,硬件平台是R4S,需要支持MT7612U芯片USB无线网卡。
- 选择目标架构、平台、硬件
- Target Images
- Kernel partition size:内核分区大小,128MB起步,建议256MB
- Root filesystem partition size:根分区大小,建议1024MB起
- Base system
- blockd
- dnsmasq-full:一定选择full的,其他两个功能不全
- Administration
- htop
- netdata
- Extra packages
- autocore-arm
- ipv6helper:支持ipv6
- Firmware:基本都是板载网卡固件,我这里不需要所以能全消的全部取消
- Kernel modules
- Block Devices
- kmod-ata-ahci
- kmod-ata-core
- kmod-block2mtd
- kmod-scsi-core
- kmod-scsi-generic
- Filesystems
- kmod-fs-cifs
- kmod-fs-ext4
- kmod-fs-vfat
- kmod-fs-squashfs
- kmod-fs-fuse
- Native Language Support
- kmod-nls-cp437
- kmod-nls-iso8859-1
- kmod-nls-cp936:中文字符支持
- kmod-nls-utf8
- Network Devices:有线网卡驱动,按需选择
- USB Support
- kmod-usb-core
- kmod-usb-ohci
- kmod-usb-uhci:usb1.1驱动
- kmod-usb-storage
- kmod-usb-storage-extras
- kmod-usb-storage-uas
- kmod-usb2
- Kmod-usb3
- Wireless Drivers:不需要的全部取消,只选中kmod-mt76x2u
- Block Devices
- LuCi✨:这个帖子内有各个LuCi插件说明
- Applications
- luci-app-argon-config
- luci-app-arpbind
- luci-app-autoreboot
- Include btrfs-progs
- Include lsblk
- luci-app-docker
- luci-app-eqos:module安装
- luci-app-filetransfer
- luci-app-ipsec-vpnd
- luci-app-nft-qos:module安装
- luci-app-nlbwmon
- luci-app-passwall:Configuration内按需选择
- luci-app-qos:module安装
- luci-app-ramfree
- luci-app-serverchan
- luci-app-softethervpn
- luci-app-sqm:module安装
- luci-app-statistics
- luci-app-ttyd
- luci-app-turboacc
- Include Shortcut-FE
- Include BBR CCA
- luci-app-upnp
- luci-app-wireguard
- luci-app-wol
- luci-app-wrtbwmon
- luci-app-zerotier
- Themes:这里不做修改,一会直接修改Makefile
- Applications
- Network
- 我不需要BitTorrent、Aria等,所以相关选项全部关闭
- IP Addresses and Names有DDNS相关,我不需要所以全部关闭
- WirelessAPD:无线Client相关(没有做详细测试,有wifi需求建议选择)
- hostapd
- wpa-supplicant
- Utilities
- Compression
- bzip2
- gzip
- unrar
- unzip
- Disc
- blkid
- fdisk
- lsblk
- Editors:我习惯用vim,所以选择vim-full,按需即可
- Filesystem
- badblocks:支持ext2文件系统坏块
- e2fsprogs:ext2文件系统实用程序 e2fsck,mke2fs
- lm-sensors:硬件监控
- lm-sensors-detect:硬件传感器查找
- Compression
到这里menuconfig就算配置完了,选择到save将配置保存到.config
文件。
下载dl
此时注意需要将编译虚拟机全局代理
1 | make -j8 download V=s |
静待下载完成
个性定制
修改主机名、时区、lan ip段
需要修改package/base-files/files/bin/config_generate
文件:
set system.@system[-1].hostname
:设置主机名set system.@system[-1].timezone
:设置时区为东八区,值 = ‘CST-8’set system.@system[-1].zonename
:设置时区名为上海,值 = ‘Asia/Shanghai’lan) ipad=${ipaddr:-"192.168.1.1"} ;;
:这里修改默认lan ip
具体内容看这个帖子
修改默认语言
需要修改feeds/luci/modules/luci-base/root/etc/config/luci
文件:
1 | config core main |
把第二行option lang auto
改成option lang "zh_cn"
就行了。
修改默认主题
需要修改feeds/luci/collections/luci/Makefile
文件,内容贴出来了
1 | # |
需要把luci-theme-bootstrap修改成你需要的主题名字,主题名字就是menuconfig中LuCi-->Thems
内项目名。LUCI_TITLE说明最好也一并修改下。
使用argon主题,lean这个仓库已经有了argon主题但是不是我想要的,按照argon的GitHub仓库教程进行替换。
1 | cd package/lean |
操作好了之后去menuconfig内确认下默认主题是argon就好了。
- 以下内容更新于2021年12月1日
前几天编译R4S固件时发现上述修改默认主题方法没用了,会导致编译失败。解决方法和原理大佬发在这里了。每个主题包都会将自己设置为默认主题,所以只有最后一个主题包才会生效。所以将默认设置去掉,仅保留想要设为默认主题的那个包里的就行。- 主题分别在
lede/feeds/luci/themes
和lede/packages/lean
目录下,都是luci-theme-*
格式的文件夹。 - 主题文件夹下的
root/etc/uci-defaults
文件内,删除set luci.main.mediaurlbase=/luci-static/*
这一行即可取消该包的默认主题设置。
- 主题分别在
其他
修改连接数:
编辑
package/base-files/files/etc/sysctl.conf
,添加net.netfilter.nf_conntrack_max = 65535
,65536是上限自行调整Turbo ACC插件可能会导致软路由无故重启,在我的R4S上关了这个确实就好了,也有其他人反馈这个情况。总而言之,该插件的流量分载似乎对软路由没什么意义(硬路由似乎有的?),DNS缓存有很多其他插件可以用,BBR可以选择单独编译进去,Fullcone-NAT的话iptable默认就支持(但是不知道为什么我一打开这个就断网,哪个大佬知道咋回啥麻烦告知下谢谢~ Ver: OpenWrt R21.11.11 / LuCI Master (git-21.329.83689-00cb491))。
编译
- 第一次编译推荐使用单线程编译:
1 | make -j1 V=s |
选项-j
后面的数字就是编译使用的线程数,范围是1到你的机器线程数加一;选项V
是控制日志输出详细程度的,需要详细日志就用V=99
。
第一次编译较为耗时,8700t的cpu用时约3h。
- 二次编译:
1 | cd lede |
- 修改配置:
1 | rm -rf ./tmp && rm -rf .config |
这里也可以不删除.config
文件,直接修改,视具体情况确定。
编译生成固件位于bin/targets
下。