linux 初學者之yum使用

一、什麼是yum



Yum(全稱爲 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器。基於RPM包管理,能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝。


yum工作流程


要用yum程序來管理程序包,得先需要有一個yum倉庫。yum和yum倉庫之間是通過文件傳輸協議來實現的。yum倉庫的構建是在yum倉庫的某個路徑下放上一堆的rpm包並使用一個倉庫構建程序把這對rpm包的信息抽取出來保存在repodata的目錄下當作這個倉庫元數據保存起來。客戶端每一次使用一個倉庫時,首先會聯繫這個倉庫,獲取這個倉庫的元數據緩存在本地,從而知道這個倉庫上到底有哪些程序包,每一個程序包到底依賴於哪個程序,每一個程序包安裝時生產哪些文件目錄列表等等一些信息。但需要安裝數據包時,在本地通過分析已經安裝的數據包,未安裝的數據包,獲取差異性,把本地沒有的、此時又需要的數據包通過文件傳輸協議,從yum倉庫中下載下來,然後調用rpm程序工具完成安裝


從yum的工作流程可以看出,yum的核心是yum倉庫中的各種程序包及倉庫程序包信息的元數據repodata,使用yum的重點是構建yum倉庫


yum與rpm的關係

rpm爲基礎包管理器,可以獨立工作

yum則是rpm的前端工具,是rpm的補充,不能獨立工作。



二、yum的使用

(一)從0開始構建本地的yum倉庫

(1) 在基於發行版安裝樹安裝createrepo程序包

# yum install createrepo

createrepo是構建倉庫時生存repo的命令。

(2) 確定repository輸出方式:

     

      A、本地輸出:提供一個放置rpm包的本地路徑;

      B、網絡輸出:提供一個文件服務器,配置好ftp服務或http服務;

          a、配置ftp服務:

                 安裝程序包: # yum install vsftpd

                 (系統默認的文件存放路徑爲:/var/ftp/pub)

                 啓動服務:# service vsftpd start

                 關閉防火牆:# service iptables stop

                 如此可以在windows瀏覽器裏輸入 ftp://172.16.20.97(換成自己linux的ip地址) 回車,這時會有一個pub目錄,進行下面的(4)的createrepo命令後就會在pub目錄裏有一個repodata了。

這時可以將此時得到的地址,編輯/etc/yum.repos.de/NAME.repo的baseurl了

創建完就可以yum clean all,再 yum makecache,更新repos

工作done!!!

           b、http服務:

                  安裝程序包:# yum install httpd

                  (系統默認的文件存放路徑:/var/www/html)

                  啓動服務:# service httpd start

                  PS:確保防火牆服務關閉;


 (3) 在準備好的目錄中放置rpm程序包文件


本地輸出的,就放置在自己準備好的目錄裏;ftp輸出的就放置在/var/ftp/pub裏;http輸出的就放置在/var/www/html裏。


 (4) 對此目錄運行createrepo命令

          # createrepo /DIR/IN/LOCAL  (/DIR/IN/LOCAL爲自己準備好的存儲程序包的目錄)

          # createrepo /var/ftp/pub   

          # createrepo /var/www/html

運行上述命令後,程序會自動在該目錄裏生成一個“repodata”文件目錄,裏面存放了本程序包倉庫的元數據。


(5)修改倉庫配置文件

  A. 知識補充

配置文件:指向倉庫的位置以及相關的各種配置信息;每個yum命令行可以同時指向多個倉庫,倉庫間可以有優先級等相關的配置;

 

有兩部分組成:

主配置文件:/etc/yum.conf

爲各倉庫指向提供公共配置文件;

各倉庫的配置:/etc/yum.repos.d/*.repo

man yum.conf查看詳細說明


wKioL1UqVW_D-CKdAAV-2Q7_WOQ318.jpg

各倉庫配置參數:

a、[repositoryid]

# 對於當前系統的yum來講,此repositoryid用於唯一標識此repository指向,因此,其必須惟一;

b、name=

# 當前倉庫描述信息;

c、baseurl=url://path/to/repository/

    url2://path/to/repository/

    url3://path/to/repository/

# 指明repository的訪問路徑;通常爲一個文件服務器上輸出的某repository;(和mirrorslist是有排斥性的)

 

url:

ftp服務

ftp://SERVER/PATH/TO/REPOSITORY

http服務

http://SERVER/PATH/TO/REPOSITORY

本地目錄:

file:///PATH/TO/REPOSTIROY

倉庫指向的路徑:repodata目錄所在的父目錄

http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/

d、enabled={1|0}

此倉庫是否可被使用,不指明的話默認是1

e、gpgcheck={1|0}

是否對程序包做校驗,不指明的話默認也爲1

f、gpgkey=url://path/to/keyfile

指明gpgkey文件路徑;當gpgcheck=1時必須指明gpgkey的路徑

g、cost=#

指明當前repository的訪問開銷,默認爲1000;訪問消耗越小的越優先允許其訪問本倉庫


wKioL1UqWp7x6cmaAAGB0d8-GzI985.jpg

  B. 操作:

     

[root@test ~]# vim /etc/yum.repos.d/test.repo  其中test可以換成自己取的易辨識的文件名


然後安裝上面說明,設置好repo id,name,baseurl,gpgcheck,enabled基本配置即可。


(6)更新repolist

(6.1)清理緩存

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

                            [程序包|倉庫的元數據|過期的緩存|rpm數據庫|插件|所有緩存]

                    PS:前面都是清理指定的文件數據,all是清理除目錄的其他所有文件數據

命令格式例子: # yum clean all


wKiom1UqXkqyncGgAAVlarKDXU8283.jpg

(6.2)重新創建緩存

      makecache: 緩存創建,自動連接至每一個可用倉庫,下載其元數據,將其創建爲緩存

    命令格式:# yum makecache 

(6.3)查看所有可用倉庫

                 repolist: 列出已經配置的所有可用倉庫        (默認是隻列出已經啓用的,即enabled=1的倉庫)

                    repolist [all|enabled|disabled]

       PS:用# yum repolist 命令,系統會自動更新並重建yum 倉庫的緩存


(二)yum倉庫的使用與維護


(1)程序包查看:

            (1.1)# yum list [all | glob_exp1] [glob_exp2] [...]

[root@test ~]# yum list bash

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

Installed Packages

bash.x86_64                             4.1.2-29.el6                              @anaconda-CentOS-201410241409.x86_64/6.6

 [root@test ~]#


            (1.2)# yum list {available|updates|installed|extras|obsoletes|recent} [glob_exp1] [...]

available: 可安裝而尚未安裝的

updates:可用於升級的包

installed:已安裝過的包

extras:系統已安裝但任何一個yum倉庫都不存在的包

obsoletes:系統已安裝但已被yum倉庫廢棄的包(有更新的包供升級)

recent:最近剛剛加進倉庫的包

           (1.3) # yum grouplist [hidden] [groupwildcard] [...]  程序包組的查看

可以用# yum grouplist查看yum分的各個組:

        Installed Groups:已安裝的組

        Installed Language Groups:已安裝的語言組

        Available Groups:可用的組

        Available Language Groups:可用的語言組

每個組下面都有列表,可選擇安裝一個組或者多個組。

 

(2)程序包安裝:

           # yum  install package1 [package2] [...]

 

            PS: 只需要提供一個或多個包名(如 bash,zsh,xen);

 

            如果某包有在不同倉庫中有多個不同版本,默認會安裝最新版本,因此不需要提供版本號、發行號、適用的平臺等信息;

 

            如果要安裝指定版本:install PACKAGE-VERSION ...

 

(3)重新安裝(覆蓋安裝)

            # yum reinstall package1 [package2] [...]

 

(4)程序包升級:包名+版本號

           # yum  update [package1] [package2] [...]

  upgrade package1 [package2] [...]這個已經不常用了,紅帽7已經可以用update代替了

 

(5) 程序包降級:包名+版本號

            # yum downgrade package1 [package2] [...]

 

(6) 檢查有哪些升級可用:

            # yum check-update

 

(7)卸載:

           # yum  remove | erase  package1 [package2] [...]

 

            所有依賴於正卸載的程序包的程序包會被一併卸載

 

(8)查詢:

            (8.1)查詢程序的相關簡要信息:

                        # yum info PACKAGE ...

 

            (8.2)在包名和sumary信息中搜索指定的關鍵字:

                        # yum search KEYWORD ...

 

            (8.3)查詢指定文件由哪個程序包安裝生成:

                         # yum provides|whatprovides /PATH/TO/SOMEFILE

                          例子:

[root@test ~]# yum provides /bin/echo
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
coreutils-8.4-37.el6.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo        : base-test
Matched from:
Filename    : /bin/echo  (後面還有多行顯示內容,太長,省略)

 


(9)安裝或升級本地的程序包文件:

            # yum localinstall rpmfile1 [rpmfile2] [...]

 

            用於安裝倉庫中並不存在的程序包文件,這些程序包有可能又依賴於倉庫中的某些程序包;

 

            # yum localupdate rpmfile1 [rpmfile2] [...]

       上面安裝和升級裏的rpmfile1和rpmfile2 要指明有效路徑——使用絕對路徑或者切換到程序包所在目錄裏使用命令。


               PS:在紅帽7中已經統一到 install和update、remove中了,但仍能用這個命名。

 

(10)包組管理:


           (10.1) 列出所有包組:# yum grouplist

包組一般都多詞,中間有空格,所以一個包組需要用引號引起來。否則會被當作多個包組而報錯。

[root@test ~]# yum groupinfo Compatibility libraries
Loaded plugins: fastestmirror, refresh-packagekit,
security
Setting up Group Process
Loading mirror speeds from cached hostfile
Warning: Group Compatibility does not exist.
Warning: Group libraries does not exist.

            (10.2)顯示指定包組詳情:# yum groupinfo group1 [...]

包組的信息只能用groupinfo查看,info報錯

[root@test ~]# yum info "Compatibility libraries"
Loaded plugins: fastestmirror, refresh-packagekit,
security
Loading mirror speeds from cached hostfile
Error: No matching Packages to list

            (10.3)安裝:# yum groupinstall group1 [group2] [...]

 

            (10.4)卸載:# yum groupremove group1 [group2] [...]

 

            (10.5)升級:# yum groupupdate group1 [group2] [...]

               

在紅帽7中已經統一到install、remove、update中,組名加雙引號,引號前加@

            Note: 可直接用install、remove或update來管理包組:

                    @GROUP_NAME

 

                 例子:  #  yum install @"Server Platform Development"

 

三、練習

   創建xen4倉庫,分別通過本地及ftphttp服務輸出


    練習題解參考見附錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章