linux的软件安装—通过RPM

2020-07-08 00:00:00 软件 编译 依赖 安装 软件包

我们知道,在linux中,安装软件有三种方法,源码、rpm/deb软件包、yum/apt这三种方式。在这里,我介绍一下用rpm安装的方法。

我们先来看看windows的安装方式。windows中,我们习惯了先弄到完整的安装文件,这个文件要么在光盘里,要么从网上下载,弄到之后,里面常常有个setup或者install的程序,点击后,就可以把整个程序安装完成了。

在linux中,也有类似的方法,它就是rpm方式。我们也是先找到rpm软件包,然后通过rpm这个命令包软件安装到系统当中,这个rpm命令就类似我们的setup或者install程序,rpm软件包就是windows中的安装文件。

为什么会出现rpm这种安装方式呢?我们知道,在包管理软件,即rpm、dpkg出现之前,主要是通过源代码的方式来安装软件。源码的安装过程是怎么样的呢?首先要找到源代码,从软件的官方网站或者github上面找到,并下载。下载到本地,通常是一个压缩包,需要先把压缩包解压开来,释放里面的源代码文件。这样就可以直接编译生成软件了吗?当然不行,在编译之前,需要通过检查系统环境,看看有没有缺少的东西,如果缺少了还要补上。环境合格后,就可以用编译工具进行编译了,编译完了,就可以把软件安装上了。如果在检查环境中缺少某个软件,也是通过源码方式安装的,几个循环下来,软件没装上,一直在编译安装依赖文件(这个又是啥?后面会解释)。此外,编译软件也是非常耗时间的,如果电脑配置不高,你吃晚饭了,软件还没有编译好呢!这个过程是不是想想都恐怖?在linux早期确实是这样,很久以前试过安装笔记本的无线网卡的驱动,就经历了这个恐怖的过程,整整搞了我几个晚上。

所以,为了解决这个问题,人们就发明了包管理工具,rpm就是其中一个这个。它的全称是Redhat Package Manager,中文意思就是红帽包管理,是由大名鼎鼎的红帽公司整出来的,所以就用自己的公司起名了。

它的原理是怎么样的呢?rpm包提起把软件的源码编译了,形成可执行文件,并且在包里面提供了软件的相关信息,比如软件名称、版本、依赖关系,并且会有一个数据库,集中管理系统中安装了的包的信息。这个是不是有点类似windows的软件管理方式呢?通过rpm包,你就可以省去了找源代码、检测软件环境、编译软件的过程了,这些东西,rpm包提前帮你完成。你只要安装就可以了。在安装的过程中,虽然也会出现依赖软件缺少的情况,但也可以通过rpm的方式来安装这些依赖文件。

在继续之前,先解释什么是依赖包。

玩PC游戏的都有这么个经历,安装windows游戏的时候,常常需要你先安装.net的框架,如果没有这个框架,那么程序就无法执行;再比如,有些游戏有时候会要求你安装DirectX或者升级你的DirectX版本,没有这个DirectX游戏是无法启动的。

不玩游戏的可以这么理解,这个依赖关系有点类似建房子时候的地基,你的房子是建在地基上面的,如果没有这个地基,人家是不会在上面建房子的。这个被依赖的包就是地基。房子就是你的软件。所以,安装的时候,一定要先解决依赖关系。

好了,我们现在正是的来看一下怎么用rmp来安装软件。

首先,我们要找到rpm包,这上哪找呢?通常可以下载每个发行版的安装光盘,在安装光盘中会有常用的软件包。也可以在网上找,网上的途径主要有:

、国内的各大开源镜像,如清华大学开源镜像、浙江大学开源镜像、阿里巴巴开源镜像、网易开源镜像等,非常的多。

第二、到发行版的网站去找,比如fedoraproject的网站koji.fedoraproject.org,suse的网站packagehub.suse.com。这个就需要根据自己的发行版来了。

我的目前用了光盘上的rpm包,截图是这样的:

这些rpm结尾的就是rpm软件包了。如果你也是通过系统光盘的形式安装,需要先用mount命令把光盘挂载到系统。

我们先来看看rpm包长的什么样子,我们随便拿一个来看看:

这里的xorg-x11-drv-xgi就是软件包的名字,1.6.1就是版本号,1.el6就是发布号,x86_64就是硬件平台,这里要特别注意的是el6和x86_64这两个东西,el6代表的是适用centos6系统,如果是el7就代表是适用centos7系统,x86_64代表是在64为系统中使用的,如果要在32系统中使用,就要用i386的,安装的时候要注意。所以,rpm的命名规则是这样的:软件名-版本号-发布号-硬件平台。

rpm的使用主要有三方面:查询、安装、卸载,我们一个个来讲。

rpm的查询

查询命令的核心是-q(即英文query的首字母)参数,后面可以加其他东西,基本上,只要带了-q就是表示查询的意思。

比如,要查询系统中安装了哪些软件:rpm -qa,截图只显示了部分

要查询某个软件包是否安装:rpm -q 软件名,比如:rpm -q vim,我安装的小版本,没有vim这个软件

比如查询某个安装包的信息:rpm -qpi 未安装的软件包,比如:

rpm -qpi vim-common-7.4.629-5.el6_8.1.x86_64.rpm,框框部分,就是rpm命名规则的部分内容

如果要查询这个软件包,会被安装到哪个位置,可以用:rpm -qpl 未安装的软件包,比如:rpm -qpl vim-common-7.4.629-5.el6_8.1.x86_64.rpm | more, 这里的"| more"使用来分页显示。

rpm的安装

安装命令的核心是-i(即英文install的首字母)参数,后面可以跟其他东西,如果直接用rpm -i 软件包名字,那么安装过程就会一闪而过,只告诉你安装结果。在windows的安装过程,我们常常可以看到进度信息,其实用rpm的安装方式也可以看到,用上vh参数就可以了,比如:rpm -ivh vim-filesystem-7.4.629-5.el6_8.1.x86_64.rpm

有时候,会提示需要依赖软件,比如:

提示需要vim-filesystem这个软件,那么我们找到这个软件,把它安装上就可以了。

rpm的卸载

卸载命令的核心是-e(即英文erase的首字母,为什么不用remove呢?)参数

这个就很简单了,rpm -e 软件名,比如卸载刚安装的vim-common,rpm -e vim-common。

如果你卸载那些被依赖的包,系统会报错:

虽然你可以通过--force参数强制删除,但不建议这么做。再想想盖房子的例子,假设房子有5层,如果你拆房子,先拆一楼,那么房子就会这个塌下来,拆的时候就会很不安全了,威胁到周围的房子。如果你从上面开始拆,5楼、4楼、3楼、2楼、1楼,这样就可以顺利的把房子拆掉。

卸载软件也一样,不能把基础依赖包删了,这样会放别的软件无法使用。拿安装游戏的例子来说,DirectX是许多游戏共用接口,如果你把这个软件包删了,再删了其中一个游戏,那么另外一个依赖这个接口的游戏就无法运行了。

好了,rpm管理软件的方式就介绍到这里,如果想详细了解可以用man手册、或者去官网。希望对你有用~

相关文章