编译环境

macOS 11.3
Docker

前言

这又是一篇迟到的文章,写于2年前,迟迟未发布,最近重新整理了一下,由于个人不喜欢各种插件的堆积固件,所以记录一下编译过程笔记。

关于OpenWrt

提到路由器都绕不过Linksys WRT54G的系统,最开始是因为思科收购了Linksys,而Linksys的路由采用了Linux内核,当时Linux开发组听说里面采用了GPL的Linux代码,要求思科开源相关代码。从此路由系统以此为蓝本发展至今。

2004年OpenWrt开始启动,同一时期出现了DD-WRT,Tomato等优秀固件,2010年后Padavan,Merlin,Pandora等固件开始流行。

2016年由于核心开发者对于OpenWrt的不满,分支出LEDE,并获得多数OpenWrt的开发者支持,2018年又合并回OpenWrt,在原LEDE团队下主导,名字仍叫OpenWrt。

国内小米,极路由等都是基于OpenWrt再次开发,也有开源内核部分代码,至于Luci部分是基于Apache协议我们可能看不到开源了。恩山Lean,KS等也发布了基于OpenWrt的定制固件,集成了不少优秀插件。KS本文不推荐。

编译固件

创建Docker容器

# 拉取Ubuntu的镜像
docker pull ubuntu
# 创建一个基于Ubuntu镜像,名为openwrt的容器
docker run -itd --name openwrt ubuntu
# 登陆到容器环境
docker exec -it openwrt bash

配置环境

# 更新apt
apt update
# 安装必要环境
apt install git gcc g++ unzip make libncurses-dev mkisofs gawk wget python2 python3 rsync file 

配置OpenWrt

# 下载OpenWrt源码
git clone -b openwrt-19.07 https://github.com/openwrt/openwrt.git
# 下载OpenClash源码
git clone https://github.com/vernesong/OpenClash.git

# 复制OpenClash到OpenWrt
cp -R OpenClash/luci-app-openclash openwrt/package
# 更新本地源
./scripts/feeds update -a
# 安装包
./scripts/feeds install -a

输入make menuconfig进入交互式配置界面

修改配置,y键选择,n键排除,X86为例

Target System > x86
Subtarget > x86_64
# 添加web界面
LuCI > Collections > Luci
# 添加简体中文
LuCI > Modules > Translations > Chinese Simplified  
# 添加主题
LuCI > Themes 
# 添加OpenClash
LuCI > Applications > luci-app-openclash 
# 添加wget
Nerwork > File Transfer > wget 
# 添加kmod-tun,TUN模式必须
Kernel modules > Network Support > kmod-tun 

# 设置软件包可用空间,默认安装会占用104M,建议修改扩大
Target Images > Root filesystem partition size

# 排除dnsmasq,我们需要安装dnsmasq-full,不排除会冲突
Base system > dnsmasq 

# curl使用OpenSSL
Libraries > libcurl > Selected SSL library > OpenSSL

开始编译

make -j4 download V=s
make -j4 V=s
# -j为多线程编译

编译完成后的固件在openwrt/bin/targets/x86/64/目录下

参考

(1) Wikipedia OpenWrt
(2) GitHub OpenClash
(3) GitHub OpenWrt
(4) OpenWrt官网