What You See Is What You Get Element

了解网络、服务和新的映像包管理系统

适用于 Oracle Solaris 11

作者:Alexandre Borges

本文是由两部分组成的系列文章的第二部分,该系列文章介绍如何安装和了解 Oracle Solaris 11。本文重点介绍新的映像包管理系统及 Oracle Solaris 11 处理网络和服务的方式。


2013 年 12 月发布


想对本文发表评论吗?加入 Facebook 上的 OTN Garage。有类似文章要分享?请将其发布在 Facebook 或 Twitter 上,我们来进行讨论。
目录
Oracle Solaris 11 网络
Oracle Solaris 11 服务
Oracle Solaris 11 映像包管理系统
总结
另请参见
关于作者

Oracle Solaris 11 网络

首先,我们来谈谈网络。在 Oracle Solaris 11 中,网络发生了很大变化。当务之急不是介绍网络的每个细节,而是向您介绍基础知识。

首先,有一个不错的 GUI(如图 1 所示)可以帮助我们配置 Oracle Solaris 11 网络。要从桌面打开 GUI,请选择 System -> Administration -> Network

用于配置 Oracle Solaris 11 网络的 GUI

图 1 — 用于配置 Oracle Solaris 11 网络的 GUI

这个新的网络工具告诉我们,我们的网络已使用 DHCP 进行了配置,IP 地址是 192.168.105/24,速度是 1Gb/s,且网络已连接。

您是否还记得我在第 1 部分中,针对从 Live Media DVD 安装 Oracle Solaris 11 时如何才能具有 DHCP 服务提出的要求?其原因是反应性网络配置 (RNC)(之前称为 NWAM)会根据一些规则自动配置网络。

可以根据网络配置文件 (NCP) 这一概念设置一些 RNC 自定义项。例如,这让系统能够根据系统的物理/逻辑位置连接至有线或无线网络。尽管如此,所有有线和无线网络仍保存在图 1 所示的列表中,RNC 将使用有序的连接过程,直至成功连接。顺便说一下,NCP 包含一个或多个网络配置单元 (NCU),后者是存储网络对象配置(如网络接口)的容器。

对于此屏幕中的 Show 框,您可以选择 Network Profile 选项。GUI 显示了两个网络配置文件(参见图 2):Automatic(反应性网络配置)和 DefaultFixed(不受反应性网络配置的控制)。最初,Oracle Solaris 11 是用 RNC(通过 DHCP 服务)配置的,但我们可以放弃这个简单的方法,改为使用 dladmipadm 命令从终端窗口手动执行所有配置。

网络配置文件

图 2 — 网络配置文件

如果从 Automatic 切换到 DefaultFixed,则 Network Preferences 屏幕底部将显示一条消息(如图 3 所示),警告我们必须使用 dladmipadm 命令完成手动网络配置。

Network Profiles 屏幕底部的消息

图 3 — Network Preferences 屏幕底部的消息

Show 框中的下一个选项为 Wired (net0),如图 4 所示:

Show 框中的 Wired 选项

图 4 — Showbox 屏幕中的 Wired(net0) 选项

此处没有要配置的设置;只显示了一些网络信息。

图 5 显示下一个屏幕:“How to edit Fixed network profiles。”

How to Edit Fixed Network Profiles

图 5 — How to Edit Fixed Network Profiles

我们已对使用 GUI 配置网络与使用命令行接口手动配置网络这两种方法进行了探讨。所以现在我需要指出,负责 Oracle Solaris 11 网络配置的服务有四种:

  • svc:/network/netcfg:default
  • svc:/network/loopback:default
  • svc:/network/location:default
  • svc:/network/physical:default

现在,有必要知道最后一个服务 (svc:/network/physical:default) 负责初始化 RNC 框架。可使用以下命令验证这一事实:

# svcs -a | grep network/physical:default
online         15:20:01 svc:/network/physical:default

# svcs -p svc:/network/physical:default
STATE          STIME     FMRI
online         15:20:01  svc:/network/physical:default
               15:19:55  617 nwamd

可以看出,负责网络配置的后台程序为 nwamd。虽然已将 NWAM 重命名为 RNC,但后台程序名称未更改。

您可能想知道在不依赖 RNC 的情况下,如何使用手动网络配置进程将固定 IP 地址关联至您的网卡。我将为您总结一下这个过程。

如果您使用的是基于 SPARC 的平台,需要运行以下命令来确保所有网络接口卡 (NIC) 使用的 MAC 地址是唯一的:

# eeprom local-mac-address? = true
# reboot
# dladm show-linkprop -p mac-address
LINK     PROPERTY            PERM VALUE              DEFAULT         POSSIBLE
net0     mac-address         rw   0:c:29:aa:c5:60    0:c:29:aa:c5:60 --
net1     mac-address         rw   0:c:29:aa:c5:6a    0:c:29:aa:c5:6a --

从上述输出可以看出,似乎计算机中每个 NIC 的 MAC 地址都不相同。如果两个或多个 NIC 具有相同的 MAC 地址(例如 net1),则可执行以下命令更改其中一个网络接口的 MAC 地址。例如,要更改 net1 MAC 地址,请执行以下操作:

# dladm set-linkprop -p mac-address=00:11:22:33:44:55 net1
# reboot

接下来,我们将列出系统上的所有配置文件:

# netadm list

TYPE        PROFILE        STATE
ncp         Automatic      online
ncu:phys    net0           online
ncu:phys    net1           online
ncu:ip      net0           online
ncu:ip      net1           online
ncp         DefaultFixed   disabled
loc         Automatic      online
loc         NoNet          offline

活动配置文件为 Automatic。将其更改为 DefaultFixed 很容易;只需运行以下命令:

# netadm enable -p ncp DefaultFixed
# netadm list

TYPE        PROFILE        STATE
ncp         Automatic      disabled
ncp         DefaultFixed   online
loc         Automatic      offline
loc         NoNet          online

如果我们需要返回到 Automatic 配置文件(默认情况下使用 DHCP 服务),则需运行以下命令:

# netadm enable -p ncp Automatic

现在,我们来了解与网络配置有关的其他一些命令,然后我们可以学习如何使用固定 IP 地址进行手动配置。

有时有必要了解我们的网卡及其属性(全双工、半双工、速度、状态、IP 地址等)。要获取 Automatic 配置文件的这些信息,可以执行清单 1 所示的命令:

# dladm show-phys

LINK        MEDIA          STATE      SPEED  DUPLEX    DEVICE
net0        Ethernet       up          1000    full    e1000g0
net1        Ethernet       up          1000    full    e1000g1

# dladm show-ether

LINK        PTYPE    STATE    AUTO  SPEED-DUPLEX        PAUSE
net0        current  up       yes    1G-f               bi
net1        current  up       yes    1G-f               bi

# ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
	inet 127.0.0.1 netmask ff000000
net0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 4
	inet 192.168.1.105 netmask ffffff00 broadcast 192.168.1.255
	ether 0:c:29:aa:c5:60
net1: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 5
	inet 192.168.1.106 netmask ffffff00 broadcast 192.168.1.255
	ether 0:c:29:aa:c5:6a
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
	inet6 ::1/128
net0: flags=20002004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu 1500 index 4
	inet6 fe80::20c:29ff:feaa:c560/10
	ether 0:c:29:aa:c5:60
net1: flags=20002004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu 1500 index 5
	inet6 fe80::20c:29ff:feaa:c56a/10
	ether 0:c:29:aa:c5:6a

清单 1

:我们可以对 DefaultFixed 配置文件使用相同的命令;但是在这种情况下,最后一条命令的输出将如下所示:

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1 inet6 ::1/128

如果要获取有关系统上任意网络接口对象的信息,将发生类似情况。例如,如果使用 Automatic 配置文件,则 ipadm show-if 命令将显示以下内容:

# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
net0       ip       ok       yes    --
net1       ip       ok       yes    --

但是,使用 DefaultFixed 配置文件时,命令显示如下:

# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --

不难看出,使用 Automatic 配置文件的 RCN 执行所有操作,但当系统使用 DefaultFixed 配置文件时,将只创建环回接口。例如,上一条命令显示没有可绑定 IP 地址的网络接口。如何解决此问题?

现在,让我们在 Oracle Solaris 11 上执行手动网络配置。请记住,我们的系统上有 net0net1 网络接口(此信息来自 dladm show-phys)。因此,要完成任务,需执行以下步骤:

创建接口:

# ipadm create-ip net0

将 IP 地址绑定至接口 net0

# ipadm create-addr -a 192.168.1.222/24 net0

列出接口:

# ipadm
NAME           CLASS/TYPE STATE       UNDER    ADDR
lo0            loopback   ok           --         --
lo0/v4         static     ok           --      127.0.0.1/8
lo0/v6         static     ok           --         ::1/128
net0           ip         ok           --         --
net0/v4        static     ok           --      192.168.1.222/24

将名称与 IP 地址关联:

# echo "192.168.1.222 solaris11" >> /etc/hosts

设置默认网关:

# route -p add default 192.168.1.1

列出 IP 路由:

# netstat -rn
Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface
-------------------- -------------------- ----- ----- ---------- ---------
default              192.168.1.1          UG       14    1016           
127.0.0.1            127.0.0.1            UH        2      42    lo0       
192.168.1.0          192.168.1.222        U         3       1    net0      

Routing Table: IPv6
  Destination/Mask      Gateway           Flags   Ref    Use     If   
-------------------- ------ ------------- ------- ----- -------- -------
::1                         ::1           UH        2       0    lo0

以前在 Oracle Solaris 10 上设置 DNS 解析时,我们只需运行以下命令:

# cp /etc/nsswitch.dns /etc/nsswitch.conf

但这种方法在 Oracle Solaris 11 上不再适用。为此,Oracle Solaris 11 提供了一种新方法。刚开始可能显得更复杂一点(如以下命令),因为新方法使用了服务管理工具(实现更强大、更灵活的全名服务机制)中的一些概念。但是,我相信您一定会适应这个全新的服务框架。

用于设置 DNS 名称服务器、域主机、搜索域列表以及用于配置 Oracle Solaris 11 使之包括 DNS 解析的新命令如下所示:

设置 DNS 服务器:

# svccfg -s svc:/network/dns/client setprop config/nameserver = net_address: "(8.8.8.8 8.8.4.4)"

设置 DNS 域:

# svccfg -s svc:/network/dns/client setprop config/domain = astring: '("example.com")'

设置域的搜索列表:

# svccfg -s svc:/network/dns/client setprop config/search = astring: '("example.com")'

设置 IPv6 名称解析顺序:

# svccfg -s svc:/system/name-service/switch setprop config/ipnodes = astring: '("files dns")'

设置 IPv4 名称解析顺序:

# svccfg -s svc:/system/name-service/switch setprop config/host = astring: '("files dns")

哇,工作量如此庞大!到目前为止,我们完成了哪些工作?可以运行清单 2 所示的两个命令来查看已设置的所有参数:

# svccfg -s svc:/network/dns/client listprop config
config                     application        
config/value_authorization astring      solaris.smf.value.name-service.dns.client
config/nameserver          net_address  8.8.8.8 8.8.4.4
config/domain              astring      example.com
config/search              string       example.com

# svccfg -s svc:/system/name-service/switch listprop config
config                     application        
config/default             astring     files
config/value_authorization astring    solaris.smf.value.name-service.switch
config/host                astring     "files dns mdns"
config/printer             astring     "user files"
config/ipnodes             astring     "files dns"
config/hosts               astring     "files dns"

清单 2

很好!但这还远远不够。我们需要确保这些设置生效(现在以及下次启动后)。要做到这一点很简单。首先,我们赢启用 DNS 客户端,如清单 3 所示:

# svcadm refresh svc:/network/dns/client
# svcadm restart svc:/network/dns/client
# more /etc/resolv.conf

#
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
#

#
# _AUTOGENERATED_FROM_SMF_V1_
#
# WARNING: THIS FILE GENERATED FROM SMF DATA.
#   DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.
# See resolv.conf(4) for details.

domain      example.com
search      example.com
nameserver  8.8.8.8
nameserver  8.8.4.4

清单 3

最后,可以使用几乎相同的步骤进行名称服务器解析:

# svcadm refresh svc:/system/name-service/switch:default
# svcadm restart svc:/system/name-service/switch:default 
# cat /etc/nsswitch.conf

# Copyright (c) 1991, 2013, Oracle and/or its affiliates. All rights reserved.
#

#
# _AUTOGENERATED_FROM_SMF_V1_
#
# WARNING: THIS FILE GENERATED FROM SMF DATA.
#   DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.
# See nsswitch.conf(4) for details.

passwd:     files
group:      files
hosts:      files dns mdns
ipnodes:    files dns mdns
networks:   files
protocols:  files
rpc:        files
ethers:     files
netmasks:   files
bootparams: files
publickey:  files
netgroup:   files
automount:  files
aliases:    files
services:   files
printers:   user files
project:    files
auth_attr:  files
prof_attr:  files
tnrhtp:     files
tnrhdb:     files

清单 4

完成。DNS 服务器和 DNS 解析已配置完。现在,可以查看当前 IP 地址供下一步骤使用,如清单 5 所示:

# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
	inet 127.0.0.1 netmask ff000000
net0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
	inet 192.168.1.222 netmask ffffff00 broadcast 192.168.1.255
	ether 0:c:29:aa:c5:60
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
	inet6 ::1/128
net0: flags=20002000840<RUNNING,MULTICAST,IPv6> mtu 1500 index 2
	inet6 ::/0
	ether 0:c:29:aa:c5:60

清单 5

然后,可以使用 ping 命令查看系统是否处于活动状态,如清单 6 所示:

# ping www.oracle.com
PING www.oracle.com: 56 data bytes
64 bytes from a23-62-166-140.deploy.akamaitechnologies.com (23.62.166.14023.62.166.140): icmp_seq=0. time=143.691 ms
64 bytes from a23-62-166-140.deploy.akamaitechnologies.com (23.62.166.14023.62.166.140): icmp_seq=1. time=142.495 ms
64 bytes from a23-62-166-140.deploy.akamaitechnologies.com (23.62.166.14023.62.166.140): icmp_seq=2. time=141.506 ms
64 bytes from a23-62-166-140.deploy.akamaitechnologies.com (23.62.166.14023.62.166.140): icmp_seq=3. time=141.732 ms
64 bytes from a23-62-166-140.deploy.akamaitechnologies.com (23.62.166.14023.62.166.140): icmp_seq=4. time=142.020 ms

----www.oracle.com PING Statistics----
5 packets transmitted, 5 packets received, 0% packet loss
round-trip (ms)  min/avg/max/stddev = 141.506/142.289/143.691/0.867

清单 6

很好!一切均按预期进行。但是,如果不依赖 RCN,怎样使用 DHCP 地址完成相同的任务?可以这样吗?是的,可以。

我们来使用 DefaultFixed 配置文件和 DHCP 服务器执行相同的步骤。为了演示这些步骤,我们将使用另一个网络接口 (net1) 并采用临时模式(使用 -T 选项),如清单 7 所示:

# ipadm create-ip net1
# ipadm create-addr -T dhcp net1
# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         ok           --         --
   net0/v4        static     ok           --         192.168.1.222/24
net1              ip         ok           --         --
   net1/v4        dhcp       ok           --         192.168.1.106/24

清单 7

完成。如我们所愿,net1 接口配置成功。

Oracle Solaris 11 服务

我必须承认,当我看到 Oracle Solaris 10 中的服务管理工具(它也是 Oracle Solaris 11 的一部分)时,我有点怀疑。我了解 Oracle Solaris 早期版本的服务,说实话,当时我在想“他们为什么要改变这么好的东西呢?”大约是 2004 年 12 月,我在关于 Oracle Solaris 10(当时可能是 build 71)的第一堂课上提出了这个问题。一段时间后,我意识到 Oracle Solaris 10/Oracle Solaris 11 的服务管理工具比所有其他服务机制更好、更强大。

Oracle Solaris 11 的服务管理工具由名为 svc.startd 的后台程序控制,该后台程序由 /etc/inittab 中的条目启动,如下所示:

# more /etc/inittab
ap::sysinit:/usr/sbin/autopush -f /etc/iu.ap
smf::sysinit:/lib/svc/bin/svc.startd >/dev/msglog 2<>/dev/msglog </dev/console
p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/msglog 2<>/dev/msglog

在 Oracle Solaris 9 中,/etc/inittab 文件更为晦涩;代码行更多,而且更为费解。Oracle Solaris 11 的 /etc/inittab 文件更加简单,其中真正重要的只有一行:即启动 svc.startd 后台程序的代码行,负责初始化整个 Oracle Solaris 11 服务管理工具框架及其服务。

要获取所有 Oracle Solaris 11 服务的列表,可运行清单 8 所示的命令:

# svcs -a | more

STATE          STIME    FMRI

legacy_run     18:30:07 lrc:/etc/rc2_d/S47pppd
legacy_run     18:30:07 lrc:/etc/rc2_d/S89PRESERVE
disabled       18:29:32 svc:/system/device/mpxio-upgrade:default
disabled       18:29:32 svc:/network/install:default
disabled       18:29:32 svc:/network/ipsec/ike:default
disabled       18:29:32 svc:/network/ipsec/manual-key:default
disabled       18:29:32 svc:/network/nis/domain:default
disabled       18:29:33 svc:/network/ipfilter:default
disabled       18:29:33 svc:/system/name-service-cache:default
disabled       18:29:33 svc:/network/nis/client:default
disabled       18:29:33 svc:/network/ldap/client:default
disabled       18:29:33 svc:/network/nfs/status:default
disabled       18:29:33 svc:/network/nfs/nlockmgr:default
disabled       18:29:33 svc:/network/nfs/cbd:default
disabled       18:29:33 svc:/system/idmap:default
disabled       18:29:33 svc:/network/nfs/mapid:default
disabled       18:29:33 svc:/network/rpc/keyserv:default
...
disabled       18:29:36 svc:/network/nfs/server:default
disabled       18:29:36 svc:/system/console-login:terma
disabled       18:29:36 svc:/system/console-login:termb
disabled       18:29:36 svc:/network/ldap/server:openldap_24
online         18:29:32 svc:/system/early-manifest-import:default
online         18:29:32 svc:/system/svc/restarter:default
online         18:29:34 svc:/network/sctp/congestion-control:cubic
online         18:29:34 svc:/network/sctp/congestion-control:vegas
online         18:29:34 svc:/network/sctp/congestion-control:newreno
online         18:29:34 svc:/network/sctp/congestion-control:highspeed
online         18:29:34 svc:/network/tcp/congestion-control:vegas
online         18:29:34 svc:/network/tcp/congestion-control:newreno
...

清单 8

哇!我的系统上有 224 项服务!有些处于禁用状态(未运行),有些在线(已启用并运行)。

在清单 8 的输出中,您会看到一些有意思的列:

  • STATE 显示服务状态。一些可能的值包括 legacy_run(服务使用的是旧格式和控制,如运行级别)、disabledonline(正在运行)、maintenance(存在配置问题)和 offline(因未解决的服务依赖而未运行)。
  • STIME 显示服务的启动时间。
  • FMRI(故障管理标识符)可以解释为以独特的方式分类和区分服务的 URL。

我们以 cron 服务为例。了解服务是否在运行非常容易:

# svcs -a | grep cron

online         18:29:59 svc:/system/cron:default

可以看出,cron 服务处于在线状态。此外,我们还可以获取此服务的其他有用信息,如清单 9 所示:

# svcs -l cron

fmri         svc:/system/cron:default
name         clock daemon (cron)
enabled      true
state        online
next_state   none
state_time   May 20, 2013 06:29:59 PM BRT
logfile      /var/svc/log/system-cron:default.log
restarter    svc:/system/svc/restarter:default
contract_id  88
manifest     /etc/svc/profile/generic.xml
manifest     /lib/svc/manifest/system/cron.xml
dependency   require_all/none svc:/system/filesystem/local (online)
dependency   require_all/none svc:/milestone/name-services (online)

清单 9

清单 9 中的输出显示了很多有用信息。另一个用于确定服务 cron 依赖项的有用命令是:

# svcs -d cron

STATE          STIME    FMRI
online         18:29:57 svc:/milestone/name-services:default
online         18:29:59 svc:/system/filesystem/local:default

确定依赖于 cron 服务的服务也很简单:

# svcs -D cron

STATE          STIME    FMRI
online         18:30:07 svc:/milestone/multi-user:default

cron 启动了哪些进程?这也是一个好问题,很容易回答:

# svcs -p cron

STATE          STIME    FMRI
online         18:29:59 svc:/system/cron:default
               18:29:59      768 cron

如果我们需要了解有关 cron 服务的更多详细信息并收集其他信息,可使用以下命令:

# svcs -x cron

svc:/system/cron:default (clock daemon (cron))
State: online since May 20, 2013 06:29:59 PM BRT
See: cron(1M)
See: crontab(1)
See: /var/svc/log/system-cron:default.log
Impact: None.

到目前为止,一切都没问题。到目前为止,我们使用了很多服务命令并且收集了大量关于 Oracle Solaris 11 服务的信息,但我们是否需要更改服务状态?表 1 显示了其他一些命令的汇总:

表 1
目标 命令
禁用服务 # svcadm disable <fmri>
临时禁用服务 # svcadm -t disable <fmri>
启用服务 # svcadm enable <fmri>
递归启用服务 # svcadm -r enable <fmri>
重新启动服务 # svcadm restart <fmri>
刷新服务配置 # svcadm refresh <fmri>
清除服务 # svcadm clear <fmri>

如果您不喜欢使用服务命令,也没关系。您可以使用 Oracle Solaris 11 中优秀的 GUI 服务工具(见图 6)。可通过 System -> Administration -> SMF Services 找到该工具。您可以用它执行使用命令行界面执行过的任务。

通过 GUI 管理 SMF 服务

图 6 — 通过 GUI 管理 SMF 服务

Oracle Solaris 11 映像包管理系统

现在,我想介绍映像包管理的一些基本概念,自 Oracle Solaris 10 以来,这些概念发生了很大变化。您是否还记得 pkgaddpkgrmpkginfo?恭喜,但我希望您不再需要它们了!

映像包管理系统是 Oracle Solaris 11 中引入的一款非常强大、简单、有用的映像包管理工具,同时提供命令行界面和 GUI 工具。

在探讨映像包之前,我们来讨论一下更新。每个操作系统都需要补丁,Oracle Solaris 11 也不例外。要更新 Oracle Solaris 11,请选择 System -> Administration -> Update Manager 打开图 7 所示的 Update Manager。

Update Manager GUI

图 7 — Update Manager GUI

您可能会想起在第 1 部分中,我们在安装 Oracle Solaris 11 后未注册。此外,根据图 7,Oracle 信息库中目前不存在更新。如果我们拥有 Oracle 支持服务协议,那么可以更改已配置的信息库,使之指向 Oracle 支持信息库,但这不在本文的讨论范围内。

在 Oracle Solaris 11 上管理软件包很容易。首先,选择 System -> Administration -> Package Manager 打开图 8 所示的 Package Manager。

Package Manager GUI

图 8 — Package Manager GUI

作为练习,我们来搜索并安装软件包。因为我喜欢安全性文章和工具,所以我将介绍如何安装 nmap 工具。首先,我们应在 Oracle 信息库中搜索 nmap 软件包(如图 9 所示)以确认其可用:

在信息库中搜索软件包

图 9 — 在软件包信息库中搜索 nmap 软件包

我们找到了 nmap 软件包。接下来,我们进行安装。为此,首先确保已选中 nmap 软件包旁边的复选框。然后单击 Install/Update 按钮。随即显示图 10 所示的屏幕。

单击 Install/Update 按钮后

图 10 — 单击 Install/Update 按钮后

如果您对选择满意,请单击 Proceed。系统下载并安装软件包,如图 11 所示。

已下载并安装软件包

图 11 — 已下载并安装软件包

nmap 软件包安装成功,如图 12 所示:

安装成功

图 12 — 确认安装成功的消息

然而,许多人喜欢从命令行界面管理软件包。我们来学习一些有用的命令。

例如,要检查 Oracle 信息库中是否有 nmap 软件包,请运行清单 10 所示的命令:

# pkg search nmap

INDEX           ACTION VALUE                                PACKAGE
pkg.description set    Nmap is useful for inventorying the network, managing service upgrade schedules, and 
monitoring host or service uptime. pkg:/diagnostic/nmap@5.51-0.175.1.0.0.24.0
basename        file   usr/bin/nmap                         pkg:/diagnostic/nmap@5.51-0.175.1.0.0.24.0
pkg.fmri        set    solaris/diagnostic/nmap              pkg:/diagnostic/nmap@5.51-0.175.1.0.0.24.0
basename        dir    usr/share/nmap                       pkg:/diagnostic/nmap@5.51-0.175.1.0.0.24.0

清单 10

虽然我们已安装此软件包,但仍然可以使用以下命令执行此操作(如果需要):

# pkg install nmap
# pkg update nmap

要验证是否已成功安装软件包,可使用以下命令:

# pkg verify nmap

如果出错,我们可以进行修复:

# pkg fix --accept nmap

有时您需要列出软件包的内容。您可以使用清单 11 所示的命令实现此目的:

# pkg contents nmap

PATH
usr
usr/bin
usr/bin/ncat
usr/bin/ndiff
usr/bin/nmap
usr/bin/nmapfe
usr/bin/nping
usr/bin/xnmap
usr/bin/zenmap
usr/lib
usr/lib/python2.6
usr/lib/python2.6/vendor-packages
usr/lib/python2.6/vendor-packages/radialnet
usr/lib/python2.6/vendor-packages/radialnet/__init__.py
usr/lib/python2.6/vendor-packages/radialnet/__init__.pyc
usr/lib/python2.6/vendor-packages/radialnet/bestwidgets
usr/lib/python2.6/vendor-packages/radialnet/bestwidgets/__init__.py
...

清单 11

想要卸载软件包时,可以执行以下命令:

# pkg uninstall nmap

要收集有关 nmap 软件包的信息,可以运行清单 12 所示的命令:

# pkg info nmap

          Name: diagnostic/nmap
       Summary: Network exploration tool and security / port scanner.
   Description: Nmap is useful for inventorying the network, managing service
                upgrade schedules, and monitoring host or service uptime.
      Category: System/Administration and Configuration
         State: Installed
     Publisher: solaris
       Version: 5.51
 Build Release: 5.11
        Branch: 0.175.1.0.0.24.0
Packaging Date: September  4, 2012 05:17:49 PM
          Size: 12.28 MB
          FMRI: pkg://solaris/diagnostic/nmap@5.51,5.11-0.175.1.0.0.24.0:20120904T171749Z

清单 12

可使用以下命令验证软件包许可:

# pkg info --license nmap

要检查之前执行了哪些软件包操作,请使用清单 13 所示的命令,这是跟踪系统上已执行的所有软件包操作的好方法。

# pkg history
START                    OPERATION                CLIENT             OUTCOME
2012-09-19T16:48:22      set-property             transfer module    Succeeded
2012-09-19T16:48:22      add-publisher            transfer module    Succeeded
2012-09-19T16:48:22      refresh-publishers       transfer module    Succeeded
2012-09-19T16:48:22      image-create             transfer module    Succeeded
2012-09-19T16:48:30      rebuild-image-catalogs   transfer module    Succeeded
2012-09-19T16:48:36      set-property             transfer module    Succeeded
2012-09-19T16:48:37      install                  transfer module    Succeeded
2012-09-19T17:30:12      update-publisher         transfer module    Succeeded
2012-09-19T17:30:12      refresh-publishers       transfer module    Succeeded
2012-09-19T17:30:16      rebuild-image-catalogs   transfer module    Succeeded
2013-05-19T17:20:26      uninstall                transfer module    Succeeded
2013-05-20T00:47:07      refresh-publishers       pkg                Succeeded
2013-05-20T00:47:14      rebuild-image-catalogs   pkg                Succeeded
2013-05-21T00:33:54      refresh-publishers       packagemanager     Succeeded
2013-05-21T00:33:58      rebuild-image-catalogs   packagemanager     Succeeded
2013-05-21T00:37:06      install                  packagemanager     Succeeded

清单 13

如果要清除此历史记录,请运行以下命令:

# pkg purge-history

总结

我希望此系列文章大有帮助。可以看出,Oracle Solaris 11 是一个卓越的操作系统,我们有很多内容待学习。依我看来,Oracle Solaris 是世界上最安全、最强大、最全面、最快速的操作系统,我相信您很快就会赞同我的观点了。

正如 1667 年 John Milton 在失乐园 中所述:“路途漫长而艰难,地狱一出即光明。”再见。

另请参见

关于作者

Alexandre Borge 是一位 Oracle ACE,曾于 2001 至 2010 年任职于 Sun Microsystems,并担任签约讲师,主要负责讲授 Oracle Solaris、Oracle Solaris Cluster、Oracle Solaris 安全性、Java EE、Sun 硬件和 MySQL 课程。目前,他为 Symantec、Oracle 合作伙伴和 EC-Council 提供课程教学,并且讲授一些关于信息安全的非常专业的课程。此外,他还是 Linux Magazine Brazil 的特约撰稿人和专栏作家。

修订版 1.0,2013 年 8 月 27 日

关注我们:
博客 | Facebook | Twitter | YouTube