Linux程序包管理rpm、yum、源碼編譯

概述:

    眾所周知,Linux操作系統本身,必須要借助額外的一些軟件,才能完成某些應用的,操作系統如果沒有應用程序的填充,就無法創造出生產力,這樣即使再完美的操作系統,也毫無用處。那么本章就簡要介紹一下Linux系統上對程序包的管理,分為以下三個部分:

    1、程序包的基礎理論

    2、rpm包管理器的使用

    3、yum詳解

    4、源碼包編譯安裝

    5、軟件包管理實例演示

第一章    程序包的基礎理論

    1、二進制應用程序的組成部分:

        二進制文件、庫文件、配置文件、幫助文件

    2、程序包的命名:

        源碼包:name-VERSION.tar.gz

            VERSION:major.minor.release

            組版本號.次版本號.發行號

        RPM包:name-VERSION-release.arch.rpm

            VERSION:major.minor.release

            release.arch:rpm包的發行號

            release.os:例如2.el7.i386.rpm(el7表示支持centos7)

            常見的arch:

                x86: i386, i486, i586, i686

                x86_64: x64, x86_64, amd64

                powerpc: ppc

                跟平臺無關: noarch

            包:分類和拆包

                Application-VERSION-ARCH.rpm: 主包

                Application-devel-VERSION-ARCH.rpm 開發子包

                Application-utils-VERSION-ARHC.rpm 其它子包

                Application-libs-VERSION-ARHC.rpm 其它子包

    3、獲取程序包的途徑:

        <1>系統發行版的光盤或官方的文件服務器(或鏡像站點)

        <2>項目的官方站點

        <3>第三方組織制作的包

            EPEL:除發行光盤中的包外,將一些額外的常用的包發布在此

            專用來搜索rpm包的站點,如:

                 http://pkgs.org

                 http://rpmfind.net

                 http://rpm.pbone.net

        <4>自己制作rpm包

        注意:獲取到其軟件后,要檢查其完整性,根據官方提供的校驗碼進行校驗

    4、程序包管理器:

        源代碼–>目標二進制格式(二進制程序、庫文件、配置文件、幫助文件)–>組織成為一個或有限幾個包文件

        程序包管理器:

            功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

                1、包文件組成 (每個包獨有)

                    RPM包內的文件

                    RPM的元數據,如名稱,版本,依賴性,描述等

                    安裝或卸載時運行的腳本

                2、數據庫(公共)

                    程序包名稱及版本

                    依賴關系

                    功能說明

                    包安裝后生成的各文件路徑及校驗碼信息

                ….

        常見程序包管理器

            debian:dpt,dpkg  后綴名為.deb

                ubantu屬于debian系,包管理工具與debian相同

            redhat:rpm  后綴名為.rpm

            S.u.S.E:rpm,但是與redhat系列不兼容,后綴為.rpm

            Gentoo:ports

    5、包的依賴關系:包之間可能存在依賴關系,甚至循環依賴

        解決依賴包管理工具:

            yum: rpm包管理器的前端工具

            apt-get: deb包管理器前端工具

            zypper: suse上的rpm前端管理工具

            dnf: Fedora 18+ rpm包管理器前端管理工具

第二章    rpm包管理器的使用

    CentOS系統上使用rpm命令管理程序包:安裝、卸載、升級、查詢、校驗、數據庫維護

    1、安裝  rpm -ivh /PATH/TO/rpm包全名

         -i表示安裝

         -h:以#顯示安裝過程;每個#表示2%

         -v:顯示詳細過程

         -vv:顯示更詳細的過程

         –nodeps:忽略依賴關系(可以裝上去,但可能軟件沒法正常使用)

         –replacepkgs:重新安裝,替換原有安裝

         –force:強行安裝,可以實現重裝或降級

         –test:測試是否能夠安裝,檢查并報告依賴關系及沖突消息,實際是沒有裝的

         –nosignature:不檢查包的簽名信息,即不檢查來源合法性

         –nodigest:不檢查包完整性信息(md5之類的信息)

         –noscripts:安裝時不運行自帶的4類腳本

         –nopre:安裝時不運行pre腳本

         –nopost:安裝時不運行post腳本

         –nopreun:安裝時不運行preun腳本

         –nopostun:安裝時不運行postun腳本

         注意:rpm可以自帶腳本,有4類腳本

             preinstall:安裝之前運行的腳本,標記為%pre

             postinstall:安裝完成后運行的腳本,標記為%post

             preuninstall:卸載之前運行的腳本,標記為%preun

             postuninstall:卸載之后運行的腳本,標記為%postun

    2、升級:(選項與安裝時的選項一樣)

         rpm -Uvh /PATH/TO/新的包全名   如果裝有老版本,則升級;否則,則安裝

         rpm -Fvh /PATH/TO/新的包全名 如果裝有老版本,則升級;否則,退出

             –oldpackage 表示降級

             –force  強制升級

             –test  測試升級

         注意:

             <1>不要對內核做升級操作,linux支持多內核版本并存,因此,直接安裝新版本內核

             <2>如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本程序提供的同一個配置文件不會覆蓋原有配置文件,而是把新版本的配置文件重命名后(類似FILENAME.rpmnew樣式)存放

    3、卸載:rpm -e 包名 (注意,卸載的包不能被其他包所依賴,不然其他包會不正常)

         –nodeps:忽略依賴關系卸載

         –almatches:卸載所有匹配指定名稱的程序包的各版本

         –test  測試卸載

    4、查詢:

        rpm -q 包名  查詢指定包名是否已安裝

        rpm -qa  查詢所有已經安裝的包

        rpm -qi 包名 查詢指定包的說明信息

        rpm -ql 包名 查詢指定包安裝后生成的文件列表

        rpm -qc 包名 查詢指定軟件包安裝的配置文件

        rpm -qd 包名 查詢指定包安裝的幫助文件

        rpm -qf /PATH/TO/SOMEFILE 查詢指定的文件是由哪個RPM包安裝生成的

        rpm -q –scripts 包名 查詢指定包中包含的腳本

        rpm -q –provides 包名  查詢指定包的依賴關系

        rpm -q –whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供

        rpm -q –whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

        

        如果某個rpm包尚未安裝,我們需要查詢其相關信息:

        rpm -qpi /PATH/TO/包全名 查詢未安裝的指定包的說明信息

        rpm -qpl /PATH/TO/包全名 查詢未安裝的指定包要生成的文件列表

        也就是在之前查詢已安裝的選項中加 -p

       

        rpm2cpio 包文件|cpio –itv 預覽包內文件

        rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件

    5、校驗:檢查包安裝的文件改變信息

        rpm -V 包名

        如果沒有改動,則不會顯示任何信息,如果發生了變化,則顯示出9位的一個提示信息,如:

            S.5….T.

            每一位的意義是:(未變化的顯示為.)

            S  文件大小發生變化

            M  文件權限發生變化

            5  文件的MD5值發生變化

            D  主、次設備號發生改變

            L  readlink路徑發生改變

            U  屬主發生改變

            G  屬組發生改變

            T  文件最近一次修改時間發生改變

            P  性能發生改變

    6、包來源合法性驗證和完整性驗證:

        來源合法性驗證

            數字簽名:利用非對稱加密(公鑰-私鑰),用自己的私鑰對文件的校驗碼(利用單向加密(MD5、SHA)得出文件的特征碼)進行加密

        包完整性驗證

            centos的公鑰在/etc/pki/rpm-gpg目錄下            

                /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

            CentOS 7發行版光盤提供: RPM-GPG-KEY-CentOS-7

            rpm -qa gpg-pubkey*

        在安裝程序包時,可以先導入公鑰,然后再安裝,就不會再提示包的完整性無法驗證的提示信息了,導入方法為:

            rpm –import /PATH/TO/公鑰路徑 

            導入成功后,安裝時會自動驗證

            如果想手動驗證,可以利用 rpm -K 包全名 即可驗證

    7、重建數據庫(rpm管理器數據庫路徑/var/lib/rpm/):

        查詢、安裝、卸載、校驗操作,就是通過此處的數據庫進行

        如果該數據庫壞了,就得進行數據庫重建:

        rpm –rebuilddb 重建數據庫,一定會重新建立

        rpm –initdb 初始化數據庫,當前無任何數據庫才建立,有就不建立

第三章    yum詳解

    1、rpm程序包管理器的前端工具yum的功能:

        yum服務端的功能:能夠利用文件服務器(主要是共享rpm包):通過yum支持的文件共享機制,將各rpm包通過文件服務共享,自動解決依賴關系

            repository:倉庫

                <1>各rpm包;

                <2>依賴關系、程序包安裝后所能夠生成的文件等元數據文件(放置于特定目錄repodata下);

        yum客戶端:

            <1>配置文件:指定各個可用的yum倉庫

            <2>緩存元數據:yum客戶端會到各可用yum倉庫獲取元數據,并緩存至本地

            <3>分析元數據:分析依賴關系的包的安裝和未安裝情況,以及具體的操作請求完成元素分析,可能包括檢查依賴關系,文件列表等信息

            <4>根據元數據的分析結果,執行具體操作(安裝、卸載、查看)

    2、客戶端配置文件指定對應服務器的訪問方式:

        根據文件服務的協議,指定服務和路徑

            如果是ftp 則ftp://server/path/to/repo

            如果http 則http://server/path/to/repo

            如果是本地文件 則file:///path/to/repo

    3、yum客戶端配置

        要使用yum管理應用程序,首先要配置其可用的yum倉庫,保存在配置文件中/etc/yum.conf(保存核心配置)  /etc/yum.repo.d/*.repo(保存各倉庫的信息)

        配置文件格式:由兩段組成

            [main] 主配置段

            [repo_name] 倉庫配置段

        配置repo:

            [repo_ID]

            name=STRING

            baseurl=倉庫的訪問路徑   只需指向repodata目錄的上一級目錄即可

            enabled={1|0}      是否啟用該倉庫,如果不指定,默認是啟用狀態

            gpgcheck={1|0}     是否啟用gpg檢查包的完整性

            gpgkey=公鑰路徑    可以在本地,也可以是服務器端路徑            

            enablegroups={1|0}   該倉庫是否支持程序包組的安裝

            cost=              定義此倉庫的開銷,默認為1000,取值越小,越優先使用

            例如:

                [TEST]

                name=testyum

                baseurl=http://10.1.0.1/cobbler/ks_mirror/CentOS-6-x86_64/

                gpgcheck=1

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

                enabled=1

            配置文件中可用的4個宏:

                $releasever:程序的版本,對yum而言,指的是centos-release版本;只替換為主版本號,如CentOS 6.8則替換為6

                $arch :平臺架構

                $basearch:基礎平臺,如i686,i586等的基本架構為i386 64位系統為X86_64

                $YUM0-9:在系統中定義的環境變量,可以在yum中使用

        利用命令配置客戶端repo:

            yum-config-manager –add-repo=http://10.1.0.1/cobbler/ks_mirror/CentOS-Xx86_64/

            yum-config-manager –disable “倉庫名" 禁用倉庫
            yum-config-manager –enable “倉庫名” 啟用倉庫

        blob.png

        blob.png

        blob.png

    4、客戶端命令yum:

        語法:yum [選項] 子命令

        常見選項:

            –nogpgcheck  安裝時不進行gpg檢查

            -y   自動回答為yes

            -q   靜默模式,不輸出內容

            –disablerepo=REPO_ID   臨時禁用此處的repo源

            –enablerepo=REPO_ID   臨時啟用此處的repo源

            –noplugins   表示禁用所有插件

        yum常見子命令:

            install PACKAGE_NAME… 安裝指定包,可以同時安裝多個

            reinstall PACKAGES_NAME… 重新安裝指定包,可以同時安裝多個

            check-update 檢查可升級的包

            update PACKAGE_NAME…   升級指定的程序包,可多個

                技巧:如果檢查出來可用升級的版本有多個,例如有X-1.2.1   X-1.2.2  X-1.2.3想要升級到指定的版本,則可以用yum update PACK_NAME X-1.2.2 (也就是指定版本)

            downgrade PACKAGE_NAME  降級指定程序包

            erase|remove PACKAGE_NAME。。。 卸載指定的包,可以同時卸載多個。

                注意,用yum卸載的時候,會同時卸載依賴的包,故一般用rpm命令進行卸載

            whatprovides|provides /PATH/TO/SOMEFILE 查詢某文件是由哪個包安裝生成的(功能類似于rpm -qf)

            repolist [all|enabled|disabled] 顯示可用的yum倉庫列表,all表示所有的倉庫信息,enabled表示可用的倉庫信息,disabled表示不可用的倉庫信息,如果不指定,默認顯示可用的倉庫信息

            clean all|packages|metadata|expire-cache|rpmdb|plugins 可以指定清除本地緩存的all所有緩存信息,packages包的信息,metadate元數據信息,expire-cache過期的包的信息,rpmdb rpm數據的信息,plugins插件信息(訪問yum服務器時會緩存一些數據到本地/var/cache/yum下)

            list 列出所有已安裝,和倉庫中所有未安裝的包,后面顯示為@….或installed表示已經安裝了的

                list installed 表示只顯示已安裝的包的信息

                list available 表示只顯示可用的,未安裝的包的信息

                list “通配符風格的表達式”   列出滿足條件的包

            info PACKAGE_NAME 表示顯示出指定包的信息

            groupinfo "PACKAGE_GROUP_NAME" 表示顯示指定包組的信息

                三個跟開發相關的常用包組

                    Desktop Platform Development:桌面平臺開發環境

                    Server Platform Development:服務器平臺開發環境

                    Development Tools:開發工具包

            grouplist 列出所有包組信息

            groupinstall “PACKAGE_GROUP_NAME”  安裝指定包組

            groupremove “PACKAGE_GROUP_NAME”  卸載指定包組

            history  可以顯示yum命令的使用歷史,誰、做了什么操作

                    yum history   表示顯示yum歷史
                    yum history info 6   顯示yum歷史中第6條歷史的詳細信息
                    yum history undo 6   撤銷yum歷史中第6條歷史所做出的改變,相當于還原

            install /PATH/TO/PACKAGE_FILE  不從yum倉庫安裝包,而是從本地安裝,從本地安裝的時候,有時候會安裝不上去,因為yum會默認檢查包的完整性,要想安裝,要在包路徑后加上選項–nogpgcheck

            makecache 構建緩存

            search STRING  根據提供的關鍵字,搜索程序的包名及summary信息

        blob.png

        QQ圖片20160823185238.png

        2.png

        3.png

        4.png

    5、yum日志:/var/log/yum.log

        blob.png

    6、創建服務端yum倉庫

        先下載倉庫中諸多的rpm包到某個目錄

        創建yum倉庫:

            要創建yum倉庫,必須要先安裝createrepo程序,該程序能夠自動創建repodata目錄文件

                使用createrepo命令創建repodata目錄:

                語法:createrepo [OPTIONS] <DIRECTORY>

                基本不用加選項,直接后面跟上包的路徑,代表直接在包路徑里面生成repodata目錄

        步驟:

            1、下載相應的rpm包到某個目錄,本實驗為/testdir/repotest/目錄

            2、切換到該rpm包目錄

            3、利用createrepo命令,針對當前目錄創建repo倉庫repodate文件

            4、驗證倉庫是否可用

        blob.png

        blob.png

        blob.png

        blob.png

        blob.png

第四章    源碼包編譯安裝

    1、源碼包的相關介紹

        有些包的格式為XXXXX.src.rpm這類包雖然是rpm的格式,但是包里面的內容并沒有真正編譯,對于這類包,需要利用rpmbuild命令制作成二進制格式的rpm包,而后再安裝;

還有些包直接就是src的源碼包,這樣需要編譯安裝了,另外有些時候,現有編譯過后的rpm包在有些特性上不能滿足我們的使用時,也需要手動下載源碼包,然后進行編譯安裝

     

        開源程序源代碼的獲?。?/p>

            官方自建站點:appache.org、mariadb.db

            代碼托管站點:SourceForge、Github.com、code.google.com

    

    2、源代碼組織格式:

        多文件:文件中的代碼之間,很可能存在跨文件依賴關系
        C、 C++: make (項目管理器, configure –>Makefile.in –> makefile)

    3、C、C++編譯安裝的三步驟:

        <1>./configure:

            功能:

                <a>通過選項傳遞參數、指定啟用特性、安裝路徑等、執行時會參考用戶指定以及Makefile.in生成makefile;

                <b>檢查依賴到的外部環境,

        <2>make

            功能:根據makefile 文件,構建應用程序

        <3>make install

            功能:將文件利用install命令復制到指定路徑

        在安裝前,應該查看源碼包內的INSTALL、README文檔

    4、編譯C源代碼:(注意:./configure、make、make install都要cd切換到源碼包解壓展開后的目錄里面進行)

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

            開發工具:make、gcc等

            開發環境:開發庫、頭文件

            glibc:標準庫

            以上的條件在Linux系統上通過安裝包組來提供:

                centos 6:“Development Tools” “Server Platform Development”

                centos 7: “Development Tools
Development” “Creative Workstation”

        第一步:./configure腳本

            選項:指定安裝位置、指定啟用特性等

                –help可以獲取其支持使用的選項

            選項分類:

                安裝路徑設定:

                    –prefix=/PATH/TO/SOMEWHERE  指定默認安裝位置,默認為/usr/local下

                    –sysconfdir=/PATH/TO/SOMEWHERE  配置文件安裝路徑

                    …..

                system types:指明編譯時系統類型(只在交叉編譯時會使用)

                optional features:可選特性

                    –disable-FEATURE

                    –enable-FEATURE[=ARG]

                optional packages:可選程序包、依賴到的程序包

                    –with-PACKAGE [=ARG]

                    –without-PACKAGE

        第二步:make

        第三步:make install

    5、編譯安裝完成后的相關操作:(假設編譯安裝的目錄在/usr/local/http2/目錄下)

        <1>導出二進制程序(bin)目錄至PATH環境變量中,否則需要用絕對路徑使用編譯安裝的文件生成的二進制程序

            導出方法:

                在/etc/profile.d/目錄下新建一個該程序的文件名.sh的文件

                在文件里面添加二進制程序路徑

                export PATH=$PATH:/usr/local/http2/bin/

        <2>導出庫文件路徑(lib)

            新建文件/etc/ld.so.conf.d/NAME.conf,在文件中添加:/usr/local/http2/lib

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

        <3>導出頭文件(include)

            可以將安裝路徑下的include的cp到/usr/include目錄下

            也可以創建軟連接到該目錄下

                ln -sv /usr/local/http2/include/ /usr/include/http2/

        <4>導出幫助手冊

            編輯/etc/man.conf文件

            將安裝目錄下的man路徑添加一個MANPATH條目:

            MANPATH /usr/local/http2/man

第五章    軟件包管理實例演示

      

    1、刪除kernel包后,無法啟動,并恢復之

        步驟:

        <1>刪除kernel并重啟

        1.png

        2.png

        

        <2>插入系統安裝光盤,修改BIOS中BOOT啟動項為從光盤啟動

        3.png

        <3>進入rescue救援模式

        4.png

        5.png

        6.png

        7.png

        <4>在救援模式下,利用光盤自帶的微型系統,運行rpm安裝命令,安裝kernel。因為進入救援模式下的系統為光盤的系統,如果用rpm安裝,則默認安裝位置是光盤上的系統,而我們希望的是安裝到本機的系統,利用df命令可以看到本機的系統被掛載到/mnt/sysimage路徑下,因此在利用rpm來安裝kernel軟件包時,需要利用–root=/mnt/sysimage 

        8.png

        10.png

        <5>安裝完成后重啟,進入本地系統進行驗證

        11.png

        12.png

    2、源碼安裝apache

        步驟:

        <1>下載源碼包并解壓至某目錄

        1.png

        

        <2>cd切換到解壓目錄并查看相關編譯安裝幫助和選項信息

        2.png

        <3>執行./configure

        3.png

        4.png

        <4>執行make

        5.png

        6.png

        <5>執行make install

        7.png        

        8.png

        <6>導入二進制程序文件路徑到PATH環境變量

        erjinzhi.png

        <7>導入庫文件

        kufile.png

        <8>導入頭文件

        include.png

        <9>導入man幫助文件路徑

        man.png

        <10>啟動服務,驗證是否安裝成功

        11.png

        QQ圖片20160823211625.png

        blob.png

原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/37768

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • 第五周作業

    查看鏈接:http://note.youdao.com/noteshare?id=1ed7b36aa41cbdc1154e3e5b54e43fce

    Linux干貨 2016-09-19
  • 關于VIM編輯器

                                                      &nbsp…

    系統運維 2016-08-11
  • N-22-南京-修 第三周博客作業

    #1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [xujie@localhost ~]$ who | cut -d " " -f1 | sort -u #2、取出最后登錄到當前系統的用戶的相關信息。 [root@localhost xujie]# last -x | head -1 #3、取出…

    Linux干貨 2016-09-15
  • 練習-vim的使用

    vi編輯器是linux上最常用的編輯器,vim是vi增強版, 一、vim的幾種模式     編輯模式、插入模式、命令行模式     編輯模式:可以進行光標移動,字符刪除,行的增刪復制粘貼等操作  插入模式:對字符進行編輯,  命令行模式:通過各種命令進行保存,查找,替換,環境設置等操作 &…

    Linux干貨 2016-07-04
  • 20160809作業

    一、如何設置tab縮進為4個字符       臨時設置:set tabstop=4       全局設置vim /etc/vimrc—>添加set tabstop=4       當前用戶生效,手動添加文…

    Linux干貨 2016-08-10
  • yum前端軟件包管理器

    yum是什么     Yum (Yellow dog Updater, Modified) 由Duke University團隊,修改Yellow Dog Linux的Yellow Dog Updater開發而成,是一個基于 RPM 包管理的字符前端軟件包管理器。能夠從指定的服務器自動下載…

    Linux干貨 2015-05-13
欧美性久久久久