第十一章 安装RPM包或者安装源代码包

windows下安装一个软件非常轻松,仅仅要双击.exe的文件,安装提示连续下一步就可以,然而linux系统下安装一个软件似乎并不那么轻松了,由于我们不是在图形界面下所以你要学会怎样在linux下安装一个软件

在前面的内容中多次提到的yum,这个yumRedhat所特有的安装RPM程序包的工具,使用起来相当方便由于使用RPM安装某一个程序包有可能会由于该程序包依赖还有一个程序包而无法安装而使用yum工具就能够连同依赖的程序包一起安装当然CentOS相同能够使用yum工具。并且在CentOS中你能够免费使用yum。但Redhat中仅仅有当你付费后才干使用yum。默认是无法使用yum

在介绍yum之前先说一说RPM相关的东西

RPM工具

RPM”Redhat  Package  Manager”的缩写,依据名字也能猜到这是Redhat公司开发出来的。RPM 是以一种数据库记录的方式来将你所须要的套件安装到你的Linux 主机的一套管理程序也就是说,你的linux系统中存在着一个关于RPM的数据库,它记录了安装的包以及包与包之间依赖相关性。RPM包是预先在linux机器上编译好并打包好的文件。安装起来非常快捷可是也有一些缺点。比方安装的环境必须与编译时的环境一致或者相当;包与包之间存在着相互依赖的情况;卸载包时须要先把依赖的包卸载掉。假设依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃

假设你的光驱中还有系统安装盘的话,你能够通过”mount /dev/cdrom /mnt”命令把光驱挂载到/mnt文件夹下。那么你会在/mnt/CentOS文件夹下看到非常多.rpm的文件。这就是RPM包了

[image]

每个rpm包的名称都由”-“”.”分成了若干部分就拿 a2ps-4.13b-57.2.el5.i386.rpm 这个包来解释一下,a2ps 为包名;4.13b则为版本号信息;57.2.el5为公布版本号号;i386为运行平台当中运行平台常见的有i386, i586, i686, x86_64 ,须要你注意的是cpu眼下是分32位和64位的,i386,i586i686都为32位平台,x86_64则代表为64位的平台另外有些rpm包并没有写具体的平台而是noarch,这代表这个rpm包没有硬件平台限制比如 alacarte-0.10.0-1.fc6.noarch.rpm 。以下介绍一下rpm经常使用的命令

1)安装一个rpm

[image]

-i :安装的意思

-v :可视化

-h :显示安装进度

另外在安装一个rpm包时经常使用的附带參数有:

--force 强制安装,即使覆盖属于其它包的文件也要安装

--nodeps 当要安装的rpm包依赖其它包时,即使其它包没有安装,也要安装这个包

2)升级一个rpm

rpm -Uvh  filename    -U :即升级的意思

3)卸载一个rpm

rpm -e  filename  这里的filename是通过rpm的查询功能所查询到的,稍后会作介绍

[image]

卸载时后边跟的filename和安装时的是有差别的上面命令提到的 “|”linux系统中用的非常多也非常实用。它是一个管道符。用来把前面运行的结果传递给后面的命令以后会做具体介绍。而后出现的grep命令则是用来过滤某个关键词的工具,在兴许章节中会做具体介绍

4)查询一个包是否安装

rpm  -q  rpm包名(这里的包名,是不带有平台信息以及后缀名的)

[image]

假设加上了平台信息以及后缀名反而不能查出来你还能够查询当前系统中所安装的全部rpm

[image]

由于太多。所以笔者列出前十个

5)得到一个rpm包的相关信息

rpm  -qi  包名 (相同不须要加平台信息与后缀名)

[image]

6)列出一个rpm包安装的文件

rpm -ql  包名

[image]

通过上面的命令能够看出vim是通过安装vim-enhanced-7.0.109-6.el5这个rpm包得来的那么反过来怎样通过一个文件去查找是由安装哪个rpm包得来的?

7)列出某一个文件属于哪个rpm

rpm  -qf  文件的绝对路径

[image]

前面讲过怎样查找一个文件(可运行命令)的绝对路径

[image]

所以你也能够把这两条命令连起来写

[image]

看到了吗。which vim 这条命令是由两个反引號引起来的,这代表引用反引號里面的命令所产生的结果关于rpm工具的使用还有非常多内容。笔者就不一一列举了。仅仅要你掌握上面这些内容。全然够你平时工作用的了

yum工具

介绍完rpm工具后,还须要你掌握最经常使用的yum工具,这个工具比rpm工具好用多了,当然前提是你使用的linux系统是支持yum。yum最大的优势在于能够联网去下载所须要的rpm包。然后自己主动安装,在这个project中假设要安装的rpm包有依赖关系,yum会帮你解决掉这些依赖关系依次安装全部rpm

以下笔者介绍经常使用的yum 命令

1 列出全部可用的rpm  “yum list “

[image]

限于篇幅。笔者仅仅列举出来前7个包信息从上例中能够看到有”mirrors.163.com”信息出现。这是在告诉用户。它是从mirrors.163.com这里下载到的rpm包资源假设你使用的是CentOS则你能够从/etc/yum.repos.d/CentOS-Base.repo这个文件下看到相关的配置信息

从上面的样例中你还能够看到最左側是rpm包名字。中间是版本号信息,最右側是安装信息,假设安装了就显示installed。未安装则显示base或者extras,假设是该rpm包已安装但须要升级则显示updates。

2)搜索一个rpm  “yum search  [相关关键词]”

[image]

除了这样搜索外,笔者经常使用的是利用grep来过滤

[image]

相信你也会喜欢用后者吧。这样看起来简明的多

3)安装一个rpm “yum install  [-y]  [rpm包名]”

假设不加-y选项,则会以与用户交互的方式安装。首先是列出须要安装的rpm包信息。然后会问用户是否须要安装,输入y则安装。输入n则不安装而笔者嫌这样太麻烦。所以直接加上-y选项。这样就省略掉了问用户是否安装的那一步[image]

4)卸载一个rpm “yum remove  [-y]  [rpm包名]”

[image]

卸载和安装一样,你也能够直接加上-y选项来省略掉和用户交互的步骤在这里笔者要提醒你一下。卸载某个rpm包一定要看清楚了,不要连其它重要的rpm包一起卸载了,以免影响正常的业务

4)升级一个rpm “yum  update [-y]  [rpm]”

[image]

以上介绍了怎样使用yum搜索安装卸载以及升级一个rpm包,假设你掌握了这些那么你就已经能够解决日常工作中遇到的与rpm包相关问题了

当然yum工具还有好多其它好用的命令,笔者不在列举出来,假设你感兴趣就去man一下吧除此之外,笔者还会教你一些关于yum的小应用

使用本地的光盘来制作一个yum

有时候你的linux系统不能联网,当然就不能非常便捷的使用联网的yum源了。这时候就须要你自己会利用linux系统光盘制作一个yum

具体过程例如以下:

a.挂载光盘

[root@fortest Server]# mount -t iso9660 -o loop /dev/cdrom /mnt

b.删除/etc/yum.repos.d文件夹全部的repo文件

[root@fortest Server]# rm -rf /etc/yum.repos.d/*

c.创建新文件dvd.repo

[root@fortest Server]# vim /etc/yum.repos.d/dvd.repo

增加以下内容:

[dvd]

name=install dvd

baseurl=file:///mnt

enabled=1

gpgcheck=0

d.刷新repos,生成缓存

[root@fortest Server]#yum makecache

然后就能够使用yum命令安装你所须要的软件包了

2 利用yum工具下载一个rpm

有时,我们须要下载一个rpm包。仅仅是下载下来,拷贝给其它机器使用,前面也介绍过yum安装rpm包的时候。首先得下载这个rpm包然后再去安装,所以使用yum全然能够做到仅仅下载而不安装

a. 首选要安装 yum-downloadonly

# yum install -y yum-downloadonly.noarch

b. 下载一个rpm包而不安装

# yum install test.rpm -y --downloadonly   //这样尽管下载了。可是并没有保存到我们想要的文件夹下,那么怎样指定文件夹呢?

c. 下载到指定文件夹

# yum install test.rpm -y --downloadonly   --downloaddir=/usr/local/src

[image]

安装源代码包

事实上,在linux以下安装一个源代码包是最经常使用的,笔者在日常的管理工作中。大部分软件都是通过源代码安装的

安装一个源代码包,是须要我们自己把源代码编译成二进制的可运行文件假设你读得懂这些源代码,那么你就能够去改动这些源代码自己定义功能,然后再去编译成你想要的使用源代码包的优点除了能够自己定义改动源代码外还能够定制相关的功能,由于源代码包在编译的时候是能够附加额外的选项的

源代码包的编译用到了linux系统里的编译器,常见的源代码包一般都是用C语言开发的,这也是由于C语言为linux上最标准的程序语言

Linux上的C语言编译器叫做gcc,利用它就能够把C语言变成可运行的二进制文件所以假设你的机器上没有安装gcc就没有办法去编译源代码

你能够使用 yum install  -y  gcc 来完毕安装

安装一个源代码包。通常须要三个步骤:

1.  ./config  在这一步能够定制功能,加上对应的选项就可以。具有有什么选项能够通过”./config  --help ”命令来查看

在这一步会自己主动检測你的linux系统与相关的套件是否有编译该源代码包时须要的库。由于一旦缺少某个库就不能完毕编译

仅仅有检測通过后才会生成一个Makefile文件

2.  make   使用这个命令会依据Makefile文件里预设的參数进行编译。这一步事实上就是gcc在工作了

3.  make install  安装步骤,生成相关的软件存放文件夹和配置文件的过程

上面介绍的3步并非全部的源代码包软件都一样的。笔者以前也以前遇到过,安装步骤并非这样,也就是说源代码包的安装并非具有一定的标准安装步骤

这就须要你拿到源代码包解压后。然后进入到文件夹找相关的帮助文档,一般会以INSTALL或者README为文件名称

所以。你一定要去看一下以下笔者会编译安装一个源代码包来帮你更深刻的去理解怎样安装源代码包

1. 下载一个源代码包

[image]

这里要提一下。建议以后你把全部下载的源代码包放到/usr/local/src/文件夹下,这个并非必须的。仅仅是一个约定方便你和你的同事将来更好的去运维这台server

wget即为下载的命令。后边跟源代码包的下载地址该地址为笔者从网上找的一个apache的下载地址

2. 解压源代码包

[image]

一般的源代码包都是一个压缩包,怎样解压一个.tar.gz的包上一章讲过的

3. 配置相关的选项。并生成Makefile

[image]

使用./config  --help 能够查看可用的选项

一般经常使用的有”--prefix=PREFIX “ 这个选项的意思是定义软件包安装到哪里到这里,笔者再提一个小小的约定,通常源代码包都是安装在/usr/local/文件夹下的比方,我们把apache安装在/usr/local/apache2下。那么这里就应该这样写” --prefix=/usr/local/apache2”。其它还有好多选项。假设你有耐心你能够挨个去看一看都有什么作用

[image]

笔者在这里仅仅定义了apache的安装文件夹,其它都是默认回车后,開始运行check操作

[image]

check结束后生成了Makefile文件

[image]

除了查看有没有生成Makefile文件来判定有没有完毕./config 的操作外。还能够通过这个命令”echo $?”来判定,假设是0,则表示上一步操作成功完毕,否则就是没有成功

[image]

4.  进行编译

[image]

这一步操作,就是把源代码编译成二进制的可运行文件,这一步也是最漫长的一步。编译时间的长短取决于源代码的多少和机器配置

5.  安装 

[image]

在安装前,先确认上一步操作是否成功完毕

[image]

make install 会创建对应的文件夹以及文件

当完毕安装后,会在/usr/local文件夹下多了一个apache2文件夹,这就是apache所安装的文件夹了

[image]

事实上在日常的源代码安装工作中。并非每个都像笔者这样顺利完毕安装的,遇到错误不能完毕安装的情况是非常多的通常都是由于缺少某一个库文件导致的这就须要你细致琢磨报错信息或者查看当前文件夹下的config.log去得到相关的信息另外,假设自己不能解决那就去网上google一下吧,通常你会得到你想要的答案