最近台式机电脑电源坏了,送厂返修,很长一段时间没有台式机用,遂决定使用安装了OMV的小主机进行编译。由于系统版本较老,安装环境无法成功,于是使用Ubuntu-docker进行环境的搭建,并打包上传到DockerHub,以便下次使用,并且节省空间。

声明

  • 此次只是博主的一次尝试,docker image并没有进行精简,提及可能会比较大。
  • op的一些包已经下载完成,减少多次下载的烦恼。
  • docker可以根据需要将编译成果或者整个Lede目录挂载到本机方便文件操作,本篇只使用docker cp命令进行文件的转移。
  • 不喜勿喷,大佬勿喷。

使用Docker编译环境

拉取镜像

请前往dockerHub拉取镜像,传送门。选择最新的docker镜像的tag进行拉取:

1
docker pull frank921/opcompile:v3

部署镜像

1
docker run -itd --name opcompile frank921/opcompile:v3

通过docker exec 进入容器并进行编译操作。
注意:这里可以通过 -v 参数添加目录映射,具体请查询docker文档

1
docker exec -it opcompile /bin/bash

由于openwrt的编译程序不支持使用root用户进行编译,切换至lede用户进行编译并进入lede主目录:

1
2
su lede
cd ~/lede

lede用户的用户密码默认是12345678,为了安全性,请及时更改

进行环境更新:

1
2
sudo apt update -y
sudo apt full-upgrade -y

进行仓库更新:

1
2
3
4
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig

默认配置文件中我加入了一些常用插件,如果不需要这类插件,输入:

1
rm -rf ./tmp && rm -rf .config

然后进入编译流程:

1
2
3
make menuconfig
make download -j8
make V=s -j$(nproc)

特别提示

由于编译过程ssh不能中断,在网络较差的环境下,请使用screen进行持久化。
创建窗口:

1
screen -S compiler

此时会进入窗口,可以进行编译操作,如果要推出窗口,请按 Ctrl +AD (按住Ctrl,一次按下A和D)
此时就能退出窗口
连接回窗口:

1
screen -r compiler

如果发现因为窗口Attached无法连接,可以输入:

1
screen -d compiler

分离会话,然后输入:

1
screen -r compiler

进入会话。

编译完成

当无错误编译完成以后,可以进入bin/targets找到相应的固件。
进入主机,输入:

1
docker ps

查询相应容器ID。

记住ID

输入:

1
docker cp 容器ID:/home/lede/lede/bin/targets 主机目录

复制完成固件,复制过程会等待几分钟,正常现象。
接着进入主机相应目录获取固件。

Enjoy!

特别鸣谢

https://github.com/coolsnowwolf/lede

https://github.com/kenzok8/openwrt-packages