编译流程
贡献仓库
OpenCloudOS Stream 的所有软件包都存储在 https://gitee.com/opencloudos-stream/ 仓库,以 setup
仓库为例介绍参与贡献流程。
环境配置
- 创建所需文件夹:
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
- 创建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工具,需注册账号(推荐)
- 手动 fork setup 仓库到个人仓库:https://gitee.com/opencloudos-stream/setup
- 安装并配置ocspkg(配置方式详见:ocspkg 使用指南)
- clone setup 仓库:
ocspkg clone setup
, 然后进入setup仓库:cd setup
(ocspkg指令需在仓库中执行) - 对仓库内容进行修改
-
获取源码包:
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 续期。
-
编译:
- 生成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 续期。
- 生成src.rpm:
-
提交代码
ocspkg commit -m "input your message" ocspkg push
方式二:不安装工具,无需注册账号
- 手动 fork setup 仓库:https://gitee.com/opencloudos-stream/setup
- clone setup 仓库:
git clone git@gitee.com:<username>/setup.git
- 对仓库内容进行修改
- 获取源码包,并创建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
- 将文件移动到rpmbuild目录下:
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/SOURCES/setup.spec ~/rpmbuild/SPECS/
- 生成src.rpm,位于
~/rpmbuild/SRPMS
目录:rpmbuild -bs ~/rpmbuild/SPECS/setup.spec
- 使用mock根据实际生成的src.rpm名进行本地编译:
mock -r /path/to/mock.cfg --rebuild ~/rpmbuild/SRPMS/setup-2.13.9.1-4.ocs23.src.rpm
- 编译日志及结果
- 编译日志:
/var/lib/mock/dist-ocs23-build-repo_latest/result
- 编译结果:
/var/lib/mock/dist-ocs23-build-repo_latest/root/builddir/build/
- 编译日志:
- 检验结果后将spec文件、源码包以及所需其他文件共同提交pr
注:方式二由于未获取账号,上传源码包、koji 编译均存在使用限制。