程序包管理


程序包管理:就是能相對安裝程序,並能安裝後刪除軟件包的一類工具

程序包管理的前端工具:就是能自動查詢包之間的依賴關係,並能自動下載和安裝的一個工具

yumrpm包管理器的前端工具;

   apt-getdeb包管理器前端工具;

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

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

  yum不是取代rpm的,它是rpm的補充和完善

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

1、程序的組成組成清單 (每個包獨有)

     文件清單

     安裝或卸載時運行的腳本

2、數據庫(公共的)

    程序包名稱及版本

    依賴關係;

    功能說明;

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

  管理程序包的方式:

     使用包管理器:rpm

     使用前端工具:yum,dnf

  獲取程序包的途徑:

    (1)系統發版的光盤或官方的服務器;

        CentOS鏡像:

                                                         http://mirrors.aliyun.com                                           http://mirrors.sohu.com

                http://mirrors.163.com

    (2)項目官方站點

    (3)第三方組織:

         Fedora-EPEL

         搜索引擎:

          http://pkgs.org

         http://rpmfind.net

         http://rpm.pbone.net

    (4)自己製作

         建議:檢查其合法性,來源合法性以及程序包的完整性;

 

下面介紹下,CentOS系統上使用rpm管理程序包的常用的命令:

         安裝、卸載、升級、查詢、校驗、數據庫維護等操作

    安裝:

         命令:rpm{-i|--install} [install-options] PACKAGE_FILE ...

              -v:verbose 顯示過程

               -vv:  顯示更加詳細的過程

              -h:#顯示程序包管理執行進度;每個#表示2%的進度

    rpm -ivh  PACKAGE_FILE ... 一般常用的命令

      install的選項  [install-options]

                                                       --test:測試安裝,但不真正執行安裝過程;dry run模式;

                                                       --nodeps:忽略依賴關係;

                                                       --replacepkgs:重新安裝;

                                                       --nosignature:不檢查來源合法性;

                                                       --nodigest:不檢查包完整性;

                                                       --noscipts:不執行程序包腳本片斷;

    升級:

        rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...

        rpm{-F|--freshen} [install-options] PACKAGE_FILE ...

         upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”;

         freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作;

    常用的命令格式:

        rpm-Uvh PACKAGE_FILE ...

       rpm-Fvh PACKAGE_FILE ...

        --oldpackage:降級;

       --force:強行升級;

    注意:(1) 不要對內核做升級操作(因爲升級後要重啓才能使用(4.0以前的內核都需要重啓)如果不能啓動,那麼你的系統就會掛掉);Linux支持多內核版本並存,因此,對直接安裝新版本內核;

       (2) 如果原程序包的配置文件安裝後曾被修改,長級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)後保留;

   

    查詢:

       rpm{-q|--query} [select-options] [query-options]

        [select-options]

            -a:所有包

            -f:查看指定的文件由哪個程序包安裝生成

            -p/PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;

            --whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供;

            --whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;

        [query-options]

            --changelog:查詢rpm包的changlog

            -c:查詢程序的配置文件

            -d:查詢程序的文檔,即幫助手冊

            -i:information

            -l:查看指定的程序包安裝後生成的所有文件;

            --scripts:程序包自帶的腳本片斷

            -R:查詢指定的程序包所依賴的CAPABILITY

            --provides:列出指定程序包所提供的CAPABILITY

       常用用法:

        -qiPACKAGE-qf FILE-qc PACKAGE -ql PACKAGE -qd PACKAGE

        -qpiPACKAGE_FILE-qpl PACKAGE_FILE ...

        -qa包括所有選項

    卸載:

      如果你卸載的包有依賴關係,是不會讓你卸載的,可以使用選項--nodeps進行強制卸載

         rpm{-e|--erase} [--allmatches] [--nodeps] [--noscripts]

          [--notriggers] [--test] PACKAGE_NAME ...

    校驗:校驗需要先導入公鑰

    命令:rpm {-V|--verify}[select-options] [verify-options]

        每一個對應爲表示的意義

                S file Size differs 文件大小

                M Mode differs (includes permissions andfile type)權限

                5 digest (formerly MD5 sum) differs表示MD5

                D Device major/minor number mismatch設備文件的設備號

                L readLink(2) path mismatch路徑

                U User ownership differs屬主

                G Group ownership differs屬組

                T mTime differs最近一次的修改時間

                P caPabilities differ功能

         包來源合法性驗證及完整性驗證:

           完整性驗證:SHA256

           來源合法性驗證:RSA

  導入公鑰:

        rpm--import /PATH/FROM/GPG-PUBKEY-FILE

         CentOS7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7

        在其他官方站點的需要下載他們的密鑰

         一般爲了安全,儘量只使用光盤中的包,EPEL的包或者官方網站的包

    數據庫重建:

       rpm{--initdb|--rebuilddb}

        initdb:初始化

           如果事先不存在數據庫,則新建之;否則,不執行任何操作;

    rebuilddb:重建

          無論當前存在與否,直接重新創建數據庫;

        一般情況這兩個命令不會使用,還有rpm命令只允許一個終端進行操作


下面演示一下CentOS 7rpm命令管理程序包

1、安裝

首先掛載CentOS的鏡像光盤,然後切換到光盤目錄中,然後進入Packages目錄中,然後ls查看一下,會發現很多以rpm結尾的包

以這個包zsh-html-5.0.2-7.el7.x86_64.rpm爲例安裝一下,可以看到

wKioL1Xi-crTq4IGAADF7hz9am0591.jpg

如果安裝的包有依賴關係,就會比較麻煩,如果你安裝的包需要依賴其他包,而那個包你又沒有安裝,這個時候安裝就會失敗。

以這個php-fpm-5.4.16-23.el7_0.3.x86_64.rpm包爲例

wKiom1Xi97uTTMIuAAC9z10TCoQ721.jpg

可以使用--nodeps選項忽略這個依賴關係,把這個包裝進去,是可以安裝成功的,但能不能運行就不知道了,

wKiom1Xi98vxwQP1AADR6eCuJ-8442.jpg

還有其他選項可以使用,在這裏就不在演示,如有需要可以使用man命令查看

升級和安裝的過程類似在這裏不再演示,

2、  查詢

rpm  –qa查詢所有安裝過的包,顯示信息比較多,在這裏就不再演示了

rpm  -qa | grep php’查詢指定格式的安裝過的包,‘|’這是管道命令grep是搜索文本的命令,如果有不明白的可以查看Linux基礎入門的內容

wKioL1Xi-gCDIuciAABUZJYqTyw482.jpg

rpm  -qf  /etc/fstab 查看這個文件是由那個程序生成的

wKiom1Xi9-2SnvXkAACENdFhv68553.jpg

rpm  -q –whatrequires /bin/ls 查詢這個文件被哪個程序或軟件依賴

wKioL1Xi-hWDHRa_AABb5M_le54098.jpg

rpm -q --changelog zsh 查看rpm包製作的時候的修改的日誌

wKiom1Xi-ADDACVdAAIZ1Q8lUU4717.jpg

rpm -q -c zsh  查詢zsh這個包安裝的配置文件

wKioL1Xi-iehC2cSAACFlEc5Txo387.jpg

rpm -ql -p php-common-5.4.16-23.el7_0.3.x86_64.rpm 查看未安裝的軟件包安裝後生成的文件

wKiom1Xi-BLQ5enlAAKtmlbHogE222.jpg

常用的有-qi-ql-qd...還有很多就不一一演示了

3、  卸載

rpm -e  zsh 然後使用rpm  –q  zsh查看是否卸載成功

wKiom1Xi-ByiJzaqAABUlp9lLw0359.jpg

4、  校驗

zsh-5.0.2-7.el7.x86_64.rpm這個包爲例,先rpm  -ql zsh查看下生成的文件,然後選擇一個文件對它進行修改,然後進行校驗查看

wKioL1Xi-k6iXzCXAAD4hBxnIKA151.jpg

S代表大小變了5標識校驗碼變了 T最近一次修改時間也變了

包來源合法性驗證及完整性驗證:這一般在包安裝前驗證

         CentOS7光盤中的包來操作

         首先使用rpm --import/PATH/FROM/GPG-PUBKEY-FILE 導入密鑰

CentOS7中是PRM-GPG-KEY-CentOS-7這個文件,然後就會自動校驗了

如果不導入,在安裝關盤中的包時就會出一個警告,如果導入了,安裝光盤裏的包就不會出現警告了

 

安裝包的時候要自己解決關係就比較麻煩和複雜,這就需要一個工具來自動檢測依賴關係並進行自動下載和安裝這些包的工具,這就叫程序包前端管理工具,如yumdnf

 

程序包前端管理工具:

yum的工作方式簡單來說yum客戶端要連接到一個文件服務器,裏面存放很多的rpm包,yum會根據URL(統一資源定位符)進去下載所依賴的rpm包並自動安裝這些包。

CentOS中有yumdnf

YUM

yum repository yum repo yum倉庫,裏面存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄下:repodata)。默認情況下,鏡像光盤就是一個倉庫

         yum倉庫要是文件服務器:

             協議有:

                  ftp://

                 http://

                  nfs://

              file:///

要想使用yum就必須要先安裝,使用rpm –q yum查看下是否安裝,如沒有安裝就需要進行安裝才能做以下的操作;如果安裝過,使用-qc查看下配置文件的路徑

wKiom1Xi-DrRlbx-AADC7rSS_F4688.jpg

yum客戶端:

  配置文件:

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

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

CentOS中,只要不是以.repo結尾的倉庫配置文件,就不會被使用

    倉庫指向的定義:

        [repositoryID] 倉庫ID(唯一)

         name=Some name for thisrepository  倉庫名

        baseurl=url://path/to/repository/ 指向倉庫的訪問路徑,可以指定多個

        enabled={1|0}  是否啓用此倉庫,默認爲啓用

        gpgcheck={1|0}   是否檢查合法性及完整性

        gpgkey=URL   指明密鑰文件

        enablegroups={1|0}  是否允許支持組來批量管理程序包

        failovermethod={roundrobin|priority}  故障轉移方法

              默認爲:roundrobin,意爲隨機挑選;

         注意:等號左右不能有空格

當有很多倉庫,yum會使用最新rpm包的倉庫,如果包的新舊一樣,可以使用cost來設置優先級,

          cost=

           默認爲1000

yum命令的用法:

    命令格式  yum [options] [command] [package ...]

    常用的有:

       顯示倉庫列表:repolist[all|enabled|disabled]

    顯示程序包:

        list

         # yum list [all | glob_exp1][glob_exp2] [...]

         # yum list{available|installed|updates} [glob_exp1] [...]

    安裝程序包:

      install package1 [package2] [...] 還可以指定版本號進行安裝

    重新安裝包:覆蓋的形式進行安裝

reinstall package1 [package2] [...] 

    升級程序包:

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

    降級程序包:

      downgrade package1 [package2] [...]

    檢查可用升級:

      check-update

    卸載程序包:

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

    查看程序包information

         info [...]

    查看指定的特性(可以是某文件)是由哪個程序包所提供:

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

    清理本地緩存:

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

    構建緩存:

       makecache

    搜索:

         search  string1 [string2] [...]

             以指定的關鍵字搜索程序包名及summary信息;

    查看指定包所依賴的capabilities:(即包所依賴的其他包或文件)

         deplist  package1 [package2] [...]

    查看yum事務歷史:每一次yum執行安裝、卸載和刪除都是啓動了一次yum事務

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

    安裝及升級本地程序包:

       *localinstall rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use install)

       * localupdate rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use update)

    包組管理的相關命令:

       * groupinstall group1 [group2] [...]

       * groupupdate group1 [group2] [...]

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

       * groupremove group1 [group2] [...]

       * groupinfo group1 [...]

配置一個yum執行,並設置倉庫,以CentOS6.6爲例:

首先切換到/etc/yum.repos.d/這個路徑下,使用ls列出所有的倉庫文件

默認啓用的是CentOS-Base.repo這個文件中的,其他的都默認不啓用,

CentOS-Base.repo重命名爲CentOS-Base.repo.bak,然後這個倉庫問價就不可用了,然後我們創建自己的倉庫文件,(這裏我用的是自己的ftp服務器,下面如果你的不能安裝,你就把原來的倉庫文件還原,聯網的情況下,也是可以安裝成功的),在此目錄下創建一個文件並編輯vim centos-local.repo

wKiom1Xi-JfzVSLXAADFL8qYGgo842.jpg

然後保存退出,使用yum repolist列出可用的倉庫的信息

wKioL1Xi-r_j8eU7AAFT6z14Y14705.jpg

這樣倉庫就可以使用了

yum list 顯示所有的程序包,此命令還支持glob匹配

wKioL1Xi-s2g63HvAAKF1GERRUg177.jpg

安裝程序包

yum  install gcc

wKiom1Xi-Lvxi6flAAQ853fscvY750.jpg

有四個依賴包,然後輸入Y進行安裝

wKioL1Xi-uiQZXvrAAJvW-yVTls061.jpg

這就安裝好了,

查看包的簡要信息

wKiom1Xi-N7hE2OVAAHKiET8ouo684.jpg

搜索包名及summary信息

wKiom1Xi-O3CU1GgAAINZ3AOyJ0916.jpg

查看指定包所依賴的capabilities

wKioL1Xi-xXC9lVmAANzJV-3kVw649.jpg

查看yum的歷史事務

wKiom1Xi-QHC1w15AAEJ9-_KWF4489.jpg

安裝包組,使用yum grouplist 查看包組,可以看到已安裝的和可以安裝的包組

以這個命令爲例,安裝DevelopmentTools這個包組

 yum groupinstall "Development Tools"

wKioL1Xi-yqj0WYiAANbWqgJSBo535.jpg

出現Complete!這樣就安裝完成了

 

如何使用光盤當作本地yum倉庫:

 

    (1) 掛載光盤至某目錄,例如/media/cdrom

            # mount -r  /dev/cdrom /media/cdrom

    (2) 創建配置文件

        [CentOS7]

        name=

        baseurl=

        gpgcheck=

        enabled=

CentOS7爲例,使用光盤當作本地yum倉庫

首先掛載光驅,創建一個目錄/media/cdrom,然後使用

mount –r/dev/cdrom /media/cdrom

wKiom1Xi-UejPfrFAAIw8VIVFsw549.jpg

出現這個設備,就是掛載成功了

然後cd  /media/cdrom目錄下

wKiom1Xi-WyjiyKIAADMmfw7Th4438.jpg

repodata這個目錄就是可以直接指定的倉庫目錄

然後cd/etc/yum.repos.d/下使用ls查看下,如果有其他.repo結尾的文件,先給改名,然後創建一個名爲local.repo的本地倉庫

wKioL1Xi-5aAHjlWAABSUUbtbTY969.jpg

使用yumrepolist 就可以看到自己創建的本地倉庫了

wKiom1Xi-YTRdhhcAAEAqRhJ4D4402.jpg

這樣使用光盤創建本地倉庫就完成了

然後就可以安裝或更新軟件包了

 

 

    yum的命令行選項:

        --nogpgcheck:禁止進行gpgcheck

        -y: 自動回答爲“yes

        -q:靜默模式;

        --disablerepo=repoidglob:臨時禁用此處指定的repo

        --enablerepo=repoidglob:臨時啓用此處指定的repo

        --noplugins:禁用所有插件

   yumrepo配置文件中可用的變量:

        $releasever: 當前OS的發行版的主版本號

        $arch: 平臺

        $basearch:基礎平臺;

        $YUM0-$YUM9

    創建yum倉庫:

      自建倉庫,首先要有指向光盤或者指向互聯網上的鏡像的倉庫,因爲要先裝createrepo

    使用yum  install createrepo 安裝,createrepo可以幫助我們去組織和管理創建出

    rpm包的相關的文件,

  createrepo命令的使用:

    createrepo[options] <directory>  選項一般都省略

 

CentOS6.6爲例,創建倉庫:

下載一些rpm包到本地,然後把有限的rpm包創建成倉庫我用的是本地的文件服務器,

首先使用lftp  172.16.0.1 登錄到服務器上,然後進入pub目錄下,ls找到Sources,然後切入Sources目錄中

wKioL1Xi_B_CF0a0AAPwMulZOws251.jpg

找到6.x86_64目錄,然後依次進入這些目錄xen4centos/x86_64/Packages,這裏面有很多rpm包,把它們都下載到本地目錄下

wKiom1Xi-g7h3Uj6AAJ2COuqP7g767.jpg

lftp172.16.0.1:/pub/Sources/6.x86_64/xen4centos/x86_64/Packages> 在這個模式下使用!加上命令執行的是bash操作

wKioL1Xi_D7Bqcf6AAEyjwC8OHQ740.jpg

建一個目錄/yum/repo,然後切換到本地的/yum/repo然後把Packages中的所有.rpm結尾的全部下載到/yum/repo

wKiom1Xi-knDOLl1AADqQucGG5M996.jpg

下載完成後,使用bye退出

然後切換到/yum/repo目錄中,使用ls查看下,看是否下載成功

使用createrepo  ./ 就可以創建了

wKiom1Xi-mKD3Fs1AAKY-E6tN8w875.jpg

創建完成後,就生成了repodata目錄,然後cd進入,ls查看會有幾個文件

自己創建的倉庫據弄好了,然後自己創建指向下,看能否使用

進入/etc/yum.repos.d/目錄下,修改centos-local.repo這個文件,加入下面內容

wKioL1Xi_I7T8vQoAABXYHADNns193.jpg

然後使用yum repolist 顯示可用repo

wKioL1Xi_JjhqOEJAAFyoVqd38w786.jpg

自己創建的倉庫可以使用

試一下,yum  install xen

wKiom1Xi-oXRifNlAAOcXif17sU310.jpg

輸入y就可以安裝了,依賴關係中有我們自己創建倉庫,這就證明自己創建的倉庫可用

 

程序包編譯安裝:

   上面演示和講到的安裝都是直接安裝,即安裝的都是二進制文件,程序的編譯安裝就是下載程序的源碼,然後自己進行編譯,然後進行安裝

如果你說既然有別人編譯好的二進制格式的了,我們拿來直接用不就行了,爲什麼還要自己編譯呢?

  那是因爲,別人編譯好的軟件裏面的功能可能不是很符合自己,或者不能完全發揮自己的硬件的性能,所以這就要自己根據自己的硬件進行編譯了

下載源碼的rpm包,然後使用rpmbuild命令製作成二進制格式的rpm包,而後再安裝

一個源代碼要想稱爲一個可執行的程序需要經歷的過程:

     簡單來說有以下幾個過程

         源代碼 --> 預處理 --> 編譯(gcc)--> 彙編 --> 鏈接 --> 執行

        

C代碼編譯安裝三步驟:

 (1) ./configure

   通過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;檢查依賴到的外部環境;

 (2)make

    make是一個工具,根據makefile文件爲標準,通過調用別的工具來完成整個程序的構建構建應用程序;

 (3)make  install

    開發工具:

        autoconf:生成configure腳本

        automake:生成Makefile.in

     建議:安裝前查看INSTALLREADME

開源程序源代碼的獲取:

    官方自建站點:

        apache.org(ASF)

         mariadb.org

        ...

    代碼託管站點:

        SourceForge

        Github.com

        code.google.com

   c/c++的編譯使用 gcc(GNU C Complier)編譯器來編譯

編譯C源代碼:

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

        開發工具:make,gcc

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

         glibc:標準庫

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

     CentOS6: "Development Tools", "Server Platform Development",這兩個包組要安裝好

    第一步:configure腳本

        選項:指定安裝位置、指定啓用的特性

            --help:獲取其支持使用的選項

        選項分類:

         安裝路徑設定:

            --prefix=/PATH/TO/SOMEWHERE:指定默認安裝位置;默認爲/usr/local/

             --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置;

             Systemtypes:

             OptionalFeatures: 可選特性

             --disable-FEATURE

             --enable-FEATURE[=ARG]

            Optional Packages: 可選包

             --with-PACKAGE[=ARG]

             --without-PACKAGE

    第二步:make

    第三步:makeinstall

安裝後的配置:

    (1) 導出二進制程序目錄至PATH環境變量中;

        編輯文件/etc/profile.d/NAME.sh

        exportPATH=/PATH/TO/BIN:$PATH

    (2) 導出庫文件路徑

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

        添加新的庫文件所在目錄至此文件中;

     讓系統重新生成緩存:

       ldconfig[-v]

    (3) 導出頭文件

        基於鏈接的方式實現:

          ln-sv

    (4) 導出幫助手冊

        編輯/etc/man.config文件,添加一個MANPATH

下面以CentOS6.6爲例編譯安裝軟件:

    首先確保開發工具和開發環境都下載安裝好了

然後下載源程序,

我在這裏是直接到自己的文件服務器上進行下載的,下載這個httpd-2.2.29.tar.bz2

    然後使用tar展開,進入其目錄下

wKiom1Xi_HGSjRq8AAL23I1RUPI281.jpg

裏面有INSTALL文件,可以進入查看,裏面會告訴你安裝步驟,還有configure文件

然後使用configure命令

./configure--prefix=/usr/local/apache2 --sysconfdir=/etc/http2 指定安裝目錄和配置文件的目錄,回車就可以進行安裝了

wKioL1Xi_wODmckmAAIHY5NTh8U332.jpg

沒有出現error就證明成功了,就可以執行第二步make

wKiom1Xi_PGz_myQAAOzbI3rH34946.jpg

出現這樣的字樣就算成功了

下面進行第三步,make install就行了,這一步一般沒錯誤

然後我們進入我們安裝指定的目錄去看下

wKioL1Xi_xnwyIGhAAFJ5PqlGzw743.jpg

然後啓動試試:

wKiom1Xi_QOCsoV9AAMWC-8dIBE420.jpg

使用bin/apachectl  start 會出現一個錯誤,那個不用管,然後使用netstat–tan80端口這一項處在LISTEN在證明啓動成功了

然後使用瀏覽器驗證下

wKiom1Xi_Q-TK9kFAACB_ZJ_fz8170.jpg

顯示這樣的字樣,證明啓動成功

後面的安裝後的配置就不演示了

 

 


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