openSUSE:Build Service 私有实例软件交付
创建可引导镜像
一旦 OBS 正常工作,它将创建包含 rpm(源、二进制文件和无架构)的仓库。
可引导镜像的创建由一个名为“Meego Image Creator”(MIC)的工具完成。MIC 使用 Kick Start(ks] 格式来描述 Linux 发行版的安装,然后将其传输到镜像(支持各种格式)。MIC 可用于从 rpm 仓库创建任何 Linux 镜像。您不必构建 MeeGO 镜像即可从 MIC 中受益。
Meego 网站描述了如何使用 MIC。注意:一些发行版在其仓库中包含 MIC,但遗憾的是,您仍然经常需要从源代码重新安装 MIC。
- Image Creation For Beginners (MeeGo Wiki)
- Image Creation developer's guide
- Kick Start HowTo (Red Hat)
- Kick Start 参考文档 (Fedora)
注意:如果您想使用(或重用)软件包组,例如 @Core,您需要使用名为 Createrepo 的工具在 OBS 外部创建这些组。
启用私有仓库
只要您不需要使用组,OBS 创建的仓库就可以直接被基于 rpm 的软件包管理器(如 yum 或 zypper)使用。
例如,要在您的主目录中测试新创建的软件包,只需在您的 yum(或 zypper)配置中添加一个仓库,强制重新扫描仓库,并使用简单的 yum install 命令安装您的软件包。注意:如果您创建了已存在于您的基础仓库中的软件包的第二个版本,那么您需要注意 rpm 的发布和版本号。如果您的修改后的软件包基于对源软件包的链接(并进行修改),OBS 通常会正确获取编号,但如果您进行了复制,OBS 将无法跟踪哪个是最新版本。建议:在测试环境中,直接从 OBS 仓库安装非常有用且实用。对于生产系统,我建议让 QA 团队在专用仓库服务器上复制 OBS,并让客户仅从仓库服务器加载他们的软件。
将组添加到私有仓库
组可以简化镜像的创建,因为它们允许将软件包列表与给定的组名关联。定义软件包组的文件是 xml 文件。其结构定义 此处
一旦创建(或从某个地方恢复)group.xml 文件,您就可以将组添加到您的仓库。这将需要访问包含您的仓库的文件系统。
- 创建或恢复组文件(如果您在仓库创建时已将其添加到 repodata 中,您会找到压缩文件,名称为 xxxxxgroup.xml.tgz)
- 成为 root
- 将 group.xml 文件复制到仓库的基目录,即需要创建组的位置
- 调用 createrepo 命令
- 一个新的 group.xml.tgz 文件被添加到目标仓库的 reposdata 目录中。
- 将新文件的所有者改回 obsrun
su cp group.xml /obs/repos/meego-1.2.tv/standard/ cd /obs/repos/meego-1.2.tv/standard/ createrepo -g group.xml /obs/repos/meego-1.2.tv/standard/ chown obsrun:obsrun -R *
注意:每次仓库被 OBS 修改时,都必须重新执行此操作(如果有人有自动化此阶段的方法,请在此处添加)。
签名或不签名
每次软件包创建时签名都需要时间。如果您只是进行内部测试,签名是毫无意义的时间浪费。
对于实际部署,签名您的软件包是一个好主意。您可以让 OBS 为您执行此操作(最简单的方法),也可以在将软件包传输到您的专用仓库服务器时执行此操作。
您可以在 此处 找到 HowTo
交付到另一个 OBS 实例
当您需要交付软件以启用客户或合作伙伴将软件添加到您的初始交付中时,保持流程简单、可重现且能够管理升级和更新非常重要。
在线
当源和目标之间具有 IP 连接时,从 OBS 交付软件非常简单。
- 只需为要交付的项目创建一个 ObsTag
- 如果您不允许公共连接,请在您的 OBS 上为您的客户创建一个帐户,并让他们使用命令“osc copypac”和选项“-t”将他们的软件包上传到他们自己的 OBS 实例。
- 为您的客户提供 obs2obscopy 实用程序的副本
离线(通过 rpm)
在没有 IP 连接的情况下从 OBS 实例交付代码会更复杂一些。
源 rpm 的导入仅应在软件包的初始创建时使用,因为它会在目标 OBS 中丢失所有更改历史记录(有关软件包更新的交付,请参阅下面 (via tgz))。
在传输端
在源端,您创建一个包含要交付的所有 rpm 源文件的 tar 文件。每个文件都将具有一个名称,该名称表示软件包名称及其版本。
在接收端,
- 使用 OBS Web UI 创建一个项目或子项目,该项目将托管这些新软件包(例如,MeeGo:1.2:MyImportedProject)
- 在配备 osc 的工作站上,解压缩收到的 tar 以在单独的文件中获取每个 rpm。
- 移动到包含 rpm 源文件的目录,并创建一个包含 rpm 列表的文件(不带前导目录)。
cd /home/dominig/temp/untardir/ ls *.rpm > rpm.lst
- 移动到将在您的 PC 上托管源文件的工作目录(任何目录都可以)。
- 签出新创建的项目(它将在您的 PC 上创建一个目录)。
cd /home/dominig/MeeGo/ osc co MeeGo:1.2:MyImportedProject
- 移动到 osc 创建的目录(可能需要 "")。
- 使用 osc importsrcpkg 命令在一个脚本中一次导入所有软件包。
cd "/home/dominig/MeeGo/MeeGo:1.2:MyImportedProject" for I in `cat /home/dominig/temp/untardir/rpm.lst` ; do osc importsrcpkg -c /home/dominig/temp/untardir/$I ; done
- 使用 OBS Web UI 检查您的软件包是否已成功传输到 OBS。
注意 rpm 源不会传输任何 rpmlintrc 规则和异常,这些规则和异常可能需要在 OBS 中编译您的代码。 更多
离线(通过 tgz)
此过程稍微复杂一些,但不会擦除接收 OBS 中的软件包历史记录。
最佳方法包括
- 在源系统上
- 签出所有要交付的项目,并创建一个 tar 文件,其中包含这些项目。
- 在目标系统上
- 创建相同的项目和软件包层次结构
- 签出它们
- 将签出项目的镜像解压缩到 tmp 目录
- 将 tmp 目录中的所有文件复制到签出目录
- 使用 osc addremove 命令在签出目录上
- 签入项目。
注意:此方法会将任何链接导出为副本。
仅二进制文件
有时,某些模块无法以源代码形式交付给您的客户,而 OBS 将仅管理源 rpm。
如果您想使用 OBS 跟踪您的构建版本、依赖项并构建您的所有仓库,即使某些软件包是仅二进制文件,您可以使用一个简单的创建具有空构建阶段的软件包的方法,并使用将二进制文件复制到编译后出现的位置的安装阶段。
交付可运行镜像
您可以使用 mic2(MeeGo 镜像 Creator)和 kickstart 文件(.ks)来创建可引导镜像。
您可以在 此处 找到 mic2 和 .ks 的指针