yum最大的优势在于可以联网去下载所需要的rpm包,然后自动安装,在这个工程中如果要安装的rpm包有依赖关系,yum会帮你解决掉这些依赖关系依次安装所有rpm包。
列出所有可用的rpm包 “yum list”
[root@qiangzi ~]# yum list |head -n 10 (列出前10行)
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.yun-idc.com
* extras: mirrors.yun-idc.com
* updates: ftp.jaist.ac.jp
Installed Packages
ConsoleKit.i686 0.4.1-3.el6 @anaconda-CentOS-201311271240.i386/6.5
ConsoleKit-libs.i686 0.4.1-3.el6 @anaconda-CentOS-201311271240.i386/6.5
ConsoleKit-x11.i686 0.4.1-3.el6 @anaconda-CentOS-201311271240.i386/6.5
GConf2.i686 2.28.0-6.el6 @anaconda-CentOS-201311271240.i386/6.5
Exiting on Broken Pipe
从上面的例子中你还可以看到最左侧是rpm包名字,中间是版本信息,最右侧是安装信息,如果安装了就显示类似 “@anaconda-CentOS”, 他们前面都会有一个 “@” 符号,这很好区分。未安装则显示base或者extras, 如果是该rpm包已安装但需要升级则显示updates.
搜索一个rpm包
命令 yum list[相关关键词]
[root@qiangzi ~]# yum search vim
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.yun-idc.com
* extras: mirrors.yun-idc.com
* updates: ftp.jaist.ac.jp
==================================== N/S Matched: vim =====================================
vim-X11.i686 : The VIM version of the vi editor for the X Window System
vim-common.i686 : The common files needed by any version of the VIM editor
vim-enhanced.i686 : A version of the VIM editor which includes recent enhancements
vim-filesystem.i686 : VIM filesystem layout
vim-minimal.i686 : A minimal version of the VIM editor
Name and summary matches only, use "search all" for everything.
除了这样搜索外,还有常用的是利用grep来过滤
[root@qiangzi ~]# yum list |grep 'vim'
vim-X11.i686 2:7.4.629-5.el6_8.1 @updates
vim-common.i686 2:7.4.629-5.el6_8.1 @updates
vim-enhanced.i686 2:7.4.629-5.el6_8.1 @updates
vim-filesystem.i686 2:7.4.629-5.el6_8.1 @updates
vim-minimal.i686 2:7.4.629-5.el6_8.1 @updates
我们同样可以找到相应的rpm包。
安装一个rpm包
命令 yum install [-y] [rpm包名]
如果不加 “-y” 选项,则会以与用户交互的方式安装,首先是列出需要安装的rpm包信息,然后会问用户是否需要安装,输入y则安装,输入n则不安装。
[root@qiangzi ~]# yum install -y yum-updateonboot.noarch
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.yun-idc.com
* extras: mirrors.yun-idc.com
* updates: ftp.jaist.ac.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package yum-updateonboot.noarch 0:1.1.30-37.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Installing:
yum-updateonboot noarch 1.1.30-37.el6 base 25 k
Transaction Summary
===========================================================================================
Install 1 Package(s)
Total download size: 25 k
Installed size: 22 k
Downloading Packages:
yum-updateonboot-1.1.30-37.el6.noarch.rpm | 25 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : yum-updateonboot-1.1.30-37.el6.noarch 1/1
Verifying : yum-updateonboot-1.1.30-37.el6.noarch 1/1
Installed:
yum-updateonboot.noarch 0:1.1.30-37.el6
Complete!
这个过程中,它首先会把要安装的包列出来,如果有依赖也会把所有依赖的包列出来。然后会出一个询问,是否要安装。只有同意后输入“y”,他才会安装。
卸载一个rpm包
命令 yum remove [-y] [rpm包名]
[root@qiangzi ~]# yum remove -y yum-updateonboot.noarch
Loaded plugins: fastestmirror
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package yum-updateonboot.noarch 0:1.1.30-37.el6 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Removing:
yum-updateonboot noarch 1.1.30-37.el6 @base 22 k
Transaction Summary
===========================================================================================
Remove 1 Package(s)
Installed size: 22 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : yum-updateonboot-1.1.30-37.el6.noarch 1/1
Verifying : yum-updateonboot-1.1.30-37.el6.noarch 1/1
Removed:
yum-updateonboot.noarch 0:1.1.30-37.el6
Complete!
卸载和安装一样,也可以直接加上 “-y” 选项来省略掉和用户交互的步骤。在这里要提醒一下,卸载某个rpm包一定要看清楚了,不要连其他重要的rpm包一起卸载了,以免影响正常的业务。
升级一个rpm包
命令 yum update [-y] [rpm包]
[root@qiangzi ~]# yum update -y yum.noarch
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.yun-idc.com
* extras: mirrors.yun-idc.com
* updates: ftp.jaist.ac.jp
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package yum.noarch 0:3.2.29-40.el6.centos will be updated
---> Package yum.noarch 0:3.2.29-75.el6.centos will be an update
--> Processing Dependency: python-urlgrabber >= 3.9.1-10 for package: yum-3.2.29-75.el6.centos.noarch
--> Running transaction check
---> Package python-urlgrabber.noarch 0:3.9.1-9.el6 will be updated
---> Package python-urlgrabber.noarch 0:3.9.1-11.el6 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Updating:
yum noarch 3.2.29-75.el6.centos updates 1.0 M
Updating for dependencies:
python-urlgrabber noarch 3.9.1-11.el6 base 86 k
Transaction Summary
===========================================================================================
Upgrade 2 Package(s)
Total download size: 1.1 M
Downloading Packages:
(1/2): python-urlgrabber-3.9.1-11.el6.noarch.rpm | 86 kB 00:00
(2/2): yum-3.2.29-75.el6.centos.noarch.rpm | 1.0 MB 00:13
-------------------------------------------------------------------------------------------
Total 78 kB/s | 1.1 MB 00:14
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : python-urlgrabber-3.9.1-11.el6.noarch 1/4
Updating : yum-3.2.29-75.el6.centos.noarch 2/4
Cleanup : yum-3.2.29-40.el6.centos.noarch 3/4
Cleanup : python-urlgrabber-3.9.1-9.el6.noarch 4/4
Verifying : yum-3.2.29-75.el6.centos.noarch 1/4
Verifying : python-urlgrabber-3.9.1-11.el6.noarch 2/4
Verifying : yum-3.2.29-40.el6.centos.noarch 3/4
Verifying : python-urlgrabber-3.9.1-9.el6.noarch 4/4
Updated:
yum.noarch 0:3.2.29-75.el6.centos
Dependency Updated:
python-urlgrabber.noarch 0:3.9.1-11.el6
Complete!
以上介绍了如何使用yum搜索、安装、卸载以及升级一个rpm包,如果你掌握了这些那么你就已经可以解决日常工作中遇到的与rpm包相关问题了。
扩展
使用本地的光盘来制作一个yum源
有时候你的linux系统不能联网,当然就不能很便捷的使用联网的yum源了,这时候就需要你自己会利用linux系统光盘制作一个yum源。具体步骤如下:
a)挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt
b)删除/etc/yum.repos.d目录所有的repo文件
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
c) 创建新文件dvd.repo
[root@localhost ~]# vim /etc/yum.repos.d/dvd.repo
加入以下内容:
[dvd] name=install dvd baseurl=file:///mnt enabled=1 gpgcheck=0
d) 刷新 repos 生成缓存
[root@localhost ~]# yum makecache
然后就可以使用yum命令安装你所需要的软件包了
利用yum工具下载一个rpm包
有时,我们需要下载一个rpm包,只是下载下来,拷贝给其他机器使用,前面也介绍过yum安装rpm包的时候,首先得下载这个rpm包然后再去安装,所以使用yum完全可以做到只下载而不安装。
a)首先要安装 yum-downloadonly
[root@localhost ~]# yum install -y yum-plugin-downloadonly.noarch
如果你的CentOS是5.x版本,则需要安装yum-downloadonly.noarch这个包。
b)下载一个rpm包而不安装
[root@localhost ~]# yum install 包名 -y --downloadonly
这样虽然下载了,但是并没有保存到我们想要的目录下,那么如何指定目录呢?
c)下载到指定目录
[root@localhost ~]# yum install 包名 -y --downloadonly --downloaddir=/usr/local/src
下面阿铭下载一个rpm包:
[root@localhost ~]# yum install -y yum-presto.noarch --downloadonly --downloaddir=/usr/local/src/ Loaded plugins: downloadonly, fastestmirror, security Loading mirror speeds from cached hostfile * base: mirrors.btte.net * extras: mirrors.btte.net * updates: mirrors.btte.net Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package yum-presto.noarch 0:0.6.2-1.el6 will be installed --> Processing Dependency: deltarpm >= 3.4-2 for package: yum-presto-0.6.2-1.el6.noarch --> Running transaction check ---> Package deltarpm.i686 0:3.5-0.5.20090913git.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: yum-presto noarch 0.6.2-1.el6 base 32 k Installing for dependencies: deltarpm i686 3.5-0.5.20090913git.el6 base 73 k Transaction Summary ================================================================================ Install 2 Package(s) Total download size: 105 k Installed size: 257 k Downloading Packages: -------------------------------------------------------------------------------- Total 43 MB/s | 105 kB 00:00 exiting because --downloadonly specified [root@localhost ~]# ls /usr/local/src/ deltarpm-3.5-0.5.20090913git.el6.i686.rpm yum-presto-0.6.2-1.el6.noarch.rpm
安装源码包
其实,在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
[root@localhost src]# cd httpd-2.2.27 [root@localhost httpd-2.2.27]# ./configure --help |less `configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..']
后面的内容阿铭省略掉了,阿铭使用 ./configure --help 命令查看可以使用的选项。一般常用的有 --prefix=PREFIX 这个选项的意思是定义软件包安装到哪里。到这里,阿铭再提一个小小的建议,通常源码包都是安装在/usr/local/目录下的。比如,我们把apache安装在/usr/local/apache2下,那么这里就应该这样写 --prefix=/usr/local/apache2 其他还有好多选项,如果你有耐心可以挨个去看一看都有什么作用。
[root@localhost httpd-2.2.27]# ./configure --prefix=/usr/local/apache2 checking for chosen layout... Apache checking for working mkdir -p... yes checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking target system type... i686-pc-linux-gnu Configuring Apache Portable Runtime library ... checking for APR... reconfig configuring package in srclib/apr now checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking target system type... i686-pc-linux-gnu Configuring APR library Platform: i686-pc-linux-gnu checking for working mkdir -p... yes APR Version: 1.4.6 checking for chosen layout... apr checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/usr/local/src/httpd-2.2.27/srclib/apr': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details configure failed for srclib/apr
不幸的是,阿铭一开始就报错了,因为没有gcc编译器,需要先安装一下。
[root@localhost httpd-2.2.27]# yum install -y gcc
由于gcc依赖的包很多,所以安装时间会长一些。安装完后,再继续上面的步骤。
tcode:
[root@localhost httpd-2.2.27]# ./configure --prefix=/usr/local/apache2
验证这一步是否成功的命令是:
[root@localhost httpd-2.2.27]# echo $? 0
返回值如果是 “0” 则执行成功,否则就是没有成功。此时就成功生成 Makefile 了。
[root@localhost httpd-2.2.27]# ls -l Makefile -rw-r--r-- 1 root root 8954 5月 13 12:02 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 Making all in srclib make[1]: Entering directory `/usr/local/src/httpd-2.2.27/srclib' Making all in apr make[2]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr' make[3]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr' /bin/sh /usr/local/src/httpd-2.2.27/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -I./include -I/usr/local/src/httpd-2.2.27/srclib/apr/include/arch/unix -I./include/arch/unix -I/usr/local/src/httpd-2.2.27/srclib/apr/include/arch/unix -I/usr/local/src/httpd-2.2.27/srclib/apr/include -o passwd/apr_getpass.lo -c passwd/apr_getpass.c && touch passwd/apr_getpass.lo
编译的时候,就会出现类似这么多乱七八糟的信息,编译的时间比较长,CPU使用率会很高,这是因为CPU高速计算,编译完后,再使用 echo $? 验证一下是否正常成功。
[root@localhost httpd-2.2.27]# echo $? 0
如果是0的话,就可以执行最后一步了。
安装
[root@localhost httpd-2.2.27]# make install Making install in srclib make[1]: Entering directory `/usr/local/src/httpd-2.2.27/srclib' Making install in apr make[2]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr' make[3]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr' make[3]: Nothing to be done for `local-all'. make[3]: Leaving directory `/usr/local/src/httpd-2.2.27/srclib/apr'
当然你也可以使用 echo $? 看看有没有正确安装,执行完这一步,则会在 “/usr/local/apache2” 目录下增加了很多目录。
[root@localhost httpd-2.2.27]# ls /usr/local/apache2/ bin cgi-bin error icons lib man modules build conf htdocs include logs manual
到此,apache源码的安装就完成了,其实在日常的源码安装工作中,并不是谁都像阿铭这样顺利完成安装的,遇到错误不能完成安装的情况是很多的。通常都是因为缺少某一个库文件导致的。这就需要你仔细琢磨报错信息或者查看当前目录下的 “config.log” 去得到相关的信息。另外,如果自己不能解决那就去网上google一下吧,通常你会得到想要的答案。