上次编译 OpenWrt 还是在上次(编译 Lean Openwrt 并新建 PVE 单网口虚拟机

因发布自制固件的制作人常常不辞而别,后续更新、维护比较麻烦,而且别人的固件往往不能完美符合自己的需求,所以决定自给自足

使用 coolsnowwolf/lede,编译本身并不复杂,这里只记录一些技巧、遇到的问题和解决方法

主要参考了

关于硬件要求

主要注意(虚拟机的)硬盘容量

全新安装的 Debian 13,编译 LEDE 后硬盘总使用量 38G(额外的 LuCI 应用仅有 frpc、KMS 以及少数 CLI 工具)

虽然我没有注意内存使用量,但也至少设置 8G,避免频繁 swap 拖慢速度

如果编译时使用单线程,则对 CPU 核心数没有特别要求

关于编译指令

对于编译时一些常用指令的指南,可以查看 OpenWrt Wiki - Build System Usage

例如

关于自定义 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 还会尝试安装之前的包,导致冲突

最近路由器运行 ChinaDNS-ng 总会不定时崩溃,出现 segfault 错误

ChinaDNS-ng 的开发者需要崩溃时的 coredump,所以需要启用 OpenWrt 的 coredump 功能

环境

  • OpenWrt
    • Linux OpenWrt 6.1.73

参考

步骤

开启 coredump

首先需要确认编译 OpenWrt 时选择了 coredump 功能,由于我的 OpenWrt 已经编译了该功能,所以这里没有对应步骤,也不能确认这个要求是否真实

编译步骤可以参考 OpenWrt:Coredump测试

SSH 登录 OpenWrt,编辑 /etc/profile,开启并解除 coredump 文件限制

在末尾添加一行

ulimit -c unlimited

然后退出并重新登录 shell,查看 ulimit 设置是否生效 Continue reading "OpenWrt 开启并测试 coredump"