openSUSE:Standards Repository Index Service

跳转到:导航搜索

注意:以下 页面 似乎目前包含关于 zypp 和 RIS 的最新信息。

简介

Repository Index Service (RIS) 是一种用于软件包仓库管理的客户端-服务器协议。基于客户端通过 URI 提供的信息,服务器响应一个 XML 仓库索引。然后,客户端使用此信息来管理系统上的服务的仓库。

Repository Index Service 是 Novell Update Service 的扩展,用于 SUSE Linux Enterprise 的更新管理。与 NU 服务相比,RIS 不需要身份验证。仓库索引可以基于 URI 中包含的任何信息生成,例如 URI 参数、路径以及用户凭据。另一个扩展允许在索引中使用整个 URI,而 NU 服务仅允许相对于服务 URI 的路径

规范

服务器

服务器的主要任务是提供repoindex.xml该文件预计位于<RIS-URI>/repo/repoindex.xml其中RIS-URI是服务的基本 URI(需要注意的是,基本 URI 已经可以包含非空路径)。

RNC schema 的 repoindex.xml 文件在 libzypp 中维护。URI 的<repo>标签应指向常见的软件仓库(如 rpmmd、yast 或其他);它们不应指向其他服务。

repoindex.xml 可以是静态的,也可以是根据各种 URI 组件数据(如用户凭据、参数或路径)动态生成的。提供服务的站点管理员发布客户端用于访问服务的 URI。

客户端

客户端负责管理系统上定义的服务,管理属于服务的仓库集合,以及最重要的是,从指定的 URI 检索仓库索引并根据它更新系统上的仓库定义。以下子部分更详细地描述了客户端的职责。

添加服务

客户端应根据用户提供的数据创建并保存一个 .service 文件,至少包含所需的属性。完成后,服务必须被客户端所知。客户端可以(但不要求)自动刷新服务。

移除服务

移除服务意味着从系统中移除其所有仓库。客户端不需要读取仓库索引来完成此任务。

刷新服务

对于系统上启用的每个服务,客户端的任务是读取服务 URI 指向的仓库索引,并根据它更新系统仓库。

  • 与目标系统相关(匹配目标发行版)且未在其上找到的仓库必须添加。为了防止仓库别名冲突,客户端实现应采用某种区分方法,例如将系统上的仓库别名前缀为服务别名,或类似方法。索引中找到的所有仓库属性都应填充到新添加的仓库中。
  • 在系统中找到但不在索引中的仓库必须移除
  • 索引和系统仓库使用仓库别名目标发行版相互关联。
  • 现有系统仓库的启用状态不应被更改。应将启用或禁用所需仓库的责任留给用户。例外情况是,如果仓库别名列在repostoenablerepostodisable属性的.service文件中,在这种情况下,客户端应启用/禁用相应的仓库。

新添加的仓库应作为禁用的状态添加。除非将 enabled 属性设置为 true

  • 匹配的现有系统仓库的URI 必须根据索引进行更新。
  • 其他属性也可以选择性地更新,但如果客户端选择这样做,它应警告用户,服务仓库的任何更改将在下次刷新时丢失。

必须忽略禁用的服务。

禁用服务

禁用服务意味着在系统上禁用其所有仓库并禁用服务本身。禁用的服务仍然被客户端所知,但在刷新服务时必须被忽略。

客户端不需要读取仓库索引来完成此任务。

启用服务

启用服务意味着启用服务本身(从而使其在刷新时不会被忽略)。除非客户端实现某种机制来存储在禁用服务之前仓库的启用状态并在重新启用服务时恢复该状态,否则不应启用服务的仓库。

身份验证

如果 URI 需要身份验证,客户端必须要求用户提供凭据或检索先前保存的凭据。然后,这些凭据应用于服务的任何需要身份验证的仓库。

.service 文件

用于在系统上存储有关服务的信息。该文件采用 INI 格式,其中一个部分以服务的别名作为其名称,并具有以下属性

.service 文件属性
名称 description 必需 default
名称 服务的描述性名称。 字符串 no <空>
url 服务的 URL URL yes <N/A>
类型 服务类型 ris(Repository Index Service)或 NONE no(应检测) NONE
enabled 启用状态 1 或 0 no 0
autorefresh 服务在使用时是否应自动刷新。 1 或 0 no 0
repostoenable 在服务刷新期间应启用的仓库列表。客户端应在刷新后从 .service 文件中删除此属性。 仓库别名逗号分隔列表 no <空>
repostodisable 在服务刷新期间应禁用的仓库列表。客户端应在刷新后从 .service 文件中删除此属性。 仓库别名逗号分隔列表 no <空>

如果属性不存在于 .service 文件中,应使用列出的默认值。如果类型不存在或为 NONE,则应在需要时检测它并最终保存回 .service 文件。一旦类型存在且已知,客户端应在访问服务 URL 时检测到其他类型的服务时发出错误消息。

示例

repoindex.xml

让我们有一个服务,它为当前的 openSUSE 发行版提供主仓库,网址为 http://somesoftwaresite.org/current/opensuse。repoindex.xml 文件可能如下所示

<?xml version="1.0"?>
<repoindex>
  <repo alias="os11-main" name="openSUSE 11.0 Main" description="Main openSUSE 11.0 i386 repository"
        url="http://download.opensuse.org/distribution/11.0/repo/oss/" distro_target="opensuse-11-i386" priority="50"/>
  <repo alias="os11-main" name="openSUSE 11.0 Main" description="Main openSUSE 11.0 x86_64 repository"
        url="http://download.opensuse.org/distribution/11.0/repo/oss/" distro_target="opensuse-11-x86_64" priority="50"/>
  <repo alias="os11-main" name="openSUSE 11.0 Main" description="Main openSUSE 11.0 ppc repository"
        url="http://download.opensuse.org/distribution/11.0/repo/oss/" distro_target="opensuse-11-ppc" priority="50"/>
  <repo alias="os11-nos" name="openSUSE 11.0 Non-OSS" description="Non Open Source Software for openSUSE 11.0 i386"
        url="http://download.opensuse.org/distribution/11.0/repo/non-oss/" distro_target="opensuse-11-i386" priority="70"/>
  <repo alias="os11-nos" name="openSUSE 11.0 Non-OSS" description="Non Open Source Software for openSUSE 11.0 x86_64"
        url="http://download.opensuse.org/distribution/11.0/repo/non-oss/" distro_target="opensuse-11-x86_64" priority="70"/>
  <repo alias="os11-nos" name="openSUSE 11.0 Non-OSS" description="Non Open Source Software for openSUSE 11.0 ppc"
        url="http://download.opensuse.org/distribution/11.0/repo/non-oss/" distro_target="opensuse-11-ppc" priority="70"/>
  <repo alias="os11-upd" name="openSUSE 11.0 Updates" description="Official update repository for openSUSE 11.0 i386"
        url="http://download.opensuse.org/update/11.0/" distro_target="opensuse-11-i386" priority="20"/>
  <repo alias="os11-upd" name="openSUSE 11.0 Updates" description="Official update repository for openSUSE 11.0 x86_64"
        url="http://download.opensuse.org/update/11.0/" distro_target="opensuse-11-x86_64" priority="20"/>
  <repo alias="os11-upd" name="openSUSE 11.0 Updates" description="Official update repository for openSUSE 11.0 ppc"
        url="http://download.opensuse.org/update/11.0/" distro_target="opensuse-11-ppc" priority="20"/>
</repoindex>

客户端将获取服务 URI,获取索引并将 os11-main、os11-nos 和 os11-upd 仓库添加到系统,使其准备好进行安装。在发布 11.1 后,服务管理员将使用当前仓库更新索引。客户端将在刷新时删除旧仓库并添加新仓库。


另一个示例可能是专有软件供应商的受限访问服务。repoindex.xml 可以根据身份验证和购买的产品数据库动态生成。在这种情况下,仓库本身应需要身份验证。

<repoindex>
  <repo alias="company-foo" name="Company's Foo"
        path="products/foo" distro_target="sle-11-i386" priority="20"/>
  <repo alias="company-bar" name="Company's Bar"
        path="products/bar" distro_target="sle-11-i386" priority="20"/>
  <repo alias="company-foo-upd" name="Company's Foo Updates"
        path="products/foo/updates" distro_target="sle-11-i386" priority="1"/>
</repoindex>

客户端将获取服务 URI,进行身份验证,获取索引并将仓库添加到系统。供应商将根据客户的购买情况同步索引。

.service

[best]
name=The Best Opensource Software
enabled=1
autorefresh=0
url=http://somesite.org/repos/
type=ris