如何使用 Oracle Solaris 11 和 Oracle Linux 6 创建

本地软件包信息库


作者:Suzanne Zorn,2011 年 11 月


Suzanne Zorn 介绍她如何通过创建 Oracle Linux 6 和 Oracle Solaris 11 的本地软件信息库来简化软件维护。




简介

Oracle Linux 和 Oracle Solaris 11 都使用软件信息库来管理操作系统软件的安装和更新。在本文中,我将演示如何通过将信息库下载到服务器上并对其配置,然后配置客户端使其访问新创建的本地信息库,来为 Oracle Linux 6 和 Oracle Solaris 11 创建本地信息库。

OTN 旨在帮助您充分熟悉 Oracle 技术以便作出明智的决策。提供文章、软件下载、文档等。立即加入以获取完成工作所需的技术资源。

升级 Oracle Solaris 10(及早期版本)软件时您最讨厌的是什么?是不是手动协调软件包依赖项?跟踪当前未安装但需要的软件?手动下载补丁?每次升级的风险和不确定性?毋庸置疑:在早期的 Oracle Solaris 版本中,软件修补和升级是一个令人头疼的大问题。Oracle Solaris 区域的激增和要维护的操作系统实例数的增加加剧了这些问题和风险。

Oracle Linux 通过为软件包提供 RPM 软件包管理系统和信息库(存储位置)消除了打补丁和升级的噩梦。yum 更新程序(RPM 系统的自动更新程序和软件包安装程序/删除程序)通过自动计算软件包依赖项简化了软件维护。这一自动化方法比手动更新系统软件更轻松、更不易出错(尤其是对大量计算机)。

Oracle Solaris 11 在其新映像包管理系统 (IPS) 中使用了类似的方法。IPS 还使用了带有自动补丁检索和自动依赖项解析的信息库。并且,因为 IPS 与 ZFS 快照和克隆机制相集成,您还可以对活动系统进行升级并将其重新引导到新的 ZFS 引导环境,这将使停机时间最短。最关键的是:不再需要为 Oracle Solaris 11 打补丁,只需自动化的软件升级,且系统停机时间最短。

本地软件信息库

Oracle 维护 Oracle Linux 和 Oracle Solaris 11 操作系统的公共信息库。您可以在企业防火墙内部创建这些信息库的本地副本以增强安全性、提高更新性能并方便管理。您的企业策略可能未指定 Internet 更新。或者,您可能希望通过一次为多个计算机下载文件来节省带宽和时间。使用本地软件信息库,客户端更新会更快速,因为系统可以从本地访问文件而无需从 Internet 检索。为在大型环境中提高可用性和访问效率,可以对这些本地信息库进行镜像。

图 1 显示一个使用 IPS 和镜像本地网络信息库的 Oracle Solaris 11 环境。网络上的多个客户端系统可以使用这个本地信息库安装和更新其系统软件。

Oracle Linux 还支持使用 RPM 和 yum 更新程序代替 IPS 来创建本地信息库。本文其他部分将演示如何为 Oracle Solaris 11 和 Oracle Linux 创建本地信息库。

本地软件信息库可以简化和加速软件更新

图 1. 本地软件信息库可以简化和加速软件更新。

在 Oracle Solaris 11 上创建本地信息库

您可以从 My Oracle Support(需要支持合同)、从 Oracle Solaris 发行介质或从公共 Oracle Solaris 11 信息库访问 Oracle Solaris 11 软件。Oracle 公共信息库是一种通过 Internet 免费安装 Oracle Solaris 11 的便捷方法。不过要记住,公共信息库更新不包括安全更新和错误修复。维持系统最新而且安全的最佳方式是使用付费支持订阅。

Oracle Solaris 11 使用 ZFS 引导环境和 ZFS 克隆特性对活动系统执行更新。(这类似于 Oracle Solaris 10 中的 Live Upgrade 概念)。更新系统软件时,Oracle Solaris 11 首先克隆引导环境并对克隆应用更改。默认情况下,克隆将在重新引导时自动激活。如果发生问题,可以轻松回滚到先前的引导环境映像。

在 Oracle Solaris 11 上创建本地信息库时,对于复制信息库您有两个基本选择:

  • 可以使用介质或 Oracle Solaris 11 下载站点上的信息库文件。
  • 可以从 Internet 检索信息库。

对于本地信息库的访问,您也有两个选择:

  • 客户端可以从本地 Web 服务器检索软件包。
  • 客户端可以从本地目录检索软件包。

不管是哪种情况,您都需要配置每个客户端使其使用您创建的本地信息库。

本文中,我将比较在 Oracle Solaris 11 上创建本地信息库的两种不同方法:

  • 在第一个示例中,将从公共 Oracle Solaris 下载站点(或从介质)复制信息库,并使用服务管理工具 (SMF) 为其提供服务。
  • 在第二个示例中,将从 Oracle Solaris 支持信息库检索信息库并从本地文件系统为其提供服务。

:IPS 信息库服务器必须运行 Oracle Solaris 11 操作系统,且必须有 15 GB 的可用空间用于创建本地信息库。更多详细信息,请参见复制和创建 Oracle Solaris 11 软件包信息库

我尝试的这两种情况的最大差别在于客户端访问本地信息库的方式:HTTP 访问与基于文件的访问。建立基于文件的访问很轻松。但如果需要提供 HTTP 访问,使用 SMF(而不是直接启动 pkg.depotd)将提供自动重新启动服务的优点。

使用 SMF 为本地信息库服务

  1. 首先,创建一个 ZFS 文件系统来存放信息库。使用单独的 ZFS 文件系统可帮助您提高性能、隔离文件系统特征(如 compressionatime),以及直接生成文件系统快照和恢复。

    最佳做法:如果系统将托管多个 IPS 信息库,则为每个信息库生成一个单独的 ZFS 快照,以便可以单独回滚和恢复每个信息库。

    1. 使用 zpool list 可查看当前 ZFS 池。使用 zfs list 可查看当前 ZFS 数据集:

      $ zpool list
      NAME    SIZE  ALLOC  FREE  CAP  DEDUP  HEALTH  ALTROOT
      rpool   186G  12.8G  173G   6%  1.00x  ONLINE  -
      $ zfs list
      NAME    USED  AVAIL  REFER  MOUNTPOINT
      rpool  14.7G   186G    93K  /rpool
      ...
      
    2. root 身份在根池中为软件包信息库创建一个 ZFS 文件系统并将 compression 设置为 on

      $ su - root
      # zfs create -o compression=on rpool/export/repo2010_11
      # zfs list
      NAME                       USED  AVAIL  REFER  MOUNTPOINT
      rpool                     14.7G   168G    94K  /rpool
      rpool/export/repo2010_11    31K   168G    31K  /export/repo2010_11
      ...
      
  2. 接着,制作 IPS 信息库文件的本地副本。本示例演示如何从介质上或公共 Oracle Solaris 下载站点上提供的文件复制。

    1. 从与下载系统安装映像相同的位置下载 Oracle Solaris 11 IPS 软件包信息库 .iso 文件,或在介质包中查找信息库 DVD。该信息库(大小约为 5 GB)分为两个文件,您必须将这两个文件合二为一。
    2. 将信息库文件复制到上一步创建的文件系统中,解压文件,然后将其合并为一个文件:

      # unzip sol-11-repo-full-iso-a.zip
      # unzip unzip sol-11-repo-full-iso-b.zip
      # cat sol-11-repo-full.iso-a sol-11-repo-full.iso-b > sol-11-repo-full.iso
      # ls /export/repo2010_11
      sol-11-repo-full.iso
      # zfs list
      NAME                       USED  AVAIL  REFER  MOUNTPOINT
      rpool                     18.7G   164G    94K  /rpool
      rpool/export/repo2010_11  3.93G   164G  3.93G  /export/repo2010_11
      ...
      
  3. 使用 lofiadm 命令挂载 ISO 映像,使信息库文件的内容对 pkg.depotd(1M) 服务器可用。(确保使用 .iso 文件的完全限定路径名称。)

    # lofiadm -a /export/repo2010_11/sol-11-repo-full.iso
    /dev/lofi/1
    # lofiadm
    Block Device  File                                                Options
    /dev/lofi/1   /export/repo2010_11/sol-11-exp-201011-repo-full.iso  -
    # mount -F hsfs /dev/lofi/1 /mnt
    
  4. 将信息库文件复制到您创建的 ZFS 文件系统。这将提高信息库访问的性能并避免在每次系统重新启动时需要重新挂载 .iso 映像。(请确保使用 /mnt/repo,而不是 /mnt/repo/,以便复制 repo 目录而不是 仅复制 repo 目录中的文件和子目录。)

    # rsync -aP /mnt/repo /export/repo2010_11
    

    可以使用 df 命令来确认复制:

    # df-k /export/repo2010_11
    Filesystem                1K-blocks     Used  Available  Use%  Mounted on
    rpool/export/repo2010_11  176548586  9103073  167445513    6%  /export/repo2010_11
    
  5. 复制文件之后,卸载映像并取消块设备分配:

    # umount /mnt
    # lofiadm
    Block Device  File                                                 Options
    /dev/lofi/1   /export/repo2010_11/sol-11-exp-201011-repo-full.iso  -
    # lofiadm -d /dev/lofi/1
    # lofiadm
    Block Device  File                                         Options
    
  6. 注意,本地副本已经准备好,请使用 svccfg 命令配置信息库服务器服务,指定本地信息库的位置并将 readonly 设置为 true

    # svccfg -s application/pkg/server setprop pkg/inst_root=/export/repo2010_11/repo
    # svccfg -s application/pkg/server setprop pkg/readonly=true
    

    如果您愿意,可以使用以下命令打开一个 vi 会话,马上就可以在其中编辑所有属性:

    # svccfg -s pkg/server editprop
    
  7. 启动 pkg.depotd 信息库服务:

    # svcadm refresh application/pkg/server
    # svcadm enable application/pkg/server
    

    您可以通过在 http://localhost 位置打开一个浏览器窗口来检查信息库服务器是否工作。您应该看到一个非常类似 http://pkg.oracle.com/solaris/release 页面的页面。

  8. 在服务器上建立本地信息库后,就需要配置客户端系统使其从本地信息库获取软件包。Oracle Solaris 11 系统的默认首选发布者是 solaris,该发布者的默认源点为 http://pkg.oracle.com/solaris/release。您需要为每个客户端重新设置发布者源点。

    在每个客户端上执行以下命令,并用您的服务器的主机名替换 host

    # pkg set-publisher -G '*' -g /net/host/export/repo2010_11/ solaris
    

    -G '*' 删除 solaris 发布者的所有现有源点。而 -g 将新创建的本地信息库的 URI 添加为新的源点。

    现在,客户端将使用本地信息库来进行软件更新。例如,可以使用 Package Manager GUI 或 pkg update 命令将所有系统软件包更新到最新版本。

基于文件系统的本地信息库

上一节介绍了如何从介质复制信息库以及如何使用 SMF 为本地信息库服务。本节介绍另一种方法,从 Internet 上的默认位置检索信息库并从本地文件系统上的某个目录为软件包提供服务。

:本示例将从 Oracle Solaris 11 支持信息库复制信息库(需要注册)。要使用支持信息库,您需要获得密钥和证书并将其安装在系统上。

  1. 创建 ZFS 文件系统(参见上一节中的第 1 步)。
  2. 使用 pkgrepo 命令创建所需的信息库基础架构:

    # pkgrepo create /export/repo2010_11
    
  3. 现在,使用 pkgrecv 命令复制信息库。本示例显示从 Oracle Solaris 11 支持信息库进行复制。用您的密钥和证书文件的位置替换 path-to-key-filepath-to-cert-file

    :复制信息库可能需要 1 至 2 小时才能完成。在继续之前,请等待,直至看到 Completed 输出行且复制过程完成一些收尾工作后显示系统提示符。

    # pkgrecv -s http://pkg.oracle.com/solaris/support/ -d \ /export/repo2010_11 --key path-to-key-file --cert path-to-cert-file '*'
    
    Processing packages for publisher solaris ...
    Creating Plan
    Retrieving and evaluating 3941 package(s)...
    PROCESS                       ITEMS      GET (MB)       SEND (MB)
    developer/build/cmake      446/3941  332.1/4589.7  1000.2/14511.8
    ...
    Completed                 3941/3941 4589.7/4589.7 14511.8/14511.8
    
  4. 一旦将信息库复制到本地系统,请使用 pkgrepo 命令构建软件包索引。这将使客户端能够在本地信息库中搜索软件包。

    # pkgrepo -s /export/repo2010_11 refresh
    Repository refresh initiated.
    
  5. 在服务器上建立本地信息库后,就需要配置客户端系统使其从本地信息库获取软件包。Oracle Solaris 11 系统的默认首选发布者是 solaris,该发布者的默认源点为 http://pkg.oracle.com/solaris/release。您需要为每个客户端重新设置发布者源点。

    在每个客户端上执行以下命令,并用您的服务器的主机名替换 host

    # pkg set-publisher -G '*' -g /net/host/export/repo2010_11/ solaris
    

    -G '*' 删除 solaris 发布者的所有现有源点。而 -g 将新创建的本地信息库的 URI 添加为新的源点。

在 Oracle Linux 上创建本地信息库

您可以从 Oracle Unbreakable Linux Network(ULN,需要支持合同)、从 Oracle Linux 发行介质或从 Oracle 公共 yum 信息库访问 Oracle Linux 软件。Oracle 公共 yum 信息库是一种通过 Internet 免费安装 Oracle Linux 的便捷方法。不过要记住,尽管对于每个次要版本(如从 6.1 至 6.2)都会更新 Oracle 公共 yum 信息库,但更新不包含安全更新和错误修复。维持系统最新而且安全的最佳方式是使用 ULN 订阅。

本节提供在 Oracle Linux 上创建本地 yum 信息库的过程。该示例演示如何从 ULN 下载最新软件包并通过本地 yum 服务器提供这些软件包。首先需要在服务器上建立本地信息库,然后配置客户端使其使用新创建的本地信息库。

服务器配置

本示例使用运行适用于 x86_64 的 Oracle Linux 第 6 版(Oracle Linux 的 64 位版本)的系统。有关 Oracle Linux 4 和 Oracle Linux 5 的说明,请参见 Oracle 技术网 (OTN) 上的 Yum 信息库配置一文。

  1. 在 ULN 上注册计算机:

    # uln_register
    

    您将需要输入用户名、口令和有效的客户支持标识符 (CSI)。

  2. 在所有需要的频道上订阅此计算机:
    1. 打开一个 Web 浏览器,访问 ULN
    2. 使用用于注册此计算机的用户名和口令登录 ULN。
    3. 单击右上角的 Systems 选项卡。
    4. 在列表上找到注册的计算机并单击它。
    5. 单击 EDIT 按钮。
    6. 选中 Yum Server 复选框,然后单击 Apply Changes 按钮。
    7. 订阅频道。您需要选择此服务器所需的频道,以及您想要为其创建 yum 信息库的任何频道。

      首先,确保将计算机注册到正确的最新频道和附加频道。所需频道依赖于在此服务器上运行的操作系统的版本和架构,如表 1 所示。

      表 1. 所需频道
      操作系统架构所需频道
      Oracle Linux 6i386ol6_i386_latest、ol6_i386_addons
      Oracle Linux 6x86_64ol6_x86_64_latest、ol6_x86_64_addons

      :安装 uln-yum-proxy 软件包(这将安装创建 yum 信息库所需的软件包)时需要附加频道。

      其次,检查要为其创建 yum 信息库的所有频道,然后单击 subscribe。例如,表 2 显示对 Oracle Linux 6 也可用的频道。

      表 2. 对 Oracle Linux 6 可用的频道
      I386 频道X86_64 频道说明
      ol6_i386_oracleol6_x86_64_oracle适用于 Oracle Linux 6 的 Oracle 软件
      ol6_ga_i386_baseol6_ga_x86_64_baseOracle Linux 6 GA 基本软件包
      ol6_u1_i386_baseol6_u1_x86_64_baseOracle Linux 6 Update 1 基本软件包
      ol6_ga_i386_patchol6_ga_x86_64_patchOracle Linux 6 GA 补丁
      ol6_u1_i386_patchol6_u1_x86_64_patchOracle Linux 6 Update 1 补丁

      除了这些适用于 Oracle Linux 6 的频道之外,还有适用于 Oracle Linux 4、Oracle Linux 5 以及 Oracle VM 2.1、2.2 和 3.0 的其他频道。

  3. /var/www/html 中创建 yum 信息库基目录。此目录将存放该信息库。确保 yum 信息库所有者对此目录拥有读写权限。

    # mkdir -p /var/www/html/yum
    

    表 3 显示了这些频道的大致空间要求。

    表 3. 空间要求
    频道仅二进制文件二进制文件和源文件
    el*/ol*_latest3 至 10 G5 至 15 G
    el*/ol*_addons600 M1 G
    el*/ol*_oracle1 GN/A
    el*/ol*_base3 G5.5 G
    el*/ol*_patch1 G2 G
  4. 现在信息库已创建好,可以填充了。

    1. 从 OTN 文章 Yum 信息库配置下载脚本 167283.sh。如果此脚本中信息库的位置与您的系统不同,则修改脚本中的信息库位置。
    2. 运行脚本 167283.sh。这将为注册频道创建 yum 信息库。如果您希望仅下载二进制 RPM,则不带任何选项运行脚本:

      # sh 167283.sh
      

      如果您希望同时下载二进制和源 RPM,则使用 src 选项运行脚本:

      # sh 167283.sh src
      
  5. 启动 Web 服务器:
    # chkconfig httpd on
    # /etc/init.d/httpd start
    

    :您若希望通过运行脚本 167283.sh 定期更新本地信息库。通过从 /etc/cron.daily/ 目录创建一个指向该脚本的链接,可以将该脚本设置为每天自动运行一次。

  6. 更新 rhnplugin.conf 文件以禁用不适用于此本地计算机的所有频道。例如,如果此系统正在运行 Oracle Linux 6,则禁用所有其他操作系统频道(Oracle Enterprise Linux 4、Oracle Linux 5 等等)。这将防止本地 yum 更新尝试从这些频道提取软件包。

    1. 使用以下命令显示信息库的列表,并记下不需要的信息库 ID:

      # yum repolist all
      repo id                 repo name                            status
      el4_x86_64_addons       Enterprise Linux 4 Add ons (x86_64)  enabled
      el4_x86_64_latest       Enterprise Linux 4 Latest (x86_64)   enabled
      ...
      
    2. 使用文本编辑器打开文件 /etc/yum/pluginconf.d/rhnplugin.conf,添加如下段落以禁用不需要的频道:

      [el4_x86_64_addons]
      enabled = 0
      
      [el4_x86_64_latest]
      enabled = 0
      

客户端配置

配置好服务器之后,需要修改客户端使其使用刚创建的本地信息库。以下步骤说明如何配置客户端系统。

  1. 导入 GPG 密钥。此密钥用于验证 Oracle Linux RPM 软件包的签名:

    # rpm --import /usr/share/rhn/RPM-GPG-KEY
    

    :除了导入 GPG 密钥,您也可以将 GPG 密钥添加到 yum .repo 文件:

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
    
  2. 要创建 .repo 文件并将其指向本地服务器,可使用文本编辑器用清单 1 中显示的文本替换 /etc/yum.repos.d/ULN-Base.repo 文件内容。您需要将 repository_server 更改为托管本地 yum 信息库的服务器的主机名或 IP 地址。请注意,默认情况下将仅启用最新的频道。要启用频道,请用 enabled=1 替换 enabled=0

    :本示例假设采用 Oracle Linux 6 客户端;有关早期操作系统版本的示例,请参见 OTN 文章 Yum 信息库配置

    清单 1:.repo 文件的替代文本
    [ol6_latest]
    name=Oracle Linux $releasever - $basearch - latest
    baseurl=http://repository_server/yum/OracleLinux/OL6/latest/$basearch/
    gpgcheck=1
    enabled=1
    
    [ol6_addons]
    name=Oracle Linux $releasever - $basearch - addons
    baseurl=http://repository_server/yum/OracleLinux/OL6/addons/$basearch/
    gpgcheck=1
    enabled=0
    
    [ol6_oracle]
    name=Oracle Linux $releasever - $basearch - oracle
    baseurl=http://repository_server/yum/OracleLinux/OL6/oracle/$basearch/
    gpgcheck=1
    enabled=0
    
    [ol6_ga_base]
    name=Oracle Linux $releasever GA - $basearch - base
    baseurl=http://repository_server/yum/OracleLinux/OL6/0/base/$basearch/
    gpgcheck=1
    enabled=0
    
    [ol6_u1_base]
    name=Oracle Linux $releasever U1 - $basearch - base
    baseurl=http://repository_server/yum/OracleLinux/OL6/1/base/$basearch/
    gpgcheck=1
    enabled=0
    
    [ol6_ga_patch]
    name=Oracle Linux $releasever GA - $basearch - patch
    baseurl=http://repository_server/yum/OracleLinux/OL6/0/patch/$basearch/
    gpgcheck=1
    enabled=0
    
    [ol6_u1_patch]
    name=Oracle Linux $releasever U1 - $basearch - patch
    baseurl=http://repository_server/yum/OracleLinux/OL6/1/patch/$basearch/
    gpgcheck=1
    enabled=0
    
  3. 现在,您可以使用 yum 从本地信息库安装和更新文件,例如:

    # yum update
    

总结

您可以创建和访问 Oracle Linux(使用 yum 更新程序)和 Oracle Solaris 11(使用映像包管理系统 [IPS])的本地信息库。在企业防火墙内部创建本地信息库可提供安全性和版本控制。建立本地信息库还可以提高客户端更新的性能,因为其文件访问可以通过本地实现,而无需通过 Internet。

资源

以下资源可用于 Oracle Solaris 11 和 IPS:

以下是可用于 Oracle Linux 的资源:

修订版 1.0,2011 年 11 月 21 日

通过 FacebookTwitterOracle 博客关注我们。