openSUSE:构建服务概念产品定义

跳转到:导航搜索

产品定义

产品定义的目的在于将构建产品所需的所有信息收集到一个地方。产品是定义的软件包集合以及额外信息。产品可以是完整的操作系统,也可以是另一个操作系统的扩展(称为附加产品)。相同的产品可以通过各种形式(称为“风格”)交付。

产品的示例包括“openSUSE 11.1”发行版,它以 DVD5、DVD9 或 FTP 网络安装的形式提供。此外,用于额外语言支持或非自由扩展的附加产品也是产品。

所有这些产品及其风格都通过产品定义描述为产品。

产品定义的内容

产品定义需要指定以下类型的信息,以便构建服务可以从中构建媒体。

通用产品信息

通用产品信息是所有风格和所有硬件架构都相同的信息。例如,产品名称、版本及其当前开发状态(Alpha、Beta 或 RC 版本)。

通用部分还包含所使用的软件包仓库列表。这意味着不同的产品媒体始终使用相同的软件包池,以避免软件包来自该产品的不同项目。

此外,它定义了在以下区域使用的设置,例如在哪些组合中使用架构或软件包的特定条件。

配置选项也按其使用阶段分组。这可能是在媒体创建期间、安装期间或安装系统中。

媒体定义

产品可以以多种形式发布。每种形式被归类为产品的风格。风格可以是多个媒体集,每个定义的架构集一个。

媒体定义还包含媒体上仓库中使用的软件包的定义。这些可以由组提供。这些组可以在媒体之间甚至在产品定义之间共享。

这些组或软件包可以分配给选项

  • 条件可以定义根据基本架构从特定架构获取软件包。
  • 如果希望为该风格使用多个媒体,可以将软件包强制到媒体。

最后,构建服务可以自动收集调试或源代码软件包并将它们放在给定的媒体上。

可以通过元软件包提取其他文件到媒体上。这些软件包将被解包,其内容将直接存储在媒体上。

未来版本计划允许从组文件中自动创建模式。目前,模式是通过元软件包维护的。


格式规范

现在有一个或多或少的完整示例文件 待办事项:创建一个 dtd!


构建服务中如何处理产品定义

openSUSE 构建服务可以处理产品定义文件并自动构建所需的媒体。

如何存储产品定义文件

产品文件需要存储在名为“_product”的软件包中。您可以在构建服务的任何项目中创建此软件包,因为产品文件本身指定了使用的仓库。

产品文件的文件名需要与定义中的定义名称加上“.product”后缀匹配。

构建服务如何处理它们

构建服务在 _product 包中的每个源代码更改上运行产品转换器。它会自动创建以下进一步的软件包在 _product:*

  • 发布软件包规范文件,这些是为每个风格创建的 rpm 包,用于标识安装系统中安装的产品。
  • 为每个风格和每个架构集创建一个 kiwi 包。kiwi 包将像往常一样被构建服务处理,并创建所需的镜像或 ftp 树。

产品转换器是 obs-productconverter 包的一部分,可以安装并在任何构建服务服务器实例的独立运行。

如何为镜像构建设置项目

待办事项 注意:opensuse.org 上运行的构建服务默认情况下不允许镜像构建。


示例

一个好的检查示例是从我们的 Factory 项目中签出当前的产品文件。我们尝试始终更新它们并向文件中添加注释以使其更易于理解。

附加产品

一个最小的附加产品可能如下所示

<?xml version="1.0" encoding="UTF-8"?>
<productdefinition xmlns:xi="http://www.w3.org/2001/XInclude">
<products>
  <product id="openSUSE-Addon-MickeyMouse">
       <vendor>Walt Disney</vendor>   
       <name>openSUSE-Addon-MickeyMouse</name>  
       <version>11.2</version>  
       <release>0</release>     
       <description>   
 Your openSUSE installation will hear anything and giggle in an 
 obtrusive way.
       </description>
       <buildconfig>
           <producttheme>openSUSE</producttheme>
           <betaversion>Alpha 1a</betaversion>  
       </buildconfig>
       <installconfig>
           <datadir>suse</datadir>
           <descriptiondir>suse/setup/descr</descriptiondir>
           <releasepackage name="openSUSE-Addon-MickeyMouse-release" flag="EQ" version="11.2"/>
           <distribution>openSUSE-Addon-MickeyMouse</distribution>
       </installconfig>
 
       <runtimeconfig/>
     </product>
   </products>
 
   <repositories>
       <repository path="obs://openSUSE:Factory/standard"/>
   </repositories>
 
   <xi:include href="archsets.inc" /> 
 
   <mediasets>
       <media type="cd"
              product="openSUSE-Addon-MickeyMouse"
              name="openSUSE-11.2-Alpha0-Addon-MickeyMouse"
              flavor="cd"
              sourcemedia="0"
              use_required="true"
              use_recommended="true"
              use_suggested="false">
         <use group="DVD-selection" create_pattern="false" />
         <archsets>
           <archset ref="x86_64" />
           <archset ref="i586" />
         </archsets>
         <archsets>
           <archset ref="ppc" />
         </archsets>
         <metadata>
             <package name="skelcd-openSUSE" />
         </metadata>
       </media>
   </mediasets>
   <group name="DVD-selection">
       <packagelist>
           <package name="ear-enlarger"/>  
       </packagelist>
   </group>
 </productdefinition>

完整发行版

条件语句

为了避免重复,可以定义“条件语句”,例如

<conditional name="baselibs_only_x86_64">
 <platform onlyarch="x86_64" />
</conditional>

这些可以在每个组中重复使用。可以将条件语句视为其他上下文中的“宏”。


输出结果