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 元数据
创建一个单独的 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)
![]() |
代码 11
|
维护更新使用 updateinfo.xml 描述 |
- 另请参阅
- deltainfo.xml 用于支持 delta rpm。格式与 yum-presto 相同
![]() |
代码 10
|
维护更新使用 patches.xml 描述 *(已弃用)* |
非软件包项目:模式和产品
- products.xml 包含包含产品的元数据。
- patterns.xml 包含包含的模式的元数据。
SUSE 主要数据 (susedata.xml),primary.xml 的扩展
![]() |
代码 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 的扩展
![]() |
代码 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
