回顾:yum程序包管理器

         (对于yum而言,他只是rpm程序包管理器的前端工具,它本身并不是取代rpm包的,他只是为rpm包管理器提供了较好的,能够基于仓库的完成所谓元数据自动分析依赖关系自动解决的工具。但是这个是强依赖与yum仓库的存在。我们知道我们yum工作的架构是C/S的。

         那么C/S架构模型意味着什么呢?

                   只要安装程序的客户端主机来讲我们称为“yum  client”我们经常用来管理系统包的工具就是yum命令,另外服务器端,其实并不是yum服务器端,但是我们可以将其称之为yum的仓库端,叫“yum  repositoryyum的仓库端需要通过一种文件共享服务,将其yum仓库中的程序包让客户端能够访问,其实这个在C/S架构模型中经常用到的协议就是(ftp/http/https)事实上他也支持nfs。也就是说我们的yum工作时,

         每一个客户端主机自己首先要有一个yum命令。这是第一点,其次我们还需要为其配置一个配置文件,这个配置文件可以是多个,放在“/etc/yum/repos.d/*.repo

         每一个repo文件中,就可以定义一个yum仓库的指向,但是也可以定义多个,

 

         每一个yum仓库的指向大体上的语法格式                                                 

                            repo

                                     [id]

                                     name=

                                     baseurl= 

                                      gpgcheck={0|1}

这个baseurl可以有多个,那么为什么有多个呢?

                   这是因为,我们的服务器在互联网上可能出现故障,我们指向的这个yum仓库如果发生故障了,那么我们客户端主机安装程序包就进行不成功了,那么这时配置多个baseurl的指向路径,其实这是根据,在互联网上,同一个仓库是存在N份的,就像我们以前说的,我们访问centos可以去aliyum的镜像,也可以去网易的镜像,或者去华中科技大的镜像,也可以去souhu镜像。其实他们所提供的的这些内容都是一样的,至于官方镜像站点来讲都是一样的,所以我们的baseurl指向163还是指向aliyun都是可以的。与其如此,我们为什么不指向两次呢。但是两次要指定的话,我们要将另个路径分隔开。

         例如:

                            baseurl=http://mirrors.aliyum.com

                                     http://mirrors.souhu.com                //注意我们将baseurl指定为多个路径时,一般是每行只写一个路径,并且从第二个开始,只写URL即可,并且一般不能顶格写URL

 

         这样的话,系统会在使用yum仓库按装程序时,会先找第一个路径,如果第一个路径出现故障,那么系统会自动的找第二个。

                   但是要注意的是,baseurl指向多个路径时,这是同一种镜像,也就是镜像中提供的程序包一摸一样,才能制定多个路径。也就是其实仅仅是不同的服务器提供罢了。

 

         注意:

对于centos的发行版来讲,无论是6还是7,至少有一个yum源叫base

                   这个base源是用来做什么的呢?

我们知道当我们在安装操作系统时,不可能也不会将整个光盘上的所有程序包全部安装上,那么当我们额外的需要安装程序包时,这个程序包就在光盘上,那么我们就将那个发行版的光盘自带的各程序包,制作成一个yum源,即yum仓库。那个仓库就叫base仓库。所以我们说的像阿里云的,搜狐的等等各镜像站点,官方定义的os目录,就是指他的,base仓库的。那个地方就是base仓库,但是就像官方语言中,除了base仓库之外,还有其他的几个重要的路径,

         extras是额外的包,附加包

         updates是升级包

事实上base就是用来专门指向这些比较著名的,而且是至少官方所提供的那些升级包,或者基础包也罢,

我们可以登入阿里云镜像来查看,我们就以centos6.8为例来查看

wKioL1g2zoqAYRn9AACz3gchoCk817.png

上面的截图中,updates:这个目录中防止的是升级的包;os:这个目录是方式表示光盘的程序包;extras:这个目录放置的额外的程序包;cloub:这个目录放置的是openstack-juno/即云环境,放置的是openstack的安装包。一般都是python研发的包。我们只有将YUM仓库指向这种cloud这种文件,我们才能安装云环境的。
        当然将来我们下载iso镜像时我们应该在上面的截图中的isos目录中。
尤其是在这里面有DVD1和DVD2两个iso合起来才能组成我的os源。我们将来拿着centos6来制作yum源的话,我们会发现isos中的DVD1包含的程序包是不全的,我们需要将DVD1和DVD2合并起来,才能组成操作系统所能提供的最基本的仓库。所以我们要想制作centos6的yum仓库的话,我们需要将两个光盘中程序包全部复制出来,然后自己对他们做createrepo.但是这种做法可能会有些问题,因为里面的分组将不复存在。所以最好我们是将他们分开去做。
        但是对于centos7来讲他也一样有这样的目录结构,我们以centos7.2为例:

wKioL1g2z1rynndsAADMi1ENpks780.png

但是对于centos7来讲他其中有一张光盘叫CentOS-7-x86_64-Everything-1511.iso 这个光盘镜像其实就是包含了两者光盘DVD1和DVD2的所有内容。并且我们也发现,到centos7版本,架构i386都不在提供了。以后的64位是一种趋势。

spacer.gif

wKioL1g2z7SAMYyuAACEiZi_zvA629.png

spacer.gif

其中:对应我们的架构平台下有很多我们的包,其中有一个“Packages”这个包其实就是对应我们的光盘,将Packages解压出来其实跟我们的光盘是一模一样的。

 

         os:其实我们说的base源,就是指这个os目录的。

 

所以对于一个操作系统,或者一个发行版来讲,无论是6或者7我们都应该将光盘作为最基本的具有的一个仓库来安装程序包。剩余的其他都是补充。

        

         C/S

                   yumclientyum

                   yum  repository ftp/http/https

 

         我们说的base这个YUM仓库由不同的服务器分别给他提供,比方说像阿里云有,搜狐有,163也有,这个时候我们为了避免指向一家的服务器网站出现故障时我们访问不到,虽然说这种情况几乎不可能发生,但是我们就是假设有一天我们指向阿里云的服务器,出现了各种各样的故障,我们访问不了了,那个这时候将我们的安装绑定在他们的服务器的稳定性上这也是一种不明智的做法。所以我们可以将baseurl指向多个位置。

         并且我们知道我们的YUM仓库的baseurl指向的是我们的repodata目录所在的路径

spacer.gif

repodata在哪,我们就将YUM仓库的路径指向repodata所在的路径。

 

 

教室环境中的可用仓库:

         centos6.7

                   http://10.1.0.1/cobbler/ks_mirror/CentOS-6-x86_64/

         centos7.2

                   http://10.1.0.1/cobbler/ks_mirror/CentOS-7-x86_64/

如果我们不在教室做实验的话,我们在安装完centos系统后,他有一个自带的CentOS-Base.repo文件,这个文件中指向的是互联网上的YUM源。而且是官方所认可的官方镜像列表。所以我们可以直接使用,没有必要手动更新他。

         所以非教室环境下,我们可以直接使用CentOS-Base.repoYUM源即可。但是这个文件中指向的路径访问的时候不一定很快就访问到,还是建议我们自己手动将阿里云这种国内的镜像放进一个文件以“.repo”结尾的文件。这样的速度还是非常的快的。

 

 

注意:一个YUM客户端,可以指向多个YUM仓库,同一个仓库可以出现多个链接。但是我们因该将其统一定义在一个baseurl或者同一个base中。那么不同的仓库应该指定不同的ID,我们给他起一个名,让他们根据彼此间不同的ID来区分。

         那么对于YUM而言,他的各种管理机制,就是通过他的子命令来实现的。

 

YUM的子命令:

         listcleanmakecach,grouplistinfowhatprovides

         installupdateremov,groupinstallgroupupdategroupremovegroupinfo

 

我们也可以自己创建仓库的:

         如果我们拿到一堆的rpm包,我们期望这些rpm是我们零零散散从搜索各种rpm包的搜索引擎搜索到的。那么这个时候我们想将这个包当yum源来使用,我们搜索我们自己下载的rpm包这些包是没有YUM仓库的。所以当我们下载以后进行安装的时候,我们只能使用rpm 命令进行安装。那么万一我们下载的这个rpm包再安装时遇到依赖我们的YUM仓库中的程序包,那么这个时候我们应该怎样解决?

                   首先我们应该有自己的base仓库,yum源指向,我们指好他就可以了,如果我们没有互联网环境,没有教室环境的话,我们直接指向我们光盘即可。使用光盘作为YUM仓库。这个时候我们将下载的rpm包扔到一个路径下,直接使用“yum  install  /PATH/TO/SOMEFILE”,就是yum  install 后面直接加的上rpm包的路径即可。

         例如使用yum安装本地的rpm包:

yum  install /usr/local/src/testapp-3.2.1-1.el7.x86_64.rpm

         那么我们为什么会使用yum命令来安装呢?

解:

         因为我们在安装的rpm包可能依赖其他的包,并且他依赖的这个包刚好在我们的    YUM仓库中,所以yum命令能够通过YUM仓库来解决这种依赖关系。

         如果我们不适用yuminstall 安装的话,我们只能使用“rpm  -ivh”来安装。这样的安装他自己是解决不了依赖关系的。也就说这个时候是可能会报错的。

 

问题:

                   如果我们安装本地包,但是我们的本地包非常多,并且彼此之间存在依赖关系,比方说们的有很多个本地包,这些本地包可能有些在YUM仓库中没有依赖关系的包,但是有的包在YUM仓库中间有依赖关系。

         那么这时候我们如果单单使用rpm-ivh来安装rpm包时,就显得特别麻烦,那么我们可以将这些多个本地rpm包,放到本地的某个路径下,然后使用createrepo处理一下,然后再自己给YUM指定一个YUM源,我们指向这个本地的路径需要使用“file:///”这就是一种比较理想的方式。我们要学会活学活用。

 

编译安装:

         主要讲的是C/C++程序语言的编译安装:

                   ./configure------>Makefiel.in=====>makefile

                            make+makefile===========>binarylibraryconfigfilemanual

                            make  install

 

         perlPythonjava这三种程序文件的编译稍微麻烦点以后在进一步的学习中在进行学习。CentOS-Base.repo