参考(转载)链接:
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
安装 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(自行替换)
docker exec lede-build \
sudo usermod -u UID user
# 修改 GID(自行替换)
docker exec lede-build \
sudo groupmod -g GID 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
编译
首次编译需要按下面操作
# 克隆 Open-Wrt 源码
git clone https://github.com/coolsnowwolf/lede openwrt
# 进入源码目录,
# 可以先判断一下是否已经在op目录了,如果在了就不用执行下面命令
cd openwrt
# 添加一些插件
# 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.conf.default 里面
nano feeds.conf.default
# 下载安装 feeds 中的软件
./scripts/feeds update -a
./scripts/feeds install -a
# 调整 Open-Wrt 系统组件
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
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make defconfig
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中的文件。
# 清除 Open-Wrt 源码以外的文件(可选)
make distclean
#除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。
# 还原 Open-Wrt 源码到初始状态(可选)
git clean -xdf
#如果把源码改坏了,或者长时间没有进行编译时使用。
# 清除临时文件
rm -rf tmp
#删除执行make menuconfig后产生的一些临时文件,包括一些软件包的检索信息,
#删除后会重新加载package目录下的软件包。
#若不删除会导致一些新加入的软件包不显示。
开启IPV6
选上extra packages——ipv6helper
在 Network – Firewall – ip6tables 下启用 ip6tables-extra 和 ip6tables-mod-nat 项。
更改LAN口的默认IP地址
cd lede
nano package/base-files/files/bin/config_generate
# 大概在99行找到我们默认的原IP地址(192.168.1.1)
编译丰富插件时,建议修改下面两项默认大小,留足插件空间。( 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 组件 默认情况下 Open-Wrt 中并没有 Cloud-flare DDNS 功能,就算勾选了DDNS也不包含cloudflare运营商。所以需要在编译时选择相应的组件,其位置在
Network→IP Addresses and Names →ddns-scripets_cloudflare.com-v4
|