参考(转载)链接:
https://p3terx.com/archives/build-openwrt-with-docker.html
https://p3terx.com/archives/openwrt-compilation-steps-and-commands.html
https://shimo.im/docs/gYjt9QVr8T9Vhv9X/read
https://github.com/coolsnowwolf/lede
https://www.right.com.cn/forum/thread-344825-1-1.html
安装 Docker
GNU/Linux
使用官方一键安装脚本进行安装:
curl -fsSL get.docker.com | sudo sh
curl -fsSL get.docker.com | sudo sh -s --mirror Aliyun # 中国大陆地区使用此命令加速安装
直接使用root用操作
sudo systemctl enable docker
sudo systemctl start docker
创建docker容器
docker run -itd \
--name lede-build \
-h P3TERX \
-p 10022:22 \
-v ~/lede:/home/user/openwrt \
p3terx/openwrt-build-env:20.04
检查设置目录文件权限
# 输入命令,获取uid和gid
id
#如果两个都为1000或者都为0(root 用户)则跳过修改UID和GID的步骤
# 修改UID,或者直接用0
docker exec lede-build \
sudo usermod -u 0 user
# 修改 GID,或者直接用0
docker exec lede-build \
sudo groupmod -g 0 user
# 重启容器
docker restart lede-build
# 修改文件归属,修改文件归属用户和用户组为user
# 这一步,我这耗时比较久,多等一会儿
docker exec lede-build \
sudo chown -hR user:user .
# 验证结果
# 进入容器
docker exec -it lede-build zsh
# 输入la命令列出文件。当所有归属都为user说明没有问题了。
# 结果如下,
-rw-r--r-- 1 user user 220 Apr 5 2018 .bash_logout
# 还有很多行,省略了
进入docker环境
# 从宿主机进入容器
docker exec -it lede-build zsh
# 或者用其他命令行软件,用户名,密码都是user
IP:10022,user,user
编译
首次编译需要按下面操作
# 克隆 OpenWrt 源码
git clone https://github.com/coolsnowwolf/lede openwrt
# 进入源码目录,
# 可以先判断一下是否已经在op目录了,如果在了就不用执行下面命令
cd openwrt
# 添加一些插件
#将下面内容添加到feeds.conf.default 里面,用winscp也是可以的
nano feeds.conf.default
# 01.用这个
src-git helloworld https://github.com/fw876/helloworld
src-git passwall https://github.com/xiaorouji/openwrt-passwall
# 02.或者这个
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
# ---------------------------------------------------------1或2选一个,我用的1,
# 下载安装 feeds 中的软件
./scripts/feeds update -a
./scripts/feeds install -a
# 调整 OpenWrt 系统组件
# https://www.right.com.cn/forum/thread-344825-1-1.html
# 这里链接里面有个各个插件对应的中文名称,可以选择想要的插件进行个性化编译
# 话说,自己编译不就是想要个性化吗。
make menuconfig
# 预下载编译所需的软件包
make download -j8 V=s
# 检查文件完整性
find dl -size -1024c -exec ls -l {} \;
#此命令可以列出下载不完整的文件(根据我多次编译的经验得出小于1k的文件属于下载不完整),
#如果存在这样的文件可以使用find dl -size -1024c -exec rm -f {} \;命令将它们删除,
#然后重新执行make download下载并反复检查,确认所有文件完整可大大提高编译成功率,
#避免浪费时间。
# 开始编译
make -j1 V=s
# -j1:使用单线程编译。新手推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志。
# V=s:输出详细日志,用于编译失败时找出错误。而且满屏代码在跑能装逼,一跑就是几个小时,装逼更持久。
img文件位置
生成的文件位置在源码(lede)目录下
bin/targets
再次编译 (适用于不更改配置功能和插件,仅升级)
cd openwrt
rm -rf tmp
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make menuconfig
make -j8 download
make -j$(($(nproc) + 1)) V=s
更改配置编译
cd openwrt
rm -rf ./tmp && rm -rf .config
make menuconfig
make -j$(($(nproc) + 1)) V=s
文件清理
# 清除旧的编译产物(可选)
make clean
#在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。
# 清除旧的编译产物、交叉编译工具及工具链等目录(可选)
make dirclean
#更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。
# 清除 OpenWrt 源码以外的文件(可选)
make distclean
#除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。
# 还原 OpenWrt 源码到初始状态(可选)
git clean -xdf
#如果把源码改坏了,或者长时间没有进行编译时使用。
# 清除临时文件
rm -rf tmp
#删除执行make menuconfig后产生的一些临时文件,包括一些软件包的检索信息,
#删除后会重新加载package目录下的软件包。
#若不删除会导致一些新加入的软件包不显示。
开启IPV6
选上 Extra packages——>ipv6helper
# 只需要勾选上面这一个就行了
更改LAN口的默认IP地址
cd openwrt
nano package/base-files/files/bin/config_generate
# 找到默认的原IP地址(192.168.1.1),我这里大概在150行,如下图
# 这里可以直接上winscp,可视化修改更方便

编译丰富插件时,建议修改下面两项默认大小,留足插件空间。( x86/64 )!!!
Target Images ---> (16) Kernel partition size (in MB) #默认是 (16) 建议修改 (256)
Target Images ---> (160) Root filesystem partition size (in MB) #默认是 (160) 建议修改 (512)
如果需要 Cloudflare DDNS 组件
默认情况下 OpenWrt 中并没有 Cloudflare DDNS 功能,就算勾选了DDNS也不包含cloudflare运营商。所以需要在编译时选择相应的组件,其位置在
Network→IP Addresses and Names →ddns-scripets_cloudflare.com-v4

本文介绍了如何在GNU/Linux环境下安装Docker,并使用Docker创建容器来编译OpenWrt固件。首先,通过官方脚本安装Docker,然后启动并创建一个名为lede-build的容器。接着,修改容器内的用户权限,并克隆OpenWrt源码,安装所需插件。在编译过程中,详细阐述了如何预下载软件包、检查文件完整性、开始编译以及处理编译后的文件。此外,还提供了如何更改LAN口IP地址、开启IPv6支持以及调整固件分区大小的指导。
1439

被折叠的 条评论
为什么被折叠?



