openSUSE:Maintenance/Code11/Howto

跳转到:导航搜索

维护指南

  • Duncan Mac-Vicar P.

简介

概述

通常,系统会注册至少两个仓库。一个包含产品的安装介质,另一个仓库提供产品的维护更新。

元数据

由于依赖信息包含在 rpm 软件包文件中,因此需要将该信息提取到单独的元数据中,以便本地应用程序无需下载完整软件包即可计算远程仓库的依赖关系。

在图片中可以看到不同的元数据组件

  • 软件包信息,其中包含软件包依赖项和属性
  • 更新信息,包含在更新仓库中,描述维护更新,可以包括各种软件包和指向问题跟踪器的额外信息。
  • delta 信息,如果仓库包含 delta 软件包以及普通软件包,则客户端需要额外的信息才能确定哪些已安装的软件包可以通过下载 delta 软件包而不是整个文件来更新。

对于 Code11 SUSE 系统,元数据使用 标准实现,该标准由 yum 等工具使用。仓库的每个组件都称为“资源”。

该标准定义了一些资源,例如“primary”,即软件包信息所在的位置。补丁信息使用 updateinfo 文件实现,这与 Fedora 发行版使用的相同。delta 信息使用 yum-presto 插件使用的相同格式实现,该插件为 yum 提供 delta 软件包支持。

使用特定的 rpm-md 实现,图片现在如下所示

repomd.xml 组件充当其他资源的索引,并添加额外的诸如时间戳和校验和等信息,用于验证所有资源。有关元数据如何保护的更多信息,请参阅 Zypp 元数据签名 中的通用模型。

工具

为了从 rpm 软件包生成元数据,您可以使用 createrepo 工具

dmacvicar@piscola:/repo> ls
zip-2.31-58.i586.rpm
zip-debuginfo-2.31-58.i586.rpm
ziptool-1.4.0-167.i586.rpm
ziptool-debuginfo-1.4.0-167.i586.rpm

dmacvicar@piscola:/repo> createrepo .
4/4 - ziptool-debuginfo-1.4.0-167.i586.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata

现在仓库中应该有一个 repodata/ 目录,其中包含所有仓库元数据。

dmacvicar@piscola:/repo> ls repodata/
ls repodata/
filelists.xml.gz  other.xml.gz  primary.xml.gz  repomd.xml

要将额外的诸如 delta 或补丁信息注入到您自己的仓库中,您有两种选择

  • 自行生成,然后使用“modifyrepo”命令将其添加到 repomd.xml 索引中。(yum-presto 附带用于生成 delta 信息文件的工具)。
  • 使用生成信息的工具,例如 Bodhi

对于仅使用 SUSE 更新,您无需担心。元数据由我们的自动构建系统自动生成。

补丁

为了执行 SUSE Linux 系统(openSUSE 或 SLE)的维护,您可能需要熟悉

补丁的目的是从维护的角度提供更新的软件包(因为多个软件包可能涉及一个问题)。

让我们检查 updateinfo.xml 中包含的一个补丁

<update status="stable" from="maint-coord@suse.de" type="security" version="36">
  <id>xorg-x11-Xvnc</id>
  <title>Multiple Xorg vulnerabilities reported by iDefense</title>
  <release>openSUSE 11.0</release>
  <issued date="1213630432"/>

第一部分说明补丁的发布者。这必须是全局唯一的,因此 URI 或电子邮件地址都可以。

  <references>
    <reference href="https://bugzilla.novell.com/show_bug.cgi?id=374318" id="374318" title="bug number 374318" type="bugzilla"/>

  </references>

参考文献部分允许嵌入机器可读的关于问题的元信息。

  <description>This update fixes multiple vulnerabilities  reported by
iDefense:
- CVE-2008-2360 - RENDER Extension heap buffer overflow
- CVE-2008-2361 - RENDER Extension crash
- CVE-2008-2362 - RENDER Extension memory corruption 
- CVE-2008-1379 - MIT-SHM arbitrary memory read
- CVE-2008-1377 - RECORD and Security extensions  memory
  corruption
</description>

补丁的描述。在这种情况下,它是错误的,因为与建议的列表应该在参考文献部分中。

  <pkglist>
    <collection>
        <package name="xorg-x11-Xvnc" arch="i586" version="7.3" release="110.2">
          <filename>xorg-x11-Xvnc-7.3-110.2.i586.rpm</filename>
        </package>
        <package name="xorg-x11-Xvnc" arch="ppc" version="7.3" release="110.2">

          <filename>xorg-x11-Xvnc-7.3-110.2.ppc.rpm</filename>
        </package>
        <package name="xorg-x11-Xvnc" arch="x86_64" version="7.3" release="110.2">
          <filename>xorg-x11-Xvnc-7.3-110.2.x86_64.rpm</filename>
        </package>
        <package name="xorg-x11-server" arch="i586" version="7.3" release="110.2">
          <filename>xorg-x11-server-7.3-110.2.i586.rpm</filename>

        </package>
        <package name="xorg-x11-server" arch="ppc" version="7.3" release="110.2">
          <filename>xorg-x11-server-7.3-110.2.ppc.rpm</filename>
        </package>
        <package name="xorg-x11-server" arch="x86_64" version="7.3" release="110.2">
          <filename>xorg-x11-server-7.3-110.2.x86_64.rpm</filename>
        </package>
        <package name="xorg-x11-server-extra" arch="i586" version="7.3" release="110.2">

          <filename>xorg-x11-server-extra-7.3-110.2.i586.rpm</filename>
        </package>
        <package name="xorg-x11-server-extra" arch="ppc" version="7.3" release="110.2">
          <filename>xorg-x11-server-extra-7.3-110.2.ppc.rpm</filename>
        </package>
        <package name="xorg-x11-server-extra" arch="x86_64" version="7.3" release="110.2">
          <filename>xorg-x11-server-extra-7.3-110.2.x86_64.rpm</filename>

        </package>
        <package name="xorg-x11-server-sdk" arch="i586" version="7.3" release="110.2">
          <filename>xorg-x11-server-sdk-7.3-110.2.i586.rpm</filename>
        </package>
        <package name="xorg-x11-server-sdk" arch="ppc" version="7.3" release="110.2">
          <filename>xorg-x11-server-sdk-7.3-110.2.ppc.rpm</filename>
        </package>
        <package name="xorg-x11-server-sdk" arch="x86_64" version="7.3" release="110.2">

          <filename>xorg-x11-server-sdk-7.3-110.2.x86_64.rpm</filename>
        </package>
    </collection>
  </pkglist>

内容(或相关软件包)用于将补丁与其软件包关联(特别是对于用户界面)。但是,它们不用于依赖关系解析。

</update>

解决补丁

读取补丁信息时,对于每个软件包,补丁对象都会与软件包的先前版本发生冲突。因此,为了安装补丁并克服冲突,求解器需要更新软件包。反之,如果您降级软件包,它将与补丁冲突。

在 Code10 中,方法略有不同。相关软件包作为“requires”插入到补丁中。

许可协议

Icon-warning.png
警告:本节尚未完成。需要确认 rpm-md 对 EULA 的支持。

显示消息

事务前消息

可以通过在补丁中添加以下标签来显示在事务发生之前要显示的消息

<message>This update ...</message>

(与描述、issued 标签相同的级别)

目前消息只有“Ok”确认。我们希望扩展它们以支持不同类型的“继续”/“中止”或“同意”/“不同意”组合,并可能弃用显式的许可标签。欢迎您的反馈。

事务后消息

对于事务后消息,它们应该打包在更新的 rpm 中,如脚本。请参阅 以获取详细信息。

运行脚本

自 Code11 以来,脚本不再是补丁规范的一部分,而是 rpm 文件的一部分。根据您的用例,您有两种选择

事务内 rpm 脚本

  • rpm %pre 脚本
  • rpm %post 脚本

请参阅 %pre 和 %post 部分的 rpm 文档

事务外脚本

只有当您需要在提交之外运行它们时,才应使用这些脚本。如果不是这种情况,请使用正常的 rpm %pre 和 %post 脚本。

如果您需要运行 rpm 执行时无法运行的脚本(例如重建 rpm 数据库),那么您可能需要在安装 rpm 后运行它。ZYpp 将在 /var/adm/update-scripts 中查找它并运行它。

脚本必须是幂等的 - 多次运行它们不得产生副作用。

有关如何将脚本与更新的软件包打包的详细信息,请参阅

需要重启的补丁

如果内容部分中列出的一个或多个软件包具有 reboot_suggested 标签,则应用程序将在更新后建议重启机器

<reboot_suggested>1</reboot_suggested>

请参阅 updateinfo 描述 以获取示例。


这是出现在补丁内容部分中的软件包的属性。它不是补丁本身或软件包本身的属性。

更新软件包管理堆栈的补丁

restart_suggested 尚未在第三方工具中实现。

如果内容部分中列出的一个或多个软件包具有 restart_suggested 标签,则应用程序将首先呈现其中一个补丁,然后重启软件包管理堆栈,直到不再有标记为 restart_suggested 的补丁。

<restart_suggested>1</restart_suggested>

请参阅 updateinfo 描述 以获取示例。

这是出现在补丁内容部分中的软件包的属性。它不是补丁本身或软件包本身的属性。

过期

expire 是一个即将由 Novell 工具实现的提议扩展。

仓库可以提示应用程序有关元数据状态。请参阅 以获取更多信息。