这里只说快速制作出 yunionos 容器镜像,其他详细步骤见后面的文档内容。
- 下载内核和firmware,本地有可跳过:
# 下载内核
$ make download-kernel-6-deb- 制作 yunionos 镜像
$ make docker-yunionos-image-allrootfs 使用 buildroot 工具进行编译。
为了方便快速制作流程,使用 docker 进行编译。
使用下面的命令制作 buildroot 的 docker 镜像:
# 制作 buildroot docker 镜像
$ make buildroot-image有了 buildroot 的镜像后,使用该镜像启动容器编译 rootfs,命令如下:
# 制作 x86_64 rootfs
$ make docker-buildroot
# 制作 arm64 rootfs
$ make docker-buildroot-arm64
# 制作 risc-v rootfs
$ make docker-buildroot-riscv64
# 查看制作好的镜像
$ ls ./output/rootfs.tarbuildroot 的配置是在 docker 里面做的, 使用 ./scripts/buildroot-run.sh 脚本会启动 buildroot 编译环境, 可以把配置修改后, 再从容器里面拷贝出来.
建议看下 ./scripts/buildroot-run.sh 脚本的逻辑和 make docker-buildroot/docker-buildroot-arm64 的调用关系.
# 手动进入 buildroot 容器, 配置 buildroot config
# 进入 buildroot bash
$ ./scripts/buildroot-run.sh
$ make menuconfig
# 如果是要进入 arm64 容器
$ TARGET_ARCH=aarch64 ./scripts/buildroot-run.sh
# 如果是要进入 risc-v 容器
$ TARGET_ARCH=riscv64 ./scripts/buildroot-run.sh
# 然后修改完配置后保存到容器里面的 /tmp/config
# 回到容器外, 用 docker cp 把对应的配置拷贝主来
$ DOCKER_BUILDROOT_id=$(docker ps | grep buildroot | awk '{print $1}')
# 覆盖当前的x86_64配置
# 如果是 arm64 的配置则在 ./rootfs/buildroot_conf/rootfs-aarch64.2021.08.2-0.conf
$ docker cp $DOCKER_BUILDROOT_id:/tmp/config rootfs/buildroot_conf/rootfs-x86_64.2021.08.2-0.conf
# 执行 git diff 查看更改
$ git diff把编译好的 rootfs ,kernel 和自定义的脚本以及二进制工具捆绑到一块。
如果本地没有内核,先使用下面命令下载内核:
$ make download-kernel-amd64-6-deb
$ make download-kernel-arm6-deb
$ make download-kernel-risc-6-deb
$ ls linux-image-6
linux-image-6.1.0-13-amd64_6.1.55-1_amd64.deb
linux-image-6.1.0-13-arm64_6.1.55-1_arm64.deb然后执行下面的命令进行 bundle:
# bundle x86_64 物理机 pxe 启动的 initramfs
$ make docker-bundle-x86_64
# bundle arm64 物理机 pxe 启动的 initramfs
$ make docker-bundle-arm64
# bundle risc-v 物理机 pxe 启动的 initramfs
$ make docker-bundle-riscv64
# bundle x86_64, risc-v 和 arm64 轻量虚拟机的 initramfs
$ make docker-bundle-vm生成的文件会在 ./output_bundle* 目录,结构如下:
- output_bundle: x86_64 物理机 pxe 启动
- output_bundle_vm: x86_64 轻量级虚拟机启动
- output_bundle_arm64: aarch64 物理机 pxe 启动
- output_bundle_arm64_vm: aarch64 轻量级虚拟机启动
- output_bundle_riscv64: risc-v 物理机 pxe 启动
- output_bundle_riscv64_vm: risc-v 轻量级虚拟机启动
$ ls -alh output_bundle*/initramfs
-rw-r--r-- 1 root root 78M Nov 10 10:28 output_bundle/initramfs
-rw-r--r-- 1 root root 74M Nov 8 13:15 output_bundle_arm64/initramfs
-rw-r--r-- 1 root root 33M Nov 10 10:32 output_bundle_arm64_vm/initramfs
-rw-r--r-- 1 root root 51M Nov 8 13:07 output_bundle_riscv64/initramfs
-rw-r--r-- 1 root root 33M Nov 10 10:38 output_bundle_riscv64_vm/initramfs
-rw-r--r-- 1 root root 36M Nov 10 10:31 output_bundle_vm/initramfs该镜像会包含 initrd 和 kernel 文件,主要是给 baremetal-agent 和 host-deployer 组件使用。
# 给物理机的镜像
$ make docker-yunionos-image
# 给虚拟机的镜像
$ make docker-yunionos-image-vmyunion-rootfs 镜像主要是给 telegraf-raid-plugin 使用。
$ make docker-yunion-rootfs-image# 注意如果要生成 baremetal_prepare.tar.gz 需要使用更低的内核,buildroot conf中选择 4.4 的内核来编译
$ make docker-make-rpm
$ ls output_bundle/x86_64/
baremetal-pxerom-1.1.0-21060312.x86_64.rpmpxelinux 目录下面是从 syslinux 拷贝过来的 pxe 启动固件,可以使用以下的命令更新:
$ make pxelinux-update