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