https://docs.pagure.org/koji/
一、常用的koji列表
测试你的koji是否能正常使用
koji moshimoshi
如下批量处理
导入软件包
koji import <pkg> [<pkg>]
koji import --link centos-logos-70.0.6-3.el7.centos.src.rpm #注意link 硬链接方式/mn/koji 不可以是软链接过来的目录
导入之后就是下面你这个样子
ls -al /mnt/koji/work/cli-import/1592446224.561101.yLkQQGMn/centos-logos-70.0.6-3.el7.centos.src.rpm
lrwxrwxrwx 1 apache apache 95 Jun 17 22:10 /mnt/koji/work/cli-import/1592446224.561101.yLkQQGMn/centos-logos-70.0.6-3.el7.centos.src.rpm -> ../../../packages/centos-logos/70.0.6/3.el7.centos/src/centos-logos-70.0.6-3.el7.centos.src.rp
此时在koji-web页面的packages是以centos-logos作为package_name(Name),点进去之后只有builds是NVR格式的centos-logos-70.0.6-3.el7.centos,此时packages页面下载tags是空的。需要添加标签:koji add-pkg --owner tag-name package_name
然后点击NVR到builds页面,此时Builds的Tags是空的,需要加标记。2中方法
1)koji tag-build tag-name (NVR)centos-logos-70.0.6-3.el7.centos (效率低因为形成task)
2) koji list-untagged | xargs -n 1 koji call tagBuildBypass tag-name (效率高只是单纯的标记没有task)
koji import的方式此时package和build都还没有tag,build状态时complete,无法koji build,需要执行1) koji add-pkg --owner kojiadmin dist-s8 go-ovirt-engine-sdk(package_name) 2)koji call deleteBuild (NVR),3)koji call resetBuild <NVR> 4)koji build dist-nk5u8 xxxx.src.rpm。1步骤:给 package种加tag 才可以编译。2,3步是该状态complete为canceled
1)koji import engine-db-query-1.6.2-1.el8.src.rpm go-ovirt-engine-sdk4-4.4.1-1.el8.src.rpm
2)koji add-pkg --owner kojiadmin dist-s8 go-ovirt-engine-sdk4
koji add-pkg --owner kojiadmin dist-s8 engine-db-query
3)koji call deleteBuild engine-db-query-1.6.2-1.el8
koji call deleteBuild go-ovirt-engine-sdk4-4.4.1-1.el8
4)koji call resetBuild go-ovirt-engine-sdk4-4.4.1-1.el8
koji call resetBuild engine-db-query-1.6.2-1.el8
5)koji build dist-s8-ovirt engine-db-query-1.6.2-1.el8.src.rpm
go-ovirt-engine-sdk4-4.4.1-1.el8.src.rpm
package name:go-ovirt-engine-sdk
package nvr:go-ovirt-engine-sdk4-4.4.1-1.el8
package version:4-4.4.1
package release:1
package dist:.el8
#!/bin/bash
koji import ovirt/*
koji add-pkg --owner kojiadmin dist-s8 $(koji list-pkgs --quiet) 给package的name打标记dist-s8和拥有者kojiadmin
for i in $(koji list-builds --state=COMPLETE --quiet | awk '{print $1}');do koji call untagBuildBypass dist-s8 ${i} ;done 去除build中的NVR的标记
for i in $(koji list-builds --state=COMPLETE --quiet | awk '{print $1}');do koji call deleteBuild ${i} ;done 删除build中的NVR 也就是该状态COMPLETE 改为DELETED
for i in $(koji list-builds --state=DELETED --quiet | awk '{print $1}');do koji call resetBuild ${i} ;done 重新设置build中的NVR 也就是该状态DELETED改为canceled
#koji build 的前提是 package中的name有标记以及build中的NCR无标记以及build中的状态是canceled 才可以
for i in $(ls ovirt/)
do
koji build --nowait dist-s8-ovirt ovirt/$i; #不等待也就是并行了 和 koji chian-build不一样
# if [[ "$?" == "0" ]];then
# echo $i >> success.list
# else
# echo $i >> error.list
# fi
done
或者直接编译也顺便导入了 不用特意导入
name:superred-logos
nvr:superred-logos-70.0.6-2.el7.centos
version:70.0.6
release:2
dist:el7
1.koji add-pkg --owner kojiadmin dist-s7 superred-logos 给 package种加tag 才可以编译
2.koji build dist-s7-build superred-logos-70.0.6-2.el7.centos.src.rpm 此时也导入
添加tag
koji add-tag <tagname>
添加target
koji add-target <name> <build-tag> <desc-tag>
添加group
koji add-group <tag> <groupname>
往group中添加build所需的一些软件
koji add-group-pkg <tag> <group> <pkg> [pkg]
生成tag用的仓库
koji regen-repo <build-tag>
尝试构建(这个命令build成功后,包会保存到/mnt/koji/scratch下)
koji build --scratch <target> <srpm path or scm url>
往tag中添加包并为拥有者赋值
koji add-pkg --owner <name> <tag> <pkgname> 此时也只是加了一个报名。之后build以下就全了
从tag中删除软件包
koji remove-pkg <tag> <pkgname>
进行build(这个命令build成功后,包会存放在/mnt/koji/packages/相应的包名下)
koji build <target> <pkgname>
添加编译主机
koji add-host <hostname> <arch> [<arch>]
修改编译主机
koji edit-host <hostname> [--arches=ARCH]
添加编译主机到某个频道(有一些默认频道,注意要是在某个频道有任务时,至少要 分配一个编译机,默认频道有default,createrepo,maven,livecd,appliance,vm,可以 新生成频道,可以通过koji add-host-to-channel --list列出所有频道)
koji add-host-to-channel <hostname> <channelname>
从频道中删除主机
koji remove-host-to-channel <hostname> <channelname>
列出某个tag的分组及其中的软件包
koji list-groups <tag> [groupname]
列出所有导入的软件包
koji list-pkgs
增加外部仓库
koji add-exteranl-repo -t <tag> <name> <repo url>
列出外部仓库
koji list-external-repos [--tag=TAG]
删除外部仓库
koji remove-external-repo [--force] <external-repo-name> [tag]
停止某个编译机
koji disable-host <hostname>
启用某个编译机
koji enable-host <hostname>
重命名频道
koji rename-channel <oldname> <newname>
链式构建多个包
koji chain-build target <URL> [URL2 [:] URL3 [:] URL4 ...]
从源码构建一个maven包
koji maven-build target URL
从已有的rpm包制作成系统rpm包
koji wrapper-rpm <target> <build-id|n-v-r> <URL>
运行一系列有依赖顺序的maven构建
koji maven-chain <target> <config> ...
重新提交一个任务
koji resubmit <taskID>
执行一个任意的XML-RPC调用
koji call name [arg...]
生成一个mock配置
koji mock-config [opthions]
重启使能所有编译机
koji restart-hosts
从一个comps文件导入组或者包信息
koji import-comps <file> <tag>
导入签名进数据库
koji import-sig <pkg> [pkg]
写签过名的rpm到硬盘
koji write-signed-rpm <signature-key> n-v-r [n-v-r ...]
精简签名副本(不确定)
koji prune-sigs
移动一个build到不同的卷
koji set-build-volume n-v-r [n-v-r ...]
增加一个新的存储卷
koji add-volume <volume-name>
列出所有卷
koji list-volumes
列出用户权限
koji list-permissions
增加一个用户
koji add-user <username>
使能一个用户登录
koji enable-user <username>
不使能一个用户登陆
koji disable-user <username>
列出rpms的签名副本
koji list-signed
导入就绪的软件包
koji import-in-place <pkg> [pkg]
导入一个和build关联的存档文件
koji import-archive <build-id | n-v-r> /path/to/archive...
赋予一个用户某种权限
koji grant-permission <permission> <user> [<user> ...]
吊销一个用户某种权限
koji revoke-permission <permission> <user> [<user> ...]
打印一个tag的最近build
koji latest-build <tag> <package> [package]
列出XML-RPC API
koji list-api
列出在一个tag中的builds或者rpms
koji list-tagged <tag> [pkg]
列出一个buildroot中用到的rpms
koji list-buildroot buildroot-id
列出没有打标签的包
koji list-untagged [pkg]
从一组包列表中阻塞一个包
koji block-group-pkg <tag> <group> <pkg> [<pkg>...]
从一组包列表中取消阻塞一个包
koji unblock-group-pkg <tag> <group> <pkg> [<pkg>...]
增加一个组到目标组需求列表
koji add-group-req <tag> <target group> <required group>
阻塞一个组的需求列表
koji block-group-req [options] <tag> <group> <blocked req>
取消阻塞一个组的需求列表
koji block-group-req [options] <tag> <group> <blocked req>
查看一个软件包的基本信息
koji rpminfo <n-v-r.a> [<n-v-r.a> ...]
查看一个build的基本信息
koji buildinfo <n-v-r.a> [<n-v-r.a> ...]
复制一个tag
koji clone-tag <src-tag> <dst-tag>
编辑一个target
koji edit-target <targetname>
取消某次build
koji cancel <build-id>
命令行查看koji build logs(注意为+1,原因是kojira看到是 分配给kojira的,而这里要用到的则是分配给kojid的,所以默认看 的+1才是我们要查看的,更高级操作koji watch-logs -h)
koji watch-logs <build-id>
删除软件包的某次构建(记得先把包untagg)
koji call deleteBuild pkgname-version-release-xxx
=========================================================================
修改arch
1 koji edit-tag dist-nk5u8-build --arches "i686 x86_64" //注意,arches是没有逗号的
koji edit-host --arches "i386 x86_64" kojibuilder1 //一般不需要修改这个,如果32位一直free时,可以尝试使用该命令
2、增加tag
koji add-tag dist-nk5u6
2、编译源码
koji build dist-nk5u8 xxxx.src.rpm
(直接执行build,无需导入srpm,在编译过程中,koji会自动的导入上传srpm)
3、取消build
koji cancel <task_id>
4、删除BUILD
koji call untagBuildBypass dist-nk5u8 fake-1.0-6(NVR)
koji call deleteBuild fake-1.0-6(NVR)
5、重新编译
koji call resetBuild <NVR>
koji build dist-nk5u8 xxxx.src.rpm
6、添加koji用户
koji add-user gq
7、在数据库中查看Host对应的ID
psql -U koji koji
select (id, name, capacity) from host; // 查看Host对应的ID
8、查看host信息
koji list-hosts
创建客户端
1、安装KOJI软件包(在客户端安装软件包)
yum install koji
{1、添加koji用户(在服务器端)
koji add-user XXX}//不需要添加用户,可以直接生产证书
2、生成证书(在服务器端用root执行)
./certgen.sh.sh XXX(CN) //此处的XXX与创建的用户XXX(CN)一致
3、发送证书给客户端
将/etc/pki/koji目录下面生成XXX.tar.bz2证书发送给客户端
4、客户端解压
客户端解压XXX.tar.bz2
将 client.crt、clientca.crt、serverca.crt拷贝到~/.koji目录
5、客户端配置/etc/koji.conf
server = http://ip/kojihub
weburl = http://ip/koji
topurl = http://ip/packages
cert = ~/.koji/client.crt
ca = ~/.koji/clientca.crt
serverca = ~/.koji/serverca.crt
注意:koji编译成功后就不能在编译了,在编译就报错,只能删除重新编译
删除已经编译过的包(需在服务器上执行)
koji call untagBuildBypass dist-nk5u8 fake-1.0-6
koji call deleteBuild fake-1.0-6
koji call resetBuild <NVR>
重新编译(在客户端重新编译)
koji build dist-nk5u8 xxxx.src.rpm
1、package XXX not in list for tag dist-nk5u8
原因:是因为进行了多次错误的build,在build没有将包名上传至仓库
解决:可以手动执行以下命令之后,再重新执行build命令
koji add-pkg --owner kojiadmin dist-nk5u8 <package name>
=======================================
https://docs.pagure.org/koji/server_bootstrap/
koji import /path/to/package1.src.rpm /path/to/package2.src.rpm
如果文件与/ mnt / koji放在相同的卷上,则可以使用 ,将文件硬链接到适当的位置,从而避免了将它们上传到中心的麻烦,并且极大地提高了导入速度。使用时,必须以root用户身份运行。这是 强烈建议您使用。koji import --link
--link
--link
-
使用与上述相同的方法导入所有二进制rpm
-
创建一个新标签
koji add-tag dist-foo
-
将所有刚刚导入的软件包标记为刚刚创建的标记
您可以使用获取刚刚导入的所有软件包的列表。koji list-untagged
$ koji list-pkgs --quiet | xargs koji add-pkg --owner <kojiuser> dist-foo
$ koji list-untagged | xargs -n 1 koji call tagBuildBypass dist-foo
我们之所以调用tagBuildBypass方法而不是使用 它,是因为它不需要构建器一次处理tagBuild任务,而是直接进行标记。这将节省大量时间,尤其是在标记大量程序包时。koji tag-build
创建具有所需拱门的构建标签,并将先前创建的标签作为父标签
koji add-tag --parent dist-foo --arches "i386 x86_64 ppc ppc64" dist-foo-build
-
创建一个包含已创建标签的构建目标
$ koji add-target dist-foo dist-foo-build
-
创建与您的构建标记关联的构建组
$ koji add-group dist-foo-build build
-
使用将安装到最小buildroot中的软件包填充构建组
您可以通过 针对$ ARCH的Fedora Koji实例运行来了解Fedora的当前构建组 。对于最小的buildroot,这可能是一个很好的起点。koji -s https://$ARCH.koji.fedoraproject.org/kojihub list-groups f17-build
koji -s
https://cbs.centos.org/kojihub list-groups el7-epel
$ koji add-group-pkg dist-foo-build build pkg1
$ koji add-group-pkg dist-foo-build build pkg2
如果您想为标签完全复制Fedora的组数据,则批量处理会更容易-导出Fedora的数据并将其导入到您的build标签。
$ koji -s https://$ARCH.koji.fedoraproject.org/kojihub show-groups --comps f17-build > comps.xml
$ koji import-comps comps.xml dist-foo-build
-
重新生成仓库
$ koji regen-repo dist-foo-build
-
等待存储库重新生成,您现在应该能够成功运行构建。