上次编译 OpenWrt 还是在上次(编译 Lean Openwrt 并新建 PVE 单网口虚拟机)
因发布自制固件的制作人常常不辞而别,后续更新、维护比较麻烦,而且别人的固件往往不能完美符合自己的需求,所以决定自给自足
使用 coolsnowwolf/lede,编译本身并不复杂,这里只记录一些技巧、遇到的问题和解决方法
主要参考了
关于硬件要求
主要注意(虚拟机的)硬盘容量
全新安装的 Debian 13,编译 LEDE 后硬盘总使用量 38G(额外的 LuCI 应用仅有 frpc、KMS 以及少数 CLI 工具)
虽然我没有注意内存使用量,但也至少设置 8G,避免频繁 swap 拖慢速度
如果编译时使用单线程,则对 CPU 核心数没有特别要求
关于编译指令
对于编译时一些常用指令的指南,可以查看 OpenWrt Wiki - Build System Usage
例如
- 编译日志保存到文件并输出错误信息 Spotting build errors
- make clean、targetclean、dirclean、config-clean 和 distclean 之间清除范围的区别 Cleaning Up
- 编译配置文件 Menuconfig、Defconfig
- 更新源码和 feeds Updating
关于自定义 LAN IP
LEDE 默认的 LAN IP 是 192.168.1.1
如果已有的网络环境 LAN 不是这个子网,每次更新系统需要重新设置,比较麻烦
可以通过 menuconfig 中的以下选项设置 LAN IP
开启 Image configuration Image configuration -> 开启 Use preinit IP configuration as default LAN IP Image configuration -> Preinit configuration options -> IP address for preinit network messages Image configuration -> Preinit configuration options -> Netmask for preinit network messages Image configuration -> Preinit configuration options -> Broadcast address for preinit network messages
同时,也可以在 Image configuration 下的 Version configuration option 中设置编译版本号等信息
关于额外的 LuCI 应用
在 LEDE 项目根目录的 feeds.conf.default 文件中添加以下内容(插件库)
src-git kenzo https://github.com/kenzok8/openwrt-packages src-git small https://github.com/kenzok8/small
然后更新、安装 feeds
关于 Passwall 安装环境
我的使用习惯是编译时不集成 Passwall,方便后续使用安装包升级
但如果 menuconfig 时不开启 Passwall,会导致编译配置中没有自动启用一些 Passwall 组件的依赖(naiveproxy、shadowsocks 库等组件需要额外的库和内核模块)
所以如果需要编译后安装 Passwall,需要手动启用以下组件
Base system -> resolveip Base system -> dnsmasq-full Libraries -> boost (启用) Libraries -> boost -> Select Boost libraries -> Include all Boost libraries. Libraries -> libev Libraries -> libsodium Libraries -> libuci-lua Libraries -> libudns # ----------- 防火墙组件选择开始 ------------ # iptables 与 nftables 二选一,passwall 都支持 # 如果使用 iptables (Base system -> firewall) # 则启用以下两项 Kernal Modules -> Netfilter Extensions -> kmod-ipt-iprange Kernal Modules -> Netfilter Extensions -> kmod-ipt-socket # 如果使用 nftables (Base system -> firewall4) # 则启用 Base system -> firewall4 # ----------- 防火墙组件选择结束 ------------ Kernal Modules -> Network Support -> kmod-inet-diag Kernal Modules -> Network Support -> kmod-netlink-diag Kernal Modules -> Network Support -> kmod-tun # sing-box 依赖 Utilities -> coreutils (启用) Utilities -> coreutils -> coreutils-base64 Utilities -> coreutils -> coreutils-nohup
其实 boost 库只需要两个,但我不确定是哪两个,所以全选上
关于 BusyBox
使用 menuconfig 创建配置文件时,不建议更改 busybox 设置(即开启 Base system -> Customize busybox options)
因为该选项中的一些功能、工具与其他分类中的相同,如果启用,在 busybox 将相应功能、工具打包到固件时会出现冲突,导致编译失败
例如我之前在 busybox 选项中启用了 unzip,而 unzip 也是另外一个 LuCI 应用的依赖,该应用强制启用了 busybox 选项外的 unzip,最后编译失败,提示 busybox 在安装 unzip 时检测到 unzip 已经由该 LuCI 应用提供了
如果出现此类错误,建议按照冲突提示修改配置文件,并且在重新编译前执行一次 make clean,否则 busybox 还会尝试安装之前的包,导致冲突
