openSUSE:OBS Light Obstag
动机
在创建项目时,能够了解每个组成部分的已知状态非常重要。在与更新版本同步时,仅复制已更改的内容也很重要。obstag 和 obs2obscopy 命令为任何 OBS 添加了对该要求的支持。obscreategroups 补充了这两个实用程序,用于镜像创建。
下载
- 最新版本可以从我们的 GIT 树 这里 下载
- 打包版本可在 OBS Light 项目仓库 这里 获得。该工具包含在 obslight 包中。
obstag
规格
OBS 不提供标记概念,但提供与每个项目中的每个软件包关联的版本控制概念。软件包的版本由序列号(表示对该软件包进行的提交次数)和 MD5 校验和表示,后者可以直接访问软件包的特定版本。
注意,版本号是每个 OBS 实例的本地版本,而 MD5 可以从一个 OBS 实例传输到另一个 OBS 实例。
obstag 实用程序为给定的项目创建一个标签文件。稍后可以使用该标签文件将该特定版本项目复制到另一个目标项目。
警告:当 obstag 通过本地 OBS 上的链接在远程 OBS 上使用时,obstag 将创建一个软件包列表,但没有版本标签信息。使用如此减少的信息, obs2obscopy 将始终复制软件包的最新版本。
用法
启动 obstag 而不带任何参数或 --help 将显示在线帮助。没有 man 页面。
$ obstag --help 帮助函数:标记 OBS 中的一个项目(通过链接项目管理远程 obs)它将创建一个标签文件,其中包含 MD5 以表示软件包版本标签文件可以用作 obs2obsCopy 的直接输入用法:/usr/local/bin/obstag obs-别名 项目名称 md5_文件名称示例:/usr/local/bin/obstag http://myObs.mynetwork:444 meego.com:MeeGo:1.2:oss my_revision_tag.md5 meego.com 可以是一个本地项目,它是指向远程 OBS 的链接公共 API公共 API 不提供日志信息,在这种情况下版本信息将为空 obs2obscopy 将始终复制软件包的最新版本版本 3.0 许可 GLPv2
obs2obscopy
规格
默认情况下,OBS 不提供复制整个项目的方法。obs2obscopy 使用 obstag 文件作为输入提供该功能。
名称 obs2obscopy 可能会造成混淆,因为该命令在单个 OBS 实例(由其别名引用)中工作。从一个 OBS 复制到另一个 OBS 是通过创建链接项目完成的。选择这种方法是因为它提供了一个更快的复制过程 (但命令名称保持不变)。 从版本 3 开始,您可以直接从公共 API 进行复制,创建链接项目不再是强制性的。
标签文件中列出的所有软件包都将被复制。任何以 # 开头的行都将被忽略(注释功能)。仅使用 MD5 来识别软件包版本,标签文件中存在的其他信息仅供参考。
由于只有当目标 OBS 上不存在软件包时,软件包才会被复制,因此可以根据需要多次运行命令 obs2obscopy 以完成复制而不会出错(网络错误并不罕见)或升级项目。
在复制结束时会打印一份报告,告诉您是否发生错误。日志文件的名称也会被打印出来。
用法
$ obs2obscopy --help 帮助函数:使用包含所需 MD5 以表示软件包版本的软件包列表作为输入,将项目从一个 OBS 复制到另一个 OBS。如果目标软件包已经处于正确的版本,则其复制将被忽略。可以多次运行该脚本,直到达到零错误为止。将为每次运行创建一个名为 <MD5_FILE>.log 的日志文件。用法:obs2obscopy obs-别名 源项目 目标项目 md5_文件 或 obs2obscopy obs-别名 源项目 其他-obs-别名 目标项目 md5_文件 md5_文件由 obstag 脚本创建示例 1:本地复制 obs2obscopy http://myObs.mynetwork:444 MyMeeGo:1.2:oss myTest:MeeGo:1.2:oss my_revision_tag.md5 示例 2:远程复制(通过链接)obs2obscopy http://myObs.mynetwork:444 meego.com:MeeGo:1.2:oss myobs:MeeGo:1.2:oss my_revision_tag.md5 其中 meego.com 是指向远程 OBS 的链接的本地项目公共 API 返回代码:0 成功 1 某些软件包未复制 2 参数数量错误 3 读取 MD5 文件或写入日志文件时出现问题 4 网络错误 5 用户中断版本 3.1 许可 GLPv2
报告
在每次复制结束时会打印一份最终报告。由于软件包锁定或网络错误(在这种情况下,重新运行该命令将消除问题)或源项目中删除软件包(在这种情况下,错误将永远不会消失,并且在标签文件中注释掉该行是您的最佳选择)而导致出错的软件包可以创建。
Final reports
Total packages requested = 1385
Packages existing on target = 1375
Packages needed copying = 10
Packages copied = 8
Packages in error = 2
已知问题
- 与其它软件包链接的软件包的 md5 比较不起作用,因此复制将在不考虑 md5 的情况下完成,并且即使它们相同,目标上已存在的软件包也会被覆盖。如果您不希望 obs2obscopy 覆盖它们,请编辑 obstag 生成的标签文件,并删除相关软件包的 md5(第一个字段)。
示例
复制本地项目
obstag MyObsAlias MyProjectToCopy MyProjectToCopyAsToday.md5 obs2obscopy MyObsAlias MyProjectToCopy MyProjectTarget MyProjectToCopyAsToday.md5
向客户交付初始项目副本
提供方
obstag SourceObsAlias MyProjectToDeliver ProjectToDeliverV-x.x.md5
- 发送邮件给客户
- ProjectToDeliverV-x.x.md5
- 指向源 OBS 的公共或私有 API(如果是私有,则必须提供登录名和密码)
客户方
- 创建到提供方 OBS API 的链接项目
- 如果不存在,则创建接收项目(例如,TheProject)
obs2obscopy CustomerObsAlias ProviderProjectLink:MyProjectToDeliver TheProject ProjectToDeliverV-x.x.md5
将项目副本升级到客户
只需使用与初始交付相同的过程。obs2obscopy 仅复制目标上不存在的软件包
从副本中删除一些软件包
如果出于任何原因不应复制某些软件包,则在任何行开头添加一个 # 将注释掉该行。
创建到另一个 OBS 实例的链接项目
创建远程目标项目非常简单。
- 在您的 OBS 上创建一个空项目(例如,LinkToMeego.com)
- 编辑项目的元数据
- osc meta -e prj LinkToMeego.com
<project name="LinkToMeego.com"> <title>build.MeeGo.com</title> <description>此项目允许访问 build.meego.com 实例上的所有资源。</description> <remoteurl>https://api.meego.com/public</remoteurl> <person role="maintainer" userid="Admin"/> <person role="bugowner" userid="Admin"/> </project>
- 如果目标 OBS 不是公共 API,则需要更改登录名和密码。MeeGo.com API 是公共的,不需要密码,但一些其他发布者(例如 Genivi Alliance)需要登录名和密码才能使用他们的 API
obsextractgroups
规格
obsextractgroups 顾名思义,只是从已发布的仓库中提取软件包组,并将其提供为文件,以便通过 .ks 文件中的宏 %include 由 MIC 使用。它可以从本地或远程仓库读取软件包组。完整的 URL 允许指定组信息的来源。组以与 MIC 在 kick start 文件(.ks)中使用的宏 %include 兼容的格式提取到文件中。
用法
/obsextractgroups.py --help 帮助 obsextractgroups 函数:解析 Meego 仓库中的 group.xml 文件(即使是 .gz 文件),并将每个组的 rpm 列表保存到文件中,文件名与组名相同。用法:obsextractgroups [选项] 已发布仓库的 URL [包含文件的目标目录] [选项]:-s 静默模式 -d 调试模式,将 group.xml 复制到目标目录。-v 详细模式。已发布仓库的 URL:必须是有效的仓库目标目录:是可选的,默认值为当前目录示例 1:远程 ./obsextractgroups.py -v -d http://repo.meego.com/MeeGo/releases/1.2.0/repos/oss/ia32/ ./result/ 示例 2:远程(注意:这里的端口是 82)./obsextractgroups.py http://128.124.118.140:82/home%3a/ronan%3a/MeeGo%3a/1.2/ 示例 3:本地 ./obsextractgroups.py -s ./repos/ 版本:0.1 许可:+GLPv2
报告
在复制结束时会打印一份最终报告。
Number of Groups: 47
Group name Numbers of packages
Basic Hardware Support 1
MeeGo SDK Base 17
MeeGo Tablet Applications 17
MeeGo Handset Desktop 35
MeeGo Compliance 78
Virtual Machine Support 4
Minimal MeeGo X Window System 7
MeeGo Handset Applications 19
MeeGo TV 16
MeeGo Core 121
...
...