rpm安装
RPM是 “Redhat Package Manager” 的缩写,根据名字也能猜到这是Redhat公司开发出来的。RPM 是以一种数据库记录的方式来将你所需要的套件安装到你的Linux 主机的一套管理程序。也就是说,你的linux系统中存在着一个关于RPM的数据库,它记录了安装的包以及包与包之间依赖相关性。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在着相互依赖的情况;卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。
如果你的光驱中还有系统安装盘的话,我们可以通过 mount /dev/cdrom /mnt 命令把光驱挂载到/mnt目录下,那么你会在/mnt/Packages目录下看到很多.rpm的文件,这就是RPM包了。
[root@localhost ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# ls /mnt
CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
[root@localhost ~]# ls /mnt/Packages/|head
acl-2.2.51-14.el7.x86_64.rpm
aic94xx-firmware-30-6.el7.noarch.rpm
aide-0.15.1-13.el7.x86_64.rpm
alsa-firmware-1.0.28-2.el7.noarch.rpm
alsa-lib-1.1.6-2.el7.x86_64.rpm
alsa-tools-firmware-1.1.0-1.el7.x86_64.rpm
atk-2.28.1-1.el7.x86_64.rpm
audit-2.8.4-4.el7.x86_64.rpm
audit-libs-2.8.4-4.el7.x86_64.rpm
authconfig-6.2.8-30.el7.x86_64.rpm
[root@localhost ~]#
每一个rpm包的名称都由 - 和 . 分成了若干部分。就拿 “abrt-cli-2.0.8-15.el6.centos.i686.rpm” 这个包来解释一下, “abrt-cli” 为包名, “2.0.8” 则为版本信息, “15.el6.centos” 为发布版本号, “i686” 为运行平台。其中运行平台常见的有i386, i586, i686, x86_64 ,需要你注意的是cpu目前是分32位和64位的,i386,i586和i686都为32位平台,x86_64则代表为64位的平台。另外有些rpm包并没有写具体的平台而是noarch,这代表这个rpm包没有硬件平台限制。例如 “alacarte-0.10.0-1.fc6.noarch.rpm”. 下面介绍一下rpm常用的命令。
安装一个rpm包
[root@localhost ~]# rpm -ivh /mnt/Packages/libjpeg-turbo-devel-1.2.1-1.el6.i686.rpm
Preparing... ########################################### [100%]
1:libjpeg-turbo-devel ########################################### [100%]
-i : 安装的意思
-v : 可视化
-h : 显示安装进度
另外在安装一个rpm包时常用的附带参数有:
--force : 强制安装,即使覆盖属于其他包的文件也要安装
--nodeps : 当要安装的rpm包依赖其他包时,即使其他包没有安装,也要安装这个包
升级一个rpm包
命令 rpm -Uvh filename
-U : 即升级的意思
卸载一个rpm包
命令 rpm -e filename
这里的filename是通过rpm的查询功能所查询到的,稍后会作介绍。
[root@localhost ~]# rpm -qa |grep libjpeg-turbo-devel
libjpeg-turbo-devel-1.2.1-1.el6.i686
[root@localhost ~]# rpm -e libjpeg-turbo-devel
卸载时后边跟的filename和安装时的是有区别的,安装时是把一个存在的文件作为参数,而卸载时只需要包名即可。
查询一个包是否安装
命令 rpm -q rpm包名 (这里的包名,是不带有平台信息以及后缀名的)
[root@localhost ~]# rpm -q libjpeg-turbo-devel
package libjpeg-turbo-devel is not installed
[root@localhost ~]# rpm -ivh /mnt/Packages/libjpeg-turbo-devel-1.2.1-1.el6.i686.rpm
Preparing... ########################################### [100%]
1:libjpeg-turbo-devel ########################################### [100%]
[root@localhost ~]# rpm -q libjpeg-turbo-devel
libjpeg-turbo-devel-1.2.1-1.el6.i686
我们可以使用 rpm -qa 查询当前系统所有安装过的rpm包,只列出前十个。
[root@localhost ~]# rpm -qa |head
得到一个已安装rpm包的相关信息
命令 rpm -qi 包名 (同样不需要加平台信息与后缀名)
[root@localhost ~]# rpm -qi libjpeg-turbo-devel
列出一个rpm包安装的文件
命令 rpm -ql 包名
[root@localhost ~]# rpm -ql libjpeg-turbo-devel
通过上面的命令可以看出文件 “/usr/lib/libjpeg.so” 是通过安装 “libjpeg-turbo-devel” 这个rpm包得来的。那么反过来如何通过一个文件去查找是由安装哪个rpm包得来的?
列出某一个文件属于哪个rpm包
命令 rpm -qf 文件的绝对路径
[root@localhost ~]# rpm -qf /usr/lib/libjpeg.so
libjpeg-turbo-devel-1.2.1-1.el6.i686
yum安装
在前面的章节中,多次提到yum工具,今天终于该讲它了。这个工具比rpm工具好用多了,当然前提是你使用的linux系统是支持yum的。yum最大的优势在于可以联网去下载所需要的rpm包,然后自动安装,在这个工程中如果要安装的rpm包有依赖关系,yum会帮你解决掉这些依赖关系依次安装所有rpm包。下面介绍常用的yum 命令。
列出所有可用的rpm包 “yum list”
[root@localhost ~]# yum list |head -n 20
mirrors.btte.net 信息出现,这是在告诉用户,它是从mirrors.btte.net这里下载到的rpm包资源。从上面的例子中你还可以看到最左侧是rpm包名字,中间是版本信息,最右侧是安装信息,如果安装了就显示类似 “@anaconda-CentOS”, “@base” 或者 “@extras”, 他们前面都会有一个 “@” 符号,这很好区分。未安装则显示base或者extras, 如果是该rpm包已安装但需要升级则显示updates. 如果你看的仔细会发现,”yum list” 会先列出已经安装的包(Installed Packages) 然后再列出可以安装的包(Available Packages)
搜索一个rpm包
命令 yum search [相关关键词]
除了这样搜索外,常用的是利用grep来过滤
[root@localhost ~]# yum list |grep 'vim'
安装一个rpm包
命令 yum install [-y] [rpm包名]
如果不加 “-y” 选项,则会以与用户交互的方式安装,首先是列出需要安装的rpm包信息,然后会问用户是否需要安装,输入y则安装,输入n则不安装。而嫌这样太麻烦,所以直接加上 “-y” 选项,这样就省略掉了问用户是否安装的那一步。
卸载一个rpm包
命令 yum remove [-y] [rpm包名]
卸载和安装一样,也可以直接加上 “-y” 选项来省略掉和用户交互的步骤。在这里要提醒一下,卸载某个rpm包一定要看清楚了,不要连其他重要的rpm包一起卸载了,以免影响正常的业务。
升级一个rpm包
命令 yum update [-y] [rpm包]
以上介绍了如何使用yum搜索、安装、卸载以及升级一个rpm包,如果你掌握了这些那么你就已经可以解决日常工作中遇到的与rpm包相关问题了。当然yum工具还有好多其他好用的命令,不再列举出来,如果你感兴趣就去man 一下吧。除此之外,还会教你一些关于yum的小应用。
源码安装
其实,在linux下面安装一个源码包是最常用的,在日常的管理工作中,大部分软件都是通过源码安装的。安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。
源码包的编译用到了linux系统里的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。所以如果你的机器上没有安装gcc就没有办法去编译源码。你可以使用 yum install -y gcc 来完成安装。
安装一个源码包,通常需要三个步骤:
1)./configure
在这一步可以定制功能,加上相应的选项即可,具有有什么选项可以通过 ./configure --help 命令来查看。在这一步会自动检测你的linux系统与相关的套件是否有编译该源码包时需要的库,因为一旦缺少某个库就不能完成编译。只有检测通过后才会生成一个Makefile文件。
2) make
使用这个命令会根据Makefile文件中预设的参数进行编译,这一步其实就是gcc在工作了。
3) make install
安装步骤,生成相关的软件存放目录和配置文件的过程。
上面介绍的3步并不是所有的源码包软件都一样的,也就是说源码包的安装并非具有一定的标准安装步骤。这就需要你拿到源码包解压后,然后进入到目录找相关的帮助文档,通常会以INSTALL或者README为文件名。所以,你一定要去看一下。下面会编译安装一个源码包来帮你更深刻的去理解如何安装源码包。
下载一个源码包
下载源码包一定要去官方站点去下载,不要在网上随便下载,那样很不安全。因为你下载到的源码包很有可能是被人修改过的。
[root@localhost src]# cd /usr/local/src/
[root@localhost src]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.27.tar.bz2
提供的下载地址为apache官方网站上提供的一个镜像,下载速度还可以。在下载之前,进入到了 “/usr/local/src” 目录,这是因为习惯把源码包都放到这个目录下,这样做的好处是,方便自己和其他管理员维护,所以给你一个建议,以后下载的源码包都统一放到这个目录下吧。
解压源码包
[root@localhost src]# tar jxvf httpd-2.2.27.tar.bz2
配置相关的选项,并生成Makefile
使用 ./configure --help 命令查看可以使用的选项。一般常用的有 --prefix=PREFIX 这个选项的意思是定义软件包安装到哪里。到这里,再提一个小小的建议,通常源码包都是安装在/usr/local/目录下的。比如,我们把apache安装在/usr/local/apache2下,那么这里就应该这样写 --prefix=/usr/local/apache2 其他还有好多选项,如果你有耐心可以挨个去看一看都有什么作用。
不幸的是,一开始就报错了,因为没有gcc编译器,需要先安装一下。
[root@localhost httpd-2.2.27]# yum install -y gcc
由于gcc依赖的包很多,所以安装时间会长一些。安装完后,再继续上面的步骤。
[root@localhost httpd-2.2.27]# ./configure --prefix=/usr/local/apache2
验证这一步是否成功的命令是:
[root@localhost httpd-2.2.27]# echo $?
返回值如果是 “0” 则执行成功,否则就是没有成功。此时就成功生成 Makefile 了。
进行编译
[root@localhost httpd-2.2.27]# make
-bash: make: command not found
又发生错误了,提示 “make” 命令没有发现,解决办法是安装make工具。
[root@localhost httpd-2.2.27]# yum install -y make
继续make
[root@localhost httpd-2.2.27]# make
编译的时候,就会出现类似这么多乱七八糟的信息,编译的时间比较长,CPU使用率会很高,这是因为CPU高速计算,编译完后,再使用 echo $? 验证一下是否正常成功。
[root@localhost httpd-2.2.27]# echo $?
如果是0的话,就可以执行最后一步了。
安装
[root@localhost httpd-2.2.27]# make install
当然你也可以使用 echo $? 看看有没有正确安装,执行完这一步,则会在 “/usr/local/apache2” 目录下增加了很多目录。
[root@localhost httpd-2.2.27]# ls /usr/local/apache2/
到此,apache源码的安装就完成了,其实在日常的源码安装工作中,并不是谁都像这样顺利完成安装的,遇到错误不能完成安装的情况是很多的。通常都是因为缺少某一个库文件导致的。这就需要你仔细琢磨报错信息或者查看当前目录下的 “config.log” 去得到相关的信息。