一、yum如何解决rpm的依赖关系
在前面讲rpm的依赖关系时候时候我们说过,像我们安装一个x文件,它依赖于y的库,这就是没有y,x就运行不起来,但如果说y又依赖于z呢,这倒还可以接受,如果z后面还有很多呢,按一个x我们要按一串,很浪费时间。更有意思的是如果是个循环我们改怎么办?就像x依赖y,y又依赖z,而z又依赖在y,这下我们就蒙了,哪个也按不上去,使用yum可以弥补这个缺陷。
首先,yum是C/S(client ,Server)构造的,而后我们的客户端要连接到服务器上,去获得其需要。这里的服务器不完全类同于我们的web服务器或ftp服务器,它完全可以是本地的yum仓库。yum仓库是什么?就是放入我们期望用到的所有rpm包的场所或是文件服务。文件服务有三种形式,第一可以提供ftp服务器来提供服务,第二也可以提供web服务器,通过web来访问,第三甚至还可以提供本地的文件路径,因此它也可以完全是个本地文件路径。不管是那种形式,yum的工作机制是相同的。首先,yum有自己的客户端,它的工作机制是依赖于配置文件,在配置文件中,我们可以为其指定服务器在什么地方,这个服务器可以是ftp格式的或是web格式的,都行。但一定要为其指定一个文件的路径。
加入说我们安装一个x,而x又依赖于其他10个包,而这10个包中其中有8个都安装了,就剩下2个,yum自行到仓库当中去检索另外2个所需要安装的包,找到这2 个以后,也一并下载至本地,而后同时给装上。yum的工作机制实际是依赖这个yum仓库的。yum能自行解决他们之间的关系,并能够按需下载下来。
Yum所依赖的并不是某种包,实际依赖的是一种能力。而yum仓库当中存储了一个文件,这个文件列出来了当前仓库当中每一个rpm包,每一个rpm包所提供的能力,这里面都有详细说明。所以当我们用yum去安装某个文件的时候,它不是直接下到本地就行,而是结合本地的下载情况并结合仓库中列表中的信息,分析能够得出来要安装x还需要安装那几个依赖的包,因此一并将那几个包一块下载给本地。
扩展标记语言:XML:eXtended Mark Language
超文本语言:HTML: HyperText Mark Language
二、yum仓库当中的元数据文件:
primary.xml.gz:1、整个仓库所有RPM包的列表
2、包含了各包的依赖关系
3、每个RPM包能够生成的文件列表
filelists.xml.gz:
当前仓库内所有RPM包的所有文件列表:
other.xml.gz:
额外信息,RPM包的修改日志;
repomd.xml:
记录的是上面三个文件的时间戳和校验和
yum install zsh:
comps*.xml: RPM包分组信息(并且每一个组中rpm包分成三类:必须要安装的;建议安装的;可以安装的)
当我们选yum安装的时候可以一下子安装一个组,把里面的信息一下子安装上去。
三、配置yum仓库
/etc/yum.conf
将来我们要手动配置哪个文件就在/etc/yum.repos.d/下配置,而且起名为的后缀必须是.repo。不是这个的识别不出来。我们来看一下文件内容的格式。例如:我们看看rhel-debuginfo.repo的内容。
如何 用 /media/cdrom{Serve,VT,Cluster,ClusterStorage}创建yum仓库
先:cd /etc/yum.repos.d/
在:vim Sever.repo 进行编辑,类型如下
如何为yum定义repo文件
格式:
[Repo_ID]
name= :描述信息
baseurl=
ftp://(协议分隔符)仓库所指
http://
file:///(/指的是根)
enabled={0|1}0禁用1启用
gpgcheck={0|1}默认为1
gpgkey=:指定gpg准确的存放位置
如果我们Server给它定义成repo仓库,把VT也定义成repo仓库
如何自己创建yum仓库【注意:如果进行list时出现错误,我们就清除缓存一下,在进行list】
createrepo
首先我们要进入/etc/yum.repos.d下,下来我们编辑Server(vim Server)内容为(如图:)然后yum list查看。
先:cd /etc/yum.repos.d/,在安装createrepo,下来我们在yum目录下创建一个VT ,然后将/media/cdrom/VT/中的*.rpm文件全部复制到创建的VT中,然后编辑vim cdrom.repo。格式如上
可是上面可能会没有repodata,所以我们要创建,用createrepo /yum/VT,在/yum/VT下创建。
四、yum命令:
yum [options] [command][pacdkage...]
-y:自动回答yes
--nogpgcheck:不做gpg检查
list:列表
支持glob通配符的机制
all:默认
available:可用的,仓库中有但是未安装
installed:已经安装的
updates:可用的升级
clean:清除缓存[packages|headers|metadata|dbcache|all]
例如:我们只显示带有zsh*的软件包
repolist:显示repo列表及其简要信息
all:所有
enabled:只显示允许使用的(默认)
disabled:显示备用的
如果我们查看详细信息yum repolist。如图:
五、install:安装
yum install PACKAGE_NAME
update:升级(自动升级最新版本)
update_to;升级为指定版本
remove|erase:卸载
info:查询指定包的说明信息。相当于rpm –qi
provides|whatprovides:查看指定的文件或特性是由哪个包安装生成的
grouplist:列出所有组
hidden:显示隐藏的
groupwildcard:
例如:前面我们安装php53-mysql-5.3.3-5.el5.i386.rpm没有安装成功,现在我们用yum来安装。第一个方框中的就是依赖关系的包,第二个方框说明都在base中。这就是yum的好处。
如果我们把php53-mysql所依赖的包中将php53-pdo给卸载了,我们发现连php53-mysql一起卸载了。那其他两个为什么没有卸载呢?因为其他两个跟php53-pdo没关系。
如果我们用yum 如何查询指定包的说明信息,用info它和rmp 中的-qi查询的结果一样的。
如果我们想查询/etc/inittab包是由哪个包生成的。用yum provides /etc/inittab来查。
我们用先用grouplist 列出所有组,我们用yum grouplist " Development Tools"列出。(由于内容太多,不剪图)
其中有开始有个Mandotory Packages是强制安装的组,中间有个Default Packages是默认安装的,下面有Optional Packages选择安装的。
我们安装一次php53-mysql-5.3.3-5.el5.i386.rpm这个包,让大家更清楚的看看yum的好处。(由于内容太多我们之剪切了部分)红色可以看到用rpm处理不了有依赖的软件包,而用yum可以。并且这里还用到了localinstall本地安装。
如果这个包不是本地的是互联网上的包,如果不能检查这个包
如果这个包不是本地的是互联网上的包,如果不能检查这个包,这时候我们就用到了—nogpgcheck不做gpg检查。
六、RPM安装
有些特性实在编译时选定的,如果编译时未选用此特性,将无法使用
rpm包的版本将会落后于源码包,甚至落后很多:bind -9.8.7, bind-9.7.2
定制安装:手动编译安装
编译环境,开发环境
开发库,开发工具
常见的编译环境
C,C++
gcc:GNU c complier, C
g++(编译器): C++
make:项目管理工具(这个工具能够将我们的多个不同的项目文件做成一个项目,并且把这个项目的编译过程通过一个配置文件提供这个配置文件叫做makefile)
makefile:定义了make(gcc,g++)按何种次序去编译这些源程序文件中的源程序
编译安装的三个步骤
前提:准备开发环境(编译环境)
安装“Development Tools”和“Deve”
# tar
# cd
./configure
--help
--prefix=/path/to/somewhere 【软件安装的路径】
--sysconfdir=/PATH/TO/CONFFILE_PATH
功能:1、让用户选定编译特性:2、检查编译环境
#make
#make install
如果我们在服务器中下载一个软件包,这个软件包所在的位置是ftp中/pub/Sources/Tengine下的tengine-1.4.2.tar.gz我们知道这是一个压缩过的文件,所以我们要展开归档一下,tar xf tengine-1.4.2.tar.gz然后我们就查看(由于图太大,所以之剪切一部分),然后我们就用./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine。下来用#make然后#make install最后#/usr/local/tengine/sbin/nginx,就完成了。
完成后我们就用web访问以下