在本地跑是因为选择的软件包太多,编译占用超过Action限额,跑一半会被强制终止……粗略估计额外编译的软件包在4~6个左右似乎没问题
用docker是因为凑齐依赖挺麻烦的。如果用的ubuntu或者debian直接跑编译就行了。
Windows没试过,不知道能不能用docker编译
一切的开始,整备好网络环境,各显神通,下载出了问题能把人逼疯
1.docker容器准备
- 没有什么特别的,pull一个ubuntu,进入容器
1
| docker run -it --name=lede ubuntu:latest
|
1
| apt install -y ack antlr3 aria2 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 libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev npm
|
1
| apt-get -y autoremove --purge
|
不能用root用户编译,新建一个用户,切换过去
起个用户名,比如’rimo‘
1
2
3
4
| useradd -d /home/rimo -m rimo
passwd rimo
usermod -aG sudo rimo
su rimo
|
下次再来可以直接用该用户登录
1
| docker exec --user rimo -it ContainerID /bin/bash
|
2.源码准备
1
| git clone https://github.com/coolsnowwolf/lede
|
1
| echo 'src-git small8 https://github.com/kenzok8/small-package' >> ./feeds.conf.default
|
最近编译失败太多,保守了一点
1
2
3
4
| #src-git netspeedtest https://github.com/sirpdboy/netspeedtest
# netspeedtest需要依赖npm,不在lede依赖中
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
|
更保守……
1
2
3
4
5
| echo "src-git helloworld https://github.com/fw876/helloworld.git" >> "feeds.conf.default"
git clone https://github.com/KFERMercer/luci-app-tcpdump.git ./package/luci-app-tcpdump
git clone https://github.com/vernesong/OpenClash.git ./package/luci-app-openclash
git clone https://github.com/rufengsuixing/luci-app-adguardhome.git ./package/luci-app-adguardhome
git clone https://github.com/sirpdboy/netspeedtest.git package/netspeedtest
|
update feeds
1
| ./scripts/feeds update -a
|
1
| ./scripts/feeds install -a
|
需要注意的是,有些自定义源中的软件包会和源码自带源冲突,make menuconfig时会出现报错
视情况追加参数 -f
切换默认主题为argon-mod
1
| sed -i 's/luci-theme-bootstrap/luci-theme-argon-mod/g' ./feeds/luci/collections/luci/Makefile
|
或者偷个懒,直接新建一个终端模拟器窗口,切过去执行
1
| docker cp .config lede:/home/rimo/lede/
|
没有准备.config的话直接生成
1
| sed -i 's/OpenWrt/ShiinaWrt/g' ./package/base-files/files/bin/config_generate
|
- 网络配置信息,按需修改,不改就不用管
- 从 zzz-default-settings 文件的第2行开始添加
1
2
3
4
5
6
7
8
9
| sed -i "2i # network config" ./package/lean/default-settings/files/zzz-default-settings
sed -i "3i uci set network.lan.ipaddr='10.10.10.252'" ./package/lean/default-settings/files/zzz-default-settings
sed -i "4i uci set network.lan.proto='static'" ./package/lean/default-settings/files/zzz-default-settings
sed -i "5i uci set network.lan.type='bridge'" ./package/lean/default-settings/files/zzz-default-settings
sed -i "6i uci set network.lan.ifname='eth0'" ./package/lean/default-settings/files/zzz-default-settings
sed -i "7i uci set network.lan.netmask='255.255.255.0'" ./package/lean/default-settings/files/zzz-default-settings
sed -i "8i uci set network.lan.gateway='10.10.10.253'" ./package/lean/default-settings/files/zzz-default-settings
sed -i "9i uci set network.lan.dns='10.10.10.253'" ./package/lean/default-settings/files/zzz-default-settings
sed -i "10i uci commit network\n" ./package/lean/default-settings/files/zzz-default-settings
|
3.开始编译
编译过程各种玄学出错……
1
| find dl -size -1024c -exec ls -l {} \;
|
输出有结果的话删除这些文件,然后重新make download
1
| find dl -size -1024c -exec rm -f {} \;
|
- 首次编译出错,想要错误日志的话单线程,很慢,很慢……
按理说lean大的源码没那么多问题,但是玄学原因,或者改源码改翻车了,还是可能经历各种报错
23-01-01 small8/speedtest-web编译报错,以后再试试
- 编译完成后的文件输出在 ./lede/bin/,拷贝出来就可以用了
- ./lede/bin/packages/里是编译好的各种ipk
- ./lede/bin/targets/里是固件
1
| docker cp lede:/home/rimo/lede/bin 本机/lede
|
4.后续编译
1
| docker exec --user rimo -it ContainerID /bin/bash
|
- 如果是按上面顺序来的话源码是有小改动的,git pull需要合并
- 避免出错,先清空旧的编译产物,还原源码后重新来一遍
或者更激进(更换编译架构的话必须用这边
彻彻底底清清空空,一般用不着,/dl、/feeds和.config文件也会删掉
- 避免合并麻烦,先还原 OpenWrt 源码到初始状态。
- 有需求的另外fork源码去修改更方便,这里只是轻度定制,没必要
- 重复 # 2 和 # 3
- 嫌麻烦写个脚本运行一下就行了