前言
在hub.docker.com上已经有很多n1可用的openwrt镜像了,但是其功能可能并不是那么符合自己的需要,这里可以自己制作一个docker的openwrt镜像。
过程
安装docker
生成docker镜像必不可少的就是安装好docker
curl -fsSL https://get.docker.com | sudo bash
编译openwrt
首先是从源码编译出一个openwrt镜像。
这里可以参考:编译k2p的openwrt固件
但是目标设备选择不同。
这里的选择是
Target选 "QEMU ARM Virtual Machine" > "ARMv8 multiplatform" Target Images 要选上tar.gz
新版openwrt的选择是
Target System选 "Arm SystemReady (EFI) compliant" Subtarget选 "64-bit (armv8) machines" Target Profile选 "Generic EFI Boot"
一键脚本
这里感谢恩山的@flippy,他制作了一键脚本方便生成docker镜像:make_opwrt_docker_img.tar.gz
下载好脚本之后
解压脚本,可以将脚本放置到你喜欢的目录,将之前生成的tar.gz文件放到脚本同一目录。
创建存放生成的镜像打包文件的目录
sudo mkdir -p /opt/imgs/docker
开始生成镜像,在脚本存在目录执行
sudo bash build.sh tag
tag就是docker镜像的版本号,例如r9.10.24,tag可以为空,则其为默认值:latest
脚本用到了pigz
如果没有这个工具,需要安装
apt-get install pigz
可以在/opt/imgs/docker
目录查看生成好的镜像文件
亦可在https://github.com/unifreq/openwrt_packit中查看最新的脚本,该仓库包含多个脚本,其中打包docker所使用镜像的脚本是:mk_openwrt_dockerimg.sh
,用法可查看仓库中的介绍。
手动打包
创建一个文件夹用以保存所需要用到的文件
mkdir make_docker_openwrt
将之前生成的tar.gz文件放到该目录,并进入该目录cd make_docker_openwrt
创建Dockerfile以便构建镜像
echo "FROM scratch #ADD指令会解压tar或tar.gz文件 ADD 文件.tar.gz / EXPOSE 22 80 443 # using exec format so that /sbin/init is proc 1 (see procd docs) ENTRYPOINT [\"/sbin/init\"]" > Dockerfile
构建并导出镜像,其中为img_name
镜像名,tag
为版本号,可自行设置。
最后的.
为从当前目录获取Dockerfile
DOCKER_BUILDKIT=1会启用BUILDKIT,这将利用缓存等技术提升构建速度,删除该选项或将值改为0将禁用该功能,这可能有助于解决一些构建问题。
sudo DOCKER_BUILDKIT=1 docker build --platform=linux/arm64 -t img_name:tag . sudo docker save img_name:tag | pigz -9 > ./docker-img-openwrt-aarch64-tag.gz
执行完成后在当前目录出现的docker-img-openwrt-aarch64-tag.gz
,即为镜像文件。
导入镜像
将生成好的镜像文件传输到N1,运行以下命令导入
docker load --input 镜像文件
导入成功之后,可以参考这篇文章进行使用:N1在armbian的docker中使用openwrt
如欲对镜像进行修改,可将tar.gz文件解压到某个文件夹,修改之后再打包,再进行构建镜像并导出。
参考链接:
N1及贝壳云Armbian 5.98(加强版), 内核5.3.x, 及 Docker Openwrt
斐讯N1 / 贝壳云 一键制作OpenWrt镜像脚本
请问你是在Linux下制作docker版的镜像,还是在Armbian 系统下面做的镜像?
Linux
我试过在N1的armbian里面编译,可以正常生成镜像,但导入小钢炮的docker里面好像不能正常运行。
建议在PC系统中进行操作
报错呢那个脚本,固件我编译好了tar.gz的格式了,结果到一脚脚本报错,各种无法打包。这评论不能上图片有点可惜。
这个脚本里面有一些隐藏文件,需要全部解压出来使用,你也可以参考:<a href="https://zorz.cc/post/k2p-n1-openwrt-ci.html" rel="noopener" target="_blank">在线编译k2p和n1的openwrt固件</a>进行在线编译