本节介绍在管理无盘客户机时遇到的问题和可能的解决方法。
smosservice add 命令不会安装在根目录 (/ ) 或 /usr 文件系统中指定为 ARCH=all 的任何软件包。因此,将跳过这些软件包。屏幕上不会显示任何警告或错误消息。必须向新创建的 Oracle Solaris OS 服务手动添加这些软件包。此行为自 Solaris 2.1 OS 以来一直存在。此行为既适用于基于 SPARC 的客户机又适用于基于 x86 的客户机。请注意,根据运行的 Oracle Solaris,缺失的软件包列表会有所不同。
以下过程说明在服务器上创建 Oracle Solaris OS 服务后,如何找到并安装缺失的 ARCH=all 软件包。此过程中提供的示例适用于 Solaris 10 6/06 OS。
找到所有包含 ARCH=all 参数的软件包。
将目录更改为 Oracle Solaris 10 映像介质的 Product 目录。例如:
% cd /net/server/export/Solaris/s10u2/combined.s10s_u2wos/latest/Solaris_10/Product |
列出 pkginfo 文件中包含 ARCH=all 参数的所有软件包。
% grep -w ARCH=all */pkginfo |
如果显示的错误消息指示参数列表太长,则还可以运行以下命令以生成对应的列表:
% find . -name pkginfo -exec grep -w ARCH=all {} /dev/null \; |
请注意,运行此命令需要较长时间才能产生结果。
输出以下类似内容:
./SUNWjdmk-base/pkginfo:ARCH=all ./SUNWjhdev/pkginfo:ARCH=all ./SUNWjhrt/pkginfo:ARCH=all ./SUNWjhdem/pkginfo:ARCH=all ./SUNWjhdoc/pkginfo:ARCH=all ./SUNWmlibk/pkginfo:ARCH=all
通过此列表中提供的信息,可以确定在 /usr 文件系统中安装的软件包以及在根目录 (/) 文件系统中安装的软件包。
检查生成的软件包列表中的 SUNW_PKGTYPE 参数值。
在 pkginfo 文件中,属于 /usr 文件系统的软件包被指定为 SUNW_PKGTYPE=usr。而在 pkginfo 文件中,属于根目录 ( /) 文件系统的软件包被指定为 SUNW_PKGTYPE=root。在前面的输出中,所有的软件包都属于 /usr 文件系统。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
创建临时的安装管理文件。
必须为根目录 (/) 文件系统中安装的软件包和 /usr 文件系统中安装的软件包分别创建一个单独的安装管理文件。
对于 /usr 文件系统中安装的 ARCH=all 软件包,请创建以下临时安装管理文件:
# cat >/tmp/admin_usr <<EOF mail= instance=unique partial=nocheck runlevel=nocheck idepend=nocheck rdepend=nocheck space=nocheck setuid=nocheck conflict=nocheck action=nocheck basedir=/usr_sparc.all EOF # |
对于根目录 (/) 文件系统(如果存在)中安装的 ARCH=all 软件包,请创建以下临时安装管理文件:
# cat >/tmp/admin_root <<EOF mail= instance=unique partial=nocheck runlevel=nocheck idepend=nocheck rdepend=nocheck space=nocheck setuid=nocheck conflict=nocheck action=nocheck EOF # |
安装缺失的 ARCH=all 软件包。
如果当前目录不是 Oracle Solaris 10 映像介质的“Product”目录,请将目录更改为此目录。例如:
# cd /net/server/export/Solaris/s10u2/combined.s10s_u2wos/latest/Solaris_10/Product |
可以运行 pwd 命令,以确定当前目录。
在 /usr 文件系统中安装缺失的 ARCH=all 软件包。
# pkgadd -R /export/Solaris_10 -a /tmp/admin_usr -d `pwd` [ package-A package-B ...] |
运行 pkgadd 命令时,可以列出多个软件包。
检查 ARCH=all 软件包是否已安装。
# pkginfo -R /export/Solaris_10 [package-A package-B ...] |
在根目录 (/) 文件系统中安装缺失的 ARCH=all 软件包。
请注意,这些软件包可能不存在。
# pkgadd -R /export/root/clone/Solaris_10/sun4u -a /tmp/admin_root -d `pwd` [ package-X package-Y ...] |
检查 ARCH=all 软件包是否已安装。
# pkginfo -R /export/root/clone/Solaris_10/sun4u [ package-X package- ...] |
添加完缺失的 ARCH=all 软件包后,请删除临时安装管理文件。
# rm /tmp/administration-file |
本示例说明如何在 /usr 文件系统中安装缺失的 ARCH=all 软件包 SUNWjdmk-base。
% uname -a SunOS t1fac46 5.10 Generic_118833-02 sun4u sparc SUNW,UltraSPARC-IIi-cEngine % cat /etc/release Solaris 10 6/06 s10s_u2wos_03 SPARC Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms. Assembled 06 February 2006 % cd /net/ventor/export/Solaris/s10u2/combined.s10s_u2wos/latest/Solaris_10/Product % grep -w ARCH=all */pkginfo Arguments too long % find . -name pkginfo -exec grep -w ARCH=all {} /dev/null \; ./SUNWjdmk-base/pkginfo:ARCH=all ./SUNWjhdev/pkginfo:ARCH=all ./SUNWjhrt/pkginfo:ARCH=all ./SUNWjhdem/pkginfo:ARCH=all ./SUNWjhdoc/pkginfo:ARCH=all ./SUNWmlibk/pkginfo:ARCH=all % grep -w SUNW_PKGTYPE=usr ./SUNWjdmk-base/pkginfo ./SUNWjhdev/pkginfo ... ./SUNWjdmk-base/pkginfo:SUNW_PKGTYPE=usr ./SUNWjhdev/pkginfo:SUNW_PKGTYPE=usr ./SUNWjhrt/pkginfo:SUNW_PKGTYPE=usr ./SUNWjhdem/pkginfo:SUNW_PKGTYPE=usr ./SUNWjhdoc/pkginfo:SUNW_PKGTYPE=usr % grep -w SUNW_PKGTYPE=root ./SUNWjdmk-base/pkginfo ./SUNWjhdev/pkginfo ... % su Password: xxxxxx # cat >/tmp/admin_usr <<EOFmail= instance=unique partial=nocheck runlevel=nocheck idepend=nochec> k rdepend=nocheck space=nocheck setuid=nocheck conflict=nocheck action=nocheck basedir=/usr_sparc.all EOF # pwd /net/ventor/export/Solaris/s10u2/combined.s10s_u2wos/latest/Solaris_10/Product # pkginfo -R /export/Solaris_10 SUNWjdmk-base ERROR: information for "SUNWjdmk-base" was not found # pkgadd -R /export/Solaris_10 -a /tmp/admin_usr -d `pwd` SUNWjdmk-base Processing package instance <SUNWjdmk-base> </net/ventor/export/Solaris/s10u2/combined.s10s_u2wos... Java DMK 5.1 minimal subset(all) 5.1,REV=34.20060120 Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Using </export/Solaris_10/usr_sparc.all> ## Processing package information. ## Processing system information. Installing Java DMK 5.1 minimal subset as <SUNWjdmk-base> ## Installing part 1 of 1. 2438 blocks Installation of <SUNWjdmk-base> was successful. # pkginfo -R /export/Solaris_10 SUNWjdmk-base application SUNWjdmk-base Java DMK 5.1 minimal subset # rm /tmp/admin_usr |
本节列出了可能会遇到的一些无盘客户机常见问题和可能的解决方案。
问题:试图登录时,无盘客户机报告“Owner of the module /usr/lib/security/pam_unix_session.so.1 is not root(模块 /usr/lib/security/pam_unix_session.so.1 的属主不是 root)”,/usr 文件系统属 nobody 所有。
解决方法:要更正此问题,请使用以下解决方法:
使用文本编辑器修改无盘客户机的 server:/export/root/client/etc/default/nfs 文件。
将 #NFSMAPID_DOMAIN=domain 行更改为:
NFSMAPID_DOMAIN=the_same_value_as_in_server's_/var/run/nfs4_domain |
确保 OS 服务器和无盘客户机具有相同的 nfsmapid 域。要检验此信息,请检查 /var/run/nfs4_domain 文件。
如果无盘客户机的 nfs4_domain 文件所包含的值不同于 OS 服务器的 /var/run/nfs4_domain 文件中的值,您将无法在无盘客户机引导之后登录系统。
重新引导无盘客户机。
有关更多信息,请参见 《Oracle Solaris Tunable Parameters Reference Manual》中的第 3 章 “NFS Tunable Parameters” 和 nfsmapid(1M)。
问题:OS 服务器无法执行以下操作:
对客户机反向地址解析协议 (Reverse Address Resolution Protocol, RARP) 请求进行响应
对客户机 bootparam 请求进行响应
挂载无盘客户机根目录 (/) 文件系统
以下解决方法适用于文件环境。
验证在 OS 服务器的 /etc/nsswitch.conf 文件中,是否将 files 列为 hosts、ethers 和 bootparams 的第一个源。
检验客户机的 IP 地址是否出现在 /etc/inet/hosts 文件中。
如果所运行的版本低于 Solaris 10 8/07 发行版,则还必须检验客户机的 IP 地址是否出现在 /etc/inet/ipnodes 文件中。
在此 Oracle Solaris 发行版中,/etc/inet/hosts 文件是一个既包含 IPv4 项又包含 IPv6 项的文件。无需在始终要求同步的两个 hosts 文件中维护 IPv4 项。为了实现向后兼容性,/etc/inet/ipnodes 文件已使用指向 /etc/inet/hosts 文件的同名符号链接替代。有关更多信息,请参见 hosts(4) 手册页。
验证客户机的以太网地址是否出现在 /etc/ethers 文件中。
验证 /etc/bootparams 文件是否包含客户机根目录 (/) 和交换区域的以下路径。
client root=os-server:/export/root/ client swap=os-server: /export/swap/client |
根据在添加无盘客户机时是否指定了 -x swapsize 选项,交换大小会有所不同。如果在添加无盘客户机时指定了 -x dump 选项,则将显示以下行。
dump=os-server:/export/dump/client dumpsize=512 |
根据在添加无盘客户机时是否指定了 -x dumpsize 选项,转储大小会有所不同。
验证 OS 服务器的 IP 地址是否出现在 /export/root/ client/etc/inet/hosts 文件中。
OS 服务器无法执行以下操作:
对客户机 RARP 请求进行响应
对客户机 bootparam 请求进行响应
挂载无盘客户机根目录 (/) 文件系统
以下解决方法适用于名称服务环境。
验证 OS 服务器和客户机的以太网地址和 IP 地址是否正确映射。
验证 /etc/bootparams 文件是否包含客户机根目录 (/) 和交换区域的路径。
client root=os-server:/export/ root/client swap=os-server:/export/ swap/client swapsize=24 |
根据在添加无盘客户机时是否指定了 -x swapsize 选项,交换大小会有所不同。如果在添加无盘客户机时指定了 -x dump 选项,则将显示以下行。
dump=os-server:/export/dump/ client dumpsize=24 |
根据在添加无盘客户机时是否指定了 -x dumpsize 选项,转储大小会有所不同。
无盘客户机发出警告音
解决方法:验证以下设置:
OS 服务器的以太网地址是否正确映射到其 IP 地址。如果通过物理方式将系统从一个网络移至另一个网络,可能会忘记重新映射系统的新 IP 地址。
客户机的主机名、IP 地址和以太网地址不在同一子网上的另一台服务器的数据库中,该子网用于对客户机的 RARP、琐碎文件传输协议 (Trivial File Transfer Protocol, TFTP) 或 bootparam 请求进行响应。通常,将测试系统设置为从安装服务器安装其 OS。在此类情况下,安装服务器对客户机的 RARP 或 bootparam 请求进行应答,返回错误的 IP 地址。这个错误的地址可能会导致下载引导程序时出现错误的体系结构,或导致挂载客户机的根目录 (/) 文件系统失败。
传送错误引导程序的安装服务器(或以前的 OS 服务器)不会对无盘客户机的 TFTP 请求进行应答。如果引导程序具有不同的体系结构,则客户机会立即发出警告音。如果引导程序从非 OS 服务器装入,则客户机可能会从非 OS 服务器获取其根目录分区,而从 OS 服务器获取其 /usr 分区。在这种情况下,如果根目录和 /usr 分区的体系结构或版本发生冲突,客户机就会发出警告音。
如果同时使用安装服务器和 OS 服务器,请验证以下项是否存在于 /etc/dfs/dfstab 文件中:
share -F nfs -o -ro /export/exec/Solaris_version- \ instruction-set.all/usr |
其中,version=8、9、10,instruction-set=sparc 或 i386。
验证无盘客户机的根目录 (/)、/swap 和 /dump(如果指定)分区是否具有共享项:
share -F nfs -o rw=client,root=client /export/root/client share -F nfs -o rw=client,root=client /export/swap/ client share -F nfs -o rw=client,root=client /export/dump/ client |
在 OS 服务器上,键入以下命令,以检查共享文件:
% share |
OS 服务器必须共享添加无盘客户机时指定的 /export/root/client 和 /export/swap/client-name(缺省值),或根目录、/swap 和 /dump 分区。
验证以下项是否存在于 /etc/dfs/dfstab 文件中:
share -F nfs -o ro /export/exec/Solaris_version- instruction-set.all/usr share -F nfs -o rw=client,root=client /export/root/ client share -F nfs -o rw=client,root=client /export/swap/ client |
OS 服务器没有对无盘客户机的 RARP 请求进行响应。
解决方法:从客户机的专用 OS 服务器中,以超级用户身份 (root) 使用客户机的以太网地址运行 snoop 命令:
# snoop xx:xx:xx:xx:xx:xx |
引导程序将下载,但在该过程的早期阶段发出警告音
解决方法:使用 snoop 命令验证专用的 OS 服务器是否正在对客户机的 TFTP 和 NFS 请求进行应答。
问题:无盘客户机挂起。
解决方法:在 OS 服务器上重新启动以下守护进程:
# /usr/sbin/rpc.bootparamd # /usr/sbin/in.rarpd -a |
服务器对无盘客户机的 RARP 请求的响应不正确
解决方法:在 OS 服务器上重新启动以下守护进程:
# /usr/sbin/rpc.bootparamd # svcadm enable network/rarp |