文章

制作n1的docker版openwrt镜像

  编辑于:2024-02-29
文章目录

前言

在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镜像脚本

发表回复

  • 评论6则,共1页,当前第1
    • Andy

      请问你是在Linux下制作docker版的镜像,还是在Armbian 系统下面做的镜像?

    • Andy

      我试过在N1的armbian里面编译,可以正常生成镜像,但导入小钢炮的docker里面好像不能正常运行。

    • Jay Wu

      报错呢那个脚本,固件我编译好了tar.gz的格式了,结果到一脚脚本报错,各种无法打包。这评论不能上图片有点可惜。

      • 这个脚本里面有一些隐藏文件,需要全部解压出来使用,你也可以参考:<a href="https://zorz.cc/post/k2p-n1-openwrt-ci.html" rel="noopener" target="_blank">在线编译k2p和n1的openwrt固件</a>进行在线编译