给系统打补丁是管理员的日常工作,可是能够完整地作好可也不容易。下面这个帖子从日期上看,
应该是去年上半年写的,可对于近日的你,应该还是有所提示。
给系统打补丁是管理员的日常工作,尤其是选择了SUN工作站和Solaris以后,在获得了易用性的同时,
也将自己和"补丁(patch)""补丁包(patch-cluster)"紧紧联系在了一起。系统已经有半年多没有打
过新补丁了,然而期间报导的系统漏洞却一个接一个地不停,尤其是几个关键系统程序的安全漏洞,
像rpc.statd,automountd,rpc.ttdbserver,in.named等,并且我们的几个服务器在检查中连续出现
被攻击甚至入侵的征兆。我感到越来越不安,决定下载一个最新的补丁包给系统们升升级,也安慰安慰
自己。
事情决定以后,立刻就干了起来。打开浏览器,访问SUN公司的系统补丁专门站点http://sunsolve.sun.com,
找到系统的相应版本Solaris2.5.1对应的补丁包,一看5月27日。不错,够新,立即下载。一个多小时以后,
补丁到了我的主机上。在系统临时目录/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。一段时间过去后,我终于看到了屏幕上出现了一个又一
个补丁安装成功的提示。
对于系统管理员来说,安装软件时碰到挫折是经常的事。仔细阅读软件包带来的说明文件是解决问题的有效手
段。这需要管理员有较好的英语阅读能力,同时有耐心去思考,寻找出错原因。不要急着到其它人那里去寻找
答案。
高手是在思考和探索中诞生的。