Linux下xxx.src.rpm软件包的安装


今天闲来无事逛逛偶手下的8大服务器,却在一台redhat服务器上发现了问题...
发现服务器上该备份的资料已经很长一段时间没有自动备份了,偶是通过crond自动执行备份脚本的~~
分别执行了一下脚本~正常...
问题有可能出在cron上身了...

#tail -n 300 /var/log/cron
查看一下cron的日志

发现cron虽然每分钟都有执行,但是全报错如下~

Jan 14 11:02:01 TECH crond[23258]: System error
Jan 14 11:03:01 TECH crond[23259]: System error
Jan 14 11:04:01 TECH crond[23260]: System error

情况十分明朗了~资料没有备份是cron在罢工了

由于从来没见过这种情况,G的人生又开始了~~

结果G了又G,还是没有一个明确的答案(耗费一个上午时间)
于是哥怒了,准备来个暴力解决
重装cron服务!

重装嘛~首先得卸载

1.查找一下和cron相关的以安装的软件包
#rpm -qa|grep cron
crontabs-1.10-7
vixie-cron-4.1-20_EL
anacron-2.3-32

cron靠两个软件包维持,分别是crontabs和vixie-cron
vixie-cron是cron的主程序
crontabs 是用来安装、卸载、执行程序的

2.彻底卸载cron
#rpm -e --nodeps
vixie-cron-4.1-20_EL
#rpm -e --nodeps crontabs-1.10-7

找到对象就好办,一个个砍掉,--nodeps是卸载时忽略软件包依赖关系,直接卸载,在redhat下尤其管用

都卸载了,却发现手上并没有cron的rpm包可供安装...唉~找吧!

---------------------------------------------------------------------

结果又花了2个小时,只找到crontabs同版本的rpm包,vixie-cron同版本的rpm包找不到...
为什么一定要找同版本的~因为不同版本rpm包依赖关系不一样,找了几个高版本和低版本的rpm包,都因为依赖问题无法正常安装~
唉~苦啊~~

这个问题必须要在被老大发现前搞定,实在是没有办法了,只能找一个同版本的源码包,即后缀名是src.rpm的包来编译安装吧!

偶下载了一个 vixie-cron-4.1-20_EL.src.rpm的软件包~

自己研究了一下src.rpm的安装方法,貌似也不是太困难~

1.了解src.rpm包
xxx.src.rpm为源码包,通过rpm -ivh执行后只会将包内容解压到/usr/src/目录,而不会自动执行安装~
一般的xxx.rpm包为编译好的二进制文件,可以在linux下直接执行安装
所以当我们手上只有src.rpm包时,我们可以将src.rpm编译成为可直接安装的二进制rpm包。



2.将src.rpm包build成标准的rpm安装包
redhat家族的操作系统可以使用下面命令build
#rpmbuild --rebuild vixie-cron-4.1-20_EL.src.rpm



如上图所示,输入命令后便自动build了~~方便之极!


3.找到新build出来的rpm包

#cd /usr/src/redhat/RPMS/i386
#ls



如图所示在i386目录下生成了一个我们最终所需要的rpm包!

很激动!


4.安装rpm包

#rpm -ivh vixie-cron-4.1-20_EL.i386.rpm
#rpm -qa|grep cron



如图所示,终于成功安装好cron所需的软件包~


重新运行cron进行测试~谢天谢地,一切正常!
Jan 20 11:02:01 TECH crond[23258]:  (run-parts /etc/cron.hourly)
Jan 20 11:02:01 TECH crond[23258]:  (run-parts /etc/cron.hourly)
Jan 20 11:02:01 TECH crond[23258]:  (run-parts /etc/cron.hourly)


所以这次收获不少:
一来解决了cron的错误问题
二来解决了src.rpm包的安装问题~

可谓一石二鸟也~~yahoo!


补充:
对xxx.src.rpm的编译还有另外一种大同小异的方法,稍微繁琐一点:

#rpm -ivh vixie-cron-4.1-20_EL.src.rpm
国际惯例先解压src.rpm包
#cd /usr/src/redhat/SPECS


如图所示经过刚才的ivh在SPECS目录生成了一个xxx.spec的文件

# rpmbuild -bb vixie-cron.spec
执行对spec文件的build命令,直至编译完成
# cd  /usr/src/redhat/RPM/i386/
进入i386目录同样可以找到编译好的二进制rpm包,直接进行安装就可以了


据了解,关于xxx.src.rpm的源代码包重新编译,还有几种方法,根据操作系统的差异,如果rpmbuild --rebuild无法执行,可以尝试一下以下命令

#rpm --recompile XXXX.src.rpm
#rpm --rebuild XXXX.src.rpm