diff --git a/DEVELOPER_DOCS/menu.yaml b/DEVELOPER_DOCS/menu.yaml index 2c14ad658117dfe816be949ea80caacbd538a9c4..7cbd4d09777f4b097dc2ee2f747778b087ba42f9 100644 --- a/DEVELOPER_DOCS/menu.yaml +++ b/DEVELOPER_DOCS/menu.yaml @@ -8,4 +8,5 @@ DEVELOPER_DOCS: 发行声明: 生物进化论: ./AnolisOS发行声明/生物进化论.md 蓝天白云: ../AnolisOS发行声明/1120-蓝天白云.md - es文档查询: ../AnolisOS发行声明/es文档查询.md \ No newline at end of file + es文档查询: ../AnolisOS发行声明/es文档查询.md + Anolis OS 8 软件包本地构建.md: ../进阶开发/Anolis OS 8 软件包本地构建.md \ No newline at end of file diff --git "a/DEVELOPER_DOCS/\350\277\233\351\230\266\345\274\200\345\217\221/Anolis OS 8 \350\275\257\344\273\266\345\214\205\346\234\254\345\234\260\346\236\204\345\273\272.md" "b/DEVELOPER_DOCS/\350\277\233\351\230\266\345\274\200\345\217\221/Anolis OS 8 \350\275\257\344\273\266\345\214\205\346\234\254\345\234\260\346\236\204\345\273\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..cab5ca40f878b01498c408505ee6c7de353ef11e --- /dev/null +++ "b/DEVELOPER_DOCS/\350\277\233\351\230\266\345\274\200\345\217\221/Anolis OS 8 \350\275\257\344\273\266\345\214\205\346\234\254\345\234\260\346\236\204\345\273\272.md" @@ -0,0 +1,122 @@ +# Anolis OS 8 软件包本地构建 + +Mock 是软件包构建工具,可快速构造和内部 KOJI 平台一致性的沙箱(chroot 或者 systemd-spawn)隔离构建的软件包环境,并通过 rpmbuild 完成 RPM 软件包的构建。 本文档会介绍在环境中快速配置 Mock 环境,并举例说明使用方法,满足快速构建的目的。Mock 的更多参数使用方法可直接参考官网文档。 + +## 1. mock 环境搭建 ++ 启动安装 Anolis OS 8 设备或者实例 ++ 安装 EPAO(Extras Package For Anolis) YUM 仓库的 mock-core-configs 包(非 ECS 实例需要安装 epel-release) + +```bash +yum install -y anolis-epao-release +#阿里云 ECS Anolis OS 实例不需要运行 epel-release 安装步骤, +#因为阿里云 ECS 实例已通过(epel-aliyuncs-release)预装 epel 对应 YUM REPO +yum install -y epel-release +yum install -y mock-core-configs mock rpm-build +``` + ++ 配置 build 用户 + +mock 不支持 root 用户,所以新建用户 build,用于执行构建。 + +```bash +useradd build +usermod -a -G mock build +``` + +## 2 mock 环境编译 +### 2.1 简单构建环境 +该构建环境仅仅提供了 `BaseOS`、`AppStream`、`PowerTools` 官方发布仓库。可以满足最小化的构建环境需求。mock 可以通过 `-r`参数直接指定如下 Anolis OS 的构建环境文件。请注意,若用户需要 aarch64 的本地构建环境需要在 aarch64 的设备或实例进行相应配置。 + +```bash +anolis-8-aarch64 +anolis-8-x86_64 +anolis-7-aarch64 +anolis-7-x86_64 +``` + +使用方法如下: + + +```bash +su build +# target_srpm 为目标 srpm +mock -r anolis-8-x86_64 rebuild --no-bootstrap-image --enable-network ${target_srpm} +``` + +### 2.2 社区本地构建环境 +该构建环境基本还原真实的社区构建环境,编译支撑的 Repo 远远大于 `BaseOS`、`AppStream`、`PowerTools` 。需要先准备一份 config 文件, 然后基于该文件执行命令编译相应包即可。 + + + +#### 2.2.1 x86_64/aarch64 config 文件 +```plain +config_opts['basedir'] = '/var/lib/mock' +config_opts['chroot_setup_cmd'] = 'install bash bzip2 coreutils cpio diffutils elfutils git gzip make meson patch perl redhat-rpm-config rpm-build rpmdevtools scl-utils-build sed shadow-utils tar texinfo unzip util-linux util-linux-ng which dnf' +config_opts['chroothome'] = '/builddir' +config_opts['dnf_warning'] = False +config_opts['package_manager'] = 'dnf' +config_opts['root'] = 'dist-an8-build' +config_opts['rpmbuild_networking'] = False +config_opts['rpmbuild_timeout'] = 86400 +config_opts['use_host_resolv'] = False +config_opts['dnf.conf'] = """ +[main] +cachedir=/var/cache/yum +debuglevel=1 +logfile=/var/log/yum.log +reposdir=/dev/null +retries=20 +obsoletes=1 +gpgcheck=0 +assumeyes=1 +keepcache=1 +install_weak_deps=0 +strict=1 + +# repos +[build] +name=build +baseurl=http://build.openanolis.cn/kojifiles/repos/dist-an8-build/latest/$basearch +module_hotfixes=1 +""" + +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']['%_rpmfilename'] = '%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm' +config_opts['macros']['%_topdir'] = '/builddir/build' +config_opts['macros']['%distribution'] = 'OpenAnolis Community Testing' +config_opts['macros']['%packager'] = 'OpenAnolis Community' +config_opts['macros']['%vendor'] = 'OpenAnolis Community' +``` + + + +#### 2.2.2 x86_64/aarch64 构建命令 +```bash +su build +# target_srpm 为目标 srpm +mock -r anolis-8-local.cfg --no-bootstrap-image --enable-network --arch=`arch` rebuild ${target_srpm} +``` + + + +## 3 Anolis OS 8 mock 构建常见问题集锦 ++ mock 编译包的结果位置在哪里? + +mock 执行完成后会给出构建包所在路径,类似如下提示,默认所在路径是 `/var/lib/mock/dist-an8-build/result`。 + +结果路径受文件首行中`basedir`以及`--uniqueext=my_uniqueext`选项共同影响。例如:修改 cfg 文件首行`config_opts['basedir'] = '/my_basedir'`并在构建命令添加`--uniqueext=my_uniqueext`选项后,构建结果所在路径会变更为`/my_basedir/dist-an8-build-my_uniqueext/result`。 + ++ 如何自定义构建包 dist 的值? + +可通过在 command 中增加选项`--define "%dist .mydist"`用于进行自定义修改,其中`mydist`为自定义 dist 的值。 + ++ 如何安装环境依赖包所使用的 yum 仓库? + +可修改 baseurl 的值来自定义 yum 仓库,如需要添加格式可参考 repo 文件。 + ++ 不同架构的命令是否相同? + +是的,`arch`命令会自动获取执行机架构。