openSUSE:Standards Rpm Metadata

跳转到:导航搜索


规范

我们尝试在这里记录此格式 这里

RPM XML 元数据

RPM XML 元数据 格式主要用于互联网上的在线仓库。它的起源于 YUM 包管理器。

最近它已被扩展以支持跨多个介质拆分的仓库。

仓库布局

仓库以 XML 形式表示 - 实际上,仓库元数据存储在 gzip 压缩的 XML 文件中,位于repodata服务器上的子目录中,例如

http://ftp.gwdg.de/pub/linux/misc/suser-guru/rpm/10.1/RPMS/repodata/

包含以下文件

  • repomd.xml:主仓库文件,非常小,包含对其他文件的引用,以及校验和和时间戳;
  • primary.xml.gz:包含最重要的信息:软件包列表(版本、发布版、架构)、它需要的依赖项、软件包大小、摘要、描述等……
  • filelists.xml.gz:包含包含在软件包中的文件列表
  • other.xml.gz:并非所有包管理器都使用它,它包含每个软件包的更改日志信息。

仓库索引

repomd.xml 文件是仓库索引。它列出了一个或多个元数据条目,使用 data 标签,可以是

  • 主文件(软件包列表)
  • filelists(软件包中的文件)
  • groups(预定义的软件包选择)
  • 补丁列表
  • other(更改日志和额外数据)

示例

<?xml version="1.0" encoding="UTF-8"?>
<repomd xmlns="http://linux.duke.edu/metadata/repo">
<data type="primary">
  <location href="repodata/primary.xml.gz"/>
  <checksum type="sha">d70ba931f304a0bc1740deeaaf2a6bff62981ab7</checksum>
  <timestamp>1165253780</timestamp>
  <open-checksum type="sha">35864cccfa0553fce9e43438c70b9bb83f64bc6c</open-checksum>
  </data>
  <data type="filelists">
    <location href="repodata/filelists.xml.gz"/>
    <checksum type="sha">9f2579b7698442e4f419c82c4671be0417ce5627</checksum>
    <timestamp>1165253780</timestamp>
    <open-checksum type="sha">a97b92c82a74a7960d8ab51214983afc38003cbf</open-checksum>
  </data>

元数据签名和校验和

请阅读 元数据签名 模型。

基于此模型,主索引是 repomd.xml,签名必须作为 repomd.xml.asc 提供。

用于签署主索引的密钥的公共部分可以作为 repomd.xml.key 提供

外部链接

有关 RPM-MD 的更多信息,请阅读此处

如何使用非标准数据扩展 rpm-md 元数据

创建一个单独的 xml 文件和一个资源类型,并将其插入到 repomd.xml 索引中。如果类型未知,客户端应忽略它。

要附加到 primary.xml 数据(软件包)的数据

约定是使用 $foodata.xml 文件。将属性包含在引用应附加属性的软件包的 'package' 标签中。目前这是使用 pkgid 属性完成的。但是,客户端可以自由地使用名称、架构和版本进行匹配。

rpmmd 已经定义了 primary 上的一些扩展,例如 otherdata (other.xml)。

<otherdata xmlns="http://linux.duke.edu/metadata/other" packages="101">
  <package pkgid="b78f8664cd90efe42e09a345e272997ef1b53c18"
           name="zaptel-kmp-default"
           arch="i586"><version epoch="0"
           ver="1.2.10_2.6.22_rc4_git6_2" rel="70"/>
    <myextendedattribute>somevalue  for it</myextendedattribute>
</otherdata>

一旦这些属性成为标准并在其他客户端中得到支持,您就可以将它们放在 primary.xml 中。

要附加到 primary.xml 数据(软件包)的 SUSE 特定数据

如前所述,使用 susedata 标签

<susedata>
    <package pkgid="b78f8664cd90efe42e09a345e272997ef1b53c18"
             name="zaptel-kmp-default"
             arch="i586"><version epoch="0"
             ver="1.2.10_2.6.22_rc4_git6_2" rel="70"/>
         <myextendedattribute>somevalue  for it</myextendedattribute>
</susedata>

并在元数据中引用为 suse.xml(或 susedata.xml)。

与软件包不直接相关的数据

约定是使用 $fooinfo.xml 文件。格式可以根据需要设置。这扩展的一个例子是 updateinfo.xml(包含有关更新的额外信息,但未附加到软件包数据)和 deltainfo.xml,其中包含与 delta rpm 可用性相关的信息(这是与仓库相关的信息,但与每个软件包不直接相关)。

当前扩展

有关如何使用“createrepo”工具轻松将扩展数据添加到仓库的信息,请参阅 enhancerepo 工具

维护补丁/修复程序 (updateinfo.xml)

Geeko-white.png
代码 11
维护更新使用 updateinfo.xml 描述
Geeko-white.png
代码 10
维护更新使用 patches.xml 描述 *(已弃用)*

非软件包项目:模式和产品

SUSE 主要数据 (susedata.xml),primary.xml 的扩展

Geeko-white.png
代码 11
susedata.xml 扩展在 Code11 及更高版本中支持

支持任何 primary.xml 标签以及 SUSE 自有标签。

有关扩展 primary.xml 和 susedata.xml 格式的信息,请参见此处。

定义的附加标签

eula

设置 eula 属性,应用程序在安装该项目之前会确认该属性。

keywords

添加关键字以标记软件包。任意标签,某些应用程序可以赋予其特殊含义。

示例

<susedata>
    <package pkgid="b78f8664cd90efe42e09a345e272997ef1b53c18"
             name="zaptel-kmp-default"
             arch="i586"><version epoch="0"
             ver="1.2.10_2.6.22_rc4_git6_2" rel="70">
         <keyword>l3_supported</keyword>
         <keyword>crapware</keyword>
         <eula>I OWN you!</eula>
    </package>
</susedata>

软件包的供应商支持级别

可以通过添加关键字来显式地将供应商支持级别添加到软件包,如上所述

支持的关键字是

  • support_unsupported
  • support_acc
  • support_l1
  • support_l2
  • support_l3

支持级别的描述基于 [此处描述的级别 http://support.novell.com/products/linuxpointofservice/supported_packages/],它们相对于指定在软件包的 vendor 标签中的供应商提供的支持,而不一定是分发商。

SUSE 仓库信息 (suseinfo.xml),repomd.xml 的扩展

Geeko-white.png
代码 11
suseinfo.xml 扩展在 Code11 及更高版本中支持

对仓库的扩展 (与软件包无关的数据)。

<suseinfo>
  <!-- Expiration of the repository since generated timestamp, in seconds -->
  <expire>3600</expire>
  <tags>
    <content>foobar</content>
    <content>unstable</content>
    <distro cpeid="cpe://o:opensuse">openSUSE 11.0</distro>
    <updates cpeid="cpe://o:sle">SLE 11.0</updates>
    <distro cpeid="cpe://o:sle">SLE 11.0</distro>
  </tags>
</suseinfo>
  • content 标签指定任意关键字。
  • distro 标签提示仓库中的软件包旨在在特定平台上运行。
  • updates 标签提示此仓库提供哪些产品的更新。

例如,SLE11 SDK 更新仓库的 distro 标签将是 SLE11,但 update 标签将是 SLE11 SDK。

将弃用将关键字添加到 suseinfo 的另一种方法

  <!-- Arbitrary tags -->
  <keywords>
    <k>update</k>
    <k>unstable</k>
  </keywords>

改用 content 标签。

这种将关键字添加到仓库索引的方法将进入标准的 YUM 元数据 (参见 此线程,不包括 updates 密钥。

  <tags>
    <content>foobar</content>
    <content>unstable</content>
    <distro cpeid="cpe://o:opensuse">openSUSE 11.0</distro>
    <updates cpeid="cpe://o:sle">SLE 11.0</updates>
    <distro cpeid="cpe://o:sle">SLE 11.0</distro>
  </tags>

过时的元数据提示

它是“expire”标签。

想象一下 Joe 用户有一个更新仓库直接指向一个镜像(没有重定向器)。镜像不同步(但是仍然可以访问)。他没有收到任何警告,与此同时主仓库有很多更新。

服务器有一个提示,指示由于更改而重新生成元数据的频率。客户端可以检测到这一点并提示用户元数据已经很长时间没有更新。

  • 该值只是一个提示。用户应该能够禁用或更改它。

生成的时间戳是所有数据资源中较新的时间戳。

如果时间戳 + expire < 现在,则仓库可能已过时(这只是一个提示)

expire 值应可在 zypp.conf 中全局覆盖,或在 .repo 文件中按仓库覆盖。

用户可以通过覆盖 expire 值来禁用检查。

磁盘使用情况

  <diskusagedata>
    <package pkgid="..." name="3ddiag" ver="0.742" rel="45" arch="i586">
      <diskusage>
        <dirs>
          <dir name="/" size="56" count="11"/>
          <dir name="usr/" size="56" count="11"/>
          <dir name="usr/bin/" size="38" count="10"/>
          <dir name="usr/share/" size="18" count="1"/>
          <dir name="usr/share/doc/" size="18" count="1"/>
        </dirs>
      </diskusage>
    </package>
    <package pkgid="..." name="915resolution" ver="0.5.3" rel="74" arch="i586">
      <diskusage>
        <dirs>
          <dir name="/" size="27" count="7"/>
        </dirs>
      </diskusage>
    </package>
  </diskusagedata>

有关扩展 primary.xml 和 diskusagedata.xml 格式的信息,请参见此处。

定义的附加标签

  • diskusagedata