Fedora koji构建系统详细教程之二 -- 构建

2024-08-31 16:36

本文主要是介绍Fedora koji构建系统详细教程之二 -- 构建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

本篇文章是上一篇文章的继续,由于koji里面的内容实在是太多,都塞进一篇文章里会显得很臃肿,于是我就拆成了两部分。在上一篇文章里,我们已经部署好了Fedora koji系统,此时kojihub已经运行、可以通过kojiweb或koji命令去访问,并且也打开了kojira和kojid,这时候你已经具备构建的能力了。在这篇文章里,我会在x86_64上构建x86_64的rpm包,然后再进行RISC-V rpm包的构建,因为这涉及到一个RISC-V虚拟机部署问题,实际上内容和问题也不少。这篇文章仍然需要慢慢完成,内容也比较多,请大家仔细观看。


一、构建前准备

1、创建标签并配置

koji里的标签称为tag,这个tag就是某一个Linux发行版的所有软件包的集合的名称。比如说我要创建一个f40_x86_64这个标签,意思就是说这个标签代表了Fedora40 x86_64这个发行版它所规定的所有软件包集合的名称叫做f40_x86_64.实际上这个名字你是可以随便取的,不过最好是取得要规范。名称只是一个象征,真正重要的是你导入的软件包名和版本信息,它们会和你所创建的这个标签绑定。不仅仅是Fedora可以这样,比如说openEuler你也可以这样,只要你获得了或者自己制作了这个软件包信息的txt文件,就可以创建一个名叫openEuler24.03_x86_64这样一个标签去代表这么一个24.03openEuler的发行版。

甚至于说比如我喜欢LFS,那么我就可以自己制作一个属于自己的Linux发行版。我举个例子,比如我想基于LFS制作一个April Linux发行版,那么我就可以自己弄一个april_pkg_list.txt,然后创建April_x86_64标签,这么构建出来的一套软件包再发行出去。那么我的这个April Linux操作系统就可以发布出去让大家都使用了!

我以iscas的kojiweb展示出来的信息为例,就是说每一个Linux发行版对应一个tag,你每需要一个仓库就得来一个标签。同一发行版如果版本不同,也需要独自创建一个tag.

不知道大家对这个标签tag的概念是否已经清楚,标签代表着某个release(或者基于这个release的变体/开发版本)所包含的所有软件包集合。

koji add-tag f40_x86_64# koji add-tag 标签名      增
# koji remove-tag 标签名   删
# koji list-tags          查

添加(package)软件包列表(只是包名)到这个tag:

cat f40_pkg_list.txt | xargs -n 1024 koji add-pkg --owner kojiadmin f40_x86_64

大家还记得f40_pkg_list.txt吧,这个就是在第一篇文章里从Fedora project的kojihub里获取到的信息,因为那时候april_zhao用户的koji命令默认指向Fedora官方的koji ,所以获取到这个文件是比较容易的。但是你一旦部署好了之后,让其指向你自己部署的kojihub,那么这个文件你就获取不到了,所以我把这部分放在第一篇的最前面。但是如果说你当时没有通过Fedora的kojihub获取到这个文件也没有关系,你可以(待写)。

批量导入包名到标签里。在导入的过程中可能出现database outage的问题,因为postgresql会莫名其妙不太稳定,所以你可以重启一下数据库然后重新执行导入包名的命令。

sudo systemctl restart postgresql koji-sweep-db

一旦你导入了这些包名,那么你的Summary统计信息就不会像以前那样光秃秃的了,而是会把这些信息展示在这里,你可以对比一下Fedora和iscas的kojiweb是不是也是这样。

这里大家可以对比观察现象,就是说你每做一步操作,就去kojiweb里看看有什么地方不一样。眼见为实,你实践过了,就不会觉得这些概念很抽象了。


2、导入组信息

1) fedora功能分组信息
koji import-comps fedora_comps/comps_f40.xml f40_x86_64_build

comps_f40.xml 文件定义了软件包组的列表和描述,这些组可能包括特定的应用程序、工具和库。通过导入这些信息,可以帮助在构建过程中正确选择和安装需要的软件包组,确保构建环境的完整性和一致性。

2) 导入koji编译系统特定的分组信息
koji import-comps comps_f40_koji.xml f40_x86_64_build

comps_f40_koji.xml在第一篇文章里也已经得到了。

comps_f40_koji.xml 文件定义了一系列与构建和打包相关的软件包组,例如 appliance-buildbuildkiwi-buildlivecd-buildlivemedia-buildsrpm-build。这些组包含了一些必需的工具和库,用于特定类型的构建任务,如构建 SRPM 包等。

3、创建构建目标

koji add-target f40_x86_64_build_target f40_x86_64_build f40_x86_64# koji add-target <target name> <build tag> <des tag>   添加构建目标
# koji remove-target <target name>                      删除构建目标
# koji list-targets List the build targets              列出构建目标

构建目标(build target),描述的是一个构建的过程,其中包含你已经创建的前两个标签:tag和build tag。

4、createrepo权限与重建仓库信息

我们现在需要重建仓库,但是host默认的defaut权限是无法进行这个操作的,需要createrepo权限才可以,所以我们需要给我们唯一的host(kojibuilder1)添加这一权限。

koji add-host-to-channel kojibuilder1 createrepo# koji add-host-to-channel host名 channel权限名
# koji remove-host-from-channel host名 channel权限名

可以在命令行如此操作,也可以在kojiweb里点击添加。

koji regen-repo f40_x86_64_build

这也是我们首次提交任务,当你执行这行代码之后,就会在Tasks界面里提交两个任务。

由于我第一次提交任务之前忘记给予kojibuilder1 createrepo权限了,所以我手动把任务1和任务2取消并重新创建。

如图所示,现在kojihub已经自动安排我们的kojibuilder1也就是本机上的kojid进行工作了,因为此时Load负载不为0,并且这个任务本身不难,所以没有把4.0的总负载给占满。

运行一段时间之后,regen-repo成功,我建议的话是这个regen-repo操作就让有权限访问/mnt/koji(这个可以由你来设置)的机器来完成就好。因为它涉及到一个文件系统的访问,如果让其他设备上的kojid来运行可能会没有足够的访问权限、导致regen-repo失败。也就是说regen这些操作由“本机”来做,让对这个目录有读写权限的那台机器来做,给予那台机器对应的kojibuilder这个createrepo权限,这样是最稳妥的。

5、外挂仓库



二、开始构建第一个rpm包


这篇关于Fedora koji构建系统详细教程之二 -- 构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124420

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的