QingTian Enclave系统时间校准最佳实践
操作场景
业务稳定运行一段时间后,在QingTian Enclave系统内部出现时间漂移问题,即QingTian Enclave内部时间与Primary VM系统时间不一致。
本文介绍如何通过Vsock通道,将QingTian Enclave的系统时间与Primary VM的系统时间进行同步,实现QingTian Enclave系统时间校准。
背景知识
本方案实现方式:
- 定制化修改QingTian Enclave内部的第一个进程init,使之fork出一个time_sync进程,作为Vsock的服务器端(server),通过9000端口,监听来自Primary VM的时间同步信息。
- 修改qt-enclave常驻进程源码,作为Vsock的客户端(client),每隔180s发送一次时间同步请求到QingTian Enclave的time_sync进程,由time_sync进程完成enclave系统时间同步。
操作步骤
- 环境部署。
- 购买一台C7t规格的ECS,在购买时设置“可行系统”并勾选“Enclave”。
- 执行以下命令,下载必要外围组件。
yum install qingtian-tool virtio-qtbox qt-enclave-bootstrap -y
如果ECS使用Ubuntu操作系统,请参考快速入门进行必要包安装。
- qingtian-tools:用于管理QingTian Enclave生命周期
- virtio-qtbox:安装QingTian Enclave相关驱动
- qt-enclave-bootstrap:包含QingTian Enclave镜像文件制作的必要文件
- 执行以下命令,配置QingTian Enclave隔离资源,并进行资源隔离。
vim /etc/qingtian/enclave/qt-enclave-env.conf
建议一次性隔离出较大内存资源预留给QingTian Enclave使用,避免反复隔离,造成系统内存碎片化,隔离服务重启失败。
- 执行以下命令,启动资源隔离服务。
systemctl start qt-enclave-env
如果出现隔离服务失败,无法申请到足够内存,可能存在内存碎片,推荐重启虚拟机,再执行隔离服务。
- 执行以下命令,安装必要python包。
pip3 install docker knack
- 执行以下命令,安装docker和git。
yum install docker git -y
如果ECS使用Ubuntu操作系统,请执行命令:
apt-get install docker git -y
- 执行以下命令,安装文件编译时需要的依赖包。
yum install gnutls-devel cjson-devel glib2-devel -y
- gnutls-devel:用于提供加密通信能力
- cjson-devel:提供JSON解析/生成能力
- glib2-devel:提供基础工具集,包含数据结构、内存/线程管理
- 修复步骤。
- 执行以下命令,从gitee仓库下载huawei-qingtian-enclave代码。
cd /home git clone https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian.git
- 本示例用于修复时间漂移问题,执行以下命令,切到dev分支。
cd /home/huawei-qingtian git checkout dev
- 执行以下命令,编译并替换init文件。
cd /home/huawei-qingtian/enclave/init
- 执行以下命令,执行编译命令。
make
- 执行以下命令,替换原有的init文件。
cp -rf init /usr/local/share/qingtian/enclave/init
- 执行以下命令,编译并替换qingtian-tool相关的二进制文件。
由于使用Git命令下载大文件时可能会出现下载不完整的现象,需要手动下载并替换相关文件。
cd /home/huawei-qingtian/qingtian-tools/platform/linuxkit/
- 执行以下命令,删除此文件下所有文件。
rm -rf ./*
- 执行以下命令,下载对应文件linuxkit-linux-amd64。
wget https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian/raw/dev/qingtian-tools/platform/linuxkit/linuxkit-linux-amd64?lfs=1
- 执行以下命令,修改文件名。
mv linuxkit-linux-amd64\?lfs\=1 linuxkit-linux-amd64
- 执行以下命令,编译并替换qingtian-tool相关文件。
cd /home/huawei-qingtian/qingtian-tools make make install
如果认为180秒时间不合适,可以修改qingtian-tools/include/enclave.h文件中的INTERVAL数值
- 执行以下命令,从gitee仓库下载huawei-qingtian-enclave代码。
- 修复验证。
测试镜像制作。
- 编写一个调测DockerfileTest。
cd /home/huawei-qingtian/enclave/qtsm-sdk-c/tests/vsock_shell
该directShell默认监听9999端口。FROM ubuntu:22.04 AS base-img # COPY debug tool source code COPY ./vsock_shell.c /root/vsock_shell.c RUN apt-get update -y && \ apt-get install gcc -y RUN cd /root && \ gcc vsock_shell.c -o directShell && \ chmod 777 /root/directShell # COPY your enclave app # eg. hello_world.sh #COPY ./hello_world.sh /root/ RUN echo "#!/bin/bash" >> hello_world.sh && \ echo "echo hello" >> hello_world.sh # Let launch the debug tool firstly CMD ["/root/directShell"] - 执行以下命令,生成docker image并转换为QingTian Enclave的镜像。
docker build -f DockerfileTest -t test . qt enclave make-img --docker-uri test --eif test.eif
使用nc-vsock调试
- 执行以下命令,获取并编译vsock_client。
cd /home git clone https://github.com/stefanha/nc-vsock.git cd /home/nc-vsock && make
- 执行以下命令,启动QingTian Enclave。
qt enclave start --cpus 2 --mem 8192 --eif test.eif --cid 4
- 执行以下命令,使用vsock_client登录。
/home/nc-vsock/nc-vsock 4 9999
- 执行以下命令,查看QingTian Enclave内当前时间。
date
- 执行以下命令,修改QingTian Enclave时间。
date -s 2027-01-01
- 一段时间后重新执行以下命令,查看QingTian时间是否修订。
若观察到时间修正,则调试成功
- 编写一个调测DockerfileTest。