记录下 Openwrt 的 本地编译 操作的全过程,包括选择自定义插件等过程

注意,Openwrt 的 Github Action 编译存在封号风险,不建议使用

编译过程中有依赖的下载,需全程保持 科学上网 的状态

准备工具-Linux环境

  • 推荐 Ubuntu 镜像: ubuntu-20.04.4-desktop-amd64.iso
  • 至于 ubuntu-desktop 最新版以及网上教程最多的 18.04 LTS 版,都不推荐,会有一部分插件需要手动添加
  • (旧版下载路径) 进入 Ubuntu官网 后,点击 下载 按钮后再点击 Ubuntu桌面系统 标题,之后再点击右下角的 其他下载 ,滑动页面到最下边可见
  • 此外,此 ubuntu 版本也可用于 Padavan编译
准备工具-梯子
  • 这里不提供梯子的下载,倘若你是使用 v2ray 订阅地址的用户,推荐在 Ubuntu 中安装 V2rayA
  • →V2rayA for Ubuntu and Debian
环境安装

  • 此篇教程使用的是 Vmware workstation 虚拟机,倘若想使用其他虚拟机软件,可自行搜索教程
  • (注意) 设置处理器时,处理器数量一般情况都选择 1 ,内核数量推荐选择 2 以上 (比如:8 核 16 线程的电脑,此处的内核数量设置范围为 1~8,依据在于你的电脑 CPU 最大几核)
  • 启动 Vmware workstation,选择创建 虚拟机

  • 安装进入 Ubuntu 后,若更新后重启,当看到印有 Ubuntu 字体画面时记得按 Enter 键跳过
  • (可选) 等进入界面时,桌面右键,选择 Display Settings ,在 Resolution 处选择分辨率, Scale 处选择缩放大小
  • 键盘按下 Ctrl + Alt + T 键唤出命令符 (cmd),输入 sudo apt update 更新环境库
编译环境准备及编译源码拉取

# 编译环境准备

cmd命令符下,输入以下命令
sudo apt-get update -y
sudo apt-get full-upgrade -y
sudo apt-get install -y ack antlr3 asciidoc autoconf automake autopoint \
binutils bison build-essential bzip2 ccache cmake cpio curl \
device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev \
libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev \
libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz mkisofs msmtp \
nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip \
qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl \
unzip vim wget xmlto xxd zlib1g-dev

# 编译源码拉取

  • →Openwrt Github 官方
  • →Openwrt-Lean Github Lede
  • →Openwrt Github Lienol
Openwrt Github 官方源 - `https://github.com/openwrt/openwrt.git`
Openwrt-Lean Github Lede源 - `https://github.com/coolsnowwolf/lede.git`
Openwrt Github Lienol源 - `https://github.com/Lienol/openwrt.git`
////
cmd命令符下
##可通过`git clone url`命令拉取Openwrt源
例如想拉取Lede源,可输入`git clone https://github.com/coolsnowwolf/lede`
下载好后,可在Ubuntu桌面`左边`文件夹的`Home目录`下看到lede文件夹。
##当拉取命令不输入指定文件夹或路径时,默认以`url最后的_/_号后面的字符串`来创建新的文件夹
##倘如想拉取并放到指定文件夹中,可在填写`git clone url`命令后输入空格并加上指定路径文件夹
例如,输入`git clone https://github.com/coolsnowwolf/lede.git openwrt/lede`
这表示拉取lede源并放到`openwrt`目录下`lede`文件夹下。
##倘若想拉取指定分支版本(旧版本)的源,可通过`git clone -b branch-name url`命令拉取
例如,想拉取Openwrt官方源的`openwrt-21.02`分支版本,可输入
命令`git clone -b openwrt-21.02 https://github.com/openwrt/openwrt.git`拉取。
`注意`,拉取时可`先`在对应源的Github仓库看看`有没有`分支版本。
##倘若想拉取指定tag版本的源,可通过`git clone -b tag-name url`命令拉取
例如,想拉取lede源的`20200915`tag版本,可输入
命名`git clone -b 20200915 https://github.com/coolsnowwolf/lede.git`拉取。
`注意`,拉取时可`先`在对应源的Github仓库看看`有没有`tag版本。
##倘若已经拉取了最新源版本,可通过`git checkout branch-name`命令更换到指定分支
例如,
已经通过`git clone https://github.com/Lienol/openwrt.git`命令拉取了
最新master分支的openwrt源,可通过cmd命令符,输入`cd openwrt`切换到openwrt目录,
再输入`git branch -a`查看全部分支版本,
例如显示有`openwrt-18.06`,可通过`git checkout openwrt-18.06`切换到`openwrt-18.06`
正式编译步骤
//推荐先看下方图片及介绍
##假如已经拉取了`Openwrt-Lean Github Lede源`
##(Ctrl + Alt + T)cmd命令符下输入指令
cd lede
./scripts/feeds update -a && ./scripts/feeds install -a
make menuconfig
##当menuconfig配置好后
make download -j8
make V=s -j1
##假如编译出错后想再重新编译
可在cmd命令下执行命令(lede或openwrt目录下)
make clean						清除lede/bin目录下对应型号文件夹的所有文件
make menuconfig
make download -j8
make V=s -j1
##假如想完整的重新编译
可在cmd命令下执行命令(lede或openwrt目录下)
make clean
rm -rf ./tmp     				清除编译过程产生的缓冲文件
rm -rf .config  				清除menuconfig配置文件
./scripts/feeds clean			清除feeds目录的所有文件
./scripts/feeds update -a
./scripts/feeds install -a
make download -j8
make V-s -j1
##当第一次编译完成后,想添加软件后进行第二次编译
可在cmd命令下执行命令(lede或openwrt目录下)
make menuconfig
make V=s -j$(nproc)

  • 键盘方向键上下 选择配置参数, 左右 选择底下操作参数, 空格Enter键 表示选中,当选择配置里的内置参数时需按空格键,当按下空格键时 <M> 这表示预选状态还是没选中;再次按下空格键时 <*> 才完成选中,底下栏选择后需按 空格或Enter键 来确定选中
  • Target System → 默认为 x86 处理器架构,在编译自定义插件时需选择对应自己路由器的架构,如:极路由 1s (黑色 \ 金色) 、K2 和 K2P 均为 Media Tek(联发科) 的架构,此处应该选择 MediaTek Ralink MIPS
  • Subtarget → 默认为 x86_64 型号,在编译自定义插件时需选择对应自己路由器的型号,如:极路由 1s (黑色 \ 金色) 的型号为 MT7628AN,此处应该选 MT76x8 base boards
  • LuCIThemes → web 界面主题选择,lede 源默认为 bootstrap,Openwrt 官方源需自行选择
  • LuCIApplications → 软件包选择,可自行选择需要的路由器软件
  • 当完成 menconfig 的配置后,通过左右键在底下选择 Exit 按钮退出,当有 提示 时其表明内容经过修改 是否保存
  • 其他没提到的参数此阶段不需要配置

# 关于 nano 的常用操作

  • 修改完文件内容后,输入 Ctrl + X 后按 Y键Enter键 即可保存并退出

# 默认主题更改

  • lede 源
lede源默认主题为bootstrap
修改方法
cmd命令符中执行命令
sudo nano lede/feeds/luci/collections/luci/Makefile
##LUCI_TITLE参数
~and the default `Bootstrap` theme 中的Bootstrap 替换为 `Argon(你的主题名字)`
##LUCI_DEPENDS参数
+luci-theme-bootstrap 中的bootstrap替换为`argon`
##关于如何知道主题的名字
可参考`lede/feeds/luci/themes`目录下的文件夹名字
例如`luci-theme-argon`,其主题名字就为argon
##倘若想替换为自己下载的主题
例如想替换为`jerrykuku``argon`主题
可在cmd命令符中执行命令
cd lede/feeds/luci/themes
rm -rf themes/luci-theme-argon
git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git
##目录返回上一级
输入指令`cd ..`
  • Openwrt 官方源
Openwrt官方源中没有内置主题
只需在menuconfig中的`LuCI``theme`中选择对应主题即可
##倘若想替换为自己下载的主题
例如想替换为`jerrykuku``argon`主题
cd openwrt/package
git clone https://github.com/jerrykuku/luci-theme-argon.git  
make menuconfig
最后在LuCI → Themes中选择即可

# 默认 Lan 口 IP 更改

  • lede 源
cmd命令符下输入指令
sudo lede/package/base-files/files/bin/config_generate
找到第150行左右的`"$protocol"`参数下的`lan)ipad=${ipaddr:-"192.168.1.1"}`
通过修改`192.168.1.1`来改变ip地址。
  • Openwrt 官方源
cmd命令符下输入指令
sudo openwrt/package/base-files/files/bin/config_generate
找到第164行左右的`"$protocol"`参数下的`lan)ipad=${ipaddr:-"192.168.1.1"}`
通过修改`192.168.1.1`来改变ip地址。

# 使用第三方 LuCI 软件

  • (注意) 使用第三方 LuCI 软件时先要 检查 该软件是否已为 Openwrt 源进行 适配 ,并且查看是否只是适配了 特定 的版本;以及该软件所需的依赖在自身使用的 Openwrt 源版本中是否 都已经安装

  • 倘若是编译好的 .ipk 文件,可在刷好的固件的路由器后台 WEB 端自行安装

  • 倘若是未编译的文件 (倘若有 Makefile 文件即为未编译)

##添加未编译的软件-lede源
例如想添加`refengsuixing``luci-app-onliner`(在线用户查看)
在cmd命令符中输入
cd lede/package
git clone https://github.com/rufengsuixing/luci-app-onliner.git
make menuconfig
之后在`LuCI``Applications`中选中luci-app-onliner和`luci-app-nlbwmon(所需依赖)`即可

# 关于如何获取第三方 LuCI 软件

  • 途径一・→Github 官网 - 需要梯子
  • 途径二・→恩山无线论坛
  • 途径三・搜索引擎自己搜索

# 编译好后该选用哪个文件

  • 默认为 .bin 文件

  • 编译好后在根目录的 bin 文件夹下,找到对应型号文件夹目录中的 -sysupgrade.bin 文件

# 关于 - sysupgrade.bin 文件未生成的问题

##Openwrt 默认最大编译生成文件大小为16M
当menuconfig中勾选使用的软件或配置超出了路由器的闪存时此文件无法生成,
编译过程中会有提示`is too big`
##倘若自己的路由器空间足够大,想修改最大编译生成文件的大小
可自行利用搜索引擎搜索`openwrt 修改openwrt 编译 image的大小`

# 关于如何获取虚拟机中编译好的.bin 文件问题

  • 方法一・USB 移动硬盘 (U 盘)
  • 在虚拟机关闭状态下

  • 虚拟机中进行文件拷贝 (右键选 Copy,到 U 盘后右键选 Paste) 后,记得 U 盘弹出操作 (下方图片),否则文件可能会丢失

  • 倘若想让 U 盘在 主系统 中被读取,可按照下方图片操作,找到 断开连接 并选中即可

  • 方法二・手机 (用数据线连接电脑后,操作跟上方 U 盘操作 一样 )
关于如何解决编译过程的各种问题

# make menuconfig 报错

  • 假如报错 WARNING: Makefile 'package/feeds/kenzo/luci-app-xxxx/Makefile' has a dependency on 'luci-lib-ipkg', which does not exist,表明缺失依赖 luci-lib-ipkg
  • 当没有 WARNING 报错却打不开 menuconfig 时,可通过使 cmd命令符 窗口 最大化 后再次输入 make menuconfig 的方法解决

# 如何精简并优化自己的固件

  • 可前往 Opnwrt 官方 wiki 自行查看・→Saving firmware space and RAM
  • 推荐将语言设为 English ,因为中文的翻译还停留在旧的版本

# 如何添加酸酸乳 Plus 及其依赖

在ubuntu的文件管理器中进入到`lede或openwrt`目录中,鼠标双击打开`feeds.conf.default`文件,
在末尾添加
src-git helloworld https://github.com/fw876/helloworld
src-git passwall https://github.com/xiaorouji/openwrt-passwall
假如使用的为lede源,之后在cmd命令下执行命令
./scripts/feeds update -a
./scripts/feeds install -a

# 关于自定义路由器 Openwrt 固件的一点建议

  • 对于编译固件,不少人推荐先编译好具有 基础功能 的路由固件 (称作 底包 ),后面再通过在刷好底包的路由器后台中刷入想用的 .ipk编译好的软件包 及其 依赖.ipk文件
  • 例如:自己的路由器闪存只有 16M,自己编译时只选了两三个软件,但编译好后 没有生成 编译好的固件文件 (-sysupgrade.bin) 或生成了超过 16M 的 .bin文件 文件时,可通过将软件全部去除后编译好只带基础功能的路由固件,后面再在路由器后台中刷入。
关于固件使用中的一些通用问题

# 关于酸酸乳 Plus 使用中的错误问题

  • 通常可以查看 日志 中出现的错误,一般都是缺失某些 依赖 ,可通过在 软件包 处添加
  • 当出现日志中 没有 报错信息但依然无法使用的问题时,有可能是 ip地址 被锁了,可通过更换 Lan口的ip地址 来尝试解决
  • 当酸酸乳 Plus 显示正在运行,但电脑却无法使用网络时,可通过在 系统 选项中点击 同步浏览器时间 来解决

# 关于由于闪存空间变动而出现的问题

  • 修改配置并点击保存后 配置参数未被修改 ,此问题基本上是由于闪存空间 不足 而导致的,可在 软件包 处查看
  • (注意) 只要修改配置参数后,保存时都需占据一定空间的闪存
  • 卸载固件 预装软件或依赖 后闪存空间会缩小,卸载自己在 软件包 处安装的软件不会出现此问题
优秀的可参考资料
均来自恩山论坛
→OpenWrt 编译 LuCI -> Applications 添加插件应用说明 - L 大
→k2p A 版 22.10.3.42;22.10.3.38; 拆机 TTL 刷 BREED;B 版 21.6.25.20 刷机 图文教程
→OpenWrt 编译 LuCI -> Applications 添加插件应用说明 - L 大
→openwrt 编译固件 Target Images 大小如何调整的疑问