2011年(27)
分类: 系统运维
2011-08-08 16:11:08
找到系统的相应版本Solaris2.5.1对应的补丁包,立即下载。一个多小时以后,补丁到了主机上。在系统临时目录/tmp下开包,进入补丁包目录2.5.1_Recommended,敲入命令 ./install-cluster,然后按照系统提示键入yes。接下去就是等待了。
按照往常的经验,我决定重新读一下补丁包附带的安装指导文件,选择一个典型补丁103663-15(in.named),阅读它的安装script文件installpatch,里面提到了错误返回码的意义。我记得,安装失败时的返回信息大致为checkinstall没有完成,返回代码为5。现在它告诉我,"5"的意思是pkgadd命令失败。这到底是什么原因呢?再回想一下安装过程,我以超级用户身份,解开补丁包,然后以超级用户身份执行安装命令,系统有充足磁盘空间,没有错误。以前的补丁安装也是同样的过程,没有出现过这种现象啊。又认真读了一遍installpatch,发现它只是按照顺序讲解了安装补丁的次序和安装脚本,并没有介绍出错误的原因。同目录下还有一个文件Install.info,发现里面是安装过程在不同系统环境下的一步一步说明,并且,对每一步可能出现的错误提示也作了讲解。 我注意到:
pkgadd: ERROR: checkinstall script did not complete successfully
对,错误提示就是这句话。文件中接下来的提示是:
The permission for the checkinstall script should not be changed.
改变checkinstall脚本的权限属性。有点儿费解。怎么改呢?在它前面的一段英文:
The checkinstall script is executed with its ownership set to
user "install", if there is no user "install" then pkgadd executes
the checkinstall script as nobody.
原来中间还有这么一段过程,还要涉及到nobody用户的权限(我的系统中当然没有install用户),文件属性还必须对nobody用户可读,这下全部明白了。
安装脚本需要以nobody用户身份运行checkinstall收集系统信息。我当前的umask(权限屏蔽位)为077,这意味着超级用户创建的文件,在缺省情况下其它所有用户都无权读、写、执行,当然nobody也无权读。root原来的umask设置为022(超级用户的文件其它用户缺省不可写),后来为了使系统文件管理更加严格,我将超级用户的umask改为了077。这才导致了两次运行补丁包安装程序执行结果的不一致。
问题的症结找到了,处理起来就简单了。回到/tmp,将解包后的文件目录全部删除。改变超级用户的umask回到022,重新解包,进入目录,执行install-cluster。一段时间过去后,我终于看到了屏幕上出现了一个又一个补丁安装成功的提示。
对于系统管理员来说,安装软件时碰到挫折是经常的事。仔细阅读软件包带来的说明文件是解决问题的有效手段。这需要管理员有较好的英语阅读能力,同时有耐心去思考,寻找出错原因。不要急着到其它人那里去寻找答案。