编译平台 阿里云 Ubuntu 20.04.5 LTS
安装编译环境依赖
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 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 wget curl swig rsync
更新本地软件包
sudo sh -c "apt update && apt upgrade -y"
不推荐使用 root
用户进行编译,所以先使用 root
权限创建一个用户,以创建 gaven
用户为例
- # 添加用户
- adduser gaven
为新用户设置密码,根据个人情况,这里设置“123456”
passwd 123456
从 root
用户切换使用新用户
su gaven
从此刻开始,以非 root
用户执行编译过程的所有操作。
拉取代码,这里拉取的代码是LEDE
git clone https://github.com/coolsnowwolf/lede.git openwrt
注:以下是自己正在使用的软件源,这里你也可以换成自己喜欢的软件源
- # 进入openwrt目录
- cd ~/openwrt
-
- # 添加自定义源
- cat >> feeds.conf.default <
- src-git kenzo https://github.com/kenzok8/openwrt-packages
- src-git passwall https://github.com/xiaorouji/openwrt-passwall
- EOF
./scripts/feeds update -a
这个过程可能会因为国内网路的原因会失败,多试几次,尽量保证别出现错误。如果有些代码源确实无法实现下载更新操作,原因是因为github的DNS系统解析不了,这里可以通过一些方式查询githhub的地址,进行手动配置
GitHub: Let's build from here · GitHub 通过此网站便可以查询到。
配置/etc/hosts ,在结尾处写上。
140.82.114.3 github.com
140.82.114.3 www.github.com
然后执行
ping github.com 是否能够ping通,能够ping通,说明可以进行代码更新了。
测试结果示例
继续执行更新操作,是否能够成功?
./scripts/feeds update -a
进行拉取代取的安装操作
./scripts/feeds install -a
如果需要单独添加软件,请拉取源码到 package 目录之下。示例如下:
- # 添加 OpenAppFilter 应用过滤插件
- git clone https://github.com/destan19/OpenAppFilter package/OpenAppFilter
注:此操作请在编译前执行,设置 argon 为默认主题,以此为例举一反三
- # 删除自定义源默认的 argon 主题
- rm -rf package/lean/luci-theme-argon
-
- # 部分第三方源自带 argon 主题,上面命令删除不掉的请运行下面命令
- find ./ -name luci-theme-argon | xargs rm -rf;
-
- # 针对 LEDE 项目拉取 argon 原作者的源码
- git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git package/lean/luci-theme-argon
-
- # 替换默认主题为 luci-theme-argon
- sed -i 's/luci-theme-bootstrap/luci-theme-argon/' feeds/luci/collections/luci/Makefile
注:此操作请在编译前执行
- # 设置默认IP为 192.168.199.1
- sed -i 's/192.168.1.1/192.168.199.1/g' package/base-files/files/bin/config_generate
根据自己的定制需求,调整系统组件
make menuconfig
通过以下命令行获得 seed.config
配置文件,然后使用 GitHub Actions 云编译。
- # 若在调整OpenWrt系统组件的过程有多次保存操作,则建议先删除.config.old文件再继续操作
- rm -f .config.old
-
- # 根据编译环境生成默认配置
- make defconfig
-
- # 对比默认配置的差异部分生成配置文件(可以理解为增量)
- ./scripts/diffconfig.sh > seed.config
根据自己的定制需求,调整系统组件
make menuconfig
下载编译所需的软件包
make download -j8 V=s
编译 OpenWrt 固件
- # -j1:单线程编译
- make -j1 V=s
单线程编译可提高编译成功率,但过程非常漫长,也完全取决于机器的性能。编译完成后固件输出路径: /openwrt/bin/targets/
之下。
不要使用 root
用户!
更新本地编译环境
- # 更新软件列表、升级软件包
- sudo sh -c "apt update && apt upgrade -y"
-
- # 拉取最新源码
- cd ~/openwrt && git pull
-
- # 更新下载安装订阅源包含的软件包
- cd ~/openwrt
- ./scripts/feeds update -a && ./scripts/feeds install -a
清理旧文件
- # 删除/bin和/build_dir目录中的文件
- make clean
如果要更换架构,例如要从 x86_64
换到 MediaTek Ralink MIPS
建议执行以下命令深度清理 /bin
和 /build_dir
目录的中的文件 (make clean
) 以及 /staging_dir
、/toolchain
、/tmp
和 /logs
中的文件。
make dirclean
如果需要对组件重新调整,则建议先删除旧配置
rm -rf ./tmp && rm -rf .config
根据自己的定制需求,再次调整 OpenWrt 系统组件
make menuconfig
下载编译所需的软件包
make download -j8 V=s
编译 OpenWrt 固件
make -j$(nproc) || make -j1 || make -j1 V=s
二次编译可以优先使用多线程,报错会自动使用单线程,仍然报错会单线程执行编译并输出详细日志。
如果没有特殊的定制需求,运行 make menuconfig
命令配置目标架构完成后,进入 LUCI --> Applications
选择需要的插件,进入 LUCI --> Themes
选择喜欢的主题皮肤,编译即可。
如果是硬路由且需要闭源的 Wi-Fi 驱动,务必记得勾选 luci-app-mtwifi