2023腾讯犀牛鸟开源人才培养计划
开源项目介绍
扫码填写问卷报名,提交OpenCloudOS项目申请书
加入开发实践
与导师一起成长这一夏
OpenCloudOS 项目介绍
OpenCloudOS的子项目EMF(ebpf-module-framework)的目标是使ebpf程序的构建和管理更加简单。OpenCloudOS的子项目lkp-extent的目标是构建基于容器的自动部署和测试框架,其会作为云原生OS的一部分。
OpenCloudOS 项目导师寄语
彭浩,OpenCloudOS社区子项目负责人
OpenCloudOS是一个中立开放的社区,其中基于Linux内核开源了多个独立项目。如nettrace,EMF(ebpf module framework),lkp-extent(LisaOS的自动化测试组件),LiKeX(即之前的RustKvm)以及即将完全开源的LisaOS的构建组件和升级组件等等,欢迎同学们积极加入开源项目的开发。
OpenCloudOS 相关资料
OpenCloudOS 官网地址:
http://www.opencloudos.org
OpenCloudOS 文档集合:
https://docs.opencloudos.tech
OpenCloudOS 任务实战项目
编程任务
中级任务
lkp-extent容器测试框架(https://github.com/OpenCloudOS/lkp-extent)
lkp-server/lkp-node 两个组件的框架开发。lkp-extent容器测试框架需要一个server node(lkp-server)和若干个client node(lkp-node)。server node会进入监听模式,client node会根据自身的服务器配置相继接入对应的server node。lkp-node上运行包含了lkp测试套件(https://github.com/OpenCloudOS/lkp-tests)的容器。当前项目初步框架已经开发完成.
低级任务
lkp-extent实现一系列命令集合(https://github.com/OpenCloudOS/lkp-extent)在lkp-server中执行命令,从而对指定的lkp-node发起命令,使lkp-node对包含lkp测试套件的容器执行相应命令。这些命令包含:
查看有哪些待测服务器
$ lkp-ctl list # 返回client-node的nodeid,arch类型和内存等信息
更新测试组件
$ lkp-ctl update # 更新本机的测试组件,包括lkp-extent和lkp两个repo
$ lkp-ctl update all # 更新所有node的测试组件
$ lkp-ctl update -n nodeid #更新id号是nodeid的node的测试组件
下发测试指令
$ lkp-ctl run testcase # 所有node都执行testcase
$ lkp-ctl -n nodeid run testcase # id是nodeid的服务器执行testcase
$ lkp-ctl -n nodeid -c containerCount run testcase # id是nodeid的服务器开containerCount个容器,并在容器里面执行testcase
下发测试集
$ lkp-ctl run testcluster # testcluster是一堆testcase的组合,用于进行多组合测试
$ lkp-ctl -n nodeid run testcluster # 对指定测试机进行组合测试
$ lkp-ctl -n nodeid -c contaierCount run testcluster # 对指定测试机进行容器内的组合测试
推送自定义测试case
$ lkp-ctl push testscript # 向所有测试机推送名字为testscript的脚本
$ lkp-ctl -n nodeid push testscript # 向指定测试机推送名字为testscript的脚本
收集测试结果
$ lkp-ctl result # 收集所有测试机的测试结果
$ lkp-ctl -n nodeid result # 收集指定的测试机的测试结果
中级任务
EMF(ebpf-module-framework)(https://github.com/OpenCloudOS/EMF-ebpf-module-framework)
实现一个ebpf的构建和管理框架. EMF支持两种加载模式:一、EMF模块静态链接;二、EMF模块动态加载。通常,在入口函数main启动后(core/emf.c),EMF框架会去主动查找静态模块,分别去执行静态模块的初始化函数和加载函数;然后EMF才会去读取动态模块,并处理动态模块的初始化和加载函数。所以这里有一个优先级的关系,即静态模块的优先级永远高于动态模块的优先级。
领取专属 10元无门槛券
私享最新 技术干货