自编译适用于 Raspberry Pi 3B+ 的自定义 OpenWrt

自编译适用于 Raspberry Pi 3B+ 的自定义 OpenWrt

小琉璃

前几天闲来无事,想着当做软路由以及透明代理一年半的 Raspberry Pi,还在运行着 Ubuntu 18.04 LTS。由于之前自己乱搞,出了一些莫名其妙的问题……于是就打算换成 OpenWrt


👩🏻‍💻 准备工作

科学上网是必不可少的,还有最好是 Debian 系的 Linux 环境,因为原作者的编译环境是在 Ubuntu 下,非 Debian 系一些软件包包名可能不同或者可能根本不存在一些软件包。琉璃这里使用的是基于 WSL2 的 Ubuntu 20.04 LTS

🔤 源码地址

自定义 OpenWrt 常见的有两个作者,LienolLean's ,两者功能上差不多,但是不知道为什么,Lean's 的我总是编译失败,这里我用的是 Lienol 源

👉🏻 编译方法

首先说明一下,因为某种众所周知的原因,两位作者的源码均已经不包含翻墙相关的插件,所以我们需要手动添加相应的插件到源码里,再进行编译。还有,WSL2 环境中位置务必切换至 ~ 不要使用 /mnt/c/users/<users name>,会出现奇怪的性能问题

1️⃣ 配置环境

sudo apt-get update
sudo apt-get -y install build-essential asciidoc binutils bzip2 curl gawk gettext git libncurses5-dev libz-dev patch python3.5 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

2️⃣ 下载源码

git clone -b 19.07 --single-branch <https://github.com/Lienol/openwrt> openwrt19

3️⃣ 添加科学上网相关插件源码

src-git kenzo <https://github.com/kenzok8/openwrt-packages>

这行代码添加至 openwrt 源码根目录目录下的 feeds.conf.default 文件内,然后执行

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

⚠️ 注意,如果出现类似 WARNING: Makefile 'xxx' has a dependency on 'xxx', which does not exist 的错误,需要先删除 feeds 文件夹 rm -rf ./feeds ,然后再执行上述两个命令,确保完全没问题再进行下一步

4️⃣ 调整 Open­Wrt 系统组件

make menuconfig

首次编译建议只选择架构,其它都不要动,这样编译成功率会更高。Raspberry Pi 3B+ CPU 型号是 BCM2710

进行首次编译后,即可调整( y 标记,n 取消):

Target Images → ext4 / GZip images / Root filesystem partition size 确保大于 300MB

LuCI → Modules → Translations 中选择你需要的语言,默认为简体中文

LuCI → Applications 这里选择插件,我是选择了 clash / SSR Plus / SS-libev / adblock / dnsmasq

LuCI → Themes 主题,我全选了

LuCI → Disc → cfdisk 如果你是在 docker 运行 openwrt 需要选择这个,因为 docker 初始化脚本不识别存储卡,需要手动创建

5️⃣ 预下载编译所需的软件包

make download -j8 V=s

需要全局代理,否则会下载失败导致后续编译出错,WSL2 中使用主机代理参考:WSL2 中使用代理

然后检查完整性

find dl -size -1024c -exec ls -l {} \\;

然后删除小于 1k 的文件后再次执行预下载命令

find dl -size -1024c -exec rm -f {} \\;

重复这个过程直到下载全部完成

6️⃣ 开始编译

make -j1 V=s

首次编译建议单线程编译,之后可以使用如下命令编译

make -j$(nproc) || make -j1 || make -j1 V=s

多线程编译失败后自动进入单线程编译,失败则输出详细日志

二次编译前,需要使用命令清除 config 以便重新配置

rm -rf ./tmp && rm -rf .config


等待编译完成后,可以使用 rufus 刷入树莓派的存储卡,然后打开树莓派进行设置,注意先不要连接网线,以下每个设置完成只点保存,不要点 保存&应用,以防无法连接

编译完成后输出路径:openwrt19/bin/targets

① 连接 OpenWrt 的 WiFi,然后浏览器输入 192.168.1.1 登录,用户名 root,密码为空

② 网络 → 接口 中,设置默认接口为 DHCP 客户端,物理设置 中只选择 以太网适配器: "eth0" ,这个设置是设定树莓派连接 LAN 的 IP

③ 新建一个接口 WAN,设置为静态地址,192.168.2.1 ,子网掩码 255.255.255.0 ,物理设置 中只选择 无线网络: Master "OpenWrt",这个设置是设定树莓派作为 AP 的 IP 内网地址段,不要和主路由器冲突……

④ 应用并插上网线,这时候树莓派应该就可以连上网络了,设置 SSR Plus 中翻墙的设置,这里不再多说

⑤ 设置好之后,AP 应该就可以翻墙了,没有问题,有可能会出现无法访问国内网站的情况,打开 网络 → 防火墙 → 自定义规则,添加如下规则

iptables -t nat -I POSTROUTING -j MASQUERADE

然后重启防火墙,至此设置结束


📎 琉璃已经编译好的 OpenWrt 下载地址:奶牛快传

方便 Raspberry Pi 3B/3B+ 的朋友直接下载使用,插件有 clash / SSR Plus / SS-libev / adblock / dnsmasq


🔗 参考链接

编译更新 OpenWrt PassWall 和 SSR-plus 插件

OpenWrt 编译步骤与命令详解

树莓派 Lean 大雕 OpenWrt 固件之编译篇

树莓派 3B 安装 OpenWrt 打造超级路由器

OpenWrt 软路由无法访问国内网站的解决方法

WSL2 中使用代理

Report Page