跳转至

编译流程

贡献仓库

OpenCloudOS Stream 的所有软件包都存储在 https://gitee.com/opencloudos-stream/ 仓库,以 setup 仓库为例介绍参与贡献流程。

环境配置

  1. 创建所需文件夹:mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
  2. 创建mock.cfg:以下提供一个 x86_64 机器上的mock配置,用于本地编译
    > cat mock.cfg 
    # Auto-generated by the Koji build system
    
    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-ocs23-base-build-repo_latest'
    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.stream.opencloudos.tech/kojifiles/repos/dist-ocs23-base-build/latest/x86_64\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']['%dist'] = '.ocs23'
    config_opts['macros']['%distribution'] = 'Koji Testing'
    config_opts['macros']['%packager'] = 'Koji'
    config_opts['macros']['%vendor'] = 'Koji'
    

以setup仓库为例,编译时参照步骤如下;

方式一:安装ocspkg工具,需注册账号(推荐)

  1. 手动 fork setup 仓库到个人仓库:https://gitee.com/opencloudos-stream/setup
  2. 安装并配置ocspkg(配置方式详见:ocspkg 使用指南
  3. clone setup 仓库:ocspkg clone setup, 然后进入setup仓库:cd setup (ocspkg指令需在仓库中执行)
  4. 对仓库内容进行修改
  5. 获取源码包: ocspkg sources 如果 lookaside 中无源码包,请上传源码包(非必须步骤,按需执行):

    • ocspkg new-sources setup-x.xx.tar.gz: 上传tarball,清空sources文件后,写入源码包sha值;
    • ocspkg upload setup-x.xx.tar.gz: 上传tarball,在sources文件后,添加源码包sha值;

    注:如出现"unauthorized"则为kerberos认证到期, 请执行 kinit 续期

  6. 编译:

    • 生成src.rpm:ocspkg srpm
    • mock编译:填写/etc/mock/opencloudosstream-$arch.cfg配置文件($arch视情况替换,如:x86_64),然后执行 ocspkg mockbuild
      • 编译日志:/var/lib/mock/dist-ocs23-build-repo_latest/result
      • 编译结果:/var/lib/mock/dist-ocs23-build-repo_latest/root/builddir/build/
    • koji编译:测试构建请务必使用 scratch 参数
    ocspkg build --scratch --srpm /path/to/xx.src.rpm   # 推荐,使用本地srpm编译
    ocspkg build --scratch                              # 从git仓库生成srpm,然后发起编译          
    

    注:如出现"unauthorized"则为kerberos认证到期, 请执行 kinit 续期

  7. 提交代码

    ocspkg commit -m "input your message"
    ocspkg push
    

方式二:不安装工具,无需注册账号

  1. 手动 fork setup 仓库:https://gitee.com/opencloudos-stream/setup
  2. clone setup 仓库:git clone git@gitee.com:<username>/setup.git
  3. 对仓库内容进行修改
  4. 获取源码包,并创建sources文件
    • 源码包统一存储于 lookaside:https://git.opencloudos.tech/sources-stream/
    • 当前解决方案为将源码包与spec文件内容一同上传至仓库,门禁流水线会自动上传源码包,并提醒开发者检查 sources 文件是否符合要求
    • 通过 sha512sum --tag <tarball_name> 命令获取源码包 sha512 值并写入sources,sources文件需要在末尾保留一个空行,如:
      SHA512 (setup-setup-2.14.5.tar.gz) = 45625d79a2e4444ff8ac5899f0de23280f5d4681859e547f886ffd6d85657448283569fec0b5e38585226e0fbbddca341862378e33554e73f7b85f494365d74b
      
  5. 将文件移动到rpmbuild目录下:
    • cp * ~/rpmbuild/SOURCES/
    • mv ~/rpmbuild/SOURCES/setup.spec ~/rpmbuild/SPECS/
  6. 生成src.rpm,位于~/rpmbuild/SRPMS目录:rpmbuild -bs ~/rpmbuild/SPECS/setup.spec
  7. 使用mock根据实际生成的src.rpm名进行本地编译:mock -r /path/to/mock.cfg --rebuild ~/rpmbuild/SRPMS/setup-2.13.9.1-4.ocs23.src.rpm
  8. 编译日志及结果
    • 编译日志:/var/lib/mock/dist-ocs23-build-repo_latest/result
    • 编译结果:/var/lib/mock/dist-ocs23-build-repo_latest/root/builddir/build/
  9. 检验结果后将spec文件、源码包以及所需其他文件共同提交pr

注:方式二由于未获取账号,上传源码包、koji 编译均存在使用限制。