一、前言
RPM安裝軟件有一個很繁瑣的問題,那就是包與包之間的依賴關係,如果想正常安裝和使用軟件程序,就必須根據要求一步一步的解決軟件之間的依賴關係。那麼如果程序使用的包很多,將會很消耗使用人的時間和精力。那麼有沒有辦法解決這一問題呢?
在RPM中我們介紹了RPM軟件會記錄軟件之間的安裝信息,其中也包括了軟件之間的依賴屬性。那麼如果我們在安裝前就分析這個列表,那麼在安裝時就能根據軟件之間的關係將所需的軟件一次性安裝起來,這樣就能解決這一問題,這就是 YUM 的機制。
二、yum的介紹
yum(Yellow dog Updater Modified)是CentOS中屬於RPM前段軟件包管理器,能從指定的服務器中下載RPM包,並自動分析和處理RPM包之間的依賴關係,最後將依次所依賴的軟件包都安裝了,而無需繁瑣的一個一個安裝。
三、yum repository:yum倉庫
yum倉庫的組成部分
3.1、數據
包含所有的軟件包文件
3.2、元數據
指的是數據文件:包括每個包的包名、版本信息、各包所包含的文件列表、包與包之間的依賴關係、包的分組信息
小擴展:元數據是怎麼來的呢?
使用createrepo工具,能夠簡潔的快速的將我們所指定的存放大量RPM包的目錄,裏面所有的RPM包信息都讀出來,分析他的依賴關係並生成元數據。所以createrepo可以理解爲它是製作yum元數據的工具。 在光盤裏其實也有這個元數據,路徑在光盤中的 [root@www mnt]# cd repodata/ 裏,然後是以 sqlite文件後綴 備註:centos5 是以 xml 後綴,centos6、7是以sqlite數據庫的方式存儲的
四、yum的配置文件介紹
yum的配置文件有2個: 主配置文件 + 倉庫配置文件
4.1、主配置文件路徑 /etc/yum.conf
[main] cachedir=/var/cache/yum/$basearch/$releasever #下載RPM包的緩存目錄 keepcache=0 #RPM緩存的程序包安裝完成後是否保存,0表示不保存,1表示保存 buglevel=2 #調試級別 取值範圍 0 - 10,默認值爲2 logfile=/var/log/yum.log #yum相關日誌存放路徑 exactarch=1 #是否要平臺完全匹配才能安裝 obsoletes=1 #需不需要檢查已過期的倉庫 gpgcheck=1 #是否檢查包的完整性和合法性 plugins=1 #是否允許支持yum的插件功能,0 表示不允許 ,1表示允許,建議允許,一般會用yum-fastestmirror這個插件 installonly_limit=5 #允許保留多少個內核包 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release #指定一個軟件包,yum 會根據這個包判斷你的發行版本,默認是redhat-release,也可以是安裝的任何針對自己發行版的rpm包
4.2、倉庫配置文件路徑 /etc/yum.repos.d/*.repo
倉庫文件可以有多個,而且一個或幾個相關的倉庫的配置信息也可保存爲一個文件,並且所以的倉庫文件名都以 .repo結尾。
[REPOID] #容器名字,必須是唯一的 name= #some name for this repository倉庫的名字,僅作一個標識 baseurl= #指定真正倉庫所在的路徑,可以指多個倉庫 #例如:baseurl=file:///media/cdrom # ftp://172.168.1.1/path #備註第二行不能頂格寫,否則會出錯 mirrorlist= #列出容器可以使用站點,如果不想使用,可以再前面加 # 註釋 enabled= {0 | 1} #指是否啓用這個倉庫,0表示不啓用,1表示啓用 gpgcheck= {0 | 1} #是否要檢測軟件包的合法性,0表示不檢測,1表示不檢查 gpgkey= #軟件包的公鑰文件所在路徑,例如:gpgkey=file:///media/cdrom/GPG-RPM-KEY-centos-6 cost= #倉庫優先級,比如一個軟件包在多個倉庫都有,那應該選擇哪個安裝呢?就是根據這個優先級,默認是100, 數字越小表示越優先使用
備註:默認各倉庫的用法:
base庫:通常爲系統發行版所提供的程序包(就是光盤) updates庫:存放更新包 extra庫:存放額外包 epel庫:epel庫文件 庫本身有優先級的,但是僅是在客戶端有,服務器端是沒有優先級的
小貼士:yum可支持多個協議,包括 ftp、http、nfs和本地文件共享服務
所以倉庫配置文件中的 baseurl 一項可以有多個寫法,下面是各寫法的格式
1)ftp 格式:ftp://server/path/to/repository
2)http 格式:http://server/path/to/repository
3)nfs 格式:nfs://server/nfs_path
4)本地文件共享服務 格式:file:///path/to/repository
五、yum安裝步驟
六、yum命令的使用
6.1、yum查詢功能
yum [option] [需要查詢的信息][參數] -y:默認yum需要是交互模式,-y表示自動提供yes響應 -q:靜默模式 search:搜索某個軟件名或關鍵字 list:列出所有yum所管理的軟件包和名稱 info:同上,也類似rpm -qai provides:查找該命令是由軟件安裝生成的,類似rpm -df的功能 repolist:列出所有可用的repo
例如:
例如:
[root@localhost yum.repos.d]# yum install zlib-static
6.2、安裝、升級、降級、卸載功能
yum [option] [需要查詢的信息][參數] install:後面接需要安裝的軟件 reinstall:後面接需要重新安裝的軟件 update:後面接需要升級到的軟件 check-update:檢查可用的升級包 downgrade:後面接需要降級到的版本 remove:卸載軟件 erase:功能同上,卸載 --disablerepo=repoid 臨時禁用此處指定的repo --enablerepo=repoid 臨時啓動此處啓用的repo --noplugins:禁用所有插件
例如:
[root@localhost yum.repos.d]# yum install zlib-static
6.3、和軟件組相關的功能
yum [組功能] [軟件組] grouplist:列出所有可使用的組列表 groupinfo:後面接group name,可用瞭解該group內含所有組的名稱 groupinstall:安裝整組的軟件 groupremove:刪除某個組的軟件
例如:
[root@localhost yum.repos.d]# yum grouplist #所有的包組未一一列舉,若想安裝某組可使用groupinstall直接安裝 Installed Groups: #已經安裝的軟件組 Additional Development Base Console internet tools Development tools Installed Language Groups: #已經安裝的語言組 Arabic Support [ar] Armenian Support [hy] Georgian Support [ka] Available Groups: #有效軟件組包文件 Backup Client Backup Server Available Language Groups: #有效的語言組包文件 Afrikaans Support [af] Albanian Support [sq]
6.4、清理緩存
yum clean { all | package | headers } all:將所有的數據刪除,包括元數據和軟件文件 package:將所有已下載的軟件文件刪除 headers:刪除所有下載的元數據文件
例如:
[root@localhost yum.repos.d]# yum clean all #這樣將會清除所有的已下載的元數據和軟件文件 Loaded plugins: fastestmirror, security Cleaning repos: base extras updates Cleaning up Everything Cleaning up list of fastest mirrors
6.5、yum歷史命令
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo] history:列出歷史事務 redo:重新執行事務 undo:撤銷事務
例如:
yum history info 15 //查看yum history id爲15 的 操作 yum history undo 15 //撤銷yum history id爲15 的 操作
日誌文件:/var/log/yum.log
6.6、yum內置變量
$releaserver
:代表系統的版本,對Yum而言指的是redhat-releaser版本,指向發行版的主版本號;只替換爲主版本號,如RedHat 6.5 ,則替換爲6
$basearch
:系統基本架構,如果是i686,i586等基本架構就爲i386
$arch
:系統架構
比如我現在的系統是CentOS6.5,系統架構是x86_64,則
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
會自動替換爲
baseurl=http://mirrors.163.com/centos/6/os/x86_64
六、如何自建yum倉庫
6.1、引言:
雖然系統自帶的倉庫已經很常用,只要連接到互聯網我們就能很容易有獲取到互聯網的yum倉庫。但是如果是在企業內網,企業內部不允許訪問互聯網,又或者如果企業服務器衆多,如果都要從互聯網去獲取yum倉庫,那將很佔用帶寬。基於這種情況,我們就需要自己在企業內部創建yum倉庫。
6.2、自建倉庫需要使用的命令介紹
createrepo(create repo):創建倉庫,在自建倉庫時,使用命令createrepo會自動幫我們生成repodata文件作爲軟件的倉庫,而其目錄下有四個必要文件:filelists.xml.gz,other.xml.gz,primary.xml.gz和repomd.xml,其中最重要的是repomd.xml文件。一般出現的找不到repodata目錄或文件的錯誤的原因通常有三個:一是路徑問題;二是沒有生成repodata目錄;三是*.repo配置文件衝突(這個需要特意注意)。
小貼士:createrepo命令默認是沒有安裝,所以我們需要提前安裝,createrepo的安裝包爲“createrepo-0.9.9-17.el6.noarch.rpm”,可以使用RPM或yum先將此程序包安裝。
安裝方法:
#yum -y install createrepo 或 rpm -ivh createrepo-0.9.9-17.el6.noarch.rpm (路徑一定要寫對)
6.3、自建yum倉庫有2種方法
1)、基於關盤鏡像創建yum倉庫
2)、根據服務自建提供yum倉庫的服務器(ftp、http、nfs)
6.4、基於關盤鏡像創建yum倉庫
6.4.1、先將光盤掛載至/mnt目錄下
mount /dev/cdrom /mnt
6.4.2、配置yum倉庫文件
[root@www yum.repos.d]# vim /etc/yum.repos.d/local-media.repo #如果local-media.repo不存在,請直接創建 [Meida-repo] name=This is Local media repo baseurl= #指向光盤鏡像路徑 enabled=1 #是否啓動該倉庫 gpgcheck=0 #是否檢查包完整性 [root@www yum.repos.d]# yum clean all #清除所有的包緩存和元數據 [root@www yum.repos.d]# yum list #列出所有的倉庫和程序包
6.5、根據服務自建提供yum倉庫的服務器(這裏以http服務爲例)
6.5.1、首先安裝http服務
yum -y install httpd 或 rpm -ivh httpd
6.5.2、關閉Linux防火牆和Selinux
#防火牆和Selinux可能會影響用戶訪問HTTP,所以這裏需要將其禁用 [root@www yum.repos.d]# service iptables stop #關閉防火牆服務 [root@localhost ~]# chkconfig iptables off #關閉防火牆自動啓動 [root@www yum.repos.d]# getenforce #查看Selinux狀態 Enforcing表示啓用 Permissive表示不啓用 Enforcing [root@www yum.repos.d]# setenforce 0 #關閉Selinux 0表示關閉 1表示開啓 [root@www yum.repos.d]# getenforce Permissive [root@localhost ~]# vim /etc/selinux/config #關閉Selinux開機啓動,編輯confg文件,將其中SELINUX字段改爲如下設置 SELINUX=disabled
6.5.3、啓動httpd服務和開機自動服務
[root@www yum.repos.d]# service httpd start #開啓httpd服務 [root@www yum.repos.d]# chkconfig on #設置httpd服務開機自動啓動 [root@localhost ~]# netstat -tunlp | grep http #查看http服務是否已啓用 tcp 0 0 :::80 :::* LISTEN 1532/httpd
6.5.4、編輯httpd的文檔目錄
#httpd默認的目錄文檔路徑爲/var/www/html [root@localhost html]# mkdir /var/www/html/rpm-repo #創建倉庫路徑 [root@localhost rpm-repo]# cp -a /mnt/Packages/xcb* /var/www/html/rpm-repo/ #拷貝RPM程序包爲測試使用
6.5.5、使用createrepo配置yum倉庫
[root@localhost rpm-repo]# createrepo /var/www/html/rpm-repo/
6.5.6、驗證和查看http倉庫的文件
6.5.7、配置和驗證yum倉庫
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/local.repo #編輯yum倉庫文件,讓倉庫路徑指向http的yum倉庫 [http-repo] name=http yum repo baseurl=http://192.168.80.150/rpm-repo enabled=1 gpgcheck=0 [root@localhost ~]# yum list
本文出自 “追求不完美” 博客,請務必保留此出處http://yolynn.blog.51cto.com/11575833/1894529