Solaris的软件包

      Solaris的软件包是发布软件的标准格式。软件包包含:元信息、压缩过的软件本身的文件、可选的安装或卸载的脚本。元信息部分描了软件包的名称、类 别、属主、权限等信息。软件包的名称通常以发布该软件的公司的纳斯达克上市股票代号为前缀后面跟上软件包的简写名称,Solaris下发布软件包最多的公 司应该是Sun公司,它的纳斯达克上市股票代号为SUNW,所以我们常常可以看到以SUNW前缀软件包,如SUNWman, SUNWcsr。而随着开方源代码和自由软件的兴起,为了方便Solaris用户安装使用开源软件,一个非营利的网站www.sunfreeware.com提供了一些著名的开源软件的Solaris软件包,这些软件包名都以SMC为前缀。
        软件包有两种格式,即文件系统格式和数据流格式。前者实际上就是按照一定目录结构组织的文件集合,后者则是将这些文件打包成一个文件以方便传输。(个人理解为一种压缩方式)通常 Solaris软件包在光盘介质中以文件系统格式发布,而在因特网上以数据流格式发布。文件系统格式的软件包通常用软件包名作为顶层目录名,该目录中至少 有pkginfo和pkgmap两个文件,这两个文件描述软件包的元信息。例如在Solaris10的光盘中的Solaris_10/Product目录 下存放许多以文件系统格式发布软件包,查看其中的SUNWcsr软件包;
-bash-3.00# cd /cdrom/cdrom0/Solaris_10/Product/
-bash-3.00# ls -ld SUNWcsr
dr-xr-xr-x   5 root     root        2048 Dec  7 23:58 SUNWcsr
-bash-3.00# cd SUNWcsr
-bash-3.00# ls -l
total 78
dr-xr-xr-x   2 root     root        2048 Dec  7 23:58 archive
dr-xr-xr-x   2 root     root        6144 Dec  7 23:58 install
-r–r–r–   1 root     root        3342 Dec  7 23:24 pkginfo
-r–r–r–   1 root     root       26025 Dec  7 23:24 pkgmap
dr-xr-xr-x   6 root     root        2048 Dec  7 23:58 reloc
文件系统格式和数据流格式可以互相转换。/var/sadm/install/contents文件中记录了所有软件包的所有文件的安装的位置、属主、权限等信息。该文件是Solaris系统的已安装软件包信息库。
-bash-3.00# more /var/sadm/install/contents
……
/usr/bin/newform f none 0555 root bin 16308 54888 1106448826 SUNWesu
/usr/bin/newgrp f none 4755 root sys 10324 56620 1106447294 SUNWcsu
/usr/bin/news f none 0555 root bin 10128 27837 1106448826 SUNWesu
/usr/bin/newsp=./mailp s none SUNWmp
/usr/bin/newtask=../../usr/lib/isaexec l none SUNWcsu
/usr/bin/nfsstat f none 0555 root bin 23936 33443 1106444303 SUNWnfscu
/usr/bin/nice f none 0555 root bin 5768 49667 1106447294 SUNWcsu
/usr/bin/nisaddcred f none 0555 root bin 31224 40868 1106444342 SUNWnisu
/usr/bin/niscat f none 0555 root bin 9964 29056 1106444342 SUNWnisu
/usr/bin/nischgrp f none 0555 root bin 14248 41511 1106444342 SUNWnisu
/usr/bin/nischmod=../../usr/bin/nischgrp l none SUNWnisu
/usr/bin/nischown=../../usr/bin/nischgrp l none SUNWnisu
……
可见如果知道具体文件位置可以用查到该文件所属的软件包名称。
以下命令找出ifconfig命令所属软件包为SUNWcsr:
-bash-3.00# grep bin/ifconfig /var/sadm/install/contents
/sbin/ifconfig f none 0555 root bin 63956 59090 1132684929 SUNWcsr
/usr/sbin/ifconfig=../../sbin/ifconfig s none SUNWcsu
Solaris下有6个用于软件包管理的命令行工具:
pkgadd   — 用于安装或缓存(spool)软件包
pkgrm    — 用于删除软件包或清除软件包缓存(spool)
pkginfo  — 用于获取软件包信息
pkgchk   — 用于检查软件包中文件的完整性
pkgtrans — 用于软件包格式转换
pkgask   — 用于录制含有交互式脚本软件包安装时需要的用户输入
除了pkgask、pkgrm外,这些命令都接受软件包名作为可选的最后一个参数,如果不指定命令会提示用户输入,也可以用all代表所有。指定软件包的 位置用-d选项,对于文件系统格式软件包只要指定到包含该软件包的目录即可,对于数据流格式的软件包需要指定到文件名称。

软件包管理的常见任务
软件包管理的常见任务有:获得软件包信息、安装软件包、删除软件包、软件包格式转换、缓存软件包等。以下以实例分别介绍每个任务的操作步骤。

获得软件包信息
获得软件包信息的命令主要是pkginfo。pkgchk -v则可以用来获得软件包中的文件列表。如果要查看未安的装软件包的信息,需要用-d选项指定软件包所在的位置。查看系统上安装的软件包则不需要使用-d选项。
pkginfo命令不带任何参数显示当前系统安装的所有软件包的概要信息,包括分类、名称、描述。
-bash-3.00# pkginfo |more
system      CADP160                          Adaptec Ultra160 SCSI Host Adapter Driver
system      HPFC                             Agilent Fibre Channel HBA Driver
ALE         SUNW5xmft                        Traditional Chinese (BIG5) X Windows Platform minimum required Fonts Package
system      SUNWGlib                         GLIB – Library of useful routines for C programming
system      SUNWGtkr                         GTK – The GIMP Toolkit (Root)
system      SUNWGtku                         GTK – The GIMP Toolkit (Usr)
GNOME2      SUNWPython                       The Python interpreter, libraries and utilities
system      SUNWTk                           Tk – TCL GUI Toolkit
system      SUNWa2psr                        a2ps – GNU Any to PostScript filter (root)
system      SUNWa2psu                        a2ps – GNU Any to PostScript filter (user)
system      SUNWaac                          Adaptec AdvanceRaid Controller SCSI HBA Driver
system      SUNWad810                        SUNW W1100z & W2100z Audio Drivers
system      SUNWadmap                 &nb
sp;      System administration applications
system      SUNWadmc                         System administration core libraries
system      SUNWadmfr                        System & Network Administration Framework Configuration
system      SUNWadmfw                        System & Network Administration Framework
system      SUNWadmj                         Admin/Install Java Extension Libraries
system      SUNWadmlib-sysid                 System and Network identification libraries
system      SUNWadmr                         System & Network Administration Root
system      SUNWadp                          Adaptec 29xx/39/xx/78xx Family of SCSI HBA
system      SUNWadpu320                      Adaptec Ultra320 Driver
……
pkginfo -l则列出软件包的详细信息:
-bash-3.00# pkginfo -d . -l SMCapch22
   PKGINST:  SMCapch22
      NAME:  apache
  CATEGORY:  application
      ARCH:  sparc
   VERSION:  2.2.0
   BASEDIR:  /usr/local/apache2
    VENDOR:  The Apache Group
    PSTAMP:  Steve Christensen
     EMAIL:  steve@smc.vnet.net
    STATUS:  spooled
     FILES:     2198 spooled pathnames
                  66 directories
                  72 executables
                   2 package information files
               44173 blocks used (approx)
pkgchk命令用来检查软件包是否安装、软件包中的文件是否有所改动等信息。如果软件包成功安装并且没有任何文件改动过,该命令无任何输出,否则在标准 错误上输出相关的信息。pkgchk不带任何参数则检查当前系统安装的所有软件包,并列出检查结果的概要信息,如果要详细信息可以用-l选项。如果要限定 某个具体软件包,最后一个参数写上该软件包名称即可。如果只要检查某个软件包的某个文件可以用-p选项加上该文件的完全路径即可,如果不知道完全路径可以 使用-P选项加文件的部分路径。例如:
-bash-3.00# pkgchk  -p /etc/shadow
ERROR: /etc/shadow
    modtime <01/22/05 07:46:05 AM> expected <02/13/06 01:36:36 PM> actual
    file size <296> expected <373> actual
    file cksum <20180> expected <26166> actual
检查/etc/shadow自安装以来是否发生变化。有输出说明有变化,没有输出则表示没有变化。
-bash-3.00# pkgchk -l -p /usr/bin/showrev
Pathname: /usr/bin/showrev
Type: regular file
Expected mode: 0755
Expected owner: root
Expected group: sys
Expected file size (bytes): 28148
Expected sum(1) of contents: 7605
Expected last modification: Jan 23 09:40:57 2005
Referenced by the following packages:
        SUNWadmc
Current status: installed
列出/usr/bin/showrev文件在软件包中的属主、权限、所属软件包名称等信息。
-bash-3.00# pkgchk  -l -P showrev
Pathname: /usr/bin/showrev
Type: regular file
Expected mode: 0755
Expected owner: root
Expected group: sys
Expected file size (bytes): 28148
Expected sum(1) of contents: 7605
Expected last modification: Jan 23 09:40:57 2005
Referenced by the following packages:
        SUNWadmc
Current status: installed

Pathname: /usr/share/man/man1m/showrev.1m
Type: regular file
Expected mode: 0644
Expected owner: root
Expected group: root
Expected file size (bytes): 3744
Expected sum(1) of contents: 56811
Expected last modification: Oct 22 08:51:42 2005
Referenced by the following packages:
        SUNWman
Current status: installed
列出含有showrev文件的软件包中该文件的相关信息。可见如果知道某个文件的完全路径名或部分路径名可以通过pkgchk -lp或pkgchk -lP命令查找出该文件所属的软件包。
pkgchk -v pkg_name用来列出指名称的软件包所包含的文件。下面的命令用分页显示列出软件包SMCapch22中所包含的文件列表:
-bash-3.00# ls -l
total 3002
-rw-r–r–   1 root     root       75782 Feb 25 20:56 1
drwxr-xr-x   3 root     root         512 Feb 25 18:09 SMCapch22
drwxr-xr-x   5 root     root         512 Feb 25 17:15 SUNWcsr
-rw-r–r–   1 root     root     1216512 Feb 25 17:09 SUNWcsr.pkg
-rw-r–r–   1 root     root      220672 Feb 25 17:59 zone.pkg
-bash-3.00# pkgchk -d . -v SMCapch22 2>&1 | more
bin/ab
bin/apachectl
bin/apxs
bin/checkgid
bin/dbmmanage
bin/envvars
bin/envvars-std
bin/htcacheclean
bin/htdbm
bin/htdigest
bin/htpasswd
bin/httpd
bin/httxt2dbm
bin/logresolve
bin/rotatelogs
build/config.nice
build/config_vars.mk
build/instdso.sh
build/library.mk
build/ltlib.mk
build/mkdir.sh
build/program.mk
–More–
要注意的是pkgchk命令只往标准错误输出文件列表,所以使用管道时需要重定向到标准输出。

安装软件包
安装软件包用pkgadd命令,该命令可以安装文件系统各式的软件包:
-bash-3.00# cd /cdrom/cdrom0/Solaris_10/ExtraValue/CoBundled/SunVTS_6.1/Packages
-bash-3.00# pkgadd -d . SUNWvts

Processing package instance <SUNWvts> from </cdrom/sol_10_106_x86/Solaris_10/Ext
raValue/CoBundled/SunVTS_6.1/Packages>

SunVTS Framework(i386) 6.1,REV=2005.11.10.13.29
Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
## Executing checkinstall script.
Using </opt> as the package base directory.
## Processing package information.
## Processing system information.
## Verifying package dependencies.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs.

This package contains scripts which will be executed with super-user
permission during the process of installing this package.

Do you want to continue with the installation of <SUNWvts> [y,n,?]
y

Installing SunVTS Framework as <SUNWvts>

## Installing part 1 of 1.
5254 blocks

Installation of <SUNWvts> was successful.
也可以安装数据流格式的本地软件包:
-bash-3.00# pkgadd -d cvs-bundle.pkg all

Processing package instance <SMCcvs> from </export/home/justin/pkg/cvs-bundle.pkg>

cvs(x86) 1.11.20
FSF

The selected base directory </usr/local> must exist before
installation is attempted.

Do you want this directory created now [y,n,?,q] y
Using </usr/local> as the package base directory.
## Processing package information.
## Processing system information.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs.

Installing cvs as <SMCcvs>

## Installing part 1 of 1.
/usr/local/bin/cvs
/usr/local/bin/cvsbug
/usr/local/bin/rcs2log
……
/usr/local/man/man1/cvs.1
/usr/local/man/man5/cvs.5
/usr/local/man/man8/cvsbug.8
[ verifying class <none> ]

Installation of <SMCcvs> was successful.

Processing package instance <SMCgzip> from </export/home/justin/pkg/cvs-bundle.pkg>

gzip(intel) 1.3.5
Free Software Foundation
Using </usr/local> as the package base directory.
## Processing package information.
## Processing system information.
   5 package pathnames are already properly installed.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs.

Installing gzip as <SMCgzip>

## Installing part 1 of 1.
/usr/local/bin/gzexe
/usr/local/bin/gzip
/usr/local/man/man1/gzip.1
……
[ verifying class <none> ]
/usr/local/bin/gunzip <linked pathname>
/usr/local/bin/zcat <linked pathname>
/usr/local/bin/zcmp <linked pathname>
/usr/local/bin/zegrep <linked pathname>
/usr/local/bin/zfgrep <linked pathname>

Installation of <SMCgzip> was successful.

最新版的pkgadd命令还支持http方式安装远程的数据流格式软件包:
-bash-3.00# pkgadd -d http://localhost/pkgs/cvs-bundle.pkg all

## Downloading…
…………..25%…………..50%…………..75%…………..100%
## Download Complete

Processing package instance <SMCcvs> from <http://localhost/pkgs/cvs-bundle.pkg>

cvs(x86) 1.11.20
FSF
Using </usr/local> as the package base directory.
## Processing package information.
## Processing system information.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs.

Installing cvs as <SMCcvs>

## Installing part 1 of 1.
/usr/local/bin/cvs
/usr/local/bin/cvsbug
……
[ verifying class <none> ]

Installation of <SMCcvs> was successful.

Processing package instance <SMCgzip> from <http://localhost/pkgs/cvs-bundle.pkg>

gzip(intel) 1.3.5
Free Software Foundation
Using </usr/local> as the package base directory.
## Processing package information.
## Processing system information.
   5 package pathnames are already properly installed.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs.

Installing gzip as <SMCgzip>

## Installing part 1 of 1.
/usr/local/bin/gzexe
/usr/local/bin/gzip
……

Installation of <SMCgzip> was successful.
要注意的是有些软件包有它所依赖的其它软件包,如果这些依赖没有安装,那么pkgadd将会报错。遇到这种情形应当首先安装依赖的软件包。此外,如果需要 无人值守的情况下安装那些需要用户输入的软件包时,可以事先使用pkgask将设置记录到一个文件中,然后使用pkgadd的-r选项告诉pkgadd命 令使用该文件的的用户输入。

删除软件包
删除软件包用pkgrm命令:
-bash-3.00# pkgrm SMCgzip

The following package is currently installed:
   SMCgzip  gzip
            (intel) 1.3.5

Do you want to remove this package? [y,n,?,q] y

## Removing installed package instance <SMCgzip>
## Verifying package <SMCgzip> dependencies in global zone
## Processing package information.
## Removing pathnames in class <none>
/usr/local/man/man1 <shared pathname not removed>
/usr/local/man <shared pathname not removed>
/usr/local/info/gzip.info
/usr/local/info <shared pathname not removed>
/usr/local/doc <shared pathname not removed>
/usr/local/bin/zcat
/usr/local/bin/gzip
/usr/local/bin/gzexe
/usr/local/bin/gunzip
/usr/local/bin <shared pathname not removed>
## Updating system information.

Removal of <SMCgzip> was successful.
如果试图删除被其它软件包依赖的软件包,pkgrm命令会提出警告,并让用户选择是否继续,如果继续软件包会被强制删除。如:
-bash-3.00# pkgrm SUNWapchr

The following package is currently installed:
   SUNWapchr  Apache Web Server (root)
              (i386) 11.10.0,REV=2005.01.08.01.09

Do you want to remove this package? [y,n,?,q] y

## Removing installed package instance <SUNWapchr>
## Verifying package <SUNWapchr> dependencies in global zone
WARNING:
    The <SUNWapchu> package depends on the package
    currently being removed.
WARNING:
    The <SUNWapchd> package depends on the package
    currently being removed.
WARNING:
    The <SUNWserweb> package depends on the package
    currently being removed.
Dependency checking failed.

Do you want to continue with the removal of this package [y,n,?,q]

缓存软件包
缓存软件包即把常用的软件从光盘等其它介质拷贝到/var/spool/pkg目录下,使得安装更为方便快捷。缓存软件包用pkgadd命令的-s spool选项。比如把上述cvs-bundle.pkg缓存到/var/spool/pkg目录下可以使用以下命令:
-bash-3.00# pkgadd -d cvs-bundle.pkg -s spool all
Transferring <SMCcvs> package instance
Transferring <SMCgzip> package instance
-bash-3.00# ls -l /var/spool/pkg
total 4
drwxr-xr-x   3 root     root         512 Feb 26 01:03 SMCcvs
drwxr-xr-x   3 root     root         512 Feb 26 01:03 SMCgzip
删除缓存的软件包用pkgrm -s spool pkg_name,例如:
-bash-3.00# pkgrm -s spool SMCcvs

The following package is currently spooled:
   SMCcvs  cvs
           (x86) 1.11.20

Do you want to remove this package? [y,n,?,q] y

Removing spooled package instance <SMCcvs>
-bash-3.
00# ls -l /var/spool/pkg/
total 2
drwxr-xr-x   3 root     root         512 Feb 26 01:03 SMCgzip
安装已经缓存了的软件包只需运行pkgadd pkg_name即可。
-bash-3.00# pkgadd SMCgzip

Processing package instance <SMCgzip> from </var/spool/pkg>

gzip(intel) 1.3.5
……

软件包格式转换
        pkgtrans命令是软件包格式转换工具,它的用法是:
pkgtrans file_or_dir_path file_or_dir_path [package_name …]
如果是将文件系统格式转换成数据流格式,第一个参数指定软件包所在的目录,第二个参数指定转换后数据流格式软件包存放文件名;如果是将数据流格式转换成文 件系统格式,第一个参数指定数据流格式软件包文件名,第二个参数指定转换后文件系统格式软件包存放目录。如果不指定要转换的软件包名称,pkgtrans 将会根据第一个参数中可选的软件包提示用户输入要转换的软件包名称。
以下命令将Solaris10安装光盘中的SUNWzoner和SUNWzoneu转换成数据流格式的软件包:

-bash-3.00# cd /cdrom/cdrom0/Solaris_10/Product/
-bash-3.00# pkgtrans . /export/home/justin/pkg/zone.pkg SUNWzoner SUNWzoneu
Transferring <SUNWzoner> package instance
Transferring <SUNWzoneu> package instance
-bash-3.00# file zone.pkg
zone.pkg:       package datastream
-bash-3.00# head /export/home/justin/pkg/zone.pkg
# PaCkAgE DaTaStReAm
SUNWzoner 1 50
SUNWzoneu 1 450
# end of header
BASEDIR=/
CATEGORY=system
DESC=Solaris Zones Configuration Files
EMAIL=
HOTLINE=Please contact your local service provider
MAXINST=1000

以下命令将数据流格式的Apache2.2软件包转换成文件系统格式:

-bash-3.00# pkgtrans apache-2.2.0-sol10-x86-local . SMCapch22
Transferring <SMCapch22> package instance
-bash-3.00# ls -ld SMCapch22
drwxr-xr-x   3 root     root         512 Feb 25 18:09 SMCapch22
-bash-3.00# ls -l SMCapch22/
total 356
-rw-r–r–   1 10       staff        186 Jan  1 16:39 pkginfo
-rw-r–r–   1 10       staff     171631 Jan  1 16:39 pkgmap
drwxr-xr-x  14 10       staff        512 Feb 25 18:09 reloc

相关资源:
命令手册 pkgadd(1M)、pkgask(1M)、pkgrm(1M)、pkgchk(1M)、pkginfo(1)、pkgtrans(1)Sample Text

推荐阅读:
就在前不久,Oracle宣布:
作为一个Unix系统的管理员,
一个朋友向我咨询他遇到的一个问

拓展Solaris的使用率 SUN 投怀IBM

为了拓展Solaris的使用率,SUN让传家之宝Solaris开始支持对手阵营IBM的PowerPC?

乍看之下有点令人诧异,不过在今年的1/10,IBM Power.org的成员Genesi已经端出首款由OpenSolaris社群Blastware主动协助开发的PowerPC工作站,该款支持 Solaris的Power-based工作站并已开始在市面上销售。它们并把这个 PowerPC版本 OpenSolaris的计划称之为 Polaris。

虽然这个 Polaris计划并非由SUN提出,不过将Solaris放在PowerPC上执行也在SUN的计划之内。SUN全球总裁Jonathan Schwartz前(2004)年在自己的blog里就已经提过:「软件要达到真正的开放,不仅仅是释出开原码以供工程技术人员或者学术机构开发…更重要 的是,让不同平台的使用者都可以轻松、几乎无成本的享受到开放软件带来的便利。」「举例而言,SUN正在尝试让Solaris在IBM的PowerPC上 执行,SUN衷心期待IBM予以协助,」Schwartz点出了Solaris意欲支持PowerPC的计划。  

事隔两年,SUN未再提及Solaris支持IBM Power的说法,SUN台湾区营销总监朱家昌接受采访时亦表示,「目前尚未看到Solaris『正式』支持IBM Power的计划,任何提及Solaris会支持IBM Power的说法都只能算是一种传言。即使能够在Power架构上执行Solaris,一定不能发挥所有的Solaris功能,」朱家昌说。

而且Solaris支持PowerPC的作法能否在市场上奏效仍是未定之天。IDC(国际数据信息)运算系统分析师古嘉元表示。「如果不是双方正式的携手合作,即表示可能缺乏完整的测试。对用户而言,势必还会观望Polaris的效能表现,」古嘉元说。

Solaris一向被SUN视为和Sparc芯片、JAVA语言同等重要的三项看家法宝。Solaris是使用率相当广的一种Unix衍生版本,在 1990年代末期网络泡沫时期大行其道,但后来随开原码操作系统Linux窜起而式微。同时,微软的Windows操作系统进驻x86架构的主流服务器, 也蚕食SUN的市占率。

为了要拓展Solaris的使用率,SUN在去年六月宣布Solaris进入开原码时代,把500多万行Solaris核心(kernel)的原始码张贴 在OpenSolaris网站上。并宣布以及Solaris 10的支持平台从原本只有SUN的Sparc,延伸至AMD Opteron与Intel的Xeon。同年11月,SUN又与IBM宣布达成协议,把SUNSolaris 10纳为IBM BladeCenter服务器系列搭配的操作系统选项之一。Solaris会与Windows、Linux (for x86与Power芯片)以及IBM的AIX版Unix并列为操作系统选项。

推荐阅读:
就在前不久,Oracle宣布:
作为一个Unix系统的管理员,
一个朋友向我咨询他遇到的一个问

Sun和Oracle的合作关系再延长10年

Sun Microsystems和Oracle两家公司刚刚重申了其联盟关系,它们将继续在研发、销售和市场等领域展开合作。

Sun公司CEO Scott McNealy在Oracle总部举办的一次活动中说:“我们希望让各自的员工都清楚我们两家公司合作和相互渗透的关系,我们将携手面对一些相当艰难的市场竞争。”

Sun和Oracle的伙伴关系可以追溯到20年前,Oracle也由此成为Sun平台的第一大数据库供应商,而Sun Microsystems也声称运行Oracle数据库最多的也是Sun的硬件平台。

作为合作伙伴继续延伸的一部分,Oracle得到了Sun Java编程语言接下来十年的许可。而Sun则表示计划销售预装Oracle数据库的硬件产品,购买该系统的用户可以免费使用数据库一年,并可享受技术支持。


评:
业界最高端的合作,Sun的Solaris、 JAVA  + Oracle的应用,岂是“强”一个字形容的了得?
长久的伙伴关系,20年来如一日的相濡以沫,岂是“铁”一个字形容的了得?
对于业界的影响就是营造了一种"要上oracle必上solaris!用了Solaris准备oracle!"的大氛围,双赢是必然的。

 

推荐阅读:
就在前不久,Oracle宣布:
作为一个Unix系统的管理员,
一个朋友向我咨询他遇到的一个问

安装Solaris10失败

常听别人说Nforece的主板跟开源系统总归有点摩擦,他们不愿意公开驱动程序代码。今天被我见识了。

机器配置:AMD3000+ nforce400 + ATI 9700 pro + 2 wdSATA200GRAID 0

软件版本:Solaris 10 For X86

开始安装的时候一切正常,正常的拷贝,正常的设置主机名、密码等等。使我有了想要反驳这个理论的想法,安装结束后重新启动发现Boot manger也配置正常了,启动Solaris似乎也正常,然而就当load kernel结束时,满屏幕的warning !大意是找不到磁盘之类的报错。换成RAID1还是不行,拆掉Raid0单硬盘重装问题仍旧,没有ATA的磁盘,没有测试。

难怪Sun自己的AMD64服务器从来不用nforce芯片组的板子。

最后强烈要求Nvidia开放自己的驱动程序源代码!

推荐阅读:
就在前不久,Oracle宣布:
作为一个Unix系统的管理员,
一个朋友向我咨询他遇到的一个问

GNU / OpenSolaris = Nexenta OS ?!

发现了一个开源项目,似乎要在OpenSolaris的基础上开发一个“debian like"的操作系统,蛮有趣的,现在关注中: http://www.gnusolaris.org/gswiki

该系统遵循CDDL协议,而并非GNU,不太清楚协议的内容。看来SUN开源之后立刻就有人做出响应了。该网站现已张贴有运行gnome桌面的截图。

推荐阅读:
就在前不久,Oracle宣布:
作为一个Unix系统的管理员,
一个朋友向我咨询他遇到的一个问

Solaris中的酷命令

Solaris 中的命令非常之多,以致很难从中分离出那些很酷的命令。例如,有些命令报告程序进行每个系统调用时所要花费的时间,有些命令动态地显示系统活动信息,而且 这些命令大部分都同时包含在了 Solaris 8 和 Solaris 9 中。这里,我将重点介绍其中一些命令,您或许会发现它们特别有用。

    系统管理员是工具的使用者。通过实践经验,我们掌握了更多工具,并且增强了诊断问题以及实施解决方案的能 力。本次专栏中包含的命令是通过经验、朋友、熟人以及出席 9 月举行的 SunNetwork 2002 大会收集到的。Solaris 内核的开发人员 Brian Cantrill 和 Mike Shapiro 所讲的"The /procodile Hunter"让人很有启发并令人感到惊恐,因为 Cantrill 编写代码来说明一个观点的速度比 Shapiro 能够讲解该观点的速度还要快!

有用的 Solaris 命令

truss -c (Solaris >= 8):这是个令人震惊的 truss 选项,它提供了被追踪命令的全面概要信息:

$ truss -c grep asdf work.doc
syscall seconds calls errors
_exit .00 1
read .01 24
open .00 8 4
close .00 5
brk .00 15
stat .00 1
fstat .00 4
execve .00 1
mmap .00 10
munmap .01 3
memcntl .00 2
llseek .00 1
open64 .00 1
---- --- ---
sys totals: .02 76 4
usr time: .00
elapsed: .05

它还能显示正在运行的进程的概要数据。在本例中,数据表明了从启动 truss 命令到用 control-c 来终止 truss 执行的期间,进程到底做了些什么。这对于判断进程为何被挂起是很理想的,因为您无须费力浏览整个 truss 的输出。

truss -d 和 truss -D (Solaris >= 8):这两个选项表明与truss显示的每个系统调用相关的时间信息。这对于找出定制代码或商业代码中的问题很有帮助。例如:

$ truss -d who
Base time stamp: 1035385727.3460 [ Wed Oct 23 11:08:47 EDT 2002 ]
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64) argc = 1
0.0032 stat("/usr/bin/who", 0xFFBEFA98) = 0
0.0037 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0042 open("/usr/local/lib/libc.so.1", O_RDONLY) Err#2 ENOENT
0.0047 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0051 fstat(3, 0xFFBEF42C) = 0
. . .
truss -D 对于显示系统调用间的延迟时间更加有用:


Dilbert> truss -D who
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64) argc = 1
0.0028 stat("/usr/bin/who", 0xFFBEFA98) = 0
0.0005 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0006 open("/usr/local/lib/libc.so.1", O_RDONLY) Err#2 ENOENT
0.0005 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0004 fstat(3, 0xFFBEF42C) = 0

这个例子中,stat 这个系统调用要比其他系统调用占用更长的时间。

truss -T:这是个很棒的调式帮助选项。在执行指定的系统调用时,它可以终止进程("-U"也执行同样的操作,不过是在进行用户级的函数调用时)。此时,将会获取用于进一步分析的 core 文件,或者使用一些 /proc 工具来确定进程各个方面的状态。

truss -l(在 Solaris 9 中已改进):显示多线程进程中每个调用的线程号。Solaris 9 中的 truss -l 经过了改进,最后还可以监视多线程的应用程序的执行。

Truss 的确是个功能强大的工具。例如,可在 core 文件中用于分析问题产生的原因。还可以通过"-u"选项来显示用户级的库(既可以为系统库,也可为程序员库)调用的详细信息。

pkg-ge:这是个用于自动获取免费软件包的好工具(http: //www.bolthole.com/solaris)。它通过 /etc/pkg-get.conf 来配置。一旦配置好并运行后,就运行 pkg-get -a 来获取可用包的列表以及运行 pkg-get -I 来获取并安装给定的包。

Plimit (Solaris >= 8):这个命令用于显示并设置正在运行的进程中的每个进程的限制。如果一个长时间运行的进程超过了某个限制(如打开的文件数目),使用该命令就十分方便。 因为无须使用 limit 命令后重新运行该进程,plimit 就可以修改正在运行的进程。

coreadm (Solaris >= 8):在以前没有 coreadm 命令时,core dumps 被置于进程的工作目录下。并且 core 文件将会互相覆盖。而这个问题和其他更多问题都可以由 coreadm 来处理,它是一个管理 core 文件生成的工具。您可以通过该工具指定是否保存 core、core存储的位置和应保留的版本数目,等等。所有这些设置信息都是在重启前通过 coreadm 修改 /etc/coreadm.conf 来保存的。

pgrep (Solaris >= 8):pgrep 在 /proc 中搜索符合给定规则的进程,并返回进程的 ID。其中一个很棒的选项是"-n",它返回的是最新的满足条件的进程号。

preap (Solaris >= 9):除去僵尸进程。任何困于"z"状态(由 ps 命令显示)的进程,该命令都可将之从系统中清除。

pargs (Solaris >= 9):显示进程的参数及环境变量。

nohup -p (Solaris >= 9):nohup 命令可以用于启动一个进程,因此即使用于启动进程的 shell 被关闭(即进程获得"SIGHUP"信号),该进程仍然可以继续运行。这对于让一个后台任务不管碰到何种情况仍然可以继续运行是很有用的。但是如果您已经 启动了一个进程,但稍后希望使它免受 HUP 信号的影响,该怎么办呢?在Solaris 9中, nohup -p 可以获取进程 ID 并使之忽略 SIGHUP 信号。

prstat (Solaris >= 8):prstat 也是 top 命令,但拥有更多功能。这两个命令都可以提供一个屏幕的关于进程的有用信息以及其他的相关信息,并且能频繁地更新,总之是个很棒的显示系统性能的窗口。但 prstat 要比 top 更加精确。它还提供了一些很好的选项。"-a"可以同时显示进程与用户的信息(默认由 CPU hog 排序)。"-c"使其执行很像 vmstat(在前一个报告下面接着显示新的报告)。"-C"显示在处理器集中的进程。"-j"显示一个"工程"中的进程。"-L"显示每个线程和每个进 程的信息。"-m"和"-v"显示每个进程的很多详细的性能信息(包括 pages、traps、lock wait 和 CPU wait)。所有输出数据都可以按照在内存中设置的大小、虚拟内存大小、运行时间等等条件来排列。prstat 在没有 top 的系统中是个十分有用的工具,并且由于它的精确性,所以很可能取代 top(有些地方考虑到它是个被支持的程序而使用它)。

trapstat (Solaris >= 9):trapstat 以及 lockstat 和 kstat 是 Solaris 中最难以理解的命令。它们显示一个运行的操作系统内部中最具体的细节信息。每个命令对于解决 Solaris 系统中发生的古怪问题都是必不可少的。最好是将它们的输出随错误报告一起提交,但进一步的研究揭示,它们也能为一般应用提供有用信息。

vmstat -p (Solaris >= 8):在这个选项可以使用之前,要确定是哪种类型的内存命令导致系统页面调度几乎是不可能的(请查阅"se toolkit")。vmstat -p 可以解决此问题,因为它不但显示您的系统是否处于内存紧缺的情况(通过"sr"栏),而且还显示是否是由以下内容导致的:应用程序的代码,应用程序的数据 或 I/O 。"-p"能够真正帮助找出 Solaris 中导致神秘的内存问题的原因。

pmap -x (Solaris >= 8,Solaris >= 9中进行了错误修复):如果已经得知进程中有内存问题,并且需要获得更多内存使用的详细信息,就可以使用 pmap -x。该命令将解释指定 ID 的目标进程的整个内存映射信息,如下:

# pmap -x 1779
1779: -ksh
Address Kbytes RSS Anon Locked Mode Mapped File
00010000 192 192 - - r-x-- ksh
00040000 8 8 8 - rwx-- ksh
00042000 32 32 8 - rwx-- [ heap ]
FF180000 680 664 - - r-x-- libc.so.1
FF23A000 24 24 - - rwx-- libc.so.1
FF240000 8 8 - - rwx-- libc.so.1
FF280000 568 472 - - r-x-- libnsl.so.1
FF31E000 32 32 - - rwx-- libnsl.so.1
FF326000 32 24 - - rwx-- libnsl.so.1
FF340000 16 16 - - r-x-- libc_psr.so.1
FF350000 16 16 - - r-x-- libmp.so.2
FF364000 8 8 - - rwx-- libmp.so.2
FF380000 40 40 - - r-x-- libsocket.so.1
FF39A000 8 8 - - rwx-- libsocket.so.1
FF3A0000 8 8 - - r-x-- libdl.so.1
FF3B0000 8 8 8 - rwx-- [ anon ]
FF3C0000 152 152 - - r-x-- ld.so.1
FF3F6000 8 8 8 - rwx-- ld.so.1
FFBFE000 8 8 8 - rw--- [ stack ]
-------- ------- ------- ------- -------
total Kb 1848 1728 40 -

这里,我们可以看到每一块内存,它们被用于做什么,占用了多大的(虚拟的和真实的)空间以及其模式信息。

df -h (Solaris >= 9):这个命令在 Linux 上已经应用十分普遍,刚刚转移到了 Solaris 平台。df -h 以一种方便阅读的形式显示文件系统的概要信息:

$ df -h
Filesystem size used avail capacity Mounted on
/dev/dsk/c0t0d0s0 4.8G 1.7G 3.0G 37% /
/proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
fd 0K 0K 0K 0% /dev/fd
swap 848M 40K 848M 1% /var/run
swap 849M 1.0M 848M 1% /tmp
/dev/dsk/c0t0d0s7 13G 78K 13G 1% /export/home
推荐阅读:
就在前不久,Oracle宣布:
作为一个Unix系统的管理员,
一个朋友向我咨询他遇到的一个问