diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" index bf0bb7d37940e9102ec372e31b1ed5bb18e3a13e..f043c45676fafa65b010a1971407935becfd17c2 100755 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" @@ -6,27 +6,18 @@ ``` cd $HOME - git clone https://github.com/kata-containers/kata-containers.git + git clone https://gitee.com/hygon/kata-containers.git cd $HOME/kata-containers - git checkout CC-0.5.0 + git checkout CC-0.5.0-hygon ``` -- 更新hygon的patch - - ``` - cd $HOME/kata-containers - git am /opt/hygon/csv/confidential-containers/patches/*.patch - ``` - - > 想要了解patch的详细信息,请阅读该目录下的`Patch说明-kata-containers-CC-0.5.0.md` ## 安装编译依赖 ``` -# 安装golang,apt golang版本太低 wget https://go.dev/dl/go1.19.3.linux-amd64.tar.gz sudo tar xvf go1.19.3.linux-amd64.tar.gz -C /usr/local/ -echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc +echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc source ~/.bashrc sudo snap install yq --channel=v3/stable @@ -34,85 +25,94 @@ sudo snap install yq --channel=v3/stable ## kata-containers各组件编译 -### 1. kata-runtime编译安装 +系统编译将/opt/hygon/csv/confidential-containers/pkg/confidential-containers.tar.xz 文件拷贝解压,编译好的组件安装到对应的目录重新打包,从而达到更新编译组件的目的。 + + +可以编译一个组件或者同时编译多个组件,多个组件编译命令类似如下 +./build_confidential_containers.sh -b runtime,qemu + +**注:多次独立编译只会替换编译的部分,如果想替换多个组件,将上一次编译生成的tar 包拷贝替换/opt/hygon/csv/confidential-containers/pkg/confidential-containers.tar.xz 进行重新编译** + +### kata-runtime编译安装 ``` -cd $HOME/kata-containers/src/runtime -PLATFORM=hygon DEFGUESTPREATTESTATION=true DEFSERVICEOFFLOAD=true PREFIX=/opt/confidential-containers make -# 安装 -sudo PLATFORM=hygon PREFIX=/opt/confidential-containers make install +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b runtime ``` -### 2. kata-qemu编译安装 +### kata-qemu编译安装 ``` -cd $HOME/kata-containers/tools/packaging/static-build/qemu -./build-static-qemu-cc.sh -# 安装 -tar xvf kata-static-qemu-cc.tar.gz -C / +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b qemu ``` -### 3. kata-ovmf编译安装 +### kata-ovmf编译安装 ``` -cd $HOME/kata-containers/tools/packaging/static-build/ovmf -PREFIX=/opt/confidential-containers ovmf_build=sev ./build.sh -tar xvf edk2-sev.tar.gz -C +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b ovmf ``` -## 编译Guest Kernel - -#### 编译安装支持CSV的Guest Kernel +### 编译Guest Kernel ``` -cd $HOME/kata-containers/tools/packaging/kernel -./build-kernel.sh -x csv -d -f setup -./build-kernel.sh -x csv -d -f build -# 安装 -DESTDIR=/opt PREFIX=confidential-containers ./build-kernel.sh -x csv -d -f install +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b csv_kernel ``` -### 编译安装同时支持CSV和DCU的Guest Kernel +### 制作initrd + +下面命令会制作出 online_sev_kbc,offline_sev_kbc,offline_fs_kbc 对应的 initrd ``` -cd $HOME/kata-containers/tools/packaging/kernel -./build-kernel.sh -x csv -g hygon -d -f setup -./build-kernel.sh -x csv -g hygon -d -f build -# 安装 -DESTDIR=/opt PREFIX=confidential-containers ./build-kernel.sh -x csv -g hygon -d -f install +cd $HOME/kata-containers/release +./build_confidential_containers.sh -b csv_initrd + ``` +### 编译文件说明 +编译会在release 目录下生成打包文件confidential-containers.tar.gz + +压缩文件目录说明 + +| 目录 | 说明 | +|------------|------------| +|opt/confidential-containers/bin/| kata 运行时和qemu 文件| +|opt/confidential-containers/share/ovmf/| ovmf 文件| +|opt/confidential-containers/share/kata-containers/| 内核和initrd 文件| +|opt/confidential-containers/share/defaults/kata-containers/|系统配置文件| -## 制作initrd -### 1. 制作rootfs +将新的confidential-containers.tar.gz拷贝到/opt/hygon/csv/confidential-containers/pkg/ 目录下使用 -#### 1.1 制作通用rootfs -> 参数解析: -> -> - AA_KBC:全称为Key broker client module for attestation-agent,用于指定使用哪种kbc模式,共四种情况 -> 1. 不设置:当不需要社区增强特性时,可以不设置,默认为空 -> 2. online_sev_kbc -> 3. offline_sev_kbc -> 4. offline_fs_kbc -> - KERNEL_MODULES_DIR:kernel modules所在的目录,build-kernel.sh脚本会把kernel modules安装到内核源码所在目录 -> - ROOTFS_DIR:指定要将rootfs制作到哪个路径下 +### 修改initrd + +> 如果只是修改initrd中的文件,或者添加文件到initrd中,我们推荐解包再打包的方式。 + +#### 解包initrd ``` -cd $HOME/kata-containers/tools/packaging/kernel -sudo su root -export KERNEL_MODULES_DIR="$(realpath kata-linux-5.11-102c/lib/modules/5.11.0)" -cd ../../osbuilder -export INITRD_BUILDER_DIR="$(realpath initrd-builder)" -export ROOTFS_DIR="$(realpath rootfs-builder/rootfs)" -#清空rootfs_dir -rm -rf ${ROOTFS_DIR} -export AA_KBC=online_sev_kbc -cd rootfs-builder -USE_DOCKER=yes AGENT_INIT=yes SECCOMP=no KATA_BUILD_CC=yes ./rootfs.sh ubuntu +cp /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc ./initrd.img.gz +gunzip initrd.img.gz +mkdir initrd +cd initrd/ +cpio -ivmd < ../initrd.img +``` + +在initrd目录进行修改后,重新打包。 + +#### 打包initrd + +``` +cd initrd/ +find . | cpio -o -H newc > ../initrd.new.img +gzip ../initrd.new.img +cd ../ && mv initrd.new.img.gz initrd.new.img +cp initrd.new.img /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc ``` -#### 1.2 针对offline_fs_kbc,定制policy (`sev_kbc无需此步`) +### 针对offline_fs_kbc,定制policy (`sev_kbc无需此步`) - 定制key信息到aa-offline_fs_kbc-keys.json,示例如下: @@ -147,51 +147,4 @@ USE_DOCKER=yes AGENT_INIT=yes SECCOMP=no KATA_BUILD_CC=yes ./rootfs.sh ubuntu ``` cp *.json ${ROOTFS_DIR}/etc/ - ``` - - -#### 1.3 支持DCU功能,安装DCU驱动(`可选`) - -``` -cd /opt/hygon/csv/confidential-containers/scripts -./install_dcu_kernel_driver.sh ${ROOTFS_DIR} -``` - -### 2. 制作安装initrd - -``` -cd ${INITRD_BUILDER_DIR} -# 自定义initrd的文件名 -export INITRD_IMAGE="kata-containers-initrd-csv.img.online_sev_kbc" -USE_DOCKER=yes AGENT_INIT=yes ./image_builder.sh "${ROOTFS_DIR}" -# 安装 -export INITRD_DIR=/opt/confidential-containers/share/kata-containers -install -o root -g root -m 0640 -D "${INITRD_IMAGE}" "${INITRD_DIR}/${INITRD_IMAGE}" -``` - -### 3. 修改initrd - -> 如果只是修改initrd中的文件,或者添加文件到initrd中,我们推荐解包再打包的方式。 - -#### 3.1 解包initrd - -``` -cp /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc ./initrd.img.gz -gunzip initrd.img.gz -mkdir initrd -cd initrd/ -cpio -ivmd < ../initrd.img -``` - -在initrd目录进行修改后,重新打包。 - -#### 3.2 打包initrd - -``` -cd initrd/ -find . | cpio -o -H newc > ../initrd.new.img -gzip ../initrd.new.img -cd ../ && mv initrd.new.img.gz initrd.new.img -cp initrd.new.img /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc -``` - + ``` \ No newline at end of file