OpenCloudOS 社区版本贡献指南
源码管理
代码托管仓库
OpenCloudOS 包含多个 Organization:
- OpenCloudOS RPMS https://gitee.com/organizations/src-opencloudos-rpms/projects
 - OpenCloudOS Modules https://gitee.com/src-opencloudos-modules
 - OpenCloudOS 超凡桌面 https://gitee.com/opencloudos-exnde
 - OpenCloudOS FoundUI https://gitee.com/opencloudos-foundui
 
其中 OpenCloudOS RPMS 为所有普通软件包(非 Module 包)代码存放位置,以下规范均以 OpenCloudOS RPMS 为例列举,其他 Organization 由于代码目的不同可有细微区别。
分支管理
OpenCloudOS 目前存在两个大版本 OpenCloudOS 8 & OpenCloudOS 9,所以在 OpenCloudOS RPMS 仓库中软件包主要存在三个分支: master、oc8、oc9(部分软件包可能不存在 oc9 分支)。其中,master 分支只存放软件包相关的 README.md 文件,oc8 和 oc9 分支分别对应 OpenCloudOS 的不同版本。
代码目录结构
OpenCloudOS RPMS 中每个仓库包含构建一个软件包所有信息,包括 spec 文件、patch 文件、配置文件及源码 tarball 压缩包。其中,由于源码 tarball 及部分二进制包过大且不可查看不适宜存放在 gitee 仓库管理,对于这些大文件我们只在 gitee 仓库中存放它的索引文件。以下以 authselect 软件包为例介绍一下代码仓库的目录结构:
authselect 软件包仓库 oc8 分支:https://gitee.com/src-opencloudos-rpms/authselect/tree/oc8/
- 目录结构:
 
# tree -a authselect/
authselect/
├── .authselect.metadata                               # 源码压缩包索引文件
├── .gitignore
├── SOURCES                                            # 存放除了spec文件之外的文件(patch/配置文件)           
│   ├── 0001-po-update-translations.patch
│   ├── 0901-rhel8-remove-mention-of-Fedora-Change-page-in-compat.patch
│   ├── 0902-rhel8-remove-ecryptfs-support.patch
│   ├── 0903-rhel8-Revert-profiles-add-support-for-resolved.patch
│   └── 0904-rhel8-Revert-yescrypt.patch
└── SPECS                                              # 存放spec文件
    └── authselect.spec
- 源码压缩包索引文件
 
在OpenCloudOS RPMS 中源码压缩包并不直接存放在 gitee 仓库中,而是用一个.metadata 结尾的索引文件代替,真实的压缩包存放在 source lookaside 系统中(后续会讲到),构建时构建系统根据这个索引去获取对应的源码文件。索引文件中每一行对应一个源码文件,每一行由 "sha1sum $tarball_name | awk '{print $1}' SOURCES/$tarball_name" 构成。
# cat .authselect.metadata 
9c2bb483de9209a00df4f69368245fdf3b8f635c SOURCES/authselect-1.2.6.tar.gz
# tarball_name=authselect-1.2.6.tar.gz
# echo "`sha1sum $tarball_name | awk '{print $1}'` SOURCES/$tarball_name"
9c2bb483de9209a00df4f69368245fdf3b8f635c SOURCES/authselect-1.2.6.tar.gz
Gitee 贡献流程
- 注册gitee账号;
 - 定位感兴趣项目;
 - "Fork" 项目至个人空间;
 - Fork出的项目在个人空间 edit & push;
 - 发起Pull Request 到 Organizition仓库指定分支;
 
commit message 请按照 “[%version-%release] %changelog ” 的格式填写,方便之后查看。 eg. [0.63.0-14.oc8.1] fix module platform compatibility
【Tips】加入组织请联系 maxonxie@opencloudos.tech
用户认证(kerberos)
- 提供开发者邮箱,昵称;
 
联系 lianhaifu@opencloudos.tech 开通开发者账户,获取账号密码。
- 开发者认证配置
 
# dnf install -y krb5-libs 
# vim /etc/krb5.conf
#File modified by ipa-client-install
includedir /etc/krb5.conf.d/
[libdefaults]
  default_realm = OPENCLOUDOS.TECH
  dns_lookup_realm = false
  dns_lookup_kdc = false
  rdns = false
  dns_canonicalize_hostname = false
  ticket_lifetime = 24h
  forwardable = true
  udp_preference_limit = 0
[realms]
  OPENCLOUDOS.TECH = {
    kdc = freeipa.opencloudos.tech:88
    master_kdc = freeipa.opencloudos.tech:88
    admin_server = freeipa.opencloudos.tech:749
    kpasswd_server = freeipa.opencloudos.tech:464
    default_domain = opencloudos.tech
    pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
    pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
  }
[domain_realm]
  .opencloudos.tech = OPENCLOUDOS.TECH
  opencloudos.tech = OPENCLOUDOS.TECH
  build.opencloudos.tech = OPENCLOUDOS.TECH
- 获取认证session
 
kinit maxonxie
编译构建
构建系统
- 
Kojihub https://build.opencloudos.tech/koji/
 - 
MBS https://mbs.opencloudos.tech/
 
| Name | 备注 | |
|---|---|---|
| 陶松桥 | joeytao@opencloudos.tech | ReleaseEng Manager | 
| 谢仲天 | maxonxie@opencloudos.tech | Infrastructure Manager | 
| 杨佳鑫 | jiaxinyyang@tencent.com | BuildSystem Manager | 
| 练海富 | lianhaifu@opencloudos.tech | IDM Manager(用户认证) | 
本地构建
使用koji导出的config文件进行mock build,测试通过后再提交koji build
- mock 配置。
 
x86_64 下的 mock 配置文件
# cat dist-oc8-mock-x86_64.cfg
config_opts['basedir'] = '/var/lib/mock'
config_opts['chroot_setup_cmd'] = 'groupinstall build'
config_opts['chroothome'] = '/builddir'
config_opts['dnf_warning'] = False
config_opts['package_manager'] = 'dnf'
config_opts['root'] = 'dist-oc8-build-repo_14403'
config_opts['rpmbuild_networking'] = False
config_opts['rpmbuild_timeout'] = 86400
config_opts['target_arch'] = 'x86_64'
config_opts['use_host_resolv'] = False
config_opts['yum.conf'] = '[main]\ncachedir=/var/cache/yum\ndebuglevel=1\nlogfile=/var/log/yum.log\nreposdir=/dev/null\nretries=20\nobsoletes=1\ngpgcheck=0\nassumeyes=1\nkeepcache=1\ninstall_weak_deps=0\nstrict=1\n\n# repos\n\n[build]\nname=build\nbaseurl=https://build.opencloudos.tech/kojifiles/repos/dist-oc8-build/14403/x86_64\nmodule_hotfixes=1\n'
config_opts['plugin_conf']['ccache_enable'] = False
config_opts['plugin_conf']['root_cache_enable'] = False
config_opts['plugin_conf']['yum_cache_enable'] = False
config_opts['macros']['%_host'] = 'x86_64-koji-linux-gnu'
config_opts['macros']['%_host_cpu'] = 'x86_64'
config_opts['macros']['%_rpmfilename'] = '%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm'
config_opts['macros']['%_topdir'] = '/builddir/build'
config_opts['macros']['%distribution'] = 'Koji Testing'
config_opts['macros']['%packager'] = 'Koji'
config_opts['macros']['%vendor'] = 'Koji'
# cat dist-oc8-mock-aarch64.cfg
config_opts['basedir'] = '/var/lib/mock'
config_opts['chroot_setup_cmd'] = 'groupinstall build'
config_opts['chroothome'] = '/builddir'
config_opts['dnf_warning'] = False
config_opts['package_manager'] = 'dnf'
config_opts['root'] = 'dist-oc8-build-repo_14417'
config_opts['rpmbuild_networking'] = False
config_opts['rpmbuild_timeout'] = 86400
config_opts['target_arch'] = 'aarch64'
config_opts['use_host_resolv'] = False
config_opts['yum.conf'] = '[main]\ncachedir=/var/cache/yum\ndebuglevel=1\nlogfile=/var/log/yum.log\nreposdir=/dev/null\nretries=20\nobsoletes=1\ngpgcheck=0\nassumeyes=1\nkeepcache=1\ninstall_weak_deps=0\nstrict=1\n\n# repos\n\n[build]\nname=build\nbaseurl=https://build.opencloudos.tech/kojifiles/repos/dist-oc8-build/14417/aarch64\nmodule_hotfixes=1\n'
config_opts['plugin_conf']['ccache_enable'] = False
config_opts['plugin_conf']['root_cache_enable'] = False
config_opts['plugin_conf']['yum_cache_enable'] = False
config_opts['macros']['%_host'] = 'aarch64-koji-linux-gnu'
config_opts['macros']['%_host_cpu'] = 'aarch64'
config_opts['macros']['%_rpmfilename'] = '%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm'
config_opts['macros']['%_topdir'] = '/builddir/build'
config_opts['macros']['%distribution'] = 'Koji Testing'
config_opts['macros']['%packager'] = 'Koji'
config_opts['macros']['%vendor'] = 'Koji'
PS: 以上配置文件也可以在配置了koji用户的机器上通过 koji mock-config --tag="dist-oc8-build" -a <arch> 生成
- 本地mock构建:
 
mock -r mock-oc8-x86_64.cfg --rebuild xxx.src.rpm 或 mock -r mock-oc8-aarch64.cfg --rebuild xxx.src.rpm
- lookaside 服务链接
 
https://git.opencloudos.tech/sources/
【Tips】路径结构是 <包名>/<分支名>/
- 上传 tarball 方法:
上传tarball需要通过统一认证,
curl --negotiate -u : https://git.opencloudos.tech/sources/upload.cgi --form "name=test-pkg" --form "branch=oc8" --form "sha1sum=cc93e3e69d026a19de87d9456a469e306d66225b" --form "file=@test.tar.gz"kinit UserName 
Bugzilla 缺陷管理
- 访问链接 https://bugs.opencloudos.tech/
 - 文档 Bugzilla使用手册 - OpenCloudOS
 
CI 测试系统
- 访问链接Dashboard [Jenkins]
 - 说明文档 https://docs.qq.com/doc/DRXl1U2FSZEl3SnRT
 
沟通渠道
- 微信群 OpenCloudOS技术社区交流群
 - 邮件列表
 
CLA 贡献者许可协议
签署链接:http://cla.opencloudos.tech:8080/