文章
服务器与存储管理
作者:Suzanne Zorn,2011 年 11 月
Oracle Linux 和 Oracle Solaris 11 都使用软件信息库来管理操作系统软件的安装和更新。在本文中,我将演示如何通过将信息库下载到服务器上并对其配置,然后配置客户端使其访问新创建的本地信息库,来为 Oracle Linux 6 和 Oracle Solaris 11 创建本地信息库。
|
升级 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. 本地软件信息库可以简化和加速软件更新。
您可以从 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 上创建本地信息库的两种不同方法:
注:IPS 信息库服务器必须运行 Oracle Solaris 11 操作系统,且必须有 15 GB 的可用空间用于创建本地信息库。更多详细信息,请参见复制和创建 Oracle Solaris 11 软件包信息库。
我尝试的这两种情况的最大差别在于客户端访问本地信息库的方式:HTTP 访问与基于文件的访问。建立基于文件的访问很轻松。但如果需要提供 HTTP 访问,使用 SMF(而不是直接启动 pkg.depotd)将提供自动重新启动服务的优点。
compression 或 atime),以及直接生成文件系统快照和恢复。 最佳做法:如果系统将托管多个 IPS 信息库,则为每个信息库生成一个单独的 ZFS 快照,以便可以单独回滚和恢复每个信息库。
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 ...
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 ...
.iso 文件,或在介质包中查找信息库 DVD。该信息库(大小约为 5 GB)分为两个文件,您必须将这两个文件合二为一。# 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 ...
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
.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
# 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
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
pkg.depotd 信息库服务:# svcadm refresh application/pkg/server # svcadm enable application/pkg/server
您可以通过在 http://localhost 位置打开一个浏览器窗口来检查信息库服务器是否工作。您应该看到一个非常类似 http://pkg.oracle.com/solaris/release 页面的页面。
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 支持信息库复制信息库(需要注册)。要使用支持信息库,您需要获得密钥和证书并将其安装在系统上。
pkgrepo 命令创建所需的信息库基础架构:# pkgrepo create /export/repo2010_11
pkgrecv 命令复制信息库。本示例显示从 Oracle Solaris 11 支持信息库进行复制。用您的密钥和证书文件的位置替换 path-to-key-file 和 path-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
pkgrepo 命令构建软件包索引。这将使客户端能够在本地信息库中搜索软件包。# pkgrepo -s /export/repo2010_11 refresh Repository refresh initiated.
solaris,该发布者的默认源点为 http://pkg.oracle.com/solaris/release。您需要为每个客户端重新设置发布者源点。在每个客户端上执行以下命令,并用您的服务器的主机名替换 host:
# pkg set-publisher -G '*' -g /net/host/export/repo2010_11/ solaris
-G '*' 删除 solaris 发布者的所有现有源点。而 -g 将新创建的本地信息库的 URI 添加为新的源点。
您可以从 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 信息库配置一文。
# uln_register
您将需要输入用户名、口令和有效的客户支持标识符 (CSI)。
首先,确保将计算机注册到正确的最新频道和附加频道。所需频道依赖于在此服务器上运行的操作系统的版本和架构,如表 1 所示。
表 1. 所需频道| 操作系统 | 架构 | 所需频道 |
|---|---|---|
| Oracle Linux 6 | i386 | ol6_i386_latest、ol6_i386_addons |
| Oracle Linux 6 | x86_64 | ol6_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_oracle | ol6_x86_64_oracle | 适用于 Oracle Linux 6 的 Oracle 软件 |
| ol6_ga_i386_base | ol6_ga_x86_64_base | Oracle Linux 6 GA 基本软件包 |
| ol6_u1_i386_base | ol6_u1_x86_64_base | Oracle Linux 6 Update 1 基本软件包 |
| ol6_ga_i386_patch | ol6_ga_x86_64_patch | Oracle Linux 6 GA 补丁 |
| ol6_u1_i386_patch | ol6_u1_x86_64_patch | Oracle Linux 6 Update 1 补丁 |
除了这些适用于 Oracle Linux 6 的频道之外,还有适用于 Oracle Linux 4、Oracle Linux 5 以及 Oracle VM 2.1、2.2 和 3.0 的其他频道。
/var/www/html 中创建 yum 信息库基目录。此目录将存放该信息库。确保 yum 信息库所有者对此目录拥有读写权限。# mkdir -p /var/www/html/yum
表 3 显示了这些频道的大致空间要求。
表 3. 空间要求| 频道 | 仅二进制文件 | 二进制文件和源文件 |
|---|---|---|
| el*/ol*_latest | 3 至 10 G | 5 至 15 G |
| el*/ol*_addons | 600 M | 1 G |
| el*/ol*_oracle | 1 G | N/A |
| el*/ol*_base | 3 G | 5.5 G |
| el*/ol*_patch | 1 G | 2 G |
167283.sh。如果此脚本中信息库的位置与您的系统不同,则修改脚本中的信息库位置。167283.sh。这将为注册频道创建 yum 信息库。如果您希望仅下载二进制 RPM,则不带任何选项运行脚本:# sh 167283.sh
如果您希望同时下载二进制和源 RPM,则使用 src 选项运行脚本:
# sh 167283.sh src
# chkconfig httpd on # /etc/init.d/httpd start
注:您若希望通过运行脚本 167283.sh 定期更新本地信息库。通过从 /etc/cron.daily/ 目录创建一个指向该脚本的链接,可以将该脚本设置为每天自动运行一次。
rhnplugin.conf 文件以禁用不适用于此本地计算机的所有频道。例如,如果此系统正在运行 Oracle Linux 6,则禁用所有其他操作系统频道(Oracle Enterprise Linux 4、Oracle Linux 5 等等)。这将防止本地 yum 更新尝试从这些频道提取软件包。 # 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 ...
/etc/yum/pluginconf.d/rhnplugin.conf,添加如下段落以禁用不需要的频道:[el4_x86_64_addons] enabled = 0 [el4_x86_64_latest] enabled = 0
配置好服务器之后,需要修改客户端使其使用刚创建的本地信息库。以下步骤说明如何配置客户端系统。
# rpm --import /usr/share/rhn/RPM-GPG-KEY
注:除了导入 GPG 密钥,您也可以将 GPG 密钥添加到 yum .repo 文件:
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
.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
# yum update
您可以创建和访问 Oracle Linux(使用 yum 更新程序)和 Oracle Solaris 11(使用映像包管理系统 [IPS])的本地信息库。在企业防火墙内部创建本地信息库可提供安全性和版本控制。建立本地信息库还可以提高客户端更新的性能,因为其文件访问可以通过本地实现,而无需通过 Internet。
以下资源可用于 Oracle Solaris 11 和 IPS:
以下是可用于 Oracle Linux 的资源:
| 修订版 1.0,2011 年 11 月 21 日 |