天天看點

程式包管理(二)yum

<code>一、yum簡介</code>

<code>二、用戶端配置檔案</code>

<code>三、yum指令使用</code>

<code>四、*.repo的配置檔案變量</code>

<code>五、使用本地CD光牒當做yum倉庫</code>

<code>六、建立yum倉庫</code>

<code>七、程式包的編譯安裝</code>

<code>八、開源程式的源代碼的擷取與安裝</code>

<code>九、configure腳本十、後續步驟</code>

前言    

    rpm弊端:依賴關系,yum會自動解決依賴關系

    Centos:yum,dnf

    debian:apt-get

    suse:zypper

一、yum簡介  

    C/S架構:yelow dog Update Modifer

    S:檔案伺服器,放置rpm包,共享到外部主機

        描述性資訊{中繼資料檔案}:版本,包名,依賴關系

    c:支援rpm包的基本功能和yum工具

        安裝程式的時候:先下載下傳描述性資訊到本地緩存中//檢視是否存在目标程式,分析依賴關系,下載下傳,安裝,删除程式包,但是不會删除中繼資料

        //問題:中繼資料本地的和server可能沒有同步,方法:每一次使用yum的時候,同步校驗碼(中繼資料)是否相同,判斷是否更新

    同一個伺服器,多個網站位址:鏡像清單

    yum弊端:假如安裝過程中斷的話,恢複後,無法繼續,需要重新開始

        dnf主要用于解決該問題

    yum僅僅是rpm的前端工具

    要素:

        yum指令

        配置檔案

        倉庫存在

    createrepo:建立中繼資料檔案,自動分析依賴關系

            //分組:xml格式的

    yum repository:yum repo 倉庫

        存儲了衆多的rpm包,以及包的相關的中繼資料檔案(放置于特定目錄下,repodata)

        檔案伺服器:

            ftp://

            http://

            nfs://

            file://

    [root@mt ~]# rpm -qc yum

        /etc/logrotate.d/yum    //日志滾動

        /etc/yum.conf            //主配置檔案

        /etc/yum/version-groups.conf

    多個倉庫:yum會分析所有倉庫的中繼資料,都有目标程式的時候,yum會安裝最新的

二、用戶端配置檔案

    /etc/yum.conf :為所有倉庫提供公共配置

        [main] //倉庫名 repositoryid

        exactarch=1 //是否做嚴格的平台比對,i386,x86..

        installonly_limit=5 //一次同時安裝幾個程式包

         //man yum.conf //檢視配置檔案幫助手冊

    /etc/yum.repo.d/*.repo 為倉庫的指向提供配置

        [repositoryid]  //唯一

        name=随意啟用

        baserurl=[ftp|http|file|]://path/to/repository

                 url://server1/paht/to/repository

                 url://server1/paht/to/repository    //查找根據順序查找

        mirrorlist= //以鏡像方式,線上共享的檔案

                //yum需要支援插件功能,baseurl和mirrorlist選擇一個使用

        enabled=1/0 //是否啟用

        gpgcheck=0/1 //是否檢查其完整性和來源合法性

        repo_gpgcheck=0/1 //檢查倉庫的中繼資料的GPG簽名

        gpgkey=URL //密鑰檔案所在地

        enablegroups=0/1 //預設支援,是否基于組批量管理程式包

        failovermethod=roundrobin/priority 故障轉移方法,輪訓(随機抽取)|根據優先級

                            //多個倉庫的查找順序,預設為roundrobin:随機

        timeout //逾時時間,預設30s

        username

        password  //指明賬号和密碼

        cost= 預設都是1000

    https://mirrors.aliyun.com/centos/7/os/x86_64/  //這個路徑下有repodata目錄,指定到這裡就可以

    問題:baseurl和mirrorlist的差別

        baseurl:相對穩定

        mirrorlist也是一個網址,在這個網址裡能下到更新源清單

            mirrorlist是從上面查找最近的更新源

三、yum指令使用

    注意:yum是具有事務的概念的,同時隻能啟動一個

        * repolist [all|enabled|disabled]

        * repoinfo [all|enabled|disabled]

        list all|通配符  //glob風格的通配符,預設隻列出未安裝的包

             available|通配符  //尚未安裝的

             updates |通配符    //可用的更新包

             installed |通配符//已經安裝的

             extras|通配符  //拓展的倉庫内容

             obsoletes|通配符 //廢棄的包

             recent|通配符  //最近添加到repository中的

        grouplist

        search string1 [string2] [...] //搜尋包名和summary資訊        

        reinstall|install pk1 pk2     安裝

            yum reinstall zsh --enablerepo=base、

         update pk1 pk2         更新

        check-update         檢查更新

        remove|erase    pk1 pk2 解除安裝

        info                 簡要資訊

        clean                  清理本地緩存

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

        deplist //顯示依賴關系

        provides | whatprovides feature1 [feature2] [...]  //檢視指定的特性(可以是某檔案)是由哪個程式包提供的

            yum whatprovides /bin/ls

        makecache [fast]

        downgrade package1 [package2] [...  //降級安裝

        version    grouplist | groupinfo | installed | available | all

        history [summary] //安裝和更新的事務,隻檢視摘要資訊

                [info|list| package-list|package-info|summary|addon-info|redo|undo|rollback|new|sync| stats]

        localinstall/localupdate     //本地安裝,而不是倉庫中的包,現在直接使用intall和update都可以了

        grouinstall

        groupupdate

        groupremove

        groupinfo

    指定repo安裝:--enablerepo=base 

    降級安裝:yum downgrade zsh    

四、*.repo的配置檔案變量

    $releasever:代表發行版的版本,從[main]部分的distroverpkg擷取,如果沒有,則根據redhat-release包進行判斷。

    $arch:cpu體系,如i686,athlon等

    $basearch:cpu的基本體系組,如i686和athlon同屬i386,alpha和alphaev6同屬alpha。

    http://mirrors.173.com/centos/6/i386/os

    http://mirrors.173.com/centos/7/x86_64/os

    http://mirrors.173.com/centos/7/i686/os

        $releasever == [6|7|8| r //主版本号,6.7是6,7.1是7

        $arch == 平台

        $basearch 基礎平台,i386,i686的基礎平台都是i386

        $YUM0-$YUM9 //自定義了10個變量,供使用者使用

    http://updates/$releasever/$basearch

http://updates/$releasever/$basearch

http://updates/$releasever/$basearc

    yum install yum-priorities

        priority=N (N為1到99的正整數,數值越小越優先)

五、使用本地CD光牒當做yum倉庫

    mount -r -t iso9660 /dev/cdrom /mnt

    建立repo檔案

<code>        </code><code>[cdrom]</code>

<code>        </code><code>name=</code>

<code>        </code><code>baseurl=</code>

<code>        </code><code>gpgcheck=</code>

<code>        </code><code>gpgkey=</code>

<code>        </code><code>enabled=</code>

    yum install zsh --nogpgcheck

        -y 自動回答為yes

        -q quiet靜默模式

        --disablerepo,--enablerepo ;臨時禁止或者啟用repo

        --disableplugin=plugin 禁用某個插件  

        --noplugin 禁用插件

六、建立yum倉庫

    yum install createrepo

    mkdir /tmp/test //repo所在地,複制部分rpm包到該檔案中

<code>    </code><code>-x 排除某些包</code>

<code>    </code><code>-g 指明groupfile</code>

<code>    </code><code>-v 顯示過程</code>

<code>    </code><code>-c cachedir</code>

<code>    </code><code>--basedir rpm所在位置</code>

    cd /tmp/test ; createrepo ./   //直接在本目錄建立

    createrepo /tmp --basedir=tmp/test 

七、程式包的編譯安裝

    testapp-VERSION-release.src.rpm --&gt;安裝後,使用rpmbuild指令制作成二進制的rpm包,而後在安裝

    源代碼組織格式:

        多檔案:檔案中的代碼之間,很可能存在跨檔案依賴關系

        C、C++:make:依賴于(mkefile.in--&gt;makefile)檔案

            //makefile.in是一個模闆,例如安裝路徑,啟用功能等,

            //configure允許傳遞選項,指定編譯參數,到makefile.in檔案,生成makefile

        jave:maven

    源代碼---&gt;預處理---&gt;編譯(gcc)---&gt;彙編(彙編器)---&gt;連結(連結器)--&gt;執行

    編譯安裝三步驟:

        ./confiure    //生成makefile檔案

            (1)通過選項傳遞參數,指定啟用特性,安裝路徑等;執行時會參考使用者的指定以及Makefile.in檔案生成makefile檔案

            (2)檢查依賴到的外部環境

        make //make将源代碼翻譯成二進制,但是需要調用gcc實作

            根據makefile檔案,建構應用程式

        make install

            使用cp指令也可以實作

    開發工具:自動生成makefile.in

        autoconf:生成confiure腳本 //也要結合一個腳本實作,腳本中描述程式的功能等

        automake:生成makefile.in //依賴于一個腳本,腳本中包括了,各種依賴關系,編譯器版本等

    建議:安裝前檢視INSTALL,README檔案

八、開源程式的源代碼的擷取與安裝

    官方自建站點

        apache.org

        mariadb.org

        ...

    代碼托管點:

        SourceForge:

        Github.com

        code.google.com

    c/c++ :gcc (GNU C Complier) :功能強悍

    編譯C源代碼:

        前提:提供開發工具及開發環境

            開發工具:make,gcc等

            開發環境:開發庫,頭檔案

                glibc:标準庫,相容posix的标準

        通過“包組”提供開發元件

            Centos 6:“Development Tools",“Server Platform Development”

    注意:老版本的程式和新版本的程式在不同的OS上可能要求環境不一樣導緻無法安裝

九、configure腳本

    選項:指定安裝位置,指定啟用的特性

    --help:擷取支援的選項

        選項分類:

            安裝路徑設定:

                --prefix=/PATH/TO/SOMEWHERE :指定預設安裝位置,預設/usr/local

                --sysconfdir=/PATH/TO/SOMEWHERE:配置檔案路徑

            System types:編譯的操作可以執行交叉編譯:在本平台編譯其他平台的程式

            Optional Features:可選特性

                --disable-Feature:禁用該特性

                --enable-Feature:啟用該特性

            Some influential environment variables:可能會産生影響的環境變量

            OPtional Packages:可選程式包,它依賴的包

                --with-PACKAGE[=ARG] :使用該包,需要指定路徑

                --without-PACKAGE:不使用該包

                --with-include-apr

    make &amp;&amp; make install

十、後續步驟

    /usr/local/apache/    man,lib和頭檔案

    1.到處二進制程式目錄至PATH環境變量中

        /etc/profile.d/NAME.sh 

            export PATH=$PATH:/usr/local/apache/

    2.導出庫檔案路徑

        編輯/etc/ld.so.conf.d/NAME.conf

            /usr/local/apache/lib

        讓系統重新生成緩存:ldconfig -v

    3.到處頭檔案//基于連結的方式實作

        ln -sv /usr/local/apache/include /usr/include

    4.導出幫助手冊

        /etc/man.config

            添加一條MANPATH

             MANPATH     /usr/local/apache/man

        CentOS 6:/etc/man.config ;

##        CentOS 7: /etc/man_db.conf

練習:

    1.yum的配置和使用,包括yum repository

    2.編譯安裝apache 2.2 ;啟動此服務

本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1950172,如需轉載請自行聯系原作者