-
写在前面
-
常见的计算机硬件平台大致可以为分:x86、x86_64、amd64、ppc、arm、aarch64。软件平台,在Linux界则是指不同的Linux发行版。
-
Linux系统中的软件(非源码)由于都是在不同的硬件+软件平台开发编译完成之后发布的,因此同一个软件会区分硬件和软件环境而有不同的软件包。在安装软件时应该选择与自己的硬件和软件平台一致的软件包进行安装。通常在软件包的名称中即可见到所针对的硬件、软件平台的描述。如
openssh-6.6.1p1-22.el7.x86_64
,则是针对x86_64位硬件下的rhel系的软件包。 -
Linux系统中的软件,很多软件彼此之间有依赖关系,其实Windows下的软件也是如此,因此在安装某软件时,被它所依赖的软件需要先行安装,在卸载时也需要同样小心软件间的依赖关系,避免盲目卸载而对其它软件造成损坏。
-
Linux系统中的软件安装及管理方式在不同的Linux发行版中的方式是不一样的。目前比较主流的方式按照发行版的不同可以分为两类:
-
dpkg
这种方式主要适用于Debian系的Linux发行版使用,包括B2D和Ubuntu都使用这种方式。dpkg这种方式所使用的操作指令为dpkg
。 -
rpm
这种方式是由著名的Linux发行厂商Red Hat开发出来的,后来被很多Linux发行版所采用,如Fedora,CentOS,SuSE等。rpm这种方式所使用的操作指令为rpm
。这两种方式的共同点就是,其所使用的软件包是已经经过编译的了,不需要我们手动在去进行编译操作。
-
软件间的依赖关系
在这些已经编译好的软件包中包含了记录依赖关系等信息。当我们在Linux系统中安装这些软件包时,RPM程序会根据这一信息去查找系统中是否已安装相应软件,如果发现依赖软件没有安装,安装会失败,也可以使用特定安装选项--nodeps
忽略依赖关系,然后将软件包安装上去,但非常不建议这么使用,除非明确知道所忽略的内容,对软件的使用毫无影响。
上文提到了RPM包会查找系统已安装了哪些RPM包的软件,这一查找过程依赖于RPM数据库,在CentOS系统中这一数据库位于/var/lib/rpm
目录中,它非常重要,记录了系统上所有通过rpm方式安装的软件包信息。在对系统已安装的rpm软件进行安装、升级、查询、卸载操作时都依赖于这个数据库。
大致总结一下,使用rpm包安装软件,需要注意以下两点: -
安装软件包的环境需要与该软件包编译时的环境一致。
-
需要解决好软件包的依赖关系。
-
SRPM包与RPM包
-
RPM包是指已经针对特定硬件和软件平台进行了编译的包,可以拿到与之匹配的环境中直接进行安装。其文件名一般形如:
openssh-6.6.1p1-22.el7.x86_64
。 -
SRPM包实际提供的是软件源码,包含configure和makefile,但它也同时包含了RPM软件包所能够提供的,如依赖关系说明以及所有RPM包能够提供的信息。要通过这种包来安软件,首先需要利用rpm工具进行按需编译成最终的RPM包以后,然后使用RPM工具将软件安装到系统中。其文件名一般形如:
openssh-6.4p1-8.el7.src.rpm
,名称中有src字样。
RPM工具的使用
再唠叨一次RPM工具的作用:可以用来对rpm软件包进行安装、升级、卸载、查询和检验,以及RPM数据库的维护。以下逐个讲解其常用的用法。
-
安装
指令:rpm {-i|--install} [install-options] PACKAGE_FILE ...
指令选项含义说明:-i
或者--install
表示安装后面跟的rpm软件包,但如果只使用-i
选项无法看到安装的过程及安装进程,要显示安装过程及进度将-v
和-h
选项一起使用。install-options
常用的有:--test
测试这一rpm包是否可以被安装到系统中,而不会执行真正的安装操作。--replacepkgs
对已经安装过的软件进行重新安装,修改过的配置文件不会被覆盖。--nosignature
在安装过程中不进行包签名信息和来源合法性验证。--nodigest
在安装过程中不检查包的完整性。
示例:rpm -ivh openssh-server-6.6.1p1-22.el7.x86_64
不常用的install-options
选项:--justdb
由于RPM数据库产生错误或者损坏而查询不到已安装的RPM软件包信息时,可以使用这一选项来更新其在RPM数据库中的信息。--prefix
后面跟上某一路径,可以将这一RPM软件包安装到这个路径中。--nodeps
忽略软件包之间的依赖关系。--force
强制安装,它会忽略依赖关系,以及文件的冲突情况。PACKAGE_FILE
指的是RPM软件包的完整名称及URL,软件包即在当前目录时直接使用RPM包名称即可。可以同时指定多个RPM包,即同时安装这些RPM包。 -
升级
指令:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
或者rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
指令选项含义说明:-U
当系统中没有老版本时会安装后面的RPM包,有则进行升级。-F
只有系统中有老版本时才会执行安装操作。--force
强制升级,不常用。--oldpackages
进行降级操作。
注意: -
不要对Linux内核进行升级操作,Linux支持多内核共存,直接安装新版的内核即可。
-
如果某软件包安装以后其配置文件被修改过,升级时新版本的软件包不会覆盖原配置文件,会将新的配置文件以FILENAME.rpmnew的方式提供。
-
卸载
指令:rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
指令选项含义说明:-e
表示卸载后面所跟的RPM包名,而非RPM包文件名,。--allmatches
表示卸载所有匹配指定名称软件的所有版本。--nodeps
表示不卸载与此软件有依赖关系的软件。--test
表示模拟一次卸载的过程而不真正执行卸载操作。
卸载操作需要注意,对于存在依赖关系的软件进行卸载时,要从上往下卸载,不要直接将被依赖的软件包先卸载。 -
查询
指令:rpm {-q|--query} [select-options] [query-options]
指令选项含义说明:-q
单独使用表示查询后面所跟软件包是否安装,常结合select-options或query-options一起使用。
常用的select-options:-a
查询系统中所有已安装的RPM软件包名称。-f
查询后面所跟的文件是由哪个软件安装后产生。-p
对没有安装到系统中的RPM软件包内的信息进行查询。--whatprovides CAPABILITY
查询指定的CAPABILITY是由哪个程序提供。--whatrequires CAPABILTY
查询指定的CAPABILTY被哪个包所依赖。
常用的query-options:--changelog
查询所指定的RPM包中所包含的chagelog文件的内容。-c
列出所指定的RPM包提供的配置文件。-d
列出所指定的RPM包提供的man手册及share文档。-i
列出所指定的RPM包的详细说明信息:版本,支持的架构,开发商、发布时间,安装时间和说明等。-l
列出所指定的RPM包安装后生成的所有文件和目录。--provides
列出指定的RPM包所能够提供的CAPABILTY,安装或者没有安装都可。-R
列出指定RPM包的依赖关系。--scripts
查询指定的程序包自带脚本的内容。 -
校验
指令:rpm {-V|--verify} [select-options] [verify-options]
常用选项及含义:-V
后面跟上软件名称,如果该软件所包含的文件被更改过,才会被列出来。-Va
列出系统上所有可能被更改过的软件相关文件。-Vp
后面跟RPM包的名称,查询这个包中可能被更改过的文件 。-Vf
查询某软件相关文件是否被更改过。
对于验证软件包的来源合法性,需要借助数字签名实现。使用rpm-import
指令在系统中导入RPM包制作者的公钥,然后可以使用rpm -k PACKAGE_FILE
进行验证,或者在安装时rpm工具默认会自动进行验证。 -
RPM数据库重建
指令:rpm {--initdb|--rebuilddb}
当RPM数据库出现损坏时,可以使用--rebuilddb
选项将数据库重建;如果这个数据库不存在,可以使用--initdb
重新创建一个数据库。
注意:
RPM包文件名
-
当包文件位于当前执行指令的目录时,直接使用包名,如
rpm -ivh a2ps-4.14-23.el7.i686.rpm
-
当包文件位于其它路径,然后跟上包文件名,如
rpm -ivh /media/cdrom/Packages/a2ps-4.14-23.el7.i686.rpm
。 -
当包文件 位于网络位置时,可以写:
rpm -ivh http://web.site.name/path/a2ps-4.14-23.el7.i686.rpm
RPM工具小结
-
优点
-
一般不用手动人工编译,安装难度低于源码安装方式。
-
安装之前会进行相关属性,如硬盘容量、系统版本等检查,避免软件被错误安装。
-
采用RPM数据库记录系统所有已安装软件的信息,方便软件包的管理。
-
不足
-
不能够自动解决软件包之间的依赖关系,对于依赖关系复杂的软件,其安装过程还是较繁琐。
为了解决这一不足,yum工具诞生了,yum工具的介绍及使用见下篇。
原创文章,作者:N24_lantian,如若转载,请注明出处:http://www.178linux.com/64915