RedHat linux下软件包安装方法通常有以下三种。
rpm方式安装,rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便进行软件的校验、安装、查询、卸载、升级等工作。但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。
yum安装,Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
编译安装,编译安装源码包在某些情况下是必须的,如定制安装包的各种属性,优化软件
的运行环境,添加额外的功能模块等,也是比较常用的一种安装形式。编译安装需要相应的编译环境。Linux下的编译器如gcc、g++。
rpm包分为源码rpm和二进制rpm包,二进制的rpm包可以直接安装,源码rpm需经过编译再生成rpm包。rpm来源有系统安装光盘以及各社区发行版的网站,常用的有:
http://mirrors.sohu.com
http://rpmfind.net
http://rpm.pbone.net/
rpm包通常表现为:Program-version-release.arch.[src].rpm
Program软件包名称
version软件包版本号
releaserpm的修订号,有时会包含支持的OS,el5:rhel5
arch系统平台类型,getconf LONG_BIT可以获取系统平台的位数
src表明此rpm包需要再编译安装。
如:zsh-4.2.6-3.el5.i386.rpm
rpm命令常用选项:
rpm
安装:
-i--install 跟完整包名,安装软件包
-v\-vv\-vvv 显示详细信息
-h 以#显示进度
[root@localhost ~]# rpm -ivh jzlib-1.0.7-4jpp.1.i386.rpmPreparing... ########################################### [100%] 1:jzlib ########################################### [100%] --nodeps 忽略依赖关系(不推荐,安装后可能不正常工作)[root@localhost Server]# rpm -ivh anthy-devel-7900-4.el5.i386.rpmerror: Failed dependencies: anthy = 7900-4.el5 is needed by anthy-devel-7900-4.el5.i386 libanthy.so.0 is needed by anthy-devel-7900-4.el5.i386 libanthydic.so.0 is needed by anthy-devel-7900-4.el5.i386 libanthyinput.so.0 is needed by anthy-devel-7900-4.el5.i386[root@localhost Server]# rpm -ivh anthy-devel-7900-4.el5.i386.rpm --nodepsPreparing... ########################################### [100%] 1:anthy-devel ########################################### [100%] --replacepkgs 重新安装 [root@localhost Server]# rpm -ivh zsh-4.2.6-3.el5.i386.rpmPreparing... ########################################### [100%] package zsh-4.2.6-3.el5.i386 is already installed[root@localhost Server]# rpm --replacepkgs zsh-4.2.6-3.el5.i386.rpmrpm: only installation, upgrading, rmsource and rmspec may be forced[root@localhost Server]# rpm -ivh --replacepkgs zsh-4.2.6-3.el5.i386.rpmPreparing... ########################################### [100%] 1:zsh ########################################### [100%] --test 测试安装,不会安装到系统中[root@localhost Server]# rpm -ivh anthy-devel-7900-4.el5.i386.rpm --testerror: Failed dependencies: anthy = 7900-4.el5 is needed by anthy-devel-7900-4.el5.i386 libanthy.so.0 is needed by anthy-devel-7900-4.el5.i386 libanthydic.so.0 is needed by anthy-devel-7900-4.el5.i386 libanthyinput.so.0 is needed by anthy-devel-7900-4.el5.i386
卸载:
-e跟程序名(下同,非完整包名)进行卸载
查询:
-q跟程序名,查询此软件有没有安装
-qa查询所有安装的软件包,配合通过管道送给grep进行模糊查询
-ql跟程序名,查询此软件包生成的文件列表
-qf跟文件名,查询此文件是哪个软件包生成的
-qc跟程序名,此软件生成的配置文件
-q --scripts跟程序名,查询此包安装时执行的脚本
-qd跟程序名,查询此软件的帮助文档
-qi跟程序名,查询此软件的简要信息
升级:
-U跟完整包名,没有此软件直接安装,有就升级
-F跟完整包名,只是升级
校验:
-V跟程序名,检查程序生成的文件的属性有没有改动
-K跟完整安装包名,对软件的来源的合法性和软件的完整性进行校验需事先
导入GPG-KEY
导入系统安装光盘上的GPG-KEY:[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release导入其他软件源的GPG-KEY:[root@localhost ~]# rpm --import http://mirror.sohu.com/fedora-epel/RPM-GPG-KEY-EPEL-5[root@localhost Server]# rpm -K zsh-4.2.6-3.el5.i386.rpmzsh-4.2.6-3.el5.i386.rpm: (sha1) dsa sha1 md5 gpg OK[root@localhost Server]# rpm -K --nodigest zsh-4.2.6-3.el5.i386.rpmzsh-4.2.6-3.el5.i386.rpm: (sha1) dsa gpg OK[root@localhost Server]# rpm -K --nosignature zsh-4.2.6-3.el5.i386.rpmzsh-4.2.6-3.el5.i386.rpm: sha1 md5 OK
生成、重建数据库:
--initdb新建rpm数据库,位于/var/lib/rpm,用以存储软件包的属性以及依赖关系等内容。
--rebuilddb重建rpm数据库(当数据库发生损坏时重建)
源码格式的rpm:
src格式rpm通过使用rpmbuild根据spec文件对数据包进行编译来生成二进制类型的rpm包
具体步骤:(系统平台:RHEL6 x86_64 )
[root@station117 ~]# rpm -ivh nginx-1.0.15-5.el6.src.rpm[root@station117 ~]# cd rpmbuild/[root@station117 rpmbuild]# rpmbuild -ba SPECS/nginx.spec[root@station117 rpmbuild]# rpm -ivh /RPMS/x86_64/nginx-1.0.15-5.el6.x86_64.rpm[root@station117 rpmbuild]# service nginx start[root@station117 rpmbuild]# netstat -tnl | grep 80tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 在安装过程中会遇到软件依赖的问题,用yum来解决比较方便,yum在后面有介绍:部分安装包的下载路径:http://125.39.91.76:1234/sources/GeoIP-1.4.8-1.el6.x86_64.rpmhttp://125.39.91.76:1234/sources/GeoIP-devel-1.4.8-1.el6.x86_64.rpmhttp://125.39.91.76:1234/sources/httpd-2.2.25.tar.bz2http://125.39.91.76:1234/sources/nginx-1.0.15-5.el6.src.rpm
yum:
使用yum之前需要先设置yum仓库,yum仓库可以是本地文件夹也可以是其他的文件服务器
设置yum仓库的配置文件在/etc/yum.repos.d/下有repo为后缀的文件
[mycd] ----------> 仓库idname=My CD ------------> 仓库名称baseurl=file:///media/cdrom/Server ----------> 仓库位置enabled=1 -------------> 启用此仓库gpgcheck=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release ----> 验证软件包来源合法性以及包的完整性。[Mirror.sohu]name=Mirror.sohu.combaseurl=http://mirror.sohu.com/centos/5/os/$basearch/ 由于rhel5和centos5兼容,所以rhel5也可以用centos5的yum源,sohu上是5而不是5Server,所以只能写5了。如果是其他版本就直接写数字。enabled=1gpecheck=0gpgkey=http://mirror.sohu.com/centos/5/os/$basearch/RPM-GPG-KEY-CentOS-5[fedora-epel]name=fedora-epelbaseurl=http://mirror.sohu.com/fedora-epel/5/$basearch/enabled=1gpgcheck=0gpgkey=http://mirror.sohu.com/fedora-epel/RPM-GPG-KEY-EPEL-5yum.conf中的变量:$releasever:代表发行版本的版本号。如果系统是fedora core 6的话,则返回6,rhel$basearch:显示基本架构类型。如果系统为i386或i686等,则均返回i386[root@localhost work]# yum list allLoaded plugins: rhnplugin, securityThis system is not registered with RHN.RHN support will be disabled.http://mirror.sohu.com/centos/5Server/os/i386/repodata/repomd.xml: [Errno 14] HTTP Error 404: Not FoundTrying other mirror.出错的原因是yum变量$releasever在替换时成了5Server,而mirror.sohu.com上的目录为5.改成5之后,更新成功。
/etc/yum.conf文件详解[main]cachedir=/var/cache/yum ----> yum更新软件时的缓存目录keepcache=0 ----> 是否保存曾经安装过的包的源程序,0表示不保存。debuglevel=2 -------> debug信息输出等级,范围为0-10,缺省为2logfile=/var/log/yum.log ---> 存放系统更新软件的日志pkgpolicy=newest -----> 包的策略。有两个选项,newest和last,如果设置了多个repository,而同一软件在不同的repository中同时存在,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将仓库id以字母表排序,并选择最后的那个 仓库的软件安装。默认选newest。distroverpkg=redhat-release ---> yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。tolerant=1#如果值为1,则yum会忽略任何的有关包的错误。举例来说,当执行yum来安装baz时,如果baz包已经安装在系统中了,则yum会继续重复安装baz,而不会报错。默认值为1。exactarch=1 ------> 设置为1,则yum只会安装和系统架构匹配的软件包,如,yum不会将i686的软件包安装在适合i386的系统中。默认为1retries=20 -------> 网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认值为6obsoletes=1 -------> 此选项在进行发行版跨版本升级的时候会用到。gpgcheck=1 -----------> gpg校验。这个选项如果设置在[main]部分,则对每个repository都有效。默认值为0.
创建本地源:
把rpm包放在一个目录中,使用createrepo命令生成repodata,repodata中包含软件的属性信息和依赖性等信息,如果将系统光盘中的软件包拷出来做一个源的话,建议使用-g选项生成软件包组的信息,便于使用yum groupinstall “组名”进行安装。
1、首先安装createrepo软件[root@localhost work]# yum install createrepoLoaded plugins: rhnplugin, securityThis system is not registered with RHN.RHN support will be disabled.mycd | 1.3 kB 00:00 Setting up Install ProcessResolving Dependencies--> Running transaction check---> Package createrepo.noarch 0:0.4.11-3.el5 set to be updated2、创建repodata信息:[root@localhost ~]# createrepo xen-4.128/28 - xen-debuginfo-4.1.2-13.el6.x86_64.rpm Saving Primary metadataSaving file lists metadataSaving other metadata3、在/etc/yum.repos.d/下新建一个文件xen.repo,添加如下内容:[Xen]name=localhost xenbaseurl=file:///root/xen-4.1/enabled=1gpgcheck=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release (系统安装盘上的GPG-KEY)4、以后就可以用yum install xen来安装了。
yum 常用选项:
yum
安装:
install 跟程序名,可模糊匹配,安装软件
localinstall 跟完整包名,从本机目录安装软件包
groupinstall 安装某个组件的全部软件包,可事先用yum grouplist查看可用包组
更新:
update 跟程序名,更新所选软件
check-update 列出所有可更新的软件包
list updates 查找可用的更新
update 更新所有可更新的软件包(慎用)
groupupdate 跟组名,更新某个组件的所有软件包
查询:
list all列出所有已安装和仓库中可用的软件包
list available 列出仓库中所有可用的软件包
list updates 列出仓库中比当前系统更新的软件包
list installed 列出已安装的软件包
list recent 列出新加入仓库的软件包
info 跟程序名,查询软件包信息
whatprovides 跟文件名,查询此文件时哪个软件生成的
卸载:
remove跟程序名,卸载软件包
groupremove 跟组名,删除某个组件的全部软件包
清除信息:
clean packages清除遗留在缓存里的包文件
clean metadata 清除遗留在缓存里的元数据
clean headers 清除遗留在缓存里的头文件
clean all 清除包文件,元数据,头文件