Linux学习笔记(11)软件包管理
Linux中的软件包分为源码包(脚本安装包)及二进制包(RPM包、系统默认包)。其中源码包的优点是:
1)源码包是开源的,如果有足够的能力,可以修改源代码;
2)可自由选择所需的功能;
3)源码包需编译安装,所以更加适合自己的系统,稳定且效率高;
4)卸载方便,只需删除安装文件目录,且不留垃圾文件。
其缺点是:
1)安装过程步骤较多,尤其安装较大的软件集合时,容易出现拼写错误;
2)编译过程时间较长,安装比二进制包长;
3)因为是编译安装,安装过程中一旦报错,新手很难解决。
二进制包的优点是:
1)包管理系统简单,只通过几个命令就可以实现包的安装、升级和卸载;
2)安装速度比源码包快的多。
缺点是:
1)经过编译,不再可以看到源代码;
2)功能选择不如源码包灵活;
3)依赖性较强。
1 rpm命令管理
(1)rpm包的命名规则
rpm包如:httpd-2.2.15-15.el6.centos.1.i686.rpm
其中,httpd是软件包名,2.2.15是软件的版本,15是软件的发布次数,el6.centos是适合的Linux平台,i686是适合的硬件平台,rpm是rpm包扩展名。
(2)rpm依赖性
树形依赖:包a依赖包b,包b又依赖包c,即a->b->c,卸载时的顺序是c->b->a。
环形依赖:如a->b->c->a,可以将a,b,c同时进行安装。
模块依赖:可以通过www.rpmfind.net网站查询模块依赖。
(3)rpm包的安装、升级与卸载
1)包全名与包名的区别
包全名:当操作的包是没有安装的软件包时,将使用包全名,而且还要注意路径。
包名:操作已经安装的软件包时,将使用包名,主要是搜索/var/lib/rpm中的数据库。
2)rpm安装,其格式为:
rpm -ivh 包全名
其中,-i表示安装(install),-v表示显示详细信息(verbose),-h表示安装进度(hash),--nodeps表示不检测依赖性,直接安装提供的包全名。
3)rpm包升级,其格式为:
rpm -Uvh 包全名
其中,-U选项表示升级(update)
4)rpm包卸载,其格式为:
rpm -e 包名
其中,-e表示卸载(erase),--nodeps表示不检查依赖性。
5)查询包是否安装,格式为:rpm -q 包名,其中-q选项表示查询(query)
查询所有已安装的rpm包,格式为:rpm -qa 包名,其中-a表示所有(all)。
6)查询软件包详细信息,格式为:rpm -qi 包名,其中-i选项表示查询软件信息(information),-p选项表示查询尚未安装的包信息(package),此时应变为包全名。
7)查询包中文件的安装位置,格式为:rpm -ql 包名,其中-l选项表示列表(list),-p选项可以查看尚未安装的包中文件打算安装在哪个目录下(package),此时应变为包全名。
8)查询系统文件属于哪一个rpm包,格式为:rpm -qf 系统文件名,其中-f选项表示系统文件,该文件必须是安装后生成的文件,自己创建的文件不能查询。
9)查询软件包的依赖性,格式为:rpm -qR 包名,其中-R表示显示软件包的依赖性(requires)。
(4)校验和文件提取
1)包校验主要是通过对比原始安装包,以检验包安装后的文件是否被修改。其格式为:
rpm -V 已安装的包名
其中-V选项表示检验(verify)。
例:修改/etc/yum.conf中的注释部分,然后进行校验。
[root@localhost Packages]# rpm -V yum S.5....T. c /etc/yum.conf
验证内容中的前8个信息的具体内容如下:
S |
文件大小是否改变 |
M |
文件的类型或文件的权限(rwx)是否被修改 |
5 |
文件MD5校验和是否被改变(可看成文件内容是否改变) |
D |
设备的代码是否改变 |
L |
文件路径是否改变 |
U |
文件的所有者是否改变 |
G |
文件的所属组是否改变 |
T |
文件的修改时间是否改变 |
之后的1信息表示文件类型,主要包含以下几种:
c |
配置文件(configure file) |
d |
普通文档(documentation) |
g |
"鬼"文档(ghost file),即该文件不应该被这个rpm包所包含 |
l |
授权文件(license file) |
r |
描述文件(readme) |
2)rpm包中文件的提取,常用于误操作,其格式为:
rpm2cpio 包全名 | cpio -idv .文件绝对路径
其中rpm2cpio命令是将rpm包转化为cpio格式的命令。cpio是标准工具,用于创建软件档案文件及从档案文件中提取文件。其格式为:
cpio 选项 [文件|设备]
其中-i选项为copy-in模式,表示还原,-d选项表示还原时自动新建目录,-v选项表示显示还原过程。
例:
rpm -qf /bin/ls #查询ls命令属于哪个软件包 mv /bin/ls /tmp/ #造成ls命令误删的假象 rpm2cpio /mnt/cdrom/Packages/coreutils-8.4--19.el6.i686.rpm | cpio -idv ./bin/ls #提取rpm包中ls命令到当前目录的/bin/ls下 cp ./bin/ls /bin/ #将ls命令复制回/bin目录,修复文件丢失
2 yum在线管理
yum主要是解决rpm包的依赖性问题。在不联网的情况下,可以将光盘作为yum源。
(1)IP地址配置
可以使用setup命令设置IP地址。设置完之后需要将网卡设置为自启动,只需将/etc/sysconfig/network-scripts/ifcfg-eth0中的ONBOOT="no"修改为"yes"即可。设置完之后,需要重新启动网络服务,执行命令service network restart。
(2)网络yum源
网络yum源保存在/etc/yum.repos.d/centos-Base.repo文件中。
[base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
文件内容具有如下类似的规则:
[base] #容器名称,一定要放在方括号"[]"中
name #容器说明,可以自己随便写
mirrorlist #镜像站点,可注释掉
baseurl #yum源服务器地址
enabled #此容器是否生效,0表示不生效,不写或1表示生效
gpgcheck #为1表示rpm的数字证书生效,为0表示不生效
gpgkey #数字证书的公钥文件保存位置,这里不用修改
(3)yum命令
注意yum命令没有包全名的概念!
1)查询所有可用软件包列表,其格式为:yum list,搜索服务器上所有与关键字相关的包,其格式为:yum search 关键字
2)yum安装的格式为:yum -y install 包名,其中install表示安装,-y选项表示自动回答yes。
3)yum升级的格式为:yum -y update 包名,其中update表示升级,-y选项表示自动回答yes。
注意:如果不加包名的话,表示将升级所有的软件包,包括linux内核。
4)yum卸载的格式为:yum -y remove/erase 包名,其中remove/erase表示卸载,注意使用yum卸载时会将所依赖的软件包也卸载掉,因此,yum升级和yum卸载尽量少用。
5)yum软件组管理命令
列出所有可用的软件组列表,其格式为:yum grouplist
安装指定软件组(组名可以由grouplist查出来),其格式为:
yum groupinstall 软件组名
卸载指定软件组,其格式为:yum groupremove 软件组名
(4)光盘yum源搭建
yum源除了可以在网络上获取,也可以通过系统安装光盘获取。在VMware中将ISO镜像加载进来,并选中"已连接",如下图所示:
接下来的步骤是:
1)挂载光盘。在/mnt目录下创建光盘挂载点cdrom,随后使用mount命令进行挂载。
[root@localhost ~]# mkdir /mnt/cdrom [root@localhost ~]# mount /dev/cdrom /mnt/cdrom mount: block device /dev/sr0 is write-protected, mounting read-only
2)使网络yum源失效,否则将自动检测网络yum源。即在/etc/yum.repos.d/目录下将相应的文件改名,仅保留CentOS_Media.repo。
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo [root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak [root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak [root@localhost yum.repos.d]# mv CentOS-Vault.repo Debuginfo.repo.bak
3)修改光盘yum源文件,需严格遵守源文件格式。
[root@localhost yum.repos.d]# vi CentOS-Media.repo [c6-media] name=CentOS-$releasever - Media baseurl=file:///mnt/cdrom/ #注意此处为自己光盘的挂载地址 # file:///media/CentOS/ #将不存在的地址注释掉 # file:///media/cdrom/ # file:///media/cdrecorder/ gpgcheck=1 enabled=1 #将0改为1,使光盘yum源配置文件生效 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
4)使用yum命令进行验证
[root@localhost yum.repos.d]# yum search zsh Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile =====================N/S Matched: zsh ============================= python-twisted-core-zsh.i686 : Tab completion for Zsh and Twisted Core zsh-html.i686 : Zsh shell manual in html format zsh.i686 : A powerful interactive shell Name and summary matches only, use "search all" for everything.
3. 源码包管理
(1)源码包与rpm包的区别
在安装之前是概念上的区别,安装后二者的安装位置不同。一般情况下,rpm包的默认安装位置如下:
/etc/ |
配置文件安装目录 |
/usr/bin/ |
可执行的命令安装目录 |
/usr/lib/ |
程序所使用的函数库保存位置 |
/usr/share/doc/ |
基本的软件使用手册保存位置 |
/usr/share/man/ |
帮助文件保存位置 |
源码包安装在指定的位置当中,一般是/usr/local/软件名/。rpm包安装的服务可以使用系统服务管理命令(service)来管理。
例:rpm包安装的apache的启动方法为:
service httpd start #使用service管理
/etc/rc.d/init.d/httpd start #使用绝对路径来启动
注意:service命令是RedHat专有,该命令将会到系统默认位置搜索相关服务。
源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中,所以只能用绝对路径进行服务的管理。
例:源码包安装的apache,使用如下方法启动:
/usr/local/apache2/bin/apachetl start
(2)源码包安装过程
安装前需要安装C语言编译器gcc,可以使用yum install gcc进行安装。然后下载apache源码包,下载地址为:http://mirror.bit.edu.cn/apache/httpd/。注意:源代码的保存位置为/usr/local/src,软件的安装位置为/usr/local。当安装过程停止,并出现error、warning或n的提示时,安装过程出现错误。
具体的安装过程如下:
1)下载源码包
2)解压缩下载的源码包,可以使用du -sh 文件名格式查询文件或文件夹大小
3)进入解压缩目录
4)查看软件自带的INSTALL文件中的安装方法。简要说明如下:
① ./configure主要用于软件配置与检查,主要执行的功能有定义需要的功能选项如安装目录,检测系统环境是否符合安装要求,把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编译。
② make 编译,如果报错可以使用make clean将已编译的文件全部清空。
③ make install 编译安装,此步骤真正向目录中写入数据。
源码包卸载时不需要卸载命令,直接删除安装目录即可,且不会遗留任何垃圾文件。
4. 脚本安装包
脚本安装包并不是独立的软件包类型,常见安装的是源码包,是人们为了把安装过程写成自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装,非常类似于windows下软件的安装方式,主要用于硬件驱动。
例:安装webmin,该软件是基于web的linux系统管理界面,可以通过图形化的方式设置用户账号、apache、DNS、文件共享等服务。其安装方法如下:
1)下载包:http://sourceforge.net/projects/webadmin/files/webmin。
2)解压缩,并进入解压缩目录。
3)执行安装脚本webmin.sh