diff --git a/0001-fix-Fix-some-spelling-errors-in-docs.patch b/0001-fix-Fix-some-spelling-errors-in-docs.patch deleted file mode 100644 index 52f3c01975d8020bada380db1c90e2963d81fdf0..0000000000000000000000000000000000000000 --- a/0001-fix-Fix-some-spelling-errors-in-docs.patch +++ /dev/null @@ -1,61 +0,0 @@ -From e44e963748c8f2c19bd95383074c49fe35110ac2 Mon Sep 17 00:00:00 2001 -From: weihao -Date: Wed, 27 Nov 2024 09:45:45 +0800 -Subject: [PATCH 01/11] fix: Fix some spelling errors in docs - ---- - docs/quick-start.md | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/docs/quick-start.md b/docs/quick-start.md -index 1d59048e..da379062 100644 ---- a/docs/quick-start.md -+++ b/docs/quick-start.md -@@ -163,7 +163,7 @@ - * 使用kubernetes的声明式API进行配置,部署CRD(CustomResourceDefinition),operator,proxy以及rbac机制的YAML需要用户自行编写 - * YAML举例说明模板参见本目录下example文件夹下的文件夹,你也可以将config文件夹拷贝到docs上一级目录,并进行简单的修改使用 - * 这些YAML配置文件,由K8s集群管理员加载,如果恶意在yaml文件里面写了病毒,K8s集群管理员如果放行,传到我们的处理模块我们也是没有办法校验的,此处有风险 -- * operator和proxy部署在kubernets集群中,operator应部署为deployment,proxy应部署为damonset -+ * operator和proxy部署在kubernetes集群中,operator应部署为deployment,proxy应部署为damonset - * 尽量部署好k8s的安全措施,如rbac机制,pod的service account和security policy配置等。**注意**:operator所在容器仅需要普通用户权限运行,proxy所在容器需要root权限运行以访问worker节点上的os-agent.sock,但是可以drop全部的capabilities,如: - - ```yaml -@@ -345,7 +345,7 @@ - version: edit.os.version - configs: - - model: kernel.sysctl -- contents: -+ contents: - - key: kernel param key1 - value: kernel param value1 - - key: kernel param key2 -@@ -361,7 +361,7 @@ - version: 1.0.0 - configs: - - model: kernel.sysctl -- contents: -+ contents: - - key: kernel param key4 - value: kernel param value4 - ``` -@@ -536,7 +536,7 @@ - apiVersion: upgrade.openeuler.org/v1alpha1 - kind: OS - metadata: -- name: os-sample -+ name: os-sample - spec: - imagetype: "" - opstype: rollback -@@ -728,7 +728,7 @@ hostshell - - #### kernel Settings - --* kenerl.sysctl:临时设置内核参数,重启后无效,key/value 表示内核参数的 key/value, key与value均不能为空且key不能包含“=”,该参数不支持删除操作(operation=delete)示例如下: -+* kernel.sysctl:临时设置内核参数,重启后无效,key/value 表示内核参数的 key/value, key与value均不能为空且key不能包含“=”,该参数不支持删除操作(operation=delete)示例如下: - - ```yaml - configs: --- -2.39.5 (Apple Git-154) - diff --git a/0002-docs-update-kbimg-docs.patch b/0002-docs-update-kbimg-docs.patch deleted file mode 100644 index bb5321134eaf176af4b25ee190d3a2a154da1884..0000000000000000000000000000000000000000 --- a/0002-docs-update-kbimg-docs.patch +++ /dev/null @@ -1,1209 +0,0 @@ -From 63d4c8914090ac3fdb24ddc2b43dbd44795a5f95 Mon Sep 17 00:00:00 2001 -From: Yuhang Wei -Date: Wed, 27 Nov 2024 17:31:43 +0800 -Subject: [PATCH 02/11] docs: update kbimg docs - -Signed-off-by: Yuhang Wei ---- - docs/quick-start.md | 33 +- - ...275\234\346\214\207\345\257\274-binary.md" | 469 +++++++++++++++++ - ...75\234\346\214\207\345\257\274-scripts.md" | 169 ++++++ - ...66\344\275\234\346\214\207\345\257\274.md" | 485 ------------------ - 4 files changed, 641 insertions(+), 515 deletions(-) - create mode 100644 "docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" - create mode 100644 "docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-scripts.md" - delete mode 100644 "docs/user_guide/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" - -diff --git a/docs/quick-start.md b/docs/quick-start.md -index 1d59048e..599b17b6 100644 ---- a/docs/quick-start.md -+++ b/docs/quick-start.md -@@ -112,41 +112,14 @@ - * 请确保os-agent属主和属组为root,建议os-agent文件权限为500 - - * 容器OS虚拟机镜像制作 -- 进入scripts目录,执行脚本 -+ 在KubeOS项目根目录下,执行 - - ```shell -- cd scripts -- bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -+ cargo run --package kbimg -- create -f KubeOS-Rust/kbimg/kbimg.toml vm-img - ``` - -- 参数说明如下: -- -- ```bash -- Usage : kbimg create vm-image -p iso-path -v os-version -b os-agent-dir -e os-password -- or -- kbimg create vm-image -d repository/name:tag -- -- options: -- -p repo path -- -v KubeOS version -- -b path of os-agent binary -- -e os encrypted password -- -d docker image like repository/name:tag -- -l boot to legacy BIOS mode, if not specify, then UEFI mode -- -h,--help show help information -- ``` -- -- * 其中 xxx.repo 为制作镜像所需要的 yum 源,yum 源建议配置为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 -- * 容器 OS 镜像制作完成后,会在 scripts 目录下生成: -- * raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2020MiB,持久化分区<16GB。 -- * qcow2 格式的系统镜像 system.qcow2。 -- * 可用于升级的根文件系统分区镜像 update.img 。 -- * 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机场景。若x86 架构的虚拟机需要使用 legacy 启动模式,需制作镜像时指定-l参数 -- * 默认root密码为openEuler12#$ -- * 您可通过`openssl passwd -6 -salt $(head -c18 /dev/urandom | openssl base64)`命令生成root密码并通过`-e`参数配置密码 -- * 容器OS运行底噪<150M (不包含k8s组件及相关依赖kubernetes-kubeadm,kubernetes-kubelet, containernetworking-plugins,socat,conntrack-tools,ebtables,ethtool) -+ 详细配置文件和命令行参数说明请见[KubeOS镜像制作指导](../docs/user_guide/KubeOS镜像制作指导-binary.md): - * 本项目不提供容器OS镜像,仅提供裁剪工具,裁剪出来的容器OS内部的安全性由OS发行商保证。 -- * 详细参数说明请见[《容器OS镜像制作指导》](../docs/user_guide/%E5%AE%B9%E5%99%A8OS%E9%95%9C%E5%83%8F%E5%88%B6%E4%BD%9C%E6%8C%87%E5%AF%BC.md) - - * 声明: os-agent使用本地unix socket进行通信,因此不会新增端口。下载镜像的时候会新增一个客户端的随机端口,1024~65535使用完后关闭。proxy和operator与api-server通信时作为客户端也会有一个随机端口,基于kubernetes的operator框架,必须使用端口。他们部署在容器里。 - -diff --git "a/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" "b/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" -new file mode 100644 -index 00000000..b951b388 ---- /dev/null -+++ "b/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" -@@ -0,0 +1,469 @@ -+# KubeOS镜像制作说明 -+ -+## 简介 -+ -+kbimg是使用Rust语言编写的二进制工具,通过解析用户的[toml配置文件](#详细toml配置文件示例),动态生成脚本,制作KubeOS虚拟机镜像、PXE物理机镜像、升级镜像和admin容器镜像。 -+ -+## 命令介绍 -+ -+kbimg - CLI tool for generating various types of image for KubeOS -+ -+```text -+Usage: kbimg [OPTIONS] -+ -+Commands: -+ create Create a new KubeOS image -+ help Print this message or the help of the given subcommand(s) -+ -+Options: -+ -d, --debug Enable debug mode, generate the scripts without execution -+ -h, --help Print help -+ -V, --version Print version -+``` -+ -+kbimg-create - Create a new KubeOS image -+ -+```text -+Usage: kbimg create --file -+ -+Arguments: -+ [possible values: vm-img, pxe-img, upgrade-img, admin-container] -+ -+Options: -+ -f, --file Path to the toml configuration file -+ -h, --help Print help -+``` -+ -+## 注意事项 -+ -+* 请确保已安装`qemu-img bc parted tar yum docker dosfstools` -+* 制作启用dm-verity功能的镜像,需要安装`pesign nss openssl veritysetup crypto-policies` -+* KubeOS镜像制作需要使用root权限 -+* 制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库 -+* KubeOS镜像制作之前需要先将当前机器上的selinux关闭或者设为允许模式 -+* 使用默认rpmlist进行KubeOS镜像制作至少需要有25G的剩余空间 -+* KubeOS镜像制作工具执行异常中断,可能会残留文件、目录或挂载,需用户手动清理,对于可能残留的rootfs目录,该目录虽然权限为555,但容器OS镜像制作在开发环境进行,不会对生产环境产生影响 -+* 请确保os-agent属主和属组为root,建议os-agent文件权限为500 -+ -+## 配置文件说明 -+ -+### from_repo -+ -+从 repo 创建升级容器镜像、虚拟机镜像或PXE物理机镜像 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | agent_path | os-agent 二进制的路径 | -+ | legacy_bios | 镜像为 legacy 引导或 UEFI 引导 | -+ | repo_path | repo 文件的路径,repo 文件中配置制作镜像所需要的 yum 源 | -+ | root_passwd | root 用户密码,与/etc/shadow文件内密码格式一致,可使用`openssl passwd -6 -salt $(head -c18 /dev/urandom \| openssl base64)`命令生成 | -+ | version | KubeOS 镜像的版本,将写入/etc/os-release文件内作为OS标识 | -+ | rpmlist | 期望安装进镜像内的rpm包列表 | -+ | upgrade_img | [OPTIONAL]指定生成的升级容器镜像的镜像名(制作升级容器镜像必需) | -+ -+### admin_container -+ -+制作admin运维容器 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | hostshell | hostshell二进制路径,可在项目根目录下通过`make hostshell`编译 | -+ | img_name | 指定生成的容器镜像名 | -+ -+### pxe_config -+ -+在制作PXE物理机镜像时,配置该参数用于PXE安装。制作PXE物理机镜像时必需。 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | server_ip | 用于下载根文件系统 tar 包的 HTTP 服务器地址 | -+ | rootfs_name | 放置于 HTTP 服务器的文件系统 tar 包名称 | -+ | disk | 安装 KubeOS 系统的目标磁盘名 | -+ | route_ip | 配置目标机器网卡的路由 IP | -+ | dhcp | [OPTIONAL] 默认为 false,启用 DHCP 模式配置网络 | -+ | local_ip | [OPTIONAL] 配置目标机器网卡的 IP,dhcp 为 false 时必需 | -+ | net_name | [OPTIONAL] 配置目标机器网卡名,dhcp 为 false 时必需 | -+ | netmask | [OPTIONAL] 配置目标机器网卡的子网掩码,dhcp 为 false 时必需 | -+ -+### users -+ -+[OPTIONAL] 添加用户 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | name | 用户名 | -+ | passwd | 密码 | -+ | primary_groups | [OPTIONAL] 用户主组 | -+ | groups | [OPTIONAL] 用户附加组 | -+ -+### copy_files -+ -+[OPTIONAL] 拷贝文件到rootfs内指定目录 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | dst | 目标路径 | -+ | src | 源文件路径 | -+ | create_dir | [OPTIONAL]拷贝前创建文件夹 | -+ -+### grub -+ -+[OPTIONAL] grub配置,配置dm-verity时必需 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | passwd | grub 密码 | -+ -+### systemd_service -+ -+[OPTIONAL] 新增 systemd 服务 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | name | systemd 服务名 | -+ -+### chroot_script -+ -+[OPTIONAL] 自定义 chroot 脚本 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | path | 脚本路径 | -+ | rm | [OPTIONAL]执行完毕后是否删除该脚本 | -+ -+### disk_partition -+ -+[OPTIONAL] 自定义分区大小和镜像大小 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | root | root分区大小, 单位为MiB | -+ | img_size | [OPTIONAL]镜像大小,单位为GB | -+ -+### persist_mkdir -+ -+[OPTIONAL] persist 分区新建目录 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | name | 目录名 | -+ -+### dm_verity -+ -+[OPTIONAL] 制作启用dm-verity功能的虚拟机或升级镜像 -+ -+ | 参数 | 描述 | -+ | --- | --- | -+ | efi_key | efi明文口令 | -+ | grub_key | grub明文口令 | -+ | keys_dir |[OPTIONAL]可指定密钥文件夹,复用先前制作镜像创建的密钥 | -+ -+## 使用示例 -+ -+### KubeOS 虚拟机镜像制作 -+ -+* 支持CPU 架构为 x86 和 aarch64 的虚拟机场景。若x86架构的虚拟机需要使用 legacy 启动模式,请在`[from_repo]`下配置`legacy_bios`为`true` -+* `repo_path`为制作镜像所需要的 yum 源文件路径,yum 源建议配置为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 -+* 默认root密码为openEuler12#$ -+* 容器OS运行底噪<150M (不包含k8s组件及相关依赖`kubernetes-kubeadm,kubernetes-kubelet, containernetworking-plugins,socat,conntrack-tools,ebtables,ethtool`) -+ -+* 配置文件示例 -+ -+```toml -+[from_repo] -+agent_path = "./bin/rust/release/os-agent" -+legacy_bios = false -+repo_path = "/etc/yum.repos.d/openEuler.repo" -+root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$ -+rpmlist = [ -+ "NetworkManager", -+ "cloud-init", -+ "conntrack-tools", -+ "containerd", -+ "containernetworking-plugins", -+ "cri-tools", -+ "dhcp", -+ "ebtables", -+ "ethtool", -+ "iptables", -+ "kernel", -+ "kubernetes-kubeadm", -+ "kubernetes-kubelet", -+ "openssh-server", -+ "passwd", -+ "rsyslog", -+ "socat", -+ "tar", -+ "vi", -+] -+version = "v1" -+``` -+ -+* 结果说明 -+容器 OS 镜像制作完成后,会在 ./scripts-auto 目录下生成 -+ * system.qcow2: qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB 。 -+ * system.img: img 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB 。 -+ * kubeos.tar: 用于升级的根文件系统tar包 -+ -+### KubeOS 升级容器镜像制作 -+ -+* 制作KubeOS容器镜像 -+ -+```toml -+[from_repo] -+agent_path = "./bin/rust/release/os-agent" -+legacy_bios = false -+repo_path = "/etc/yum.repos.d/openEuler.repo" -+root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$ -+rpmlist = [ -+ "NetworkManager", -+ "cloud-init", -+ "conntrack-tools", -+ "containerd", -+ "containernetworking-plugins", -+ "cri-tools", -+ "dhcp", -+ "ebtables", -+ "ethtool", -+ "iptables", -+ "kernel", -+ "kubernetes-kubeadm", -+ "kubernetes-kubelet", -+ "openssh-server", -+ "passwd", -+ "rsyslog", -+ "socat", -+ "tar", -+ "vi", -+] -+upgrade_img = "kubeos-upgrade:v1" -+version = "v1" -+``` -+ -+* 制作完成后,通过`docker images`查看制作出来的KubeOS容器镜像 -+ -+### KubeOS PXE物理机安装所需镜像及文件制作 -+ -+* 支持CPU 架构为 x86 和 aarch64 的物理机场景,不支持legacy引导模式 -+* PXE物理机镜像制作不支持dm-verity功能 -+* 首先需要修改```kbimg.toml```中```pxe_config```的配置,对相关参数进行配置,详细参数可见[参数说明](#pxe_config),ip目前仅支持ipv4,配置示例如下 -+ -+ ```toml -+ [pxe_config] -+ dhcp = false -+ # rootfs file name -+ rootfs_name = "kubeos.tar" -+ # select the target disk to install kubeOS -+ disk = "/dev/vda" -+ # pxe server ip address where stores the rootfs on the http server -+ server_ip = "192.168.122.50" -+ # target machine ip -+ local_ip = "192.168.122.100" -+ # target machine route -+ route_ip = "192.168.122.1" -+ # target machine netmask -+ netmask = "255.255.255.0" -+ # target machine netDevice name -+ net_name = "eth0" -+ ``` -+ -+* 如需进行DNS配置,请先自定义```resolv.conf```文件,并启用```copy_files```字段将配置文件拷贝到```/etc```目录 -+ -+ ```toml -+ [[copy_files]] -+ dst = "/etc" -+ src = "" -+ ``` -+ -+* KubeOS物理机安装所需镜像制作,及pxe_config配置全示例 -+ -+ ```toml -+ [from_repo] -+ agent_path = "./bin/rust/release/os-agent" -+ legacy_bios = false -+ repo_path = "/etc/yum.repos.d/openEuler.repo" -+ root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$ -+ rpmlist = [ -+ "NetworkManager", -+ "cloud-init", -+ "conntrack-tools", -+ "containerd", -+ "containernetworking-plugins", -+ "cri-tools", -+ "dhcp", -+ "ebtables", -+ "ethtool", -+ "iptables", -+ "kernel", -+ "kubernetes-kubeadm", -+ "kubernetes-kubelet", -+ "openssh-server", -+ "passwd", -+ "rsyslog", -+ "socat", -+ "tar", -+ "vi", -+ "coreutils", -+ "dosfstools", -+ "dracut", -+ "gawk", -+ "hwinfo", -+ "net-tools", -+ "parted", -+ ] -+ version = "v1" -+ -+ [pxe_config] -+ dhcp = true -+ rootfs_name = "kubeos.tar" -+ disk = "/dev/vda" -+ server_ip = "192.168.122.50" -+ route_ip = "192.168.122.1" -+ #local_ip = "192.168.1.100" -+ #netmask = "255.255.255.0" -+ #net_name = "eth0" -+ ``` -+ -+* 结果说明 -+ * initramfs.img: 用于pxe启动用的 initramfs 镜像 -+ * kubeos.tar: pxe安装所用的根分区文件系统 -+ -+### admin运维容器镜像制作 -+ -+* 首先在KubeOS项目根目录下,执行`make hostshell`命令编译hostshell二进制 -+* 在toml配置文件内,填入以下示例配置制作admin运维容器镜像 -+ -+```toml -+[admin_container] -+img_name = "kubeos-admin-container:v1" -+hostshell = "./bin/hostshell" -+``` -+ -+* 制作完成后,通过`docker images`查看制作出来的KubeOS容器镜像 -+ -+## 使用说明 -+ -+### 使用cloud-init在KubeOS启动时初始化 -+ -+在`[from_repo]`配置内的`rpmlist`中,配置`cloud-init`包,可在KubeOS启动时使用`cloud-init`进行初始化。 -+若用户需要覆盖默认的cloud-init配置,可配置如下示例 -+ -+ ```toml -+ [[copy_files]] -+ dst = "/etc/cloud" -+ src = "./cloud.cfg" -+ ``` -+ -+### 创建systemd服务 -+ -+* 新增 systemd 服务需要将对应的 .service 文件或 .mount 文件拷贝至镜像```/etc/systemd/system```目录下 -+ -+ ```toml -+ [[copy_files]] -+ dst = "/etc/systemd/system" -+ src = "./containerd.service" -+ -+ [systemd_service] -+ name = ["containerd"] -+ ``` -+ -+## 附录 -+ -+### 详细toml配置文件示例 -+ -+请根据需求和[配置文件说明](#配置文件说明),修改如下示例配置文件,生成所需镜像。 -+ -+```toml -+[from_repo] -+agent_path = "./bin/rust/release/os-agent" -+legacy_bios = false -+repo_path = "/etc/yum.repos.d/openEuler.repo" -+root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$, use "openssl passwd -6 -salt $(head -c18 /dev/urandom | openssl base64)" to generate your passwd -+rpmlist = [ -+ "NetworkManager", -+ "cloud-init", -+ "conntrack-tools", -+ "containerd", -+ "containernetworking-plugins", -+ "cri-tools", -+ "dhcp", -+ "ebtables", -+ "ethtool", -+ "iptables", -+ "kernel", -+ "kubernetes-kubeadm", -+ "kubernetes-kubelet", -+ "openssh-server", -+ "passwd", -+ "rsyslog", -+ "socat", -+ "tar", -+ "vi", -+ # Below packages are required for pxe-image. Uncomment them if you want to generate pxe-image. -+ # "coreutils", -+ # "dosfstools", -+ # "dracut", -+ # "gawk", -+ # "hwinfo", -+ # "net-tools", -+ # "parted", -+] -+upgrade_img = "kubeos-upgrade:v1" -+version = "v1" -+ -+# [admin_container] -+# img_name = "kubeos-admin-container:v1" -+# hostshell = "./bin/hostshell" -+ -+# [pxe_config] -+# dhcp = false -+# disk = "/dev/vda" -+# local_ip = "192.168.1.100" -+# net_name = "eth0" -+# netmask = "255.255.255.0" -+# rootfs_name = "kubeos.tar" -+# route_ip = "192.168.1.1" -+# server_ip = "192.168.1.50" -+ -+# [[users]] -+# groups = ["admin", "wheel"] -+# name = "foo" -+# passwd = "foo" -+# primary_group = "foo" -+ -+# [[users]] -+# groups = ["example"] -+# name = "bar" -+# passwd = "bar" -+ -+# [[copy_files]] -+# create_dir = "/root/test" -+# dst = "/root/test/foo.txt" -+# src = "/root/KubeOS/foo.txt" -+ -+# [[copy_files]] -+# dst = "/etc/bar.txt" -+# src = "../bar.txt" -+ -+# [grub] -+# passwd = "foo" -+ -+# [systemd_service] -+# name = ["containerd", "kubelet"] -+ -+# [chroot_script] -+# path = "./my_chroot.sh" -+# rm = true -+ -+# [disk_partition] -+# img_size = 30 # GB -+# root = 3000 # MiB -+ -+# [persist_mkdir] -+# name = ["bar", "foo"] -+ -+# [dm_verity] -+# efi_key = "foo" -+# grub_key = "bar" -+# keys_dir = "./keys" -+``` -diff --git "a/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-scripts.md" "b/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-scripts.md" -new file mode 100644 -index 00000000..2b147107 ---- /dev/null -+++ "b/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-scripts.md" -@@ -0,0 +1,169 @@ -+# KubeOS镜像制作指导 -+ -+## 简介 -+ -+kbimg.sh是KubeOS部署和升级所需的镜像制作工具,可以使用kbimg.sh制作KubeOS 容器,虚拟机和物理机镜像 -+ -+## 命令介绍 -+ -+### 命令格式 -+ -+**bash kbimg.sh** \[ --help | -h \] create \[ COMMANDS \] \[ OPTIONS \] -+ -+### 参数说明 -+ -+* COMMANDS -+ -+ | 参数 | 描述 | -+ |------------------------------| ---------------------------------------------- | -+ | upgrade-image | 生成用于安装和升级的OCI镜像格式的 KubeOS 镜像 | -+ | vm-image | 生成用于部署和升级的虚拟机镜像 | -+ | pxe-image | 生成物理机安装所需的镜像及文件 | -+ -+* OPTIONS -+ -+ | 参数 | 描述 | -+ | ------------ | ------------------------------------------------------------ | -+ | -p | repo 文件的路径,repo 文件中配置制作镜像所需要的 yum 源 | -+ | -v | 制作出来的KubeOS镜像的版本 | -+ | -b | os-agent二进制的路径 | -+ | -e | KubeOS 镜像 root 用户密码,加密后的带盐值的密码,可以用 openssl,kiwi 命令生成 | -+ | -d | 生成或者使用的 docke r镜像 | -+ | -l | 如果指定参数,则镜像为legacy引导,不指定默认是UEFI引导 | -+ | -h --help | 查看帮助信息 | -+ -+## 使用说明 -+ -+### 注意事项 -+ -+* kbimg.sh 执行需要 root 权限 -+* 当前仅支持 x86和 AArch64 架构使用 -+* 容器 OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库 -+ -+### KubeOS OCI 镜像制作 -+ -+#### 注意事项 -+ -+* 制作的 OCI 镜像仅用于后续的虚拟机/物理机镜像制作或升级使用,不支持启动容器 -+* 使用默认 rpmlist 进行容器OS镜像制作时所需磁盘空间至少为6G,如自已定义 rpmlist 可能会超过6G -+ -+#### 使用示例 -+ -+* 如需进行DNS配置,请先在```scripts```目录下自定义```resolv.conf```文件 -+ -+```shell -+ cd /opt/kubeOS/scripts -+ touch resolv.conf -+ vim resolv.conf -+``` -+ -+* 制作KubeOS容器镜像 -+ -+``` shell -+cd /opt/kubeOS/scripts -+bash kbimg.sh create upgrade-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -d your_imageRepository/imageName:version -+``` -+ -+* 制作完成后查看制作出来的KubeOS容器镜像 -+ -+``` shell -+docker images -+``` -+ -+### KubeOS 虚拟机镜像制作 -+ -+#### 注意事项 -+ -+* 如使用 docker 镜像制作请先拉取相应镜像或者先制作docker镜像,并保证 docker 镜像的安全性 -+* 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机 -+* 容器 OS 目前不支持 x86 架构的虚拟机使用 legacy 启动模式启动 -+* 使用默认rpmlist进行容器OS镜像制作时所需磁盘空间至少为25G,如自已定义rpmlist可能会超过25G -+ -+#### 使用示例 -+ -+* 使用repo源制作 -+ * 如需进行DNS配置,请先在```scripts```目录下自定义```resolv.conf```文件 -+ -+ ```shell -+ cd /opt/kubeOS/scripts -+ touch resolv.conf -+ vim resolv.conf -+ ``` -+ -+ * KubeOS虚拟机镜像制作 -+ -+ ``` shell -+ cd /opt/kubeOS/scripts -+ bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -+ ``` -+ -+* 使用docker镜像制作 -+ -+ ``` shell -+ cd /opt/kubeOS/scripts -+ bash kbimg.sh create vm-image -d your_imageRepository/imageName:version -+ ``` -+ -+* 结果说明 -+ 容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts 目录下生成: -+ * system.qcow2: qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2020 MiB,持久化分区 < 16GiB 。 -+ * update.img: 用于升级的根文件系统分区镜像 -+ -+### KubeOS 物理机安装所需镜像及文件制作 -+ -+#### 注意事项 -+ -+* 如使用 docker 镜像制作请先拉取相应镜像或者先制作 docker 镜像,并保证 docker 镜像的安全性 -+* 制作出来的容器 OS 物理安装所需的镜像目前只能用于 CPU 架构为 x86 和 AArch64 的物理机安装 -+* Global.cfg配置中指定的ip为安装时使用的临时ip,请在系统安装启动后请参考《openEuler 22.09 管理员指南-配置网络》进行网络配置 -+* 不支持多个磁盘都安装KubeOS,可能会造成启动失败或挂载紊乱 -+* 容器OS 目前不支持 x86 架构的物理机使用 legacy 启动模式启动 -+* 使用默认rpmlist进行镜像制作时所需磁盘空间至少为5G,如自已定义 rpmlist 可能会超过5G -+ -+#### 使用示例 -+ -+* 首先需要修改```00bootup/Global.cfg```的配置,对相关参数进行配置,参数均为必填,ip目前仅支持ipv4,配置示例如下 -+ -+ ```shell -+ # rootfs file name -+ rootfs_name=kubeos.tar -+ # select the target disk to install kubeOS -+ disk=/dev/sda -+ # pxe server ip address where stores the rootfs on the http server -+ server_ip=192.168.1.50 -+ # target machine temporary ip -+ local_ip=192.168.1.100 -+ # target machine temporary route -+ route_ip=192.168.1.1 -+ # target machine temporary netmask -+ netmask=255.255.255.0 -+ # target machine netDevice name -+ net_name=eth0 -+ ``` -+ -+* 使用 repo 源制作 -+ * 如需进行DNS配置,请在```scripts```目录下自定义```resolv.conf```文件 -+ -+ ```shell -+ cd /opt/kubeOS/scripts -+ touch resolv.conf -+ vim resolv.conf -+ ``` -+ -+ * KubeOS物理机安装所需镜像制作 -+ -+ ```shell -+ cd /opt/kubeOS/scripts -+ bash kbimg.sh create pxe-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -+ ``` -+ -+* 使用 docker 镜像制作 -+ -+ ``` shell -+ cd /opt/kubeOS/scripts -+ bash kbimg.sh create pxe-image -d your_imageRepository/imageName:version -+ ``` -+ -+* 结果说明 -+ * initramfs.img: 用于pxe启动用的 initramfs 镜像 -+ * kubeos.tar: pxe安装所用的 OS -diff --git "a/docs/user_guide/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" "b/docs/user_guide/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" -deleted file mode 100644 -index d54cc837..00000000 ---- "a/docs/user_guide/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" -+++ /dev/null -@@ -1,485 +0,0 @@ --# 容器OS镜像制作指导 -- --## 简介 -- --kbimg是KubeOS部署和升级所需的镜像制作工具,可以使用kbimg制作KubeOS 容器,虚拟机和物理机镜像 -- --## 命令介绍 -- --### 命令格式 -- --**bash kbimg.sh** \[ --help | -h \] create \[ COMMANDS \] \[ OPTIONS \] -- --### 参数说明 -- --* COMMANDS -- -- | 参数 | 描述 | -- |------------------------------| ---------------------------------------------- | -- | upgrade-image | 生成用于安装和升级的OCI镜像格式的 KubeOS 镜像 | -- | vm-image | 生成用于部署和升级的虚拟机镜像 | -- | pxe-image | 生成物理机安装所需的镜像及文件 | -- --* OPTIONS -- -- | 参数 | 描述 | -- | ------------ | ------------------------------------------------------------ | -- | -p | repo 文件的路径,repo 文件中配置制作镜像所需要的 yum 源 | -- | -v | 制作出来的KubeOS镜像的版本 | -- | -b | os-agent二进制的路径 | -- | -e | KubeOS 镜像 root 用户密码,加密后的带盐值的密码,可以用 openssl,kiwi 命令生成 | -- | -d | 生成或者使用的 docke r镜像 | -- | -l | 如果指定参数,则镜像为legacy引导,不指定默认是UEFI引导 | -- | -h --help | 查看帮助信息 | -- --## 使用说明 -- --### 注意事项 -- --* kbimg.sh 执行需要 root 权限 --* 当前仅支持 x86和 AArch64 架构使用 --* 容器 OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库 -- --### KubeOS OCI 镜像制作 -- --#### 注意事项 -- --* 制作的 OCI 镜像仅用于后续的虚拟机/物理机镜像制作或升级使用,不支持启动容器 --* 使用默认 rpmlist 进行容器OS镜像制作时所需磁盘空间至少为6G,如自已定义 rpmlist 可能会超过6G -- --#### 使用示例 -- --* 如需进行DNS配置,请先在```scripts```目录下自定义```resolv.conf```文件 -- --```shell -- cd /opt/kubeOS/scripts -- touch resolv.conf -- vim resolv.conf --``` -- --* 制作KubeOS容器镜像 -- --``` shell --cd /opt/kubeOS/scripts --bash kbimg.sh create upgrade-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -d your_imageRepository/imageName:version --``` -- --* 制作完成后查看制作出来的KubeOS容器镜像 -- --``` shell --docker images --``` -- --### KubeOS 虚拟机镜像制作 -- --#### 注意事项 -- --* 如使用 docker 镜像制作请先拉取相应镜像或者先制作docker镜像,并保证 docker 镜像的安全性 --* 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机 --* 容器 OS 目前不支持 x86 架构的虚拟机使用 legacy 启动模式启动 --* 使用默认rpmlist进行容器OS镜像制作时所需磁盘空间至少为25G,如自已定义rpmlist可能会超过25G -- --#### 使用示例 -- --* 使用repo源制作 -- * 如需进行DNS配置,请先在```scripts```目录下自定义```resolv.conf```文件 -- -- ```shell -- cd /opt/kubeOS/scripts -- touch resolv.conf -- vim resolv.conf -- ``` -- -- * KubeOS虚拟机镜像制作 -- -- ``` shell -- cd /opt/kubeOS/scripts -- bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -- ``` -- --* 使用docker镜像制作 -- -- ``` shell -- cd /opt/kubeOS/scripts -- bash kbimg.sh create vm-image -d your_imageRepository/imageName:version -- ``` -- --* 结果说明 -- 容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts 目录下生成: -- * system.qcow2: qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2020 MiB,持久化分区 < 16GiB 。 -- * update.img: 用于升级的根文件系统分区镜像 -- --### KubeOS 物理机安装所需镜像及文件制作 -- --#### 注意事项 -- --* 如使用 docker 镜像制作请先拉取相应镜像或者先制作 docker 镜像,并保证 docker 镜像的安全性 --* 制作出来的容器 OS 物理安装所需的镜像目前只能用于 CPU 架构为 x86 和 AArch64 的物理机安装 --* Global.cfg配置中指定的ip为安装时使用的临时ip,请在系统安装启动后请参考《openEuler 22.09 管理员指南-配置网络》进行网络配置 --* 不支持多个磁盘都安装KubeOS,可能会造成启动失败或挂载紊乱 --* 容器OS 目前不支持 x86 架构的物理机使用 legacy 启动模式启动 --* 使用默认rpmlist进行镜像制作时所需磁盘空间至少为5G,如自已定义 rpmlist 可能会超过5G -- --#### 使用示例 -- --* 首先需要修改```00bootup/Global.cfg```的配置,对相关参数进行配置,参数均为必填,ip目前仅支持ipv4,配置示例如下 -- -- ```shell -- # rootfs file name -- rootfs_name=kubeos.tar -- # select the target disk to install kubeOS -- disk=/dev/sda -- # pxe server ip address where stores the rootfs on the http server -- server_ip=192.168.1.50 -- # target machine temporary ip -- local_ip=192.168.1.100 -- # target machine temporary route -- route_ip=192.168.1.1 -- # target machine temporary netmask -- netmask=255.255.255.0 -- # target machine netDevice name -- net_name=eth0 -- ``` -- --* 使用 repo 源制作 -- * 如需进行DNS配置,请在```scripts```目录下自定义```resolv.conf```文件 -- -- ```shell -- cd /opt/kubeOS/scripts -- touch resolv.conf -- vim resolv.conf -- ``` -- -- * KubeOS物理机安装所需镜像制作 -- -- ```shell -- cd /opt/kubeOS/scripts -- bash kbimg.sh create pxe-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -- ``` -- --* 使用 docker 镜像制作 -- -- ``` shell -- cd /opt/kubeOS/scripts -- bash kbimg.sh create pxe-image -d your_imageRepository/imageName:version -- ``` -- --* 结果说明 -- * initramfs.img: 用于pxe启动用的 initramfs 镜像 -- * kubeos.tar: pxe安装所用的 OS -- -- --# KubeOS-Rust 镜像制作说明 -- --## 简介 -- --KubeOS 虚拟机镜像制作的 Rust 二进制版本 -- --## 命令介绍 -- --### 命令格式 -- --**.../kbimg** \[ --config | -c \] \ -- --## 配置文件说明 -- --* from_repo: 从 repo 创建 OCI 镜像、虚拟机镜像或物理机镜像 -- -- | 参数 | 描述 | -- | --- | --- | -- | agent_path | os-agent 二进制的路径 | -- | image_type | upgrade: 用于安装和升级的 OCI 镜像格式的 KubeOS 镜像; vm-repo: 用于部署和升级的虚拟机镜像; pxe-repo: 物理机安装所需的镜像及文件 | -- | legacy_bios | 镜像为 legacy 引导或 UEFI 引导 | -- | repo_path | repo 文件的路径,repo 文件中配置制作镜像所需要的 yum 源 | -- | root_passwd | KubeOS 镜像 root 用户密码,加密后的带盐值的密码,可以用 openssl、kiwi 命令生成 | -- | version | 制作出来的 KubeOS 镜像的版本 | -- | rpmlist | 镜像所需的 rpm 包 | -- | docker_img | 生成或者使用的 docker 镜像 | -- --* from_docker: 从 docker 镜像创建虚拟机镜像或物理机镜像 -- -- | 参数 | 描述 | -- | --- | --- | -- | docker_img | 生成或者使用的 docker 镜像 | -- | image_type | vm-docker: 用于部署和升级的虚拟机镜像; pxe-docker: 物理机安装所需的镜像及文件 | -- --* admin_container: -- -- | 参数 | 描述 | -- | --- | --- | -- | dockerfile | dockerfile 路径 | -- | docker_img | 生成或者使用的 docker 镜像 | -- --* [OPTIONAL] users: 添加用户 -- -- | 参数 | 描述 | -- | --- | --- | -- | groups | [OPTIONAL] 用户组 (第一个为主组,其他为附加组) | -- | name | 用户名 | -- | passwd | 密码 | -- | sudo | [OPTIONAL] 用户是否具有 sudo 权限 | -- --* [OPTIONAL] copy_files: 拷贝文件到指定目录 -- -- | 参数 | 描述 | -- | --- | --- | -- | dst | 目标目录 | -- | src | 源文件路径 | -- --* [OPTIONAL] grub: grub配置 -- -- | 参数 | 描述 | -- | --- | --- | -- | passwd | [OPTIONAL] grub 密码 | -- --* [OPTIONAL] systemd_service: 新增 systemd 服务 -- -- | 参数 | 描述 | -- | --- | --- | -- | name | systemd 服务名 | -- --* [OPTIONAL] chroot_script: 自定义 chroot 脚本 -- -- | 参数 | 描述 | -- | --- | --- | -- | path | 脚本路径 | -- --* [OPTIONAL] disk_partition: 自定义分区大小和镜像大小 -- -- | 参数 | 描述 | -- | --- | --- | -- | first | 引导分区大小 | -- | second | ROOT-A 分区大小 | -- | third | ROOT-B 分区大小 | -- | img_size | 镜像大小 | -- --* [OPTIONAL] persist_mkdir: persist 分区新建目录 -- -- | 参数 | 描述 | -- | --- | --- | -- | name | 目录名 | -- --## 使用说明 -- --#### 注意事项 -- --* 新增 systemd 服务需要将对应的 .service 文件或 .mount 文件拷贝至镜像```/usr/lib/systemd/system```目录 -- -- ```toml -- [[copy_files]] -- dst = "/usr/lib/systemd/system" -- src = ".../containerd.service" -- -- [systemd_service] -- name = ["containerd"] -- ``` -- -- * 如需挂载数据盘,请先自定义```persist-data.mount```文件,并启用```copy_files```和```systemd_service```字段设置启动时挂载,启用```persist_mkdir```字段创建挂载点 -- * .mount文件名由挂载点路径生成,将斜杠替换为连字符 -- * 请先在磁盘映像文件上创建ext4文件系统 -- -- ``` -- # persist-data.mount -- [Unit] -- Description=Mount Disk -- Documentation=man:systemd.mount(5) -- -- [Mount] -- What=/dev/vdb -- Where=/persist/data -- Type=ext4 -- Options=defaults,noatime -- -- [Install] -- WantedBy=local-fs.target -- ``` -- -- ```toml -- [[copy_files]] -- dst = "/usr/lib/systemd/system" -- src = ".../persist-data.mount" -- -- [systemd_service] -- name = ["persist-data.mount"] -- -- [persist_mkdir] -- name = ["data"] -- ``` -- -- * 如需配置逻辑卷,请先自定义```volume.service```文件,并启用```copy_files```和```systemd_service```设置启动时配置逻辑卷,启用```persist_mkdir```字段创建挂载点 -- -- ``` -- # volume.service -- [Unit] -- Description=Mount Logical Volume -- After=local-fs.target -- -- [Service] -- Type=oneshot -- RemainAfterExit=yes -- ExecStart=pvcreate /dev/vdb -- ExecStart=pvcreate /dev/vdc -- ExecStart=vgcreate my_vg /dev/vdb /dev/vdc -- ExecStart=lvcreate -L 15G -n my_lv my_vg -- ExecStart=mkfs.ext4 /dev/my_vg/my_lv -- ExecStart=mount /dev/my_vg/my_lv /persist/lv_data -- -- [Install] -- WantedBy=local-fs.target -- ``` -- -- ```toml -- [[copy_files]] -- dst = "/usr/lib/systemd/system" -- src = ".../volume.service" -- -- [systemd_service] -- name = ["volume"] -- -- [persist_mkdir] -- name = ["lv_data"] -- ``` -- --## 使用示例 -- --### KubeOS OCI 镜像制作 -- --* 如需进行DNS配置,请先自定义```resolv.conf```文件,并启用```copy_files```字段将配置文件拷贝到```/etc```目录 -- -- ```shell -- touch \/resolv.conf -- vim \resolv.conf -- ``` -- -- ```toml -- [[copy_files]] -- dst = "/etc" -- src = "" -- ``` -- --* 制作KubeOS容器镜像 -- -- ```toml -- [from_repo] -- agent_path = "/bin/os-agent" -- image_type = "upgrade" -- legacy_bios = false -- repo_path = "xxx.repo" -- root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" -- version = "v1" -- docker_img = "your_imageRepository/imageName:version" -- rpmlist = [ -- # your rpms -- ] -- ``` -- --* 制作完成后查看制作出来的KubeOS容器镜像 -- ``` shell -- docker images -- ``` -- --### KubeOS 虚拟机镜像制作 -- --* 使用repo源制作 -- -- * 如需进行DNS配置,请先自定义```resolv.conf```文件,并启用**copy_files**字段将配置文件拷贝到```/etc```目录 -- -- ```shell -- touch \/resolv.conf -- vim \resolv.conf -- ``` -- -- ```toml -- [[copy_files]] -- dst = "/etc" -- src = "" -- ``` -- -- * KubeOS虚拟机镜像制作 -- -- ```toml -- [from_repo] -- agent_path = "/bin/os-agent" -- image_type = "vm-repo" -- legacy_bios = false -- repo_path = "xxx.repo" -- root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" -- version = "v1" -- rpmlist = [ -- # your rpms -- ] -- ``` -- --* 使用docker镜像制作 -- -- ```toml -- [from_dockerimg] -- docker_img = "your_imageRepository/imageName:version" -- image_type = "vm-docker" -- ``` -- --* 结果说明 -- 容器 OS 镜像制作完成后,会在 ./scripts-auto 目录下生成 -- * system.qcow2: qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2020 MiB,持久化分区 < 16GiB 。 -- * update.img: 用于升级的根文件系统分区镜像 -- --### KubeOS 物理机安装所需镜像及文件制作 -- --* 首先需要修改```kbimg.toml```中```pxe_config```的配置,对相关参数进行配置,参数均为必填,ip目前仅支持ipv4,配置示例如下 -- -- ```toml -- [pxe_config] -- # rootfs file name -- rootfs_name = "kubeos.tar" -- # select the target disk to install kubeOS -- disk = "/dev/sda" -- # pxe server ip address where stores the rootfs on the http server -- server_ip = "192.168.1.50" -- # target machine ip -- local_ip = "192.168.1.100" -- # target machine route -- route_ip = "192.168.1.1" -- # target machine netmask -- netmask = "255.255.255.0" -- # target machine netDevice name -- net_name = "eth0" -- ``` -- --* 使用 repo 源制作 -- * 如需进行DNS配置,请先自定义```resolv.conf```文件,并启用```copy_files```字段将配置文件拷贝到```/etc```目录 -- -- ```shell -- touch \/resolv.conf -- vim \resolv.conf -- ``` -- -- ```toml -- [[copy_files]] -- dst = "/etc" -- src = "" -- ``` -- -- * KubeOS物理机安装所需镜像制作 -- ```toml -- [from_repo] -- agent_path = "/bin/os-agent" -- image_type = "pxe-repo" -- legacy_bios = true -- repo_path = "xxx.repo" -- root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" -- version = "v1" -- rpmlist = [ -- # your rpms -- ] -- ``` -- --* 使用 docker 镜像制作 -- ```toml -- [from_dockerimg] -- docker_img = "your_imageRepository/imageName:version" -- image_type = "vm-docker" -- ``` -- --* 结果说明 -- * initramfs.img: 用于pxe启动用的 initramfs 镜像 -- * kubeos.tar: pxe安装所用的 OS --- -2.39.5 (Apple Git-154) - diff --git a/0003-fix-os-agent-use-findmnt-to-find-out-which-device-mo.patch b/0003-fix-os-agent-use-findmnt-to-find-out-which-device-mo.patch deleted file mode 100644 index f0b67389fd4331570875b6618d04a593d0eeaf7f..0000000000000000000000000000000000000000 --- a/0003-fix-os-agent-use-findmnt-to-find-out-which-device-mo.patch +++ /dev/null @@ -1,191 +0,0 @@ -From 59de6f644def5555c41e2ef14317e9178c40259f Mon Sep 17 00:00:00 2001 -From: Yuhang Wei -Date: Wed, 27 Nov 2024 18:34:14 +0000 -Subject: [PATCH 03/11] fix(os-agent): use findmnt to find out which device - mounted on / - -use "findmnt -no SOURCE --mountpoint /" to get the device name mounted on / -use "lsblk -blno FSTYPE,SIZE" to get the fstype and partition size -This patch fixes the problem if there are multiple mountpoints on a device - -Signed-off-by: Yuhang Wei ---- - KubeOS-Rust/manager/src/sys_mgmt/config.rs | 21 ++---- - KubeOS-Rust/manager/src/utils/partition.rs | 86 +++++++++------------- - 2 files changed, 41 insertions(+), 66 deletions(-) - -diff --git a/KubeOS-Rust/manager/src/sys_mgmt/config.rs b/KubeOS-Rust/manager/src/sys_mgmt/config.rs -index 8e42fa18..a491a429 100644 ---- a/KubeOS-Rust/manager/src/sys_mgmt/config.rs -+++ b/KubeOS-Rust/manager/src/sys_mgmt/config.rs -@@ -826,13 +826,10 @@ mod tests { - let mut executor = MockCommandExec::new(); - - // the output shows that current root menuentry is A -- let command_output1 = r#"vda 23622320128 --vda1 /boot/efi vfat 61865984 BOOT --vda2 / ext4 3145728000 ROOT-A --vda3 ext4 2621440000 ROOT-B --vda4 /persist ext4 17791188992 PERSIST --"#; -- executor.expect_run_command_with_output().times(1).returning(|_, _| Ok(command_output1.to_string())); -+ let findmnt_output1 = "/dev/vda2"; -+ let lsblk_output1 = "ext4 3145728000\n"; -+ executor.expect_run_command_with_output().times(1).returning(|_, _| Ok(findmnt_output1.to_string())); -+ executor.expect_run_command_with_output().times(1).returning(|_, _| Ok(lsblk_output1.to_string())); - - let result = grub_cmdline.get_config_partition(executor).unwrap(); - // it should return false because the current root menuentry is A and we want to configure current partition -@@ -840,14 +837,8 @@ vda4 /persist ext4 17791188992 PERSIST - - let mut executor = MockCommandExec::new(); - -- // the output shows that current root menuentry is A -- let command_output1 = r#"vda 23622320128 --vda1 /boot/efi vfat 61865984 BOOT --vda2 / ext4 3145728000 ROOT-A --vda3 ext4 2621440000 ROOT-B --vda4 /persist ext4 17791188992 PERSIST --"#; -- executor.expect_run_command_with_output().times(1).returning(|_, _| Ok(command_output1.to_string())); -+ executor.expect_run_command_with_output().times(1).returning(|_, _| Ok(findmnt_output1.to_string())); -+ executor.expect_run_command_with_output().times(1).returning(|_, _| Ok(lsblk_output1.to_string())); - grub_cmdline.is_cur_partition = false; - let result = grub_cmdline.get_config_partition(executor).unwrap(); - // it should return true because the current root menuentry is A and we want to configure next partition -diff --git a/KubeOS-Rust/manager/src/utils/partition.rs b/KubeOS-Rust/manager/src/utils/partition.rs -index 4941ee9d..b2c095c6 100644 ---- a/KubeOS-Rust/manager/src/utils/partition.rs -+++ b/KubeOS-Rust/manager/src/utils/partition.rs -@@ -25,43 +25,33 @@ pub struct PartitionInfo { - - /// get_partition_info returns the current partition info and the next partition info. - pub fn get_partition_info(executor: &T) -> Result<(PartitionInfo, PartitionInfo), anyhow::Error> { -- let lsblk = executor.run_command_with_output("lsblk", &["-blno", "NAME,MOUNTPOINT,FSTYPE,SIZE,LABEL"])?; - let mut cur_partition = PartitionInfo::default(); - let mut next_partition = PartitionInfo::default(); -- let mut found_boot = 0; -- trace!("get_partition_info lsblk command output:\n{}", lsblk); -- for line in lsblk.lines() { -- let res: Vec<&str> = line.split_whitespace().collect(); -- if res.len() == 5 && res[4] == "BOOT" { -- trace!("Found boot partition:\n{:?}", res); -- found_boot = 2; -- continue; -- } -- if found_boot > 0 { -- trace!("Handling two root partitions:\n{:?}", res); -- if res[1] == "/" { -- // current partition -- cur_partition.device = format!("/dev/{}", res[0]).to_string(); -- cur_partition.fs_type = res[2].to_string(); -- cur_partition.size = res[3] -- .parse() -- .with_context(|| format!("Failed to parse current partition size to i64: \"{}\"", res[3]))?; -- cur_partition.menuentry = if res[0].contains("2") { String::from("A") } else { String::from("B") }; -- } else { -- // next partition -- next_partition.device = format!("/dev/{}", res[0]).to_string(); -- next_partition.fs_type = res[1].to_string(); -- next_partition.size = res[2] -- .parse() -- .with_context(|| format!("Failed to parse next partition size to i64: \"{}\"", res[2]))?; -- next_partition.menuentry = if res[0].contains("2") { String::from("A") } else { String::from("B") }; -- } -- found_boot -= 1; -- } -+ cur_partition.device = executor.run_command_with_output("findmnt", &["-no", "SOURCE", "--mountpoint", "/"])?; -+ trace!("{} is mounted on /", cur_partition.device); -+ if cur_partition.device.contains('2') { -+ cur_partition.menuentry = String::from("A"); -+ next_partition.menuentry = String::from("B"); -+ next_partition.device = cur_partition.device.replace("2", "3"); -+ } else if cur_partition.device.contains('3') { -+ cur_partition.menuentry = String::from("B"); -+ next_partition.menuentry = String::from("A"); -+ next_partition.device = cur_partition.device.replace("3", "2"); -+ } else { -+ bail!("Failed to get partition info, / is not mounted on the second or the third partition"); - } -- if cur_partition.menuentry.is_empty() || next_partition.menuentry.is_empty() { -- bail!("Failed to get partition info, lsblk output: {}", lsblk); -+ let lsblk = executor.run_command_with_output("lsblk", &["-blno", "FSTYPE,SIZE", &cur_partition.device])?; -+ trace!("get_partition_info lsblk command output:\n{}", lsblk); -+ let elements: Vec<&str> = lsblk.split_whitespace().collect(); -+ if elements.len() != 2 { -+ bail!("Failed to get partition info of FSTYPE and SIZE, lsblk output: {}", lsblk); - } -+ cur_partition.fs_type = elements[0].to_string(); -+ next_partition.fs_type = elements[0].to_string(); -+ cur_partition.size = elements[1] -+ .parse() -+ .with_context(|| format!("Failed to parse current partition size to i64: \"{}\"", elements[1]))?; -+ next_partition.size = cur_partition.size; - Ok((cur_partition, next_partition)) - } - -@@ -94,14 +84,11 @@ mod tests { - #[test] - fn test_get_partition_info() { - init(); -- let command_output1 = r#"vda 23622320128 --vda1 /boot/efi vfat 61865984 BOOT --vda2 / ext4 3145728000 ROOT-A --vda3 ext4 2621440000 ROOT-B --vda4 /persist ext4 17791188992 PERSIST --"#; -+ let findmnt_output1 = "/dev/vda2"; -+ let lsblk_output1 = "ext4 3145728000\n"; - let mut mock = MockCommandExec::new(); -- mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(command_output1.to_string())); -+ mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(findmnt_output1.to_string())); -+ mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(lsblk_output1.to_string())); - let res = get_partition_info(&mock).unwrap(); - let expect_res = ( - PartitionInfo { -@@ -114,25 +101,22 @@ vda4 /persist ext4 17791188992 PERSIST - device: "/dev/vda3".to_string(), - menuentry: "B".to_string(), - fs_type: "ext4".to_string(), -- size: 2621440000, -+ size: 3145728000, - }, - ); - assert_eq!(res, expect_res); - -- let command_output2 = r#"vda 23622320128 --vda1 /boot/efi vfat 61865984 BOOT --vda2 ext4 3145728000 ROOT-A --vda3 / ext4 2621440000 ROOT-B --vda4 /persist ext4 17791188992 PERSIST --"#; -- mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(command_output2.to_string())); -+ let findmnt_output2 = "/dev/vda3"; -+ let lsblk_output2 = "ext4 3145728000\n"; -+ mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(findmnt_output2.to_string())); -+ mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(lsblk_output2.to_string())); - let res = get_partition_info(&mock).unwrap(); - let expect_res = ( - PartitionInfo { - device: "/dev/vda3".to_string(), - menuentry: "B".to_string(), - fs_type: "ext4".to_string(), -- size: 2621440000, -+ size: 3145728000, - }, - PartitionInfo { - device: "/dev/vda2".to_string(), -@@ -148,8 +132,8 @@ vda4 /persist ext4 17791188992 PERSIST - let res = get_partition_info(&mock); - assert!(res.is_err()); - -- let command_output4 = "sda4 / ext4 13000245248"; -- mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(command_output4.to_string())); -+ let findmnt_output3 = "/dev/vda4"; -+ mock.expect_run_command_with_output().times(1).returning(|_, _| Ok(findmnt_output3.to_string())); - let res = get_partition_info(&mock); - assert!(res.is_err()); - } --- -2.39.5 (Apple Git-154) - diff --git a/0004-style-format-code.patch b/0004-style-format-code.patch deleted file mode 100644 index 84294339fed32ec37210cd5080da5c83e63201c4..0000000000000000000000000000000000000000 --- a/0004-style-format-code.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 9cbf66603c5459be84467ba9de1f9248d082cbdf Mon Sep 17 00:00:00 2001 -From: Yuhang Wei -Date: Wed, 27 Nov 2024 21:30:17 +0000 -Subject: [PATCH 04/11] style: format code - -Signed-off-by: Yuhang Wei ---- - KubeOS-Rust/manager/src/sys_mgmt/config.rs | 2 +- - KubeOS-Rust/manager/src/sys_mgmt/values.rs | 12 ++++++------ - KubeOS-Rust/proxy/src/controller/apiserver_mock.rs | 2 +- - 3 files changed, 8 insertions(+), 8 deletions(-) - -diff --git a/KubeOS-Rust/manager/src/sys_mgmt/config.rs b/KubeOS-Rust/manager/src/sys_mgmt/config.rs -index a491a429..787d5bbd 100644 ---- a/KubeOS-Rust/manager/src/sys_mgmt/config.rs -+++ b/KubeOS-Rust/manager/src/sys_mgmt/config.rs -@@ -59,7 +59,7 @@ lazy_static! { - ); - config_map.insert( - values::PAM_LIMTS.to_string(), -- Box::new(PamLimits{config_path: values::DEFAULT_PAM_LIMITS_PATH.to_string()}) -+ Box::new(PamLimits { config_path: values::DEFAULT_PAM_LIMITS_PATH.to_string() }) - as Box, - ); - config_map -diff --git a/KubeOS-Rust/manager/src/sys_mgmt/values.rs b/KubeOS-Rust/manager/src/sys_mgmt/values.rs -index 3236caf3..e1addfa4 100644 ---- a/KubeOS-Rust/manager/src/sys_mgmt/values.rs -+++ b/KubeOS-Rust/manager/src/sys_mgmt/values.rs -@@ -14,17 +14,17 @@ pub const KERNEL_SYSCTL: &str = "kernel.sysctl"; - pub const KERNEL_SYSCTL_PERSIST: &str = "kernel.sysctl.persist"; - pub const GRUB_CMDLINE_CURRENT: &str = "grub.cmdline.current"; - pub const GRUB_CMDLINE_NEXT: &str = "grub.cmdline.next"; --pub const KUBERNETES_KUBELET:&str = "kubernetes.kubelet"; --pub const CONTAINER_CONTAINERD:&str = "container.containerd"; --pub const PAM_LIMTS:&str = "pam.limits"; -+pub const KUBERNETES_KUBELET: &str = "kubernetes.kubelet"; -+pub const CONTAINER_CONTAINERD: &str = "container.containerd"; -+pub const PAM_LIMTS: &str = "pam.limits"; - - pub const DEFAULT_PROC_PATH: &str = "/proc/sys/"; - pub const DEFAULT_KERNEL_CONFIG_PATH: &str = "/etc/sysctl.conf"; - pub const DEFAULT_GRUB_CFG_PATH: &str = "/boot/efi/EFI/openEuler/grub.cfg"; - pub const DEFAULT_GRUBENV_PATH: &str = "/boot/efi/EFI/openEuler/grubenv"; --pub const DEFAULT_KUBELET_CONFIG_PATH: &str = "/var/lib/kubelet/config.yaml"; --pub const DEFAULT_CONTAINERD_CONFIG_PATH: &str = "/etc/containerd/config.toml"; --pub const DEFAULT_PAM_LIMITS_PATH:&str = "/etc/security/limits.conf"; -+pub const DEFAULT_KUBELET_CONFIG_PATH: &str = "/var/lib/kubelet/config.yaml"; -+pub const DEFAULT_CONTAINERD_CONFIG_PATH: &str = "/etc/containerd/config.toml"; -+pub const DEFAULT_PAM_LIMITS_PATH: &str = "/etc/security/limits.conf"; - - pub const PERSIST_DIR: &str = "/persist"; - pub const ROOTFS_ARCHIVE: &str = "os.tar"; -diff --git a/KubeOS-Rust/proxy/src/controller/apiserver_mock.rs b/KubeOS-Rust/proxy/src/controller/apiserver_mock.rs -index a96043b6..45949600 100644 ---- a/KubeOS-Rust/proxy/src/controller/apiserver_mock.rs -+++ b/KubeOS-Rust/proxy/src/controller/apiserver_mock.rs -@@ -28,8 +28,8 @@ use kube::{ - core::{ListMeta, ObjectList}, - Client as KubeClient, Resource, ResourceExt, - }; --use serde_json::json; - use mockall::mock; -+use serde_json::json; - - use self::mock_error::Error; - use super::{ --- -2.39.5 (Apple Git-154) - diff --git a/0005-docs-add-description-of-the-configuration.patch b/0005-docs-add-description-of-the-configuration.patch deleted file mode 100644 index cd50d5dc4467ee5c298dd6356a34dd64e9921c38..0000000000000000000000000000000000000000 --- a/0005-docs-add-description-of-the-configuration.patch +++ /dev/null @@ -1,110 +0,0 @@ -From c53a851af1460b037c1dd22e434318963717eabc Mon Sep 17 00:00:00 2001 -From: liyuanr -Date: Wed, 27 Nov 2024 15:46:31 +0800 -Subject: [PATCH 05/11] docs: add description of the configuration - -add description of the configuration of kubelet, -containerd and pam limts - -Signed-off-by: liyuanr ---- - .../figures/kubeos-architecture_2024.png | Bin 0 -> 241051 bytes - .../config/crd/upgrade.openeuler.org_os.yaml | 2 +- - docs/quick-start.md | 65 ++++++++++++++++++ - 3 files changed, 66 insertions(+), 1 deletion(-) - create mode 100644 docs/design/figures/kubeos-architecture_2024.png - -diff --git a/docs/design/figures/kubeos-architecture_2024.png b/docs/design/figures/kubeos-architecture_2024.png -new file mode 100644 -index 00000000..1862a1c4 -Binary files /dev/null and b/docs/design/figures/kubeos-architecture_2024.png differ -diff --git a/docs/example/config/crd/upgrade.openeuler.org_os.yaml b/docs/example/config/crd/upgrade.openeuler.org_os.yaml -index 97d0d27b..0ec657b2 100644 ---- a/docs/example/config/crd/upgrade.openeuler.org_os.yaml -+++ b/docs/example/config/crd/upgrade.openeuler.org_os.yaml -@@ -147,7 +147,7 @@ spec: - operation: - type: string - value: -- type: string -+ x-kubernetes-preserve-unknown-fields: true - type: object - type: array - model: -diff --git a/docs/quick-start.md b/docs/quick-start.md -index 6c5f47a2..5730c164 100644 ---- a/docs/quick-start.md -+++ b/docs/quick-start.md -@@ -767,3 +767,68 @@ hostshell - operation: delete - - key: crash_kexec_post_notifiers - ``` -+### kubelet配置 -+* kuberntes.kubelet: 配置节点kubelet的配置文件中的参数,参数说明和约束如下: -+ * 仅支持```KubeletConfiguration```中的配置参数。 -+ * 节点kubelet配置文件需要为yaml格式的文件。 -+ * 如不指定configpath,默认配置文件路径为```/var/lib/kubelet/config.yaml```,并且需要注意的是配置文件的路径需要与kubelet启动时的```-- config```参数指定的路径一致才能生效。 -+ * 如配置存在嵌套,则通过```'.'```连接嵌套的key值,例如如果修改如下yaml示例中```cacheAuthorizedTTL```参数为1s。 -+ ``` -+ authorization: -+ mode: Webhook -+ webhook: -+ cacheAuthorizedTTL: 0s -+ ``` -+ 参数配置示例如下: -+ ``` -+ configs: -+ - model: kuberntes.kubelet -+ configpath: /etc/test.yaml -+ contents: -+ - key: authorization.webhook.cacheAuthorizedTTL -+ value: 1s -+ ``` -+ * kubernetes.kubelet进行删除时,不对value与配置文件中的值进行比较 -+### containerd配置 -+* container.containerd: 配置节点上containerd的配置文件中的参数,参数说明和约束如下: -+ * containerd需要配置文件为toml格式,所以key为toml中该参数的表头.键名,例如希望修改如下toml示例中```no_shim```为true。 -+ ``` -+ [plugins."io.containerd.runtime.v1.linux"] -+ no_shim=false -+ runtime="runc" -+ runtime_root=" -+ ``` -+ 参数配置示例如下: -+ ``` -+ configs: -+ - model: container.containerd -+ configpath: /etc/test.toml -+ contents: -+ - key: plugins."io.containerd.runtime.v1.linux".no_shim -+ value: true -+ ``` -+ * toml使用```"."```分割键,os-agent识别时与toml保持一致,所以当键名中包含```"."```时,该键名需要使用```""```,例如上例中的```"io.containerd.runtime.v1.linux"```为一个键 -+ * 如不指定configpath,默认配置文件路径为```/etc/containerd/config.toml``` -+ * container.conatainerd配置的key和value均不能为空 -+ * container.containerd进行删除时,不对value与配置文件中的值进行比较 -+### Pam Limits配置 -+* pam.limits:配置节点上/etc/security/limits.conf文件 -+ * key为domain值,value的格式需要为type.item.value(limits.conf文件要求每行格式为:\ \ \ \),例如: -+ ``` -+ configs: -+ - model: pam.limits -+ contents: -+ - key: ftp -+ value: soft.core.0 -+ ``` -+ * 更新时,如不需要对type/item/value更新时,可以使用```"_"```,忽略对此参数的更新,但value必须为点隔的三段式,例如: -+ ``` -+ configs: -+ - model: pam.limits -+ contents: -+ - key: ftp -+ value: hard._.1 -+ ``` -+ * pam.limits新增时,value中不允许包含```"_"``` -+ * pam.limits删除时,会对value进行校验,当value与配置文件中的值不同时,删除失败 -+ * pam.limits配置的key和value均不能为空 -\ No newline at end of file --- -2.39.5 (Apple Git-154) - diff --git a/0006-fix-os-agent-fix-settings-of-kubelet-and-add-log.patch b/0006-fix-os-agent-fix-settings-of-kubelet-and-add-log.patch deleted file mode 100644 index 3de5128da65fd52b33901dce7cc6fa6c67c38699..0000000000000000000000000000000000000000 --- a/0006-fix-os-agent-fix-settings-of-kubelet-and-add-log.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 4acf9ad93decfcd50e1b10671fdc866e7766ac85 Mon Sep 17 00:00:00 2001 -From: liyuanr -Date: Fri, 29 Nov 2024 16:31:11 +0800 -Subject: [PATCH 06/11] fix(os-agent): fix settings of kubelet and add log - -1.Fix the error where kernel.sysctl value cannot be configured when set to -string -2.Add logs when adding configurations to kubelet and pam.limts -3.Kubelet configuration reports error when reading a file in the wrong -format and unable to convert it to a map - -Signed-off-by: liyuanr ---- - KubeOS-Rust/manager/src/sys_mgmt/config.rs | 22 +++++++++++++++++----- - 1 file changed, 17 insertions(+), 5 deletions(-) - -diff --git a/KubeOS-Rust/manager/src/sys_mgmt/config.rs b/KubeOS-Rust/manager/src/sys_mgmt/config.rs -index 787d5bbd..ebf04d39 100644 ---- a/KubeOS-Rust/manager/src/sys_mgmt/config.rs -+++ b/KubeOS-Rust/manager/src/sys_mgmt/config.rs -@@ -102,13 +102,13 @@ impl Configuration for KernelSysctl { - if key_info.operation == "delete" { - warn!("Failed to delete kernel.sysctl config with key \"{}\"", key); - } else if !key_info_value.is_empty() && key_info.operation.is_empty() { -- fs::write(&proc_path, format!("{}\n", &key_info.value).as_bytes()) -+ fs::write(&proc_path, format!("{}\n", &key_info_value).as_bytes()) - .with_context(|| format!("Failed to write kernel.sysctl with key: \"{}\"", key))?; -- info!("Configured kernel.sysctl {}={}", key, key_info.value); -+ info!("Configured kernel.sysctl {}={}", key, key_info_value); - } else { - warn!( - "Failed to parse kernel.sysctl, key: \"{}\", value: \"{}\", operation: \"{}\"", -- key, key_info.value, key_info.operation -+ key, key_info_value, key_info.operation - ); - } - } -@@ -529,7 +529,18 @@ impl Configuration for KubernetesKubelet { - if value_iter.is_null() { - *value_iter = serde_yaml::Value::Mapping(serde_yaml::Mapping::new()); - } -- let value_mapping = value_iter.as_mapping_mut().unwrap(); -+ let value_mapping = match value_iter.as_mapping_mut() { -+ Some(m) => m, -+ None => { -+ warn!( -+ "Failed to convert yaml value to mapping, maybe read the file in the wrong format, -+ or write wrong value when handle the configuration of key {}", -+ key -+ ); -+ break; -+ }, -+ }; -+ info!("Add configuration \"{}: {}\"", key, key_info.value.clone()); - value_mapping.insert(Value::String(k.to_string()).into(), config_value); - break; - } -@@ -651,7 +662,7 @@ impl Configuration for ContainerContainerd { - config_value = toml::Value::Table(value_tmp); - key_index = key_index - 1; - } -- debug!("Add key is {}, value is {:?}", key_list[i..].join("."), config_value); -+ info!("Add configuration \"{}: {}\"", key, key_info.value.clone()); - value_iter.insert(k.to_string(), config_value); - break; - } -@@ -782,6 +793,7 @@ fn handle_add_key_pam_limits(new_configs: &HashMap) -> Vec -Date: Wed, 27 Nov 2024 16:45:27 +0800 -Subject: [PATCH 07/11] docs: add dm-verity user-guide - ---- - docs/user_guide/dm-verity.md | 187 +++++++++++++++++++++++++++++++++++ - 1 file changed, 187 insertions(+) - create mode 100644 docs/user_guide/dm-verity.md - -diff --git a/docs/user_guide/dm-verity.md b/docs/user_guide/dm-verity.md -new file mode 100644 -index 00000000..224c8650 ---- /dev/null -+++ b/docs/user_guide/dm-verity.md -@@ -0,0 +1,187 @@ -+## dm-verity功能介绍 -+ -+KubeOS基于[dm-verity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html)提供对根文件系统rootfs的完整性保护。Dm-verity对目标设备rootfs分成固定大小(4096)的块,每块分别计算hash得到第一层hash。第一层hash按照固定大小的块再次计算hash形成第二层。如此迭代,形成一棵hash树,最终得到roothash。示意如下 -+``` -+0层:rootfs block0 ... blockx ... blockx ..... blockn -+ | | | | | -+1层:对0层计算hash h1.0 ... h1.x ... h1.x ..... h1.n -+ \______________/ \__________________/ \__________/ -+ | | | -+2层:对1层计算hash h2.0 h2.x h2.n -+ \ ............. ............/ -+ -+逐层计算hash \ ....... ..... / -+ \... .../ -+ \ / -+root层 roothash -+ -+``` -+hash树除roothash外的中间节点hash作为元数据验证rootfs的完整性,验证时重新计算roothash,并与存储的初始roothash进行比对,一致则rootfs完整。因此,dm-verity的关键在于保证roothash的完整性。 -+ -+## dm-verity当前实现 -+ -+KubeOS当前基于dm-verity+安全启动实现对rootfs的完整性保护,安全启动用于保护roothash完整性。由于安全启动只支持UEFI模式启动,因此当前只支持UEFI启动的场景,不支持legacy启动场景。 -+ -+安全启动基于密码学签名机制实现信任传递。通过在BIOS中引入可信证书,BIOS验证shim的签名,shim验证grub签名,grub验证kernel签名,签名验证失败则启动失败,由此完成系统启动,保证启动内核完整性。为保护dm-verity的roothash的完整,此处扩展安全启动功能,通过在grub中导入可信公钥,实现grub对initramfs、grub.cfg的签名验证,roothash在制作镜像时写入grub.cfg,系统启动时从grub.cfg获取roothash作为对比基线,借助dm-verity实现对rootfs的完整性校验。制作镜像时,安全启动的根信任证书保存在boot分区EFI目录下,名称为`rsa4BIOS.der`,首次启动时需要将该证书导入UEFI固件中**PK Options**和**DB Options**,参考如下安全启动设置。 -+ -+安全启动需要用户自行生成证书及相关签名密钥,并设置口令保护签名私钥。此处不对口令做复杂性校验,建议包含大小写字母、数字等。主要涉及的口令有以下三个: -+* BIOS签名私钥口令(pesign签名数据库口令):明文口令,用于安全启动中保护签名私钥的安全性。此签名私钥存于镜像制作服务器上,用于对shim、grub进行签名。每次制作镜像需要输入该口令,否则无法签名。 -+* grub配置文件签名私钥口令:明文口令,用于保护grub配置文件签名私钥。grub中导入公钥,对应私钥存于镜像制作服务器上,用于对配置文件grub.cfg签名,签名私钥由该口令保护,每次制作镜像需要输入。 -+* grub shell口令:明文口令,如果在镜像启动时要进入grub shell则需要输入该口令。 -+ -+dm-verity+安全启动采用双boot+root,此时磁盘分区对应如下: -+``` -+ ---------------- -+part1 | boot1 | -+ ---------------- -+part2 | root1 | ---- Grub menuentry 'A' -+ ---------------- -+part3 | hash1 | -+ ---------------- -+part4 | boot2 | -+ ---------------- -+part5 | root2 | ---- Grub menuentry 'B' -+ ---------------- -+part6 | hash2 | -+ ---------------- -+part7 | persist | -+ ---------------- -+``` -+其中boot分区包含启动文件,ROOT分区存放rootfs,hash分区存放hash元数据,用于验证root分区的完整性。 -+ -+当前实现说明如下: -+ -+* dm-verity开启后不支持grub阶段加载mod,因此grub.cfg中`insmod xx`命令删除,使用dm-verity/grub.cfg文件替换 -+* dm-verity+安全启动模式下,grub.cfg文件不支持修改。如需修改需要在镜像制作服务器上修改并重新签名 -+* 当前dm-verity/grub.cfg中,menuentry选项默认设置第一个disk, virtio类型设备:`set root='hd0,gpt2'`, `root=/dev/vda2` or `root=/dev/vda5` -+* 开启dm-verity,用户可以配置`ESP/EFI/openEuler/grubenv`文件,实现部分配置grub环境变量(白名单形式),如启动项(从哪一个root启动) -+* 开启dm-verity,rootfs以只读方式挂载`/dev/mapper/kubeos-root`。当前dm-verity通过veritysetup工具实现,可以通过如下命令查看rootfs完整性状态 -+``` -+veritysetup status kubeos-root # 显示状态(verified)、目标数据设备、hash元数据设备、roothash -+ -+veritysetup verify /dev/vda2 /dev/vda3 roothash --debug # status显示的数据设备、hash设备、roothash,验证成功Command successful -+``` -+* 如果当前rootfs(如root1)验证失败,尝试从另一个rootfs(root2)启动,若均验证失败,则系统启动失败 -+* 安全启动证书基于rsa签名,制作镜像时通过openssl生成自签名证书`rsa4BIOS.der` -+* 安全启动可以通过mokutil工具查看,`mokutil --sb` -+* 镜像制作服务器需要安装如下包 -+``` -+yum install -y pesign nss openssl veritysetup crypto-policies -+``` -+* **密钥管理** 当前第一次开启dm-verity功能,镜像制作服务器会自动生成相关证书和密钥文件,默认位置为`my/path/to/KubeOS/scripts/dm-verity/keys`,密钥均由口令保护。不建议频繁更换密钥、证书文件,否则系统可能无法正常启动(签名验证失败)。密钥、证书生成过程见**附录**。 -+ - 安全启动依赖证书`rsa4BIOS.der`,每次更新需要进入BIOS重新导入证书(导入DB Options),否则系统无法启动,不建议频繁更新此证书。可选地,安全启动可以通过BIOS直接关闭 -+ - roothash完整性验证依赖`grub配置文件签名公钥`,该公钥在镜像制作时导入grub,对应私钥用于grub.cfg签名,为防止系统启动失败,不建议频繁更换。此处验签功能可以通过进入grub-shell(需要上述grub shell 口令)进行关闭,输入`set check_signatures=no`, `configfile (hd0,1 or 4)/EFI/openEuler/grub.cfg`进入系统 -+ -+## 安全启动配置 -+ -+ -+KubeOS支持在**虚拟机**镜像制作时开启dm-verity+安全启动配置。以下介绍以HOST侧操作系统为openEuler系统为例,介绍KubeOS虚机安全启动配置步骤,参考[openEuler虚机安全启动介绍](https://docs.openeuler.org/zh/docs/24.03_LTS/docs/Virtualization/%E7%AE%A1%E7%90%86%E8%99%9A%E6%8B%9F%E6%9C%BA.html)。对于其他操作系统,参考相应安全启动配置(配置文件名称、路径、依赖等有差异)。 -+ -+**xml文件修改** -+ -+虚拟机安全启动依赖于UEFI BIOS的实现,HOST侧需要安装edk2。 以aarch64为例,需安装`yum install -y edk2-aarch64`, edk2 rpm包中的组件安装于/usr/share/edk2/aarch64目录下,包括QEMU_EFI-pflash.raw和vars-template-pflash.raw。虚拟机启动UEFI BIOS部分xml配置如下: -+``` -+ -+ hvm -+ /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw -+ /path/to/QEMU-VARS.fd -+ -+``` -+其中/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw为UEFI BIOS镜像路径。/usr/share/edk2/aarch64/vars-template-pflash.raw为nvram镜像模板路径,/path/to/QEMU-VARS.fd为当前虚拟机nvram镜像文件路径,用于保存UEFI BIOS系统中的环境变量。 -+ -+X86架构略有差异,需安装`yum install edk2-ovmf`,xml示例如下 -+``` -+ -+ hvm -+ /usr/share/edk2/ovmf/OVMF_CODE.fd -+ /path/to/OVMF_VARS.fd -+ -+``` -+ -+**BIOS导入证书文件** -+ -+当前实现中,制作KubeOS镜像时通过openssl生成自签名证书`rsa4BIOS.der`,证书文件存在BOOT分区EFI目录下。 -+虚拟机启动后,点击`F2`进入BIOS界面,配置路径如下 -+``` -+Device Manager -+ -> Secure Boot Configuration -+ -> Secure Boot Mode -+ -> Custom Mode -+ -> Custom Secure Boot Option -+ -> PK Options -+ -> Enroll PK -+ -> Enroll PK Using File -+ -> BOOT / EFI / rsa4BIOS.der -+ -> DB Options -+ -> Enroll Signature -+ -> Enroll Signature Using File -+ -> BOOT / EFI / rsa4BIOS.der -+``` -+证书导入完成点击`F10`保存修改,执行`reset`,完成系统重置。 -+ -+## dm-verity升级&回滚 -+ -+开启dm-verity功能,升级通过`dd`命令将升级镜像导入对应分区。注意事项如下: -+ -+* 升级前后root分区的LABEL相同,均为`ROOT-A` -+* 升级失败回滚 -+ - boot分区故障,无需手动操作,自动尝试另一个boot分区进行引导 -+ - root分区故障,需要手动切换另一个root分区,假如升级到A失败需要回滚到B,则手动选择从B启动,系统会重启2次:第一次手动选取B,第二次无需手动操作,系统自动选取B完成回滚 -+ -+## 附录: 生成密钥/证书 -+ -+KubeOS提供密钥、证书生成脚本支持用户生成自定义密钥、证书文件。当前实现基于RSA密码算法,国密SM算法支持可参考[这里](https://docs.openeuler.org/zh/docs/23.03/docs/ShangMi/%E5%AE%89%E5%85%A8%E5%90%AF%E5%8A%A8.html),密钥生成过程如下: -+ -+``` -+ # 准备密钥目录 -+ KEYDIR="my/path/to/keys" -+ CERTDB="$KEYDIR/certdb" -+ BIOSkeyname="rsa4BIOS" -+ PIN_PASSWORD="foo" -+ keyname="$BIOSkeyname" -+ -+ # 生成RSA密钥、证书,其中PIN_PASSWORD为BIOS签名私钥口令(pesign签名数据库口令) -+ mkdir -p "${CERTDB}" -+ cat > "${KEYDIR}/pinfile" << EOF -+$PIN_PASSWORD -+EOF -+ -+ openssl genrsa -out "${KEYDIR}/${keyname}.key" 4096 -+ openssl req -new -key "${KEYDIR}/${keyname}.key" -out "${KEYDIR}/${keyname}.csr" -subj '/C=AA/ST=BB/O=CC/OU=DD/CN=BIOS-cert-for-kubeos-secure-boot' -+ openssl x509 -req -days 365 -in "${KEYDIR}/${keyname}.csr" -signkey "${KEYDIR}/${keyname}.key" -out "${KEYDIR}/${keyname}.crt" -+ openssl x509 -in "${KEYDIR}/${keyname}.crt" -out "${KEYDIR}/${keyname}.der" -outform der -+ -+ # 创建pesign签名数据库 -+ certutil -N -d "${CERTDB}" -f "${KEYDIR}/pinfile" -+ certutil -A -n ${keyname} -d "${CERTDB}" -t CT,CT,CT -i "${KEYDIR}/${keyname}.crt" -f "${KEYDIR}/pinfile" -+ openssl pkcs12 -export -out "${KEYDIR}/${keyname}.p12" -inkey "${KEYDIR}/${keyname}.key" -in "${KEYDIR}/${keyname}.crt" -password pass:"${PIN_PASSWORD}" -+ pk12util -d "${CERTDB}" -i "${KEYDIR}/${keyname}.p12" -w "${KEYDIR}/pinfile" -k "${KEYDIR}/pinfile" -+ -+ # 签名示例,对shimx64.efi签名 -+ SHIM="my/path/to/shimx64.efi" -+ pesign -n "${CERTDB}" -c ${BIOSkeyname} --pinfile "${KEYDIR}/pinfile" -s -i "$SHIM" -o "${SHIM}.signed" -+ -+ -+ # 生成GPG签名密钥,用于对配置文件grub.cfg签名,其中GPG_PASSWORD为grub配置文件签名密钥保护口令 -+ GPG_PASSWORD="foo" -+ GPGkeyid="gpgKey4kubeos" -+ cat > "${KEYDIR}/gpg.batch.file" << EOF -+Key-Type: RSA -+Key-Length: 4096 -+Subkey-Type: RSA -+Subkey-Length: 4096 -+Name-Real: ${GPGkeyid} -+Expire-Date: 0 -+Passphrase: ${GPG_PASSWORD} -+EOF -+ -+ gpg --batch --gen-key "${KEYDIR}/gpg.batch.file" -+ gpg --list-keys --keyid-format LONG ${GPGkeyid} | grep pub > "${KEYDIR}/gpg.log" -+ GPG_KEY=$(gpg --list-keys --keyid-format LONG ${GPGkeyid} | grep pub | awk -F 'rsa4096/' '{print $2}' | cut -b 1-16) -+ gpg --export "$GPG_KEY" > "${KEYDIR}/gpg.key" -+ -+ # 签名示例 -+ GRUB_CFG="my/path/to/grub.cfg" -+ gpg --pinentry-mode=loopback --passphrase "${GPG_PASSWORD}" --default-key "$GPG_KEY" --detach-sign "${GRUB_CFG}" -+``` -+注意:密钥/证书文件生成后应及时删除口令和私钥文件 -\ No newline at end of file --- -2.39.5 (Apple Git-154) - diff --git a/0008-docs-update-readme.patch b/0008-docs-update-readme.patch deleted file mode 100644 index 253b176e3962cb4eef2719e919235e3c6a0ff32b..0000000000000000000000000000000000000000 --- a/0008-docs-update-readme.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 2c31929f3f32cfcd7db422fdbab66c75b5ad9175 Mon Sep 17 00:00:00 2001 -From: Yuhang Wei -Date: Thu, 28 Nov 2024 10:46:03 +0800 -Subject: [PATCH 08/11] docs: update readme - -Signed-off-by: Yuhang Wei ---- - README.md | 117 +++++++++++++++++++++++++++++++++++++++++++++++++----- - 1 file changed, 108 insertions(+), 9 deletions(-) - -diff --git a/README.md b/README.md -index 7f325623..cb17d89e 100644 ---- a/README.md -+++ b/README.md -@@ -1,14 +1,113 @@ - # KubeOS --## Introduction --KubeOS 是针对业务以容器的形式运行的场景,专门设计的一种轻量级操作系统。KubeOS 通过 kubernetes CRD + operator 扩展机制将将 OS 作为组件接入 kubernetes,使 OS 和业务处于同等地位,用户通过 kubernetes 集群统一管理节点上的容器和节点 OS,实现一套系统管理容器和 OS。 --## Architecture --KubeOS架构的介绍请见: [architecture](docs/design/architecture.md) --## Getting Started --### Build from source and deploy --从源码构建指南请见: [quick-start.md](docs/quick-start.md). --### User Guide --用户指南请见:[user guide](https://docs.openeuler.org/zh/docs/22.03_LTS_SP1/docs/KubeOS/overview.html) -+ -+在云计算场景中,容器和 Kubernetes 的应用日益广泛。然而,当前容器和操作系统(OS)独立管理的方式常常面临功能冗余,以及两套调度系统难以协同的问题。此外,OS 的版本管理也存在诸多挑战:相同版本的 OS 在使用过程中会因安装、更新或删除不同的软件包而逐渐产生差异,导致版本分裂。同时,OS 与业务紧耦合,造成大版本升级难度较高,进一步增加了运维复杂性。 -+ -+**KubeOS** 是专为以容器形式运行业务的场景设计的一种轻量级操作系统。通过 Kubernetes 的 CRD(自定义资源定义)与 Operator 扩展机制,KubeOS 将 OS 作为 Kubernetes 的一个组件接入,使 OS 和业务处于同等地位。用户可通过 Kubernetes 集群统一管理节点上的容器和节点的 OS,从而实现一套系统同时管理容器与 OS。 -+ -+KubeOS 的组件利用 Kubernetes Operator 扩展机制来控制容器 OS 的升级流程,支持对 KubeOS 的整体原子化升级。这种升级方式在升级前会将业务迁移到未升级的节点上,从而最大程度减少升级和配置过程对业务的影响。同时,通过原子化升级保持 OS 始终与预期状态同步,确保集群内 OS 的版本一致性,有效避免版本分裂问题。 -+ -+![架构](docs/design/figures/kubeos-architecture_2024.png) -+ -+以下链接可协助您使用KubeOS: -+ -+* [KubeOS组件构建指南](docs/quick-start.md)涵盖了从编译、制作和部署KubeOS组件的全流程。 -+* [镜像制作指导](docs/user_guide/KubeOS镜像制作指导-binary.md)包含了KubeOS镜像制作工具的详细使用方法。 -+* [KubeOS架构](docs/design/architecture.md)展示了其文件系统的设计理念及核心组件的详细信息。 -+* [用户指南](https://docs.openeuler.org/zh/docs/24.03_LTS/docs/KubeOS/overview.html)链接至openEuler容器OS文档。 -+ -+## 特性介绍 -+ -+### 升级 -+ -+与传统的包管理器逐一升级软件包不同,KubeOS 在升级时会通过预制的完整根分区文件系统镜像实现全量升级。升级流程包括从 HTTP 服务器或容器镜像仓库下载升级镜像,并将新的根分区文件系统覆盖到备用的 root 分区。随后,节点从备用 root 分区启动,完成操作系统的全量升级。 -+ -+此外,KubeOS 支持一键回滚至上一版本的操作系统。通过切换至备用分区启动,快速恢复节点的 OS 状态。 -+ -+* **os-operator**: 部署在 Master 节点的 OS 自定义资源控制器,负责管理集群内所有节点 OS 的升级、回滚以及配置请求的下发。 -+* **os-proxy**: 部署在每个节点上的 OS 控制器,将针对该节点的升级、回滚和配置请求转发至 os-agent。 -+* **os-agent**: 部署在每个节点 OS 的 systemd 服务,负责执行具体的升级、回滚和配置任务。 -+ -+更多详细信息,可见[升级指导](docs/quick-start.md#升级指导)。 -+ -+### 配置 -+ -+KubeOS 通过 Kubernetes 下发 OS 自定义资源,实现对集群内所有容器 OS 的统一配置管理。目前支持以下配置类型: -+ -+* 内核参数(临时/持久化) -+* 内核启动参数 -+* pam_limits -+* KubeletConfiguration -+* containerd -+ -+更多详细信息,可见[配置指导](docs/quick-start.md#配置(Settings)指导) -+ -+### Admin运维容器 -+ -+为了保持系统的轻量化,KubeOS 可不安装 SSH 服务(sshd)。在必要情况下,管理员可以通过部署 Admin 容器到目标节点,SSH 登录到容器内,再切换到节点主机命名空间,完成运维操作。 -+ -+Admin 容器内可以安装丰富的调试工具,从而在主机命名空间下调用容器内的命令完成调试和检测任务。 -+ -+更多详细信息,可见[Admin容器镜像制作部署和使用](docs/quick-start.md#admin容器镜像制作部署和使用)。 -+ -+### dm-verity静态完整性保护 -+ -+KubeOS当前基于[dm-verity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html)+安全启动实现对rootfs的完整性保护,安全启动用于保护roothash完整性。 -+ -+更多详细信息,可见[dm-verity介绍](docs/user_guide/dm-verity.md)。 -+ -+### 镜像制作 -+ -+KubeOS 支持制作多种类型的镜像,包括: -+ -+* 普通虚拟机镜像 -+* PXE 物理机镜像 -+* 升级容器镜像 -+* 启用 dm-verity 特性的虚拟机镜像 -+ -+目前支持 x86 和 aarch64 架构,默认使用UEFI引导模式,部分支持 legacy 引导模式。 -+ -+您可以通过以下命令创建 KubeOS 镜像: -+ -+```bash -+make rust-agent -+cargo run --package kbimg -- create -f KubeOS-Rust/kbimg/kbimg.toml -+``` -+ -+更多详细信息,可见[镜像制作指导](docs/user_guide/KubeOS镜像制作指导-binary.md) -+ -+## Roadmap -+ -+### 即将到来 -+ -+* **2025**: -+ * [ ] Pod热迁移:提供用户无感、业务中断时间短的Pod热迁移解决方案 -+ -+### 当前进展 -+ -+* **2024**: -+ * [x] 灵活、多维度的运维策略:分组分批次升级,基于时间窗升级的升级策略 -+ * [x] KubeOS 镜像定制化制作:支持用户根据需求制作定制化镜像 -+ * [x] 更强安全能力:支持安全启动和dm-verity -+ * [x] 更丰富的配置管理:支持统一管理节点`containerd`和`kubelet`配置 -+ -+* **2023**: -+ * [x] 支持容器镜像(containerd)升级 -+ * [x] 新增settings配置功能 -+ * [x] 新增Admin容器功能 -+ * [x] 内存底噪优化:降低os-proxy和os-agent内存底噪80% -+ -+* **2022**: -+ * [x] 支持物理机安装、升级 -+ * [x] 支持容器镜像(docker)升级 -+ -+* **2021**: -+ * [x] KubeOS发布 -+ * [x] 支持ARM架构 -+ - ## How to Contribute -+ - 我们非常欢迎新贡献者加入到项目中来,也非常高兴能为新加入贡献者提供指导和帮助。您可以通过issue或者合入PR来贡献 -+ - ## Licensing -+ - KubeOS 使用 Mulan PSL v2. --- -2.39.5 (Apple Git-154) - diff --git a/0009-fix-kbimg-exit-with-error-code-on-image-creation-fai.patch b/0009-fix-kbimg-exit-with-error-code-on-image-creation-fai.patch deleted file mode 100644 index 0741b1378a4cdedc54ee36dc193172606a8c2e89..0000000000000000000000000000000000000000 --- a/0009-fix-kbimg-exit-with-error-code-on-image-creation-fai.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 6760d1adc236ccbe2d5bb1ae6a12087a8eb82d90 Mon Sep 17 00:00:00 2001 -From: Yuhang Wei -Date: Thu, 28 Nov 2024 10:08:25 +0000 -Subject: [PATCH 09/11] fix(kbimg): exit with error code on image creation - failure - -Signed-off-by: Yuhang Wei ---- - KubeOS-Rust/kbimg/src/main.rs | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/KubeOS-Rust/kbimg/src/main.rs b/KubeOS-Rust/kbimg/src/main.rs -index 3fc68cb1..8639f81f 100644 ---- a/KubeOS-Rust/kbimg/src/main.rs -+++ b/KubeOS-Rust/kbimg/src/main.rs -@@ -130,6 +130,7 @@ fn main() { - }, - Err(e) => { - error!("Failed to create image: {:?}", e); -+ exit(1); - }, - } - } --- -2.39.5 (Apple Git-154) - diff --git a/0010-docs-update-kbimg-pxe-guide.patch b/0010-docs-update-kbimg-pxe-guide.patch deleted file mode 100644 index 077f1eb51ee9fac26a1322f23eb76ba0e074d2d0..0000000000000000000000000000000000000000 --- a/0010-docs-update-kbimg-pxe-guide.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 6f0357c10320202d62ecca286b39a9f7fc80baa2 Mon Sep 17 00:00:00 2001 -From: Yuhang Wei -Date: Tue, 3 Dec 2024 10:44:41 +0800 -Subject: [PATCH 10/11] docs: update kbimg pxe guide - -Signed-off-by: Yuhang Wei ---- - ...7\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git "a/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" "b/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" -index b951b388..d01a41ce 100644 ---- "a/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" -+++ "b/docs/user_guide/KubeOS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274-binary.md" -@@ -246,6 +246,8 @@ version = "v1" - - * 支持CPU 架构为 x86 和 aarch64 的物理机场景,不支持legacy引导模式 - * PXE物理机镜像制作不支持dm-verity功能 -+* 使用默认的 rpmlist 进行镜像制作时,所需磁盘空间至少为 5GB。如果使用自定义的 rpmlist,可能需要超过 5GB 的磁盘空间。 -+* 在 PXE 安装阶段,需要从 HTTP 服务器下载根分区 tar 包。请确保机器拥有足够的内存空间以存储根分区 tar 包及临时中间文件。 - * 首先需要修改```kbimg.toml```中```pxe_config```的配置,对相关参数进行配置,详细参数可见[参数说明](#pxe_config),ip目前仅支持ipv4,配置示例如下 - - ```toml --- -2.39.5 (Apple Git-154) - diff --git a/0011-fix-kbimg-prevent-concurrent-execution-by-checking-a.patch b/0011-fix-kbimg-prevent-concurrent-execution-by-checking-a.patch deleted file mode 100644 index 12c5057c96f9e1e9a031bfd4a58aafc0a1afcff5..0000000000000000000000000000000000000000 --- a/0011-fix-kbimg-prevent-concurrent-execution-by-checking-a.patch +++ /dev/null @@ -1,30 +0,0 @@ -From d882aa4202dec390cb8b9683e974b9705b4c19eb Mon Sep 17 00:00:00 2001 -From: Yuhang Wei -Date: Tue, 3 Dec 2024 11:01:56 +0800 -Subject: [PATCH 11/11] fix(kbimg): prevent concurrent execution by checking a - lock file - -Signed-off-by: Yuhang Wei ---- - KubeOS-Rust/kbimg/src/main.rs | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/KubeOS-Rust/kbimg/src/main.rs b/KubeOS-Rust/kbimg/src/main.rs -index 8639f81f..43e9d422 100644 ---- a/KubeOS-Rust/kbimg/src/main.rs -+++ b/KubeOS-Rust/kbimg/src/main.rs -@@ -40,6 +40,11 @@ trait CreateImage { - - fn process(info: Box, mut config: Config, debug: bool) -> Result<()> { - let dir = PathBuf::from(SCRIPTS_DIR); -+ let lock = dir.join("test.lock"); -+ if lock.exists() { -+ error!("It looks like another kbimg process is running. Please wait it to finish."); -+ exit(1); -+ } - if dir.exists() { - debug!("Removing existing scripts directory"); - fs::remove_dir_all(&dir)?; --- -2.39.5 (Apple Git-154) - diff --git a/KubeOS.spec b/KubeOS.spec index 1583845477f10357e50accada9a7c67179f421e4..1c2caae56be4c5c49f3b1f21ca79f1455ccea3d3 100644 --- a/KubeOS.spec +++ b/KubeOS.spec @@ -1,22 +1,11 @@ # Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. Name: KubeOS -Version: 1.0.7 -Release: 2 +Version: 1.0.8 +Release: 1 Summary: O&M platform used to update the whole OS as an entirety License: Mulan PSL v2 Source0: https://gitee.com/openeuler/KubeOS/repository/archive/v%{version}.tar.gz -Patch1: 0001-fix-Fix-some-spelling-errors-in-docs.patch -Patch2: 0002-docs-update-kbimg-docs.patch -Patch3: 0003-fix-os-agent-use-findmnt-to-find-out-which-device-mo.patch -Patch4: 0004-style-format-code.patch -Patch5: 0005-docs-add-description-of-the-configuration.patch -Patch6: 0006-fix-os-agent-fix-settings-of-kubelet-and-add-log.patch -Patch7: 0007-docs-add-dm-verity-user-guide.patch -Patch8: 0008-docs-update-readme.patch -Patch9: 0009-fix-kbimg-exit-with-error-code-on-image-creation-fai.patch -Patch10: 0010-docs-update-kbimg-pxe-guide.patch -Patch11: 0011-fix-kbimg-prevent-concurrent-execution-by-checking-a.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: make rust cargo openssl-devel @@ -81,6 +70,12 @@ install -p -m 0600 ./KubeOS-Rust/kbimg/kbimg.toml %{buildroot}/opt/kubeOS/script rm -rfv %{buildroot} %changelog +* Tue Dec 10 2024 Yuhang Wei - 1.0.8-1 +- Type:requirement +- CVE:NA +- SUG:restart +- DESC:update version to 1.0.8 + * Tue Dec 03 2024 Yuhang Wei - 1.0.7-2 - Type:requirement - CVE:NA diff --git a/v1.0.7.tar.gz b/v1.0.8.tar.gz similarity index 82% rename from v1.0.7.tar.gz rename to v1.0.8.tar.gz index 9912155057083c4bfccf9fc1c0568d35ffa9d3b7..fba1f7827e65104858d8ec872d2e8b0bc54b0bbe 100644 Binary files a/v1.0.7.tar.gz and b/v1.0.8.tar.gz differ