yum工作原理
yum是一個RPM包的前端管理工具,在rpm包的依賴關(guān)系已經(jīng)被建成數(shù)據(jù)庫的前提下它能夠?qū)崿F(xiàn)自動查找相互依賴的人rpm包,并從repository中下載互相依賴的rpm包到本地。
1. yum server 提供軟件包,供client下載.
2. yum client 從server端下載軟件包
以下就是以安裝net-tools為例,client調(diào)用yum install或者search的時候,都會去解析/etc/yum.repos.d下面所有以.repo結(jié)尾的配置文件,這些配置文件指定了yum服務(wù)器的地址。從yum服務(wù)器上解析出net-tools所依賴的安裝環(huán)境。從而將依賴軟件包與net-tools軟件包下載到client進行安裝。
yum常用操作
[root@openstack ~]# yum install vim可自動安裝依賴包(rpm不行)
[root@openstack ~]# yum -y install vim 無下載提示安裝
[root@openstack ~]# yum list installed 列出已經(jīng)安裝的包
[root@openstack ~]# yum list all 列出已經(jīng)安裝的和可以安裝的包
[root@openstack ~]# yum list installed | grep php 查詢是否安裝php包
[root@openstack ~]# yum remove net-tools 卸載net-tools包
[root@openstack ~]# yum info net-tools 顯示已經(jīng)安裝包的詳細信息
[root@openstack ~]# yum deplist net-tools 查詢net-tools包的依賴信息
[root@openstack local_server]# yum clean all 清除緩存目錄(/var/cache/yum)下的軟件包及舊的headers
yum實驗
實驗?zāi)康?/h4>
理解與使用本地源的建立過程,使用本地源安裝net-tools工具。
操作步驟
一.掛載光盤文件&&將所有rpm包復(fù)制到/local_server
1.檢查虛擬機光驅(qū)中是否有虛擬光盤,如果沒有,先選擇虛擬盤。
2.右擊選擇虛擬盤,圖標(biāo)亮起則成功
(虛擬盤相當(dāng)于是充當(dāng)一個虛擬的linux服務(wù)器)
3.創(chuàng)建新目錄,用于掛載光盤鏡像文件
#mkdir /media/cdrom
4.然后使用mount命令掛載光盤鏡像文件到/media/cdrom/
#mount -t auto /dev/cdrom /media/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
掛載成功,以只讀方式掛載
5.創(chuàng)建本地倉庫目錄(用來存放從虛擬服務(wù)器上獲取到的軟件包)
#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軟件包復(fù)制到本地倉庫目錄中
#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/目錄下新建腳本文件并執(zhí)行
#vi BackupRepoFile.sh
for file in *
do
if [ "$file" !="$0" ] //"$0"代表的是該文件本身
then
mv $file{,.bak} //文件備份
fi
done
//然后保存
#sh BackupRepoFile.sh
3.驗證執(zhí)行是否成功(以.bak結(jié)尾的是備份文件)
#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
三.創(chuàng)建本地源倉庫(用來存放所有所有包,使之不需要再從服務(wù)器獲取)
#vi local_server.repo
[local_server]
name=This is a local repo
baseurl=file:///local_server
enable=1
gpgcheck=0
四.創(chuàng)建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
返回的信息是指,有依賴的包沒有安裝,這里缺少三個包
讀者可根據(jù)自己的環(huán)境安裝缺少的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/命令查看到所有包之間的依賴關(guān)系
#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 //代表已經(jīng)安裝
若無返回信息,表示未安裝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
從中我們可以看到前面的倉庫都已經(jīng)關(guān)閉,只剩下最后一個,這個倉庫就是我們當(dāng)前正在使用的。
2.在/etc/yum.repos.d/目錄下使用 cat CentOS-Base.repo.bak 命令可以查看到linux的四個基本倉庫其中前單個是開啟的,最后一個是默認關(guān)閉的
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 //關(guān)閉狀態(tài)
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
3.如果只需要查看當(dāng)前啟用了哪些倉庫,可以使用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
相關(guān)知識
1.使用"yum repolist"可以列出你當(dāng)前的yum 資源庫.
#yum repolist
2.從不可用的資源庫安裝, 可用使用yum -enablerepo
#yum -enablerepo