天天看點

Linux軟體包的管理--YUM

    在上一篇部落格《Linux軟體包的管理--RPM包管理器》中詳細講述了RPM,但是存在一個問題?就是RPM不能自動解決軟體包之間的依賴性。是以就出現了增強版的RPM管理器-YUM。

    以下講解以CentOS6系列為例。

一、YUM介紹

    YUM(Yellowdog Updater Modified)是一種C/S架構,它為什麼就能自動解決依賴性關系呢?這取決于 YUM 服務端的RPM倉庫,在這個倉庫裡放着我們經常用到的rpm格式的軟體包。

1、yum倉庫的組成

組成

内容

資料

存放各個rpm包

中繼資料

包名、版本資訊、依賴關系、包分組資訊、依賴關系清單。

在centos6中遵循sqlite格式,生成的中繼資料目錄是repodata。

2、yum用戶端如何通路服務端

    以更新為例:

<a href="http://s3.51cto.com/wyfs02/M00/3F/85/wKiom1PKQOHycOhCAAGR0TdSJ6A513.jpg" target="_blank"></a>

3、如何配置yum的服務端和用戶端

1)在伺服器端

    首先:在伺服器端要確定有可用的yum倉庫。yum倉庫其實就是檔案伺服器。repodata目錄所在的父目錄就是一個yum倉庫。

    其次:伺服器端必須通過某種手段将yum倉庫共享出去,可以讓用戶端使用,常見的共享方式有:ftp,http,nfs。如果是本地使用(用戶端和服務端是同一台機器),也可以使用file方式。

2)yum用戶端

    提供repo配置檔案,指明倉庫通路路徑及各種屬性。主配置檔案(中心配置檔案):/etc/yum.conf。 

1

2

3

4

5

6

7

8

9

10

11

12

13

<code># 在這裡定義一些預設配置屬性和全局配置屬性</code>

<code>[main]</code>

<code>cachedir=</code><code>/var/cache/yum/</code><code>$basearch/$releasever</code>

<code>keepcache=0</code>

<code>debuglevel=2</code>

<code>logfile=</code><code>/var/log/yum</code><code>.log</code>

<code>exactarch=1</code>

<code>obsoletes=1</code>

<code>gpgcheck=1</code>

<code>plugins=1</code>

<code>installonly_limit=5</code>

<code>bugtracker_url=http:</code><code>//bugs</code><code>.centos.org</code><code>/set_project</code><code>.php?project_id=16&amp;ref=http:</code><code>//bugs</code><code>.centos.org</code><code>/bug_report_page</code><code>.php?category=yum</code>

<code>distroverpkg=centos-release</code>

    一個後幾個相關的倉庫的配置儲存成一個檔案,檔案名都以.repo結尾,儲存在/etc/yum.repo.d目錄中。

    下面介紹一下檔案格式(以163鏡像為例):

14

15

16

17

18

19

20

21

<code>[base]  </code><code># 指明倉庫名稱,使用者可自行定義</code>

<code>name=CentOS-$releasever - Base - 163.com </code><code># 一般是對這個倉庫名稱的說明</code>

<code># 最關鍵的是這一項,指明倉庫的通路路徑</code>

<code># 為了配置友善,yum引入了變量,yum配置檔案中可用的四個變量:</code>

<code># releasever: 程式的版本,對Yum而言指的是redhat-release版本;隻替換為主版本号,如RedHat 6.5,則替換為6; </code>

<code># arch: 系統架構</code>

<code># basearch: 系統基本架構,如i686,i586等的基本架構為i386; </code>

<code># YUM0-9: 在系統中定義的環境變量,可以在yum中使用;</code>

<code># 最常用的就是 releasever 和 basearch</code>

<code># 下面在通路的時候會被替換成:baseurl=# baseurl可以使用多個:例如</code>

<code># baseurl=#         # 使用多個baseurl時需要用到以上格式  </code>

<code>baseurl=http:</code><code>//mirrors</code><code>.163.com</code><code>/centos/</code><code>$releasever</code><code>/os/</code><code>$basearch/</code>

<code># mirrorlist=http://mirrorlist.centos.org/?release=$releasever&amp;arch=$basearch&amp;repo=os</code>

<code># baseurl和mirrlist通常隻需一個,我們一般配置baseurl</code>

<code>gpgcheck=1  </code><code># 是否進行gpg檢測(包的完整性和合法性)</code>

<code>gpgkey= </code><code># gpg檢測是的秘鑰檔案</code>

<code># 還有其他選型,讀者在配置時,可自行選擇</code>

<code># 常用的還有:</code>

<code># enabled={0|1} 是否啟用該倉庫</code>

<code># cost=N 配置倉庫的”花費“,等價于優先級。N的值越小,優先級越高。</code>

    配置好這些準備工作,就可以使用yum工具了。

三、yum工具的使用

    這裡以網際網路163鏡像為例示範。

1、列出所有可用repo

    yum repolist {enabled|disabled|all}

<code># yum repolist {enabled|disabled|all}</code>

<code># enabled 列出可用的 </code>

<code># disabled 不可用的 </code>

<code># all所有的</code>

<code>[root@server yum.repos.d]</code><code># yum repolist</code>

<code>Loaded plugins: fastestmirror, refresh-packagekit, security</code>

<code>Loading mirror speeds from cached hostfile</code>

<code>base                                                       | 3.7 kB     00:00     </code>

<code>extras                                                     | 3.4 kB     00:00     </code>

<code>updates                                                    | 3.4 kB     00:00     </code>

<code>repo </code><code>id</code>                                <code>repo name                            status</code>

<code>base                                  CentOS-6 - Base - 163.com              6,367</code>

<code>extras                                CentOS-6 - Extras - 163.com            14</code>

<code>updates                               CentOS-6 - Updates - 163.com           1,153</code>

<code>repolist: 7,534</code>

2、列出rpm包

    yum list {all|installed|available}

<code># yum list {all|installed|available}</code>

<code># all 列出所有的包  等價于  yum list </code>

<code># installed 列出已安裝的包</code>

<code># available 列出可用的包(不包括已安裝的)</code>

<code># 一般情況下,會這樣使用</code>

<code>[root@server yum.repos.d]</code><code># yum list installed | grep "http"</code>

<code>httpd.x86_64            2.2.15-26.el6.centos</code>

<code>httpd-tools.x86_64      2.2.15-26.el6.centos</code>

3、包的描述資訊

    yum info package_name

22

23

24

25

26

<code>Installed Packages</code>

<code>Name        : httpd</code>

<code>Arch        : x86_64</code>

<code>Version     : 2.2.15</code>

<code>Release     : 26.el6.centos</code>

<code>Size        : 2.9 M</code>

<code>Repo        : installed</code>

<code>From repo   : anaconda-CentOS-201303050102.x86_64</code>

<code>Summary     : Apache HTTP Server</code>

<code>URL         : http:</code><code>//httpd</code><code>.apache.org/</code>

<code>License     : ASL 2.0</code>

<code>Description : The Apache HTTP Server is a powerful, efficient, and extensible</code>

<code>            </code><code>: web server.</code>

<code>Available Packages</code>

<code>Release     : 30.el6.centos</code>

<code>Size        : 821 k</code>

<code>Repo        : updates</code>

4、列出所有的包組資訊

    yum grouplist

<code># 經常情況下我們會是這樣來使用</code>

<code>[root@server yum.repos.d]</code><code># yum grouplist | grep "Deve"</code>

<code>   </code><code>Additional Development</code>

<code>   </code><code>Desktop Platform Development</code>

<code>   </code><code>Development tools</code>

<code>   </code><code>Server Platform Development</code>

5、顯示包組的資訊:例如組中包含的程式包清單

    yum groupinfo "GROUP NAME"

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

<code>[root@server yum.repos.d]</code><code># yum groupinfo "Development tools"</code>

<code>Setting up Group Process</code>

<code>Group: Development tools</code>

<code> </code><code>Description: A basic development environment.</code>

<code> </code><code>Mandatory Packages:</code>

<code>   </code><code>autoconf</code>

<code>   </code><code>automake</code>

<code>   </code><code>binutils</code>

<code>   </code><code>bison</code>

<code>   </code><code>flex</code>

<code>   </code><code>gcc</code>

<code>   </code><code>gcc-c++</code>

<code>   </code><code>gettext</code>

<code>   </code><code>libtool</code>

<code>   </code><code>make</code>

<code>   </code><code>patch</code>

<code>   </code><code>pkgconfig</code>

<code>   </code><code>redhat-rpm-config</code>

<code>   </code><code>rpm-build</code>

<code> </code><code>Default Packages:</code>

<code>   </code><code>byacc</code>

<code>   </code><code>cscope</code>

<code>   </code><code>ctags</code>

<code>   </code><code>cvs</code>

<code>   </code><code>diffstat</code>

<code>   </code><code>doxygen</code>

<code>   </code><code>elfutils</code>

<code>   </code><code>gcc-gfortran</code>

<code>   </code><code>git</code>

<code>   </code><code>indent</code>

<code>   </code><code>intltool</code>

<code>   </code><code>patchutils</code>

<code>   </code><code>rcs</code>

<code>   </code><code>subversion</code>

<code>   </code><code>swig</code>

<code>   </code><code>systemtap</code>

<code> </code><code>Optional Packages:</code>

<code>   </code><code>ElectricFence</code>

<code>   </code><code>ant</code>

<code>   </code><code>babel</code>

<code>   </code><code>bzr</code>

<code>   </code><code>chrpath</code>

<code>   </code><code>cmake</code>

<code>   </code><code>compat-gcc-34</code>

<code>   </code><code>compat-gcc-34-c++</code>

<code>   </code><code>compat-gcc-34-g77</code>

<code>   </code><code>cvs-inetd</code>

<code>   </code><code>dejagnu</code>

<code>   </code><code>expect</code>

<code>   </code><code>gcc-gnat</code>

<code>   </code><code>gcc-java</code>

<code>   </code><code>gcc-objc</code>

<code>   </code><code>gcc-objc++</code>

<code>   </code><code>imake</code>

<code>   </code><code>jpackage-utils</code>

<code>   </code><code>kdewebdev</code>

<code>   </code><code>ksc</code>

<code>   </code><code>libstdc++-docs</code>

<code>   </code><code>mercurial</code>

<code>   </code><code>mod_dav_svn</code>

<code>   </code><code>nasm</code>

<code>   </code><code>perltidy</code>

<code>   </code><code>python-docs</code>

<code>   </code><code>rpmdevtools</code>

<code>   </code><code>rpmlint</code>

<code>   </code><code>systemtap-sdt-devel</code>

<code>   </code><code>systemtap-server</code>

6、清理緩存

    yum clean {all|packages|metadata|expire-cache|rpmdb|plugins}

<code># yum clean {all|packages|metadata|expire-cache|rpmdb|plugins}</code>

<code># all 所有緩存</code>

<code># packages   清除包緩存</code>

<code># metedata   清除中繼資料緩存</code>

<code># expire-cache 清除過期緩存</code>

<code># rpmdb    清除RPM資料庫緩存</code>

<code># plufins 清除插件緩存</code>

<code># 最常用的就是 yum clean all</code>

<code>[root@server yum.repos.d]</code><code># yum clean all</code>

<code>Cleaning repos: base extras updates</code>

<code>Cleaning up Everything</code>

<code>Cleaning up list of fastest mirrors</code>

7、安裝程式包

    yum install package_name

<code>yum </code><code>install</code> <code>httpd -y </code><code># 常用選項是 -y 意思是不需要确認,直接安裝</code>

  重新安裝:

    yum reinstall package_name

<code>yum reinstall httpd -y</code>

8、更新

    yum check-update: 檢查可用的更新包

<a href="http://s3.51cto.com/wyfs02/M00/3F/85/wKiom1PKd1iAcJ4pAADWasr_URw300.jpg" target="_blank"></a>

    yum update package_name 更新軟體

<a href="http://s3.51cto.com/wyfs02/M01/3F/86/wKioL1PKeUmDibpIAAN3IyhKUU8012.jpg" target="_blank"></a>

<code>[root@server yum.repos.d]</code><code># rpm -q ntp</code>

<code>ntp-4.2.6p5-1.el6.centos.x86_64</code>

    yum downgrade package_name 降級使用的,退回原來的版本

<code># yum downgrade ntp -y 降級第一次可能會出現錯誤,解決辦法之一是:yum upgrade -y 更新yum工具</code>

<code>[root@server yum.repos.d]</code><code># yum downgrade ntp -y</code>

<code>Setting up Downgrade Process</code>

<code>Only Upgrade available on package: ntp-4.2.6p5-1.el6.centos.x86_64</code>

<code>Nothing to </code><code>do</code>

9、解除安裝

    yum remove|erase package_name

<code>yum remove httpd -y</code>

10、查詢某檔案是由哪個包安裝生成的

    yum whatprovides|provides /path/to/somefile

<code># 會列出所有的提供此配置檔案的包</code>

<code>[root@server yum.repos.d]</code><code># yum provides /etc/httpd/conf/httpd.conf </code>

<code>httpd-2.2.15-30.el6.centos.x86_64 : Apache HTTP Server</code>

<code>Matched from:</code>

<code>Filename    : </code><code>/etc/httpd/conf/httpd</code><code>.conf</code>

<code>httpd-2.2.15-29.el6.centos.x86_64 : Apache HTTP Server</code>

<code>Repo        : base</code>

<code>Other       : Provides-match: </code><code>/etc/httpd/conf/httpd</code><code>.conf</code>

11、安裝包組

    yum groupinstall "GROUP NAME"

<code># 常用的包有:</code>

<code># Desktop Platform Development 開發平台</code>

<code># Development tools  開發所用的包</code>

<code># 例如:yum groupinstall "Development tools" -y</code>

12、解除安裝包組

    yum groupremove "GROUP NAME"

四、自制yum倉庫

1、如果作為個人使用的話,最簡單的辦法是,挂載CD光牒鏡像使用。

    以VMware虛拟機為例:

    先關聯CD光牒鏡像,挂載CD光牒鏡像就可以使用。

2、自建yum倉庫伺服器

    以ftp為例,步驟:

(1) 安裝ftp程式,并啟動服務

    # rpm -ivh vsftp-版本号

    或者

    # yum install vsftpd -y

    啟動服務

    # service vsftpd start

    # chkconfig vsftpd on

(2) ftp的共享目錄為/var/ftp/pub

    建立子目錄,存放某相關的所有rpm包(建議)

(3) 為倉庫生成中繼資料檔案,以使能夠作為倉庫使用

    # rpm -ivh createrepo-版本号

    # yum install createrepo -y

    # createrepo /path/to/rpm_repo/  生成repo的中繼資料目錄 例如:createrepo /var/ftp/pub/Packages   

(4) 配置yum用戶端使用此倉庫即可

    總結:本文主要介紹yum工具的使用,簡單介紹了自制yum服務端的步驟。

本文轉自 羊木狼 51CTO部落格,原文連結:http://blog.51cto.com/guoting/1440326,如需轉載請自行聯系原作者

繼續閱讀