http://m.oschina.net/blog/88071
http://jingyan.baidu.com/article/e9fb46e1aed8207521f7662c.html
http://blog.chinaunix.net/uid-28283843-id-3930474.html
http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-102-5/
6、其餘補充
1.使用YUM查找軟件包
命令:yum search
2.列出全部可安裝的軟件包
命令:yum list
3.列出全部可更新的軟件包
命令:yum list updates
4.列出全部已安裝的軟件包
命令:yum list installed
5.列出全部已安裝但不在 Yum Repository 內的軟件包
命令:yum list extras
6.列出所指定的軟件包
命令:yum list 7.使用YUM獲取軟件包信息
命令:yum info 8.列出全部軟件包的信息
命令:yum info
9.列出全部可更新的軟件包信息
命令:yum info updates
10.列出全部已安裝的軟件包信息
命令:yum info installed
11.列出全部已安裝但不在 Yum Repository 內的軟件包信息
命令:yum info extras
12.列出軟件包提供哪些文件
命令:yum provides
5.清除YUM緩存
yum 會把下載的軟件包和header存儲在cache中,而不會自動刪除。若是咱們以爲它們佔用了磁盤空間,可使用yum clean指令進行清除,更精確的用法是yum clean headers清除header,yum clean packages清除下載的rpm包,yum clean all 清除全部
1.清除緩存目錄(/var/cache/yum)下的軟件包
命令:yum clean packages
2.清除緩存目錄(/var/cache/yum)下的 headers
命令:yum clean headers
3.清除緩存目錄(/var/cache/yum)下舊的 headers
命令:yum clean oldheaders
4.清除緩存目錄(/var/cache/yum)下的軟件包及舊的headers
命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders)
(一)相關講解
repodata做爲軟件的倉庫,其目錄下有四個必要文件:filelists.xml.[gz],other.xml.[gz],primary.xml.[gz]和repomd.xml(md 意思是 metadata),其中最主要的是repomd.xml文件,緣由是咱們用光盤或ISO文件製做本地源時常看到下面相似的錯誤:
* c5-media:
file:///media/CentOS/repodata/repomd.xml: [Errno 5] OSError: [Errno 2] 沒有那個文件或目錄: ‘/media/CentOS/repodata/repomd.xml’
Trying other mirror.
file:///media/cdrecorder/repodata/repomd.xml: [Errno 5] OSError: [Errno 2] 沒有那個文件或目錄: ‘/media/cdrecorder/repodata/repomd.xml’
Trying other mirror.
file:///media/cdrom/repodata/repomd.xml: [Errno 5] OSError: [Errno 2] 沒有那個文件或目錄: ‘/media/cdrom/repodata/repomd.xml’
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: c5-media. Please verify its path and try again
以上的錯誤提是說找不到repodata目錄或文件,而錯誤的緣由一般有三個:一是路徑問題;二是沒有生成repodate目錄;三是*.repo配置文件衝突(這個須要特地注意)。
從CentOS 5(或rhel5)之後,系統光盤或ISO文件裏大都已幫咱們生成了repodata目錄(但不排除沒有),而5.0之前的版本則沒有,須要咱們用createrepo生成,此命令會根據rpm包的依賴關係,生成對應的repodata目錄(軟件倉庫),就此目錄,很重要的一個目錄,名字也是固定的,裏面就是保存有這四個文件:filelists.xml.[gz],other.xml.[gz],primary.xml.[gz]和repomd.xml.[gz](一般還會有comps.xml文件,下面會提到)。對於以上的錯誤例子,從c5-media可知系統是5.0以上的,系統光盤是自帶有repodata目錄,因此很明顯是路徑或*.repo文件的問題,但不排除沒有repodata目錄這種狀況,具體有沒有,打開光盤看下就知道了唄,若是確實沒有,那就就生成了唄,下面會說到。
如今來看下/etc/yum.repos.d/CentOS-Media.repo配置文件的內容:
[c5-media]
name=CentOS-$releasever – Media
#name 就是 name了,其格式表明了「操做系統名和釋出版本」- 「base」是代表此段尋找的是base包信息。
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
#「baseurl」表明yum在互聯網上所查找的連接地址。這裏須要解釋一下
#「$basearch」表明了系統的構架格式如「i386」和「repodata」存放repomd.xml文件的文件夾位置。
#「repomd.xml」做用,提供了「更新.xml.gz」的下載信息和SHA校驗值。
#這裏「repomd.xml」裏包括了3個文件 「other.xml.gz」」filelists.xml.gz」」primary.xml.gz」
#做用很明顯了,「其餘更新包列表」「更新文件集中列表」「主要更新包列表」
gpgcheck=1
#gpgcheck 校驗,你須要在配置文件裏註明GPG-RPM-KEY的位置。
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta
#GPG-RPM-KEY的位置
從baseurl指定查找位置和出錯消息:
file:///media/CentOS/repodata/repomd.xml
file:///media/cdrom/repodata/repomd.xml
file:///media/cdrecorder/repodata/repomd.xml
可看出,yum會試圖從baseurl指定的目錄下查找repodata目錄,其實質是想尋找repomd.xml文件,既然repodata目錄都找不着,何來repomd.xml文件呢?因此就報錯,顯示「找不到目錄和文件」,解決辦法很簡單,對於5.0以上的版本,光盤或ISO文件的根目錄下就有repodate目錄了,以下所示
CentOS/
images/
iso
Linux/
repodata/
.discinfo
.treeinfo
因此將光盤的掛載路徑設置正確就能夠,注意:若是是系統自動掛載光盤,那一般會自動掛載在/media目錄下,那路徑固然就不正確了。同時你也能夠將CentOS目錄整個複製出來,用creatarepo生生軟件倉庫便可。
針對/etc/yum.repos.d/CentOS-Media.repo的內容,可將光盤掛在下面任一目錄下
mkdir –v /media/{CentOS, cdrom, cdrecorder}
mount –t iso9660 /dev/cdrom /media/CentOS
mount –t iso9660 /dev/cdrom /media/ cdrom
mount –t iso9660 /dev/cdrom /media/ cdrecorder (隨便選一項就行,不要全掛)
這樣yum就能搜索到repodata目錄了,上圖中CentOS目錄保存的是rpm文件包,repodata目錄裏的文件就是記錄CentOS裏全部包的依賴關係,文件位置等相關信息。若是以爲baseurl指定的位置不爽,也能夠改成其地方,只要在baseurl指定的目錄下對能找到repodata目錄便可。同時,生成repodata目錄後,只要裝rpm包的目錄位置不變(如上例中的CentOS目錄),repodata就能夠放到任何地方。對於指定其它協議的baseurl,如http:// ftp://,其實質也是在baseurl指定的位置查找repodata目錄,例如:
Baseurl=http://centos.ustc.edu.cn/centos/5/os/i386/
RELEASE-NOTES-ro
RELEASE-NOTES-ro.html
RPM-GPG-KEY-CentOS-5
RPM-GPG-KEY-beta
images/
isolinux/
repodata/
其目錄下就有repodata目錄;
Name
Parent Directory/
RPMS.lvn/
SRPMS.lvn/
SRPMS.lvn-testing/
debug/
repodata/
SDL_sound-1.0.1-0.lvn.1.4.i386.rpm
SDL_sound-devel-1.0.1-0.lvn.1.4.i386.rpm
a52dec-0.7.4-0.lvn.7.4.i386.rpm
a52dec-devel-0.7.4-0.lvn.7.4.i386.rpm
以上兩個repodata目錄,一個放在「裝rpm包目錄」同等級的目錄中,而令一個則放在裝rpm包的同目錄中,這說明可在聽任意位置生成repodata,baseurl指向的就是repodata目錄位置,而每當添加新的源,用yum進行更新或安裝軟件時,都會先將repodata目錄中的文下載下來,進行分析,即可知道軟件包的詳細信息和依賴關係,最後進行軟件安裝和更新。理解這一點很是重要,因此本人特地屢次指出,「一個有效的baseurl的特徵是:baseurl所指位置存在名repodata目錄,此目錄下又存在名爲repomd.xml文件」理解了以後,即可以爲所欲爲,自行下載軟件包,而後製做自已的本地源了,對於yum localinstall 命令,聽說能自行解決包的依賴問題,但其實質是用了現有軟件倉庫來解決包依賴關係,因此沒有倉庫,用此命令也沒用。
..
CentOS/
images/
isolinux/
NOTES/
SRPMS/
.discinfo
centosdocs-man.css
GPL
RELEASE-NOTES-en
RELEASE-NOTES-en.html
RPM-GPG-KEY
RPM-GPG-KEY-centos4
RPM-GPG-KEY-CentOS-4
yumgroups.xml
注意此處的CentOS目錄裝的不是純rpm文件了,而是包含兩個子目錄base和RPMS,全部的rpm包裝在RPMS目錄裏,而base裝的是什麼東西呢?以下圖所示:
..
comps.rpm
comps.xml
hdlist
hdlist4
hdstg2.img
netstg2.img
product.img
stage2.img
這些文件一樣也保存了RPMS中全部rpm包的依賴關係等重要信息,但它們主要在操做系統安裝系時用到,若是用戶想定製自已的操做系統安裝盤,或者發行版本,就須要生成這些文件,詳情可參考http://www.ibm.com/developerworks/cn/linux/l-custm/index.html
假如路徑設置對了,repodata目錄也有了,但仍是不行,此時的出錯消息再也不是上面所示那樣,那極可能是/etc/yum.repos.d/中配置文件問題或者由於你沒有連網,在實踐過程當中,俺在沒有連網的狀況下,yum時會報錯,由於它只是嘗試下載網絡上的/repodata/repomd.xml文件,沒連網,何來文件呢?因此報錯,此時它也沒有去查找本地的其它源了,解決辦法是:
一是連網,二是讓/etc/yum.repos.d/目錄中只剩下本地源的配置文件,三是用命令
yum –disablerepo=* –enablerepo={本地源ID,如 c5-media} install {soft_names} –nogpgcheck
也許在本地搭建ftp或http源,問題應該能解決的,但沒有具體實踐過,因此沒有發言權。
最後介紹一下用得上的命令和選項:
1. createrepo –update:
有時候你的軟件倉庫中含有不少的軟件包,雖然只是其中的一小部分有所改動可是你卻沒必要爲每一個軟件包從新產生元數據,這樣作明顯太浪費時間了。
這就是 re –update 選項誕生的緣由。你像以前同樣運行 createrepo 命令可是添加了–update 選項.
例如:
createrepo –update /srv/my/repo
如今 createrepo 只更新那些在上次產生元數據以後被改變,添加或者刪除 u 了的項目。
2.verifytree
若是你剛剛作了一個 repo 而且你想要驗證在你的 repo 中的全部東西都是正確且能夠完成其功能的話,你能夠運行 erifytree 命令來檢查全部的 repodata 和軟件包。
示例:
$ verifytree /home/skvidal/tmp/empty-repoverifytree /home/skvidal/tmp/empty-repo/
Checking repodata:
verifying repomd.xml with yum
verifying filelists checksum
verifying primary checksum
verifying primary_db checksum
verifying other_db checksum
verifying other checksum
verifying filelists_db checksum
Checking groups (comps.xml):
verifying comps.xml with yum
comps file missing or unparseable
(二)舉例
接下來以具體例子來講明如何製做本地源,如下例子都修改自網上資料,忘了記錄出處,敬請原諒。
1)先以rhel-5-server-i386-dvd.iso爲例,製做以前先來看下rhel5映像文件的目錄結構,
../
Cluster/
ClusterStorage/
images/
isolinux/
Server/
VT/
.discinfo
.treeinfo
主要有Cluster,ClusterStorage,Server和VT目錄,目錄裏頭除了含用rpm包文件外,還分別含有一個repodata目錄,這至關於對包進行了分組管理,因此在寫baseurl路徑時,都要將它們的路徑分寫上,不過,平時用的軟件包都在Server目錄中,其它目錄中的軟件包不多用到。注意:repodata目錄中,除了含有那四個基本文件外,還將相應的comps.xml組文件加了進去。
2)製做本地源,用createrepo生成repodata目錄,
以光驅爲源
爲了不從網絡下載軟件包可能發生的軟件包不完整、下載速度慢、網絡故障等問題,咱們強烈建議您使用本地的 DVD/CD iso 來建立 yum 倉庫,這樣在安裝的時候速度快,並且能夠保證全部軟件包都能順利安裝。
若是您有局域網內的 yum 倉庫,能夠直接使用它,就不須要按照如下的步驟重複建立了。
下面的操做都是在您安裝好 RHEL/CentOS 系統後進行的。
1.先從光盤或已有的 YUM 倉庫安裝 createrepo 工具:
Shell 命令:
# rpm -ivh createrepo-x.y.z.rpm
createrepo 命令用於生成 yum 倉庫所必須的一些信息,這些信息都存放在 repodata/ 目錄底下,您打開看看就會明白它作了些什麼事情。
2.使用 ISO 文件製做 yum 倉庫
2.1 DVD ISO
2.1.1若是你使用的是 DVD 光盤,能夠直接掛載光盤,而後製做 yum 倉庫:
Shell 命令:
# mkdir /mnt/dvd/
# mount /dev/cdrom /mnt/dvd/
# cd /mnt
# createrepo .
2.1.2若是您使用的是官方的 DVD ISO,則須要將它複製到系統上,掛載後製做 yum 倉庫:
Shell 命令:
# mkdir /mnt/dvd/
# mount -o loop /root/rhel5.1-dvd.iso /mnt/dvd
# cd /mnt
# createrepo .
2.2 CD ISO
2.2.1若是您使用的是多個 CD iso 文件,須要先複製到系統上,掛載後製做 yum 倉庫。
有幾個 ISO 就建立幾個目錄,並將對應的 ISO 掛載上去:
Shell 命令:
# mkdir -p /mnt/{1,2,3,4,5,6}
# mount -o loop rhel5.1-disc1.iso /mnt/1
# mount -o loop rhel5.1-disc2.iso /mnt/2
# mount -o loop rhel5.1-disc3.iso /mnt/3
# mount -o loop rhel5.1-disc4.iso /mnt/4
# mount -o loop rhel5.1-disc5.iso /mnt/5
建立 yum 倉庫:
Shell 命令:
# cd /mnt/
# createrepo .
3.定義 yum 倉庫
建立 yum 倉庫的定義文件:/etc/yum.repos.d/dvdiso.repo,而後加入如下內容:
Shell 命令:
[DVDISO]
name=DVD ISO
baseurl=file:///mnt/
enabled=1
gpgcheck=0
4.測試 yum 倉庫
強烈建議執行 ‘yum clean all’ 命令,將全部 yum metadata 等信息清空,再從新獲取最新的倉庫信息:
Shell 命令:
# yum clean all
# yum list
若是在 ‘yum list’ 命令的輸出中可以看到剛纔製做的倉庫裏的軟件包的名字,那就是 OK 了。再試着安裝一個軟件包看是否成功:
Shell 命令:
# yum install cyrus-sasl.i386
若是是 x86_64 平臺,則將後面的 i386 改成 x86_64:
Shell 命令:
# yum install cyrus-sasl.x86_64
若是安裝成功,表示 yum 倉庫和 RPM 包都沒問題。
3)ftp搭建yum服務器
1、準備工做
1,啓動REDHAT Linux ,並放入安裝光盤
2,掛載光驅 mount /dev/cdrom /mnt
3,安裝FTP服務.若是你只是本身本機使用YUM源能夠省略掉這一步
cd /mnt/Server
rpm -ivh vsftpd*
chkconfig vsftpd on
service vsftpd start
4,安裝createrepo軟件包
rpm –ivh createrepo*
5,拷貝系統盤中的文件本系統中
cp -R /mnt/Server /var/ftp/pub
二,搭建YUM
1.生成依賴性關係
Createrepo -g /var/ftp/pub/Server/repodata/comps-rhel5-server-core.xml /var/ftp/pub/Server/
這個地方要注意,comps-rhel5-server-core.xml必定不能手動生成,默認安裝光盤上已經有了
2.作完上面的步驟後會有一個錯誤提示,「Could not remove old metadata dir: .olddata「說目錄有問題。不用管他,把那個目錄刪除掉
rm –rf /var/ftp/pub/Server/.olddata
3.把步驟1再作一遍
createrepo -g /var/ftp/pub/Server/repodata/comps-rhel5-server-core.xml /var/ftp/pub/Server/
4.cd /etc/yum.repos.d
vim yum.repo (新建一個倉庫文件,名字能夠隨便起,在文件中寫以下內容)
[base]
name=base
baseurl=ftp://192.168.0.6/pub/Server #192.168.0.6是你的YUM源地址
enabled=1 #是否開啓源
gpgcheck=1 #是否驗證,可不要
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release #驗證的密鑰,可不要
4)RHEL5.1用光盤作yum源
RHEL5.4能夠直接使用光盤做yum源,而RHEL5.1不能直接用光盤中的源,不然會出現urlopen error unknown url type: media,須要改造一番,注意這裏提供的方法不用拷貝光盤中的大量文件.
1.將光盤鏡像掛載到/media/RHEL/目錄下
[root@Blinux Desktop]#mkdir /media/RHEL
[root@Blinux Desktop]#mount /root/rhel5.1.iso /media/RHEL -o loop
2.生成庫文件
[root@Blinux Desktop]#mkdir /media/yum/
[root@Blinux Desktop]#rpm -ivh /media/RHEL/Server/createrepo-0.4.4-2.fc6.noarch.rpm
[root@Blinux Desktop]createrepo -o /media/yum/ -g /media/RHEL/Server/repodata/comps-rhel5-server-core.xml /media/RHEL/Server/
[root@Blinux Desktop]mount --bind /media/yum/repodate/ /media/RHEL/Server/repodate/
3.生成依賴關係
[root@Blinux Desktop]# vim /etc/yum.repos.d/rhel-debuginfo.repo
修改成相似
[rhel]
name=Red
baseurl=file:///media/RHEL/Server/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[root@Blinux Desktop]# yum clean all;yum makecache
RHEL5.1下的本地YUM源就這樣OK了,注意,這裏並無拷貝大量的文件,而是掛載.
附加:
一、yum 的配置文件(/etc/yum.conf), repo 文件(/etc/yum.repos.d)詳解
http://www.centos.org/docs/5/html/5.1/Deployment_Guide/c1-yum.html
二、yum 特殊參數
--installroot=root 指定安裝軟件時的根目錄
--enablerepo=repoidglob 暫時啓用某個下載源
--disablerepo=repoidglob 暫時停用某個下載源
--exclude=package 排除某個軟件包
--noplugins 暫時停用全部插件
--disableplugin=plugin 暫時停用指定的插件
三、案例1:禁用某個源
爲何要禁掉源?
「注:假如你正考慮使用第三方軟件庫,你應該認真地思考如何防止來自這些軟件庫的「更新」不經意地取替了 CentOS 的核心部份。其中一個方法就缺省它們爲停用的,有必要時才啓用它們「,http://wiki.centos.org/zh/AdditionalResources/Repositories?action=show&redirect=zh%2FRepositories
編輯 /etc/yum.repos.d/example.repo
enabled=0
或者
yum --disablerepo=some-repository install some-package
yum --enablerepo=some-disabled-repository install some-package
YUM Remove Repo (Repository) – YUM Disable Repo (Repository), http://www.if-not-true-then-false.com/2010/yum-remove-repo-repository-yum-disable-repo-repository/
四、CentOS 使用的軟件庫
http://wiki.centos.org/zh/AdditionalResources/Repositories?action=show&redirect=zh%2FRepositories
知名的第三方軟件庫:RPMforge、ELRepo、ATrpms、EPEL、及 RPMfusion 等