环境配置

本地编译

本地编译推荐使用虚拟机,这里仅仅说明vmware下的配置,系统推荐Ubuntu 20.04 LTS 64位服务器版,做如下配置:

  1. 配置好网络
    • 方法一:vmware中将该虚拟机桥接至宿主机联网的网卡,使之成为局域网内的一个设备,在路由器上设置该虚拟机为全局代理。
    • 方法二:新建一个虚拟机安装软路由系统,该软路由虚拟机一个网卡桥接至宿主机网络,另一个网卡位于一个仅主机且关闭vmware自带DHCP的虚拟网络内,充当路由器的角色。编译用的虚拟机位于仅主机的虚拟网络内,通过该软路由虚拟机进行上网。在软路由虚拟机中设置编译虚拟机为全局代理。(此方法会导致局域网无法访问虚拟网络,若想ssh登陆编译虚拟机操作,简单方法就是在软路由虚拟机中将编译虚拟机的22端口转发出来)。
  2. 更换apt源为国内源(e.g. 清华源
  3. 一定不要使用root用户进行编译⚠️⚠️⚠️
  4. 虚拟机磁盘尽量大点,测试分配60G空间编译Docker是不够的😅

更新软件包:

1
2
sudo apt-get update
sudo apt-get upgrade

个人习惯,这里安装好了会重启一下👌

安装编译的依赖:

1
2
3
4
5
6
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 screen

由于之前在路由上设置了全局代理,这一步时候可以将全局代理关闭,完成后再打开。

到这里基本的准备工作就做好了。

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
2
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small

根据需求也可以添加其他的插件源,插件源内容打开GitHub仓库就可以看到了

更新feeds:

1
./scripts/feeds update -a && ./scripts/feeds install -a

本次编译原则是精简自用固件,硬件平台是R4S,需要支持MT7612U芯片USB无线网卡。

  1. 选择目标架构、平台、硬件
  2. Target Images
    1. Kernel partition size:内核分区大小,128MB起步,建议256MB
    2. Root filesystem partition size:根分区大小,建议1024MB起
  3. Base system
    1. blockd
    2. dnsmasq-full:一定选择full的,其他两个功能不全
  4. Administration
    1. htop
    2. netdata
  5. Extra packages
    1. autocore-arm
    2. ipv6helper:支持ipv6
  6. Firmware:基本都是板载网卡固件,我这里不需要所以能全消的全部取消
  7. Kernel modules
    1. Block Devices
      1. kmod-ata-ahci
      2. kmod-ata-core
      3. kmod-block2mtd
      4. kmod-scsi-core
      5. kmod-scsi-generic
    2. Filesystems
      1. kmod-fs-cifs
      2. kmod-fs-ext4
      3. kmod-fs-vfat
      4. kmod-fs-squashfs
      5. kmod-fs-fuse
    3. Native Language Support
      1. kmod-nls-cp437
      2. kmod-nls-iso8859-1
      3. kmod-nls-cp936:中文字符支持
      4. kmod-nls-utf8
    4. Network Devices:有线网卡驱动,按需选择
    5. USB Support
      1. kmod-usb-core
      2. kmod-usb-ohci
      3. kmod-usb-uhci:usb1.1驱动
      4. kmod-usb-storage
      5. kmod-usb-storage-extras
      6. kmod-usb-storage-uas
      7. kmod-usb2
      8. Kmod-usb3
    6. Wireless Drivers:不需要的全部取消,只选中kmod-mt76x2u
  8. LuCi✨:这个帖子内有各个LuCi插件说明
    1. Applications
      1. luci-app-argon-config
      2. luci-app-arpbind
      3. luci-app-autoreboot
      4. Include btrfs-progs
      5. Include lsblk
      6. luci-app-docker
      7. luci-app-eqos:module安装
      8. luci-app-filetransfer
      9. luci-app-ipsec-vpnd
      10. luci-app-nft-qos:module安装
      11. luci-app-nlbwmon
      12. luci-app-passwall:Configuration内按需选择
      13. luci-app-qos:module安装
      14. luci-app-ramfree
      15. luci-app-serverchan
      16. luci-app-softethervpn
      17. luci-app-sqm:module安装
      18. luci-app-statistics
      19. luci-app-ttyd
      20. luci-app-turboacc
      21. Include Shortcut-FE
      22. Include BBR CCA
      23. luci-app-upnp
      24. luci-app-wireguard
      25. luci-app-wol
      26. luci-app-wrtbwmon
      27. luci-app-zerotier
    2. Themes:这里不做修改,一会直接修改Makefile
  9. Network
    1. 我不需要BitTorrent、Aria等,所以相关选项全部关闭
    2. IP Addresses and Names有DDNS相关,我不需要所以全部关闭
    3. WirelessAPD:无线Client相关(没有做详细测试,有wifi需求建议选择)
      1. hostapd
      2. wpa-supplicant
  10. Utilities
    1. Compression
      1. bzip2
      2. gzip
      3. unrar
      4. unzip
    2. Disc
      1. blkid
      2. fdisk
      3. lsblk
    3. Editors:我习惯用vim,所以选择vim-full,按需即可
    4. Filesystem
      1. badblocks:支持ext2文件系统坏块
      2. e2fsprogs:ext2文件系统实用程序 e2fsck,mke2fs
    5. lm-sensors:硬件监控
    6. lm-sensors-detect:硬件传感器查找

到这里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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
config core main
option lang auto
option mediaurlbase /luci-static/bootstrap
option resourcebase /luci-static/resources

config extern flash_keep
option uci "/etc/config/"
option dropbear "/etc/dropbear/"
option openvpn "/etc/openvpn/"
option passwd "/etc/passwd"
option opkg "/etc/opkg.conf"
option firewall "/etc/firewall.user"
option uploads "/lib/uci/upload/"

config internal languages

config internal sauth
option sessionpath "/tmp/luci-sessions"
option sessiontime 3600

config internal ccache
option enable 1

config internal themes

把第二行option lang auto改成option lang "zh_cn"就行了。

修改默认主题

需要修改feeds/luci/collections/luci/Makefile文件,内容贴出来了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#

include $(TOPDIR)/rules.mk

LUCI_TYPE:=col
LUCI_BASENAME:=luci

LUCI_TITLE:=Standard OpenWrt set including full admin with ppp support and the default BootStrap theme
LUCI_DEPENDS:= \
+uhttpd +uhttpd-mod-ubus +luci-mod-admin-full +luci-theme-bootstrap \
+luci-app-firewall +luci-proto-ppp +libiwinfo-lua \
+rpcd-mod-rrdns

PKG_LICENSE:=Apache-2.0

include ../../luci.mk

# call BuildPackage - OpenWrt buildroot signature

需要把luci-theme-bootstrap修改成你需要的主题名字,主题名字就是menuconfig中LuCi-->Thems内项目名。LUCI_TITLE说明最好也一并修改下。

使用argon主题,lean这个仓库已经有了argon主题但是不是我想要的,按照argon的GitHub仓库教程进行替换。

1
2
3
cd package/lean  
rm -rf luci-theme-argon
git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git

操作好了之后去menuconfig内确认下默认主题是argon就好了。

  • 以下内容更新于2021年12月1日
    前几天编译R4S固件时发现上述修改默认主题方法没用了,会导致编译失败。解决方法和原理大佬发在这里了。每个主题包都会将自己设置为默认主题,所以只有最后一个主题包才会生效。所以将默认设置去掉,仅保留想要设为默认主题的那个包里的就行。
    • 主题分别在lede/feeds/luci/themeslede/packages/lean目录下,都是luci-theme-*格式的文件夹。
    • 主题文件夹下的 root/etc/uci-defaults文件内,删除set luci.main.mediaurlbase=/luci-static/*这一行即可取消该包的默认主题设置。

其他

  1. 修改连接数:

    编辑package/base-files/files/etc/sysctl.conf,添加net.netfilter.nf_conntrack_max = 65535,65536是上限自行调整

  2. 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
2
3
4
5
6
cd lede
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make defconfig
make -j8 download
make -j$(($(nproc) + 1)) V=s
  • 修改配置:
1
2
3
rm -rf ./tmp && rm -rf .config
make menuconfig
make -j$(($(nproc) + 1)) V=s

​ 这里也可以不删除.config文件,直接修改,视具体情况确定。

编译生成固件位于bin/targets下。