yum工作原理
yum是一个RPM包的前端管理工具,在rpm包的依赖关系已经被建成数据库的前提下它能够实现自动查找相互依赖的人rpm包,并从repository中下载互相依赖的rpm包到本地。
1. yum server 提供软件包,供client下载.
2. yum client 从server端下载软件包
以下就是以安装net-tools为例,client调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。从yum服务器上解析出net-tools所依赖的安装环境。从而将依赖软件包与net-tools软件包下载到client进行安装。
yum常用操作
[root@openstack ~]# yum install vim可自动安装依赖包(rpm不行)
[root@openstack ~]# yum -y install vim 无下载提示安装
[root@openstack ~]# yum list installed 列出已经安装的包
[root@openstack ~]# yum list all 列出已经安装的和可以安装的包
[root@openstack ~]# yum list installed | grep php 查询是否安装php包
[root@openstack ~]# yum remove net-tools 卸载net-tools包
[root@openstack ~]# yum info net-tools 显示已经安装包的详细信息
[root@openstack ~]# yum deplist net-tools 查询net-tools包的依赖信息
[root@openstack local_server]# yum clean all 清除缓存目录(/var/cache/yum)下的软件包及旧的headers
yum实验
实验目的
理解与使用本地源的建立过程,使用本地源安装net-tools工具。
操作步骤
一.挂载光盘文件&&将所有rpm包复制到/local_server
1.检查虚拟机光驱中是否有虚拟光盘,如果没有,先选择虚拟盘。
2.右击选择虚拟盘,图标亮起则成功
(虚拟盘相当于是充当一个虚拟的linux服务器)
3.创建新目录,用于挂载光盘镜像文件
#mkdir /media/cdrom
4.然后使用mount命令挂载光盘镜像文件到/media/cdrom/
#mount -t auto /dev/cdrom /media/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
挂载成功,以只读方式挂载
5.创建本地仓库目录(用来存放从虚拟服务器上获取到的软件包)
#mkdir /local_server
6查看虚拟光盘中有哪些文件和目录
#ls /media/cdrom
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
7.将光盘中的所有RPM软件包复制到本地仓库目录中
#cp /media/cdrom/Packages/* -rv /local_server/
二.备份所有repo文件
1.进入yum配置文件目录&&查看
#cd /etc/yum.repos.d/
#ls //下列是所有的yum配置文件
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo
CentOS-Debuginfo.repo CentOS-Sources.repo
2.在/etc/yum.repo.d/目录下新建脚本文件并执行
#vi BackupRepoFile.sh
for file in *
do
if [ "$file" !="$0" ] //"$0"代表的是该文件本身
then
mv $file{,.bak} //文件备份
fi
done
//然后保存
#sh BackupRepoFile.sh
3.验证执行是否成功(以.bak结尾的是备份文件)
#ls
BackupRepoFile.sh CentOS-Debuginfo.repo.bak CentOS-Sources.repo.bak
CentOS-Base.repo.bak CentOS-fasttrack.repo.bak CentOS-Vault.repo.bak
CentOS-CR.repo.bak CentOS-Media.repo.bak
三.创建本地源仓库(用来存放所有所有包,使之不需要再从服务器获取)
#vi local_server.repo
[local_server]
name=This is a local repo
baseurl=file:///local_server
enable=1
gpgcheck=0
四.创建yum仓库,用createrepo命令
1.进入仓库所在目录&&createrepo工具
#cd /local_server/
#rpm -ivh createrepo-0.9.9-23.el7.noarch.rpm
error: Failed dependencies:
deltarpm is needed by createrepo-0.9.9-23.el7.noarch
libxml2-python is needed by createrepo-0.9.9-23.el7.noarch
python-deltarpm is needed by createrepo-0.9.9-23.el7.noarch
返回的信息是指,有依赖的包没有安装,这里缺少三个包
读者可根据自己的环境安装缺少的rpm包。下一步即为安装所缺少的软件包。
2所需要的三个软件包都在该目录下面
#rpm -ivh deltarpm-3.6-3.el7.x86_64.rpm python-deltarpm-3.6-3.el7.x86_64.rpm libxml2-python-2.9.1-5.el7_1.2.x86_64.rpm
#rpm -ivh createrepo-0.9.9-23.el7.noarch.rpm
#createrepo -v /local_server/ //这里是所有的依赖包
3.我们可以用ls repodata/命令查看到所有包之间的依赖关系
#cd /local_server/
ls repodata/
40bac61f2a462557e757c2183511f57d07fba2c0dd63f99b48f0b466b7f2b8d2-other.xml.gz
92384ea8958855cd44d8cd6bd999548d15879afe740b604ef5ff806435777dcd-primary.xml.gz
9710c85f1049b4c60c74ae5fd51d3e98e4ecd50a43ab53ff641690fb164a6d63-other.sqlite.bz2
cfa741341d5d270d5b42d6220e2908d053c39a2d8346986bf48cee360e6f7ce8-filelists.xml.gz
d863fcc08a4e8d47382001c3f22693ed77e03815a76cedf34d8256d4c12f6f0d-filelists.sqlite.bz2
e63b5b60a4a37c6d50bc855c950f5f2b23adab400d1c2b868c6a6965803eb422-primary.sqlite.bz2
repomd.xml
五.清除缓存
#yum clean all
六.使用本地源安装net-tools
首先检查是否已安装net-tools工具。
若返回信息如下所示,表示已安装。需要先使用yum remove net-tools进行卸载。
#yum list installed | grep net-tools
net-tools.x86_64 1.60-110.el6_2 @anaconda-CentOS-201605220104.x86_64/6.8 //代表已经安装
若无返回信息,表示未安装net-tools。进行下一步
#yum install net-tools
拓展
1.使用ll /etc/yum.repos.d/命令可以看到所有的yum仓库
#ll /etc/yum.repos.d/
total 36
-rw-r--r--. 1 root root 109 Sep 29 09:15 BackupRepoFile.sh
-rw-r--r--. 1 root root 1664 Dec 9 2015 CentOS-Base.repo.bak
-rw-r--r--. 1 root root 1309 Dec 9 2015 CentOS-CR.repo.bak
-rw-r--r--. 1 root root 649 Dec 9 2015 CentOS-Debuginfo.repo.bak
-rw-r--r--. 1 root root 290 Dec 9 2015 CentOS-fasttrack.repo.bak
-rw-r--r--. 1 root root 630 Dec 9 2015 CentOS-Media.repo.bak
-rw-r--r--. 1 root root 1331 Dec 9 2015 CentOS-Sources.repo.bak
-rw-r--r--. 1 root root 1952 Dec 9 2015 CentOS-Vault.repo.bak
-rw-r--r--. 1 root root 92 Sep 29 09:27 local_server.repo
从中我们可以看到前面的仓库都已经关闭,只剩下最后一个,这个仓库就是我们当前正在使用的。
2.在/etc/yum.repos.d/目录下使用 cat CentOS-Base.repo.bak 命令可以查看到linux的四个基本仓库其中前单个是开启的,最后一个是默认关闭的
cd /etc/yum.repos.d/
cat CentOS-Base.repo.bak
CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0 //关闭状态
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
3.如果只需要查看当前启用了哪些仓库,可以使用yum repolist
#yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
local_server This is a local repo 3,723
repolist: 3,723
#cat /local_server.repo
[local_server]
name=This is a local repo
baseurl=file:///local_server
enableed=1
gpgcheck=0
相关知识
1.使用"yum repolist"可以列出你当前的yum 资源库.
#yum repolist
2.从不可用的资源库安装, 可用使用yum -enablerepo
#yum -enablerepo