天天看點

yum

rpm的前端工具: 

 yellow dog---一款發行版Linux 使用rpm作為預設的程式包管理工具

yum的弊端

 yum在安裝、更新或解除安裝程式包時,是開啟事務,在事務送出之前,是不會在檔案系統上做任何改變,但是rpm資料庫已經被更新;

 Redhat将Fedora捐贈給開源社群,Fedora就是Redhat系統的試驗場;

 dnf是為了解決yum的問題而在Fedora系統中開始試驗的新的程式包管理器的前段工具

 URL: yum定位軟體倉庫及倉庫中程式封包件的主要辨別方式;

yum:

 yum是C/S結構;其中伺服器也稱為軟體倉庫(yum repository),用戶端需要書寫URL以指定伺服器及程式包路徑;

 在伺服器上,軟體倉庫其實就是一個目錄,在目錄中包含了程式封包件及中繼資料檔案;

 中繼資料檔案統一的存放于repodata的目錄中;也可以說,repodata目錄所在的路徑即為軟體倉庫的路徑;

 yum伺服器是yum repository(yum程式包倉庫,yum repo)

  1.所有程式包的中繼資料(metadata)---單獨路徑存放(repodata)

    所有程式封包件名稱的清單

    所有程式包的版本号

    所有程式包的校驗資訊

    所有程式包的依賴關系 

  2.為數衆多的程式封包件

yum的用戶端:

 利用配置檔案指向正确的yum倉庫(yum源)

 利用URL機制完成指向

  一個标準的URL:

   scheme://[username@]hostname[:port]/document[parameters][method]

   /var/yum/myrepo/*.rpm

   /var/yum/myrepo/repodata/

 可能在yum配置檔案中使用的URL有下列幾種:

  ftp://hostname/PATH/TO/REPODATA

  http://hostname/PATH/TO/REPODATA

  nfs://hostname/PATH/TO/REPODATA

 本地的yum倉庫

  file:///PATH/TO/REPODATA

配置網卡的配置檔案:

NAME=eno33554984

DEVICE=eno33554984

BOOTPROTO=dhcp

NM_CONTROLLED=no

ONBOOT=yes

如何制作軟體倉庫(yum伺服器端)

 createrepo

  createrepo [options] <directory>

  例:createrepo /PATH/TO/NAME_RPM_FILES

如何設定yum用戶端

 yum的主配置檔案: 

  /etc/yum.conf

  隻提供yum倉庫指向資訊的公共配置内容;

  注意:該檔案一般情況下,不進行任何修改;

  片段配置檔案:

    /etc/yum.repos.d/*.repo

    每一個以.repo為字尾名的檔案,即為一個倉庫檔案;這樣的每個檔案中可以配置指向一個或多個yum倉庫;

    yum程式在查找yum倉庫的時候,根據這些配置檔案來查找的;每一次可能會找到多個yum倉庫,從所有可以使用的倉庫中查找最新版本的程式包并緩存到本地進行安裝,更新等操作;

    同類的多個倉庫被稱為鏡像;隻要有一個可用即可;

    不同類的倉庫也可以同時存在多個,yum可以同時使用這些倉庫;

  # PUT YOUR REPOS HERE OR IN separate files named file.repo

  # in /etc/yum.repos.d

 使用者可以将其自己定義的yum源的指向資訊存放在這個配置檔案中,也可以是以file.repo的方式命名之後存放在/etc/yum.repos.d中的獨立檔案;

 格式:

  類似于.ini格式片段式配置檔案;

  [repository_id]

  注意:

  1.整個repository必須為一段字元串,其中隻能包括字母數字下劃線或.号;不允許出現特殊符号

  2.每一段配置資訊從[]開始,到下一對[]結束

  3.每個配置檔案中,可以包含多個repoid,每個repoid指向一個或多個yum源,但是repoid必須全局唯一;

  /etc/yum.conf檔案中預設的内容

 [main]

cachedir=/var/cache/yum/$basearch/$releasever

keepcache=0

debuglevel=2

logfile=/var/log/yum.log

exactarch=1

obsoletes=1

gpgcheck=1

plugins=1

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum

distroverpkg=centos-release

man /etc/yum.conf

想要更加全面的資訊,可以使用man 5 yum.conf擷取

注意:此檔案一般無需修改,如果想要建立自己的yum源的指向,可以在/etc/yum.repos.d目錄中建立以.repo為字尾名的檔案,在其中也安裝上述格式填寫即可

通常自定義repo檔案的格式

[repository_id]

name=ful name of repository

baseurl=schema://host/path/to/repodata

        schema2://host/path/to/repodata

        schema3://host/path/to/repodata

schema:

    http[s]、ftp、nfs:網絡伺服器指向

    file:本地伺服器指向

#mirrorlist=mirror_url

enabled={1|0} 0表示禁用此倉庫指向,1表示啟用;如果沒有enabled語句,預設為啟用狀态預設是1啟用 

gpgcheck={1|0}

 0表示不進行程式包認證,1表示認證;如果為1,需要指定認證所需要的公鑰檔案,需要使用gpgkey語句;gpgkey=/path/to/public_key

 例子:gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

failovermethod={roundrobin|priority}

故障倒換方法:

    roundrobin:随機查找,預設的方法;

    priority:按照順序依次選擇

enablegroups={1|0}

cost=num,預設所有倉庫的開銷值都是1000;

例:

本地關平yum源的指向配置

[root@mylab1 yum.repos.d]# cat local.repo 

[local]

name=dvd

baseurl=file:///mnt/cdrom

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

網際網路Fedora-EPEL yum源指向配置

[root@mylab1 yum.repos.d]# cat myepel.repo 

[myepel]

name=define by myself for epel

baseurl=https://dl.fedoraproject.org/pub/epel/7/x86_64/

gpgcheck=0

yum指令的使用:

  yum [options] [command] [package ...]

  常用選項

  -y:所有的問題都以yes來回答

  -q:安靜模式,在使用yum時不輸出任何資訊

  --enablerepo=repoidglob

  --disablerepo=repoidglob  

  在此次yum事務中,明确規定使用或禁用某個repoid;在使用了這樣的選項之後,倉庫指向檔案中的enabled語句的作用将失效;

  --noplugins:

  在某一次yum執行過程中,明确指出不使用任何插件

  --enablerepo=*epel*

  --nogpgcheck:此次yum事務中,明确規定不進行程式包元整;在倉庫指向檔案中的gpgcheck=1語句會失效;

  指令

   command is one of:

        * install package1 [package2] [...]

        安裝程式包

        注意:

         1.可以通過同一個repo檔案或不同的repo檔案指向一個或多個yum源,如果要安裝的程式包,在多個倉庫中都存在,yum會預設安裝版本最高的那個程式包;如果不打算安裝最新版本的,可以在安裝時,直接寫出對應的版本号,如:yum install gcc-4.4.7

         2.一次yum操作可以安裝多個程式包,yum會為所有我們選擇的程式包解決依賴關系問題 

         1.如果隻是給出程式包名稱,yum搜尋所有倉庫,并找到最新版本緩存安裝;

         2.如果給出程式包的名稱及版本,則查找安裝指定版本的程式包;

        3.如果給出的程式包是完整的程式包名,則隻是查找某一個程式包;

        4.程式包名稱可以使用globbing,(* ? [] [^])

        * update [package1] [package2] [...]

        * update-to [package1] [package2] [...]

        * update-minimal [package1] [package2] [...]

        * check-update

        * upgrade [package1] [package2] [...]

        * upgrade-to [package1] [package2] [...]

        更新程式包:

        downgrade package1 [package2] [...]

        程式包不同版本之間的更疊

        * remove | erase package1 [package2] [...]

        解除安裝程式包:

        * list [...]

        顯示:

         可以顯示所有的程式包,已安裝的程式包,未安裝但是可用的程式包,可以更新的程式包

         list{availiable|installed|updates|all}[glob_expr1]

         yum list LIST OPTIONS

         LIST OPTIONS:

          all: 顯示所有的程式包,包括已經安裝的和尚未安裝但可用的;

          注意:

           anaconda:CentOS系統的安裝器,在安裝作業系統的時候一并安裝的程式包;

           installed:顯示所有已經安裝的程式包;

          available:顯示所有尚未安裝但可以安裝的程式包;

          updates:顯示所有可以更新更新的程式包;

        * info [...]

         顯示程式包相關資訊

         yum info LIST OPTIONS

          anaconda:CentOS系統的安裝器,在安裝作業系統的時候一并安裝的程式包;

          installed:顯示所有已經安裝的程式包;

          updates:顯示所有可以更新更新的程式包

        * provides | whatprovides feature1 [feature2] [...]

         檢視指定的特性(可以是一個檔案)是由哪個程式包提供的

        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

        清除本地緩存         

        * makecache [fast]

        建構緩存

        * groups [...]

        程式包組的管理方案

        * search string1 [string2] [...]

        模糊搜尋,根據關鍵字進行比對,搜尋程式包名稱及所謂的summary資訊(彙總資訊)

        如果想要搜尋全部資訊,可以使用search all

        * shell [filename]

        為yum提供的互動式操作界面

        * localinstall rpmfile1 [rpmfile2] [...]

           (maintained for legacy reasons only - use install)           

        * localupdate rpmfile1 [rpmfile2] [...]

           (maintained for legacy reasons only - use update)

           已經被廢棄

        * reinstall package1 [package2] [...]

        重新安裝

        * downgrade package1 [package2] [...]

        降級安裝

        * deplist package1 [package2] [...]

        根據repodata中的資訊,顯示制定程式包中所有依賴關系;預設是enabled

        * repolist [all|enabled|disabled]

        顯示用戶端上指定的yum源的指向資訊;預設是enabled

        * repoinfo [all|enabled|disabled]

        * repository-packages <enabled-repoid>  <install|remove|remove-or-reinstall|remove-or-dis‐

       tribution-synchronization> [package2] [...]

        * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]

        *history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐back|new|sync|stats]

        查詢所有影響了rpmdb的事務

        * load-transaction [txfile]

        查詢和加載所有的事務資訊

        * updateinfo [summary | list | info | remove-pkgs-ts |  exclude-updates  |  exclude-all  |

       check-running-kernel]

        * fssnapshot [summary | list | have-space | create | delete]

        * fs [filters | refilter | refilter-cleanup | du]

        * check

        * help [command]

程式包組管理

  CentOS6:

    * groupinstall group1 [group2] [...]

    * groupupdate group1 [group2] [...]

    * grouplist [hidden] [groupwildcard] [...]

    * groupremove group1 [group2] [...]

    * groupinfo group1 [...]

      程式包組的管理方案:

  CentOS7:

    groups [list|info|summary|install|upgrade|remove|mark] [GROUP]

    為了相容性考慮,為上述指令建立了别名:

    别名:group, grouplist, groupinfo, groupinstall, groupupdate, groupremove, grouperase

     autoremove [package1] [...]

      自動解除安裝: 

常用的第三方yum倉庫,Fedora EPEL,

到官方站點或鏡像站點中,下載下傳epel-release程式包,并且使用rpm指令安裝至對應的Linux發行版本,在/etc/yum.repos.d目錄中,會多出一個epel.repo的檔案;更新repolist即可使用;

 要求Linux虛拟機能夠連接配接網際網路;

yum的repo配置檔案中常用的變量:

 $releasever:目前作業系統的發行版本号的主版本号,6 7

 $arch:平台類型

 $basearch:基礎平台類型 x86_64

 $YUM0~$YUM9:10個内置的可以由使用者自定義的變量

引用變量的目的:

 為了能夠讓多種類型的用戶端可以正确的找到适合其使用的yum倉庫中的程式包 

 yum-cofig-manager 幫助制作配置檔案  --add-repo

 epel源:epel-release-VERSION.rpm

 上傳到Linux,使用rpm -ivh epel-release-VERSION.noarch.rpm

  就會直接生成一個epel.repo檔案

  建立本地yum倉庫:

  createrepo /PATH/TO/PACKAGES

      本文轉自Vincent一馬 51CTO部落格,原文連結:http://blog.51cto.com/mazhenbo/1928322,如需轉載請自行聯系原作者