如何为 Oracle Solaris 11 创建多个内部信息库

作者:Albert White

反馈按钮

有些客户直接连接到托管的 Oracle Solaris 软件包信息库来获取最新的修复程序,但由于网络限制或希望控制其系统可以访问哪些更新,因此大多数客户会创建本地信息库。本文介绍从开发和测试到生产部署的完整软件生命周期内管理本地信息库的最佳实践。


2012 年 5 月发布

Oracle 通过支持信息库更新 (SRU) 提供了对 Oracle Solaris 11 的更新。只有购买了 Oracle 支持合同的客户才能访问该信息库。SRU 通过托管在 http://pkg.oracle.com 的在线信息库以增量 ISO 映像的形式提供。

想要自动接收类似本文的技术文章?请订阅系统社区新闻快讯 — 专门面向系统管理员和开发人员的技术内容。

对于大多数客户和组织来说,都会维护一组内部软件包信息库,特别是在有严格软件版本控制流程且网络受限的环境中。例如,管理员通常希望管理整个软件生命周期,包括如何通过一系列临时系统和测试系统最后将软件交付给生产系统的最终用户。

在本文中,将创建下列三个信息库并演示一个最佳实践环境:

  • 发布 — 初始 Oracle Solaris 11 信息库
  • 开发 — 包含 Oracle 发布的最新 SRU 的信息库
  • 支持 — 包含已在组织内部测试过的最新 SRU 的信息库

创建初始 Oracle Solaris 11 发布信息库

这一过程在复制和创建 Oracle Solaris 11 软件包信息库 中有详细说明,因此我们在此不做过多介绍。不过,我们会快速概括一下关键步骤。

第 1 步:创建一个专用的 Oracle Solaris ZFS 文件系统

首先,在 Oracle Solaris 11 系统上为信息库创建一个专用的 ZFS 文件系统。这样就可以使用 ZFS 技术(例如克隆和快照)轻松管理数据了。

我们假定您已经在系统上创建了 zpool rpool,且该文件系统将被挂载为 /export/s11ReleaseRepo

# zfs create rpool/export/s11ReleaseRepo

第 2 步:创建 Oracle Solaris 11 发布信息库

接着,我们使用 pkgrepo(1) 在第 1 步中创建的位置创建一个信息库。这将创建信息库必要的初始结构,以便我们在下一步中对其进行填充。

# pkgrepo create /export/s11ReleaseRepo

第 3 步:填充 Oracle Solaris 11 发布信息库

现在我们使用官方的 Oracle Solaris 11 发布信息库的内容填充该信息库。为此,我们使用 pkgrecv(1),指示它将所有软件包的最新版本从 Oracle 软件包信息库提取到本地信息库。

# pkgrecv -s http://pkg.oracle.com/solaris/release/ -d /export/S11ReleaseRepo '*'

如果无法从网络访问 Oracle 软件包信息库,可以使用 Oracle Solaris 11 信息库 ISO 映像,具体方法请参见复制和创建 Oracle Solaris 11 软件包信息库

第 4 步:创建 Oracle Solaris 11 发布信息库快照

ZFS 允许创建文件系统的快照,这使得稍后可以根据需要非常轻松地回滚文件系统或快速复制文件系统。为方便起见,现在我们使用 zfs snapshot 命令创建信息库的快照。

# zfs snapshot rpool/export/s11ReleaseRepo@initial

第 5 步:启动软件包信息库 SMF 服务

在 Oracle Solaris 11 中,信息库由 pkg.depotd 后台程序管理。可以使用 Oracle Solaris Service Management Facility (SMF) 配置和启动该后台程序的实例。

清单 1 显示了一个如何配置发布信息库服务的示例。我们已经决定在端口 10081 上运行该后台程序。

# svccfg -s pkg/server add s11ReleaseRepo
# svccfg -s pkg/server:s11ReleaseRepo addpg pkg application
# svccfg -s pkg/server:s11ReleaseRepo setprop pkg/port=10081
# svccfg -s pkg/server:s11ReleaseRepo setprop pkg/inst_root=/export/S11ReleaseRepo
# svccfg -s pkg/server:s11ReleaseRepo addpg general framework
# svccfg -s pkg/server:s11ReleaseRepo addpropvalue general/complete astring: s11ReleaseRepo
# svccfg -s pkg/server:s11ReleaseRepo addpropvalue general/enabled boolean: true
# svccfg -s pkg/server:s11ReleaseRepo setprop pkg/readonly=true
# svccfg -s pkg/server:s11ReleaseRepo setprop pkg/proxy_base = astring: http://pkg.example.com/s11ReleaseRepo
# svccfg -s pkg/server:s11ReleaseRepo setprop pkg/threads = 200
# svcadm refresh application/pkg/server:S11ReleaseRepo
# svcadm enable application/pkg/server:S11ReleaseRepo

清单 1. 配置发布信息库服务

还可以使用 svccfg 交互式界面更改 SMF 配置。

pkg/proxy_base 配置属性是一个可选属性,如果您计划通过 Apache 访问软件包信息库,则可以使用该属性。这允许您使用类似这样的 URL http://pkg.example.com/s11ReleaseRepo,而不是这样的 http://pkg.example.com:10081。以这种方式设置信息库比较有利,因为信息库将通过 HTTP 代理服务器工作,最终用户可以使用描述性 URL 而不用使用端口号。

第 6 步:(可选)配置 Apache HTTP 服务器

如果选择使用 Apache HTTP 服务器以便可以通过 HTTP(或 HTTPS)而非直接通过文件系统访问软件包信息库,则现在必须配置该服务器以将我们的 URL (http://pkg.example.com/s11ReleaseRepo) 映射到运行 pkg.depotd 的端口 (http://pkg.example.com:10081)。为此,需要将以下内容添加到 httpd.conf 文件:

ProxyPass /s11ReleaseRepo http://pkg.example.com:10081 nocanon max=200

为激活此更改,需要执行以下操作之一:

  • 如果 Apache 先前已在运行,请重新启动 Apache 服务:

    # svcadm restart svc:/network/http:apache22
    
  • 如果 Apache 先前未在运行,则需要启用它:

    # svcadm enable svc:/network/http:apache22
    

现在已创建了 Oracle Solaris 11 发布信息库的一个副本,这样客户端就可以直接从 http://pkg.example.com/s11ReleaseRepo 安装软件了,无需通过外部网络访问 http://pkg.oracle.com/solaris/release/

创建支持信息库和开发信息库

接下来,我们将介绍如何创建本地支持信息库和开发信息库。支持信息库用于提供已在组织内部测试过的更改,开发信息库将用于从 Oracle 镜像最新支持信息库更新 (SRU) 的变化。

第 1 步:克隆发布信息库

最初,支持信息库和开发信息库将与刚创建的版本信息库相同。我们可以使用 zfs clone 创建信息库文件系统的副本,而无需使用 pkgrecv 通过网络从 Oracle 提取内容。

# zfs clone rpool/export/s11ReleaseRepo@initial rpool/export/s11SupportRepo
# zfs clone rpool/export/s11ReleaseRepo@initial rpool/export/s11DevelopmentRepo

同样,我们将制作这些信息库的 ZFS 快照以便将来使用。建议在有新内容添加到信息库时随时创建 ZFS 快照以便于在必要时很方便地回滚到先前的快照。

# zfs snapshot rpool/export/s11DevelopmentRepo@initial
# zfs snapshot rpool/export/s11SupportRepo@initial

第 2 步:重复信息库配置过程

下一步是重复我们设置发布信息库时在第 5 步第 6 步中详述的信息库配置过程。

注意:在配置期间,仔细注意更改信息库名称、路径、Apache 代理基本地址和端口号。

填充开发信息库

差不多每个月,Oracle 都会发布新的 Oracle Solaris 11 支持信息库更新。此信息库只向有支持合同的客户开放,因此要想获得更新必需有支持合同。

我们将使用开发信息库直接从 Oracle 信息库本身或通过增量 SRU ISO 映像来填充来自 Oracle 的最新变化。

使用 Oracle Solaris 11 支持信息库

https://pkg-register.oracle.com/ 获取 SSL 密钥和证书。下载密钥和证书对需要登录 My Oracle Support。下载之后,可再次使用 pkgrecv 更新开发信息库的内容。

# pkgrecv -s https://pkg.oracle.com/solaris/support \
-d /export/s11DevelopmentRepo \
--key /path/to/ssl_key --cert /path/to/ssl_cert solaris '*'

记住,由于我们已经更改了信息库,因此建议为当前位置创建一个 ZFS 快照。快照名称应有意义,如 @sru04-2012-03-01

# zfs snapshot rpool/export/s11Development@sru04-2012-03-01

如果选择使用 pkg.depod(而不是使用基于文件的信息库)管理信息库,则必须重新启动相应的 SMF 服务。

# svcadm restart pkg/server:s11DevelopmentRepo

使用 Oracle Solaris 11 增量 SRU ISO 映像

或者,还可以从 My Oracle Support(需要登录)下载的 ISO 映像更新信息库。

首先,将 ISO 映像挂载为服务器上的文件系统:

# mount -F hsfs full_path_to/sol-11-1111-sruN-bldnum-incr-repo.iso /mnt

挂载 ISO 映像之后,即可使用 pkgrecv 将更新从一个文件系统信息库复制到另一个文件系统信息库。使用 ISO 映像时无需指定 SSL 密钥和证书。

# pkgrecv -s /mnt/repo -d file:///export/s11DevelopmentRepo '*'

接着,我们需要重新构建信息库的搜索索引以反映最新更新:

# pkgrepo rebuild -s /export/s11DevelopmentRepo

同样,我们需要创建当前位置的 ZFS 快照并启动 SMF 服务(如果需要的话):

# zfs snapshot rpool/export/s11DevelopmentRepo@sru04-2012-03-01
# svcadm restart pkg/server:s11DevelopmentRepo

从开发信息库填充内部支持信息库

在开发信息库上执行必要的测试之后,需要将更改反映到支持信息库上,以便用户可以获取更新。我们可以使用 pkgrecv 命令进行这些更改,如下所示:

# pkgrecv -s /export/s11DevelopmentRepo -d file:///export/s11SupportRepo '*'

然后我们需要重新构建信息库的搜索索引,提取 ZFS 快照,并重新启动相应的 SMF 服务:

# pkgrepo rebuild -s /export/s11SupportRepo
# zfs snapshot rpool/export/s11SupportRepo@sru04-2012-03-08
# svcadm restart pkg/server:s11SupportRepo

回滚到先前的信息库快照

有时,您可能会遇到问题,无法在您的环境中安装特定 SRU。此时,您需要将信息库回滚到先前的快照。这可以使用 ZFS 回滚机制(zfs rollback 命令)然后重新启动 SMF 服务来轻松实现:

# zfs rollback -r rpool/export/S11Development@SRU3-2012-02-15
# svcadm restart pkg/server:s11SupportRepo

:理想情况下,对于已经有系统从其安装软件包的信息库,不要回滚更改,因为这可能会导致系统更新期间出现依赖性解析问题。如果发生依赖性解析问题,将需要在所有受影响的系统上恢复为先前的引导环境。

总结

映像包管理系统是基于网络的软件包管理系统。它允许系统从本地或与网络连接的软件包信息库安装软件包。要使用这个 Oracle Solaris 11 的新功能,在有网络限制或内部软件更改控制的环境中最好使用最佳实践。

另请参见

以下是相关 SRU 资源:

下面是其他 Oracle Solaris 11 资源:

关于作者

Albert White 是 Oracle 的 Revenue Product Engineering 的首席软件工程师,专注于 Oracle Solaris 11 和映像包管理系统。Albert 随着 Oracle 收购 Sun Microsystems 而加入 Oracle。

修订版 1.0,2012 年 5 月 16 日

要了解 Oracle 所有技术中与 sysadmin 有关的内容,请在 FacebookTwitter 上关注 OTN Systems。