Linux程序包管理方式

Linux程序包安裝和管理方式共計三種:

         一、[yum|dnf],通過官網或者其他開源網站提供的文件服務器,本機鏡像源等途徑進行安裝。

        二、rpm,通過官網或者其他開源網站通過下載rpm包,在本地繼續安裝

        三、源代碼編譯,通過官網或者其他開源網站下載源代碼自己編譯安裝

yum|dnf 

        yum|dnf 安裝程序包的機制是通過官網或者其他開源網站提供的文件服務器、本機鏡像源等,在這個文件服務器上面存儲了眾多rpm包,以及包的相關的元數據(放置于特定目錄文件:repodata),因此我們只需要讓本機能夠訪問這個文件服務器即可。

        一、yum|dnf 安裝的優勢:在遠程的文件服務器上面儲存了元數據,元數據記錄了,每一個程序報的依賴關系,當我們需要下載某個程序包時,首先文件服務器會自行讀取元數據確定相關安裝報的依賴關系,將所有這個程序需要依賴的庫函數,程序包等等一起按照程序包要求的特定順序進行安裝。這樣安裝避免了我們自己去確定程序的依賴關系,節約了時間。

    1,文件服務器格式(共四類):

        (ftp文件服務器)  ftp://

        (http文件服務器) http://

        (ntf文件服務器)  ntf://

        (本機鏡像服務器) file:///

    1,現在本機查看是否安裝了yum或者dnf工具,rpm -q [yum|dnf]

            [root@localhost ~]# rpm -q yum

            yum-3.4.3-132.el7.centos.0.1.noarch

         可以看到本機已經安裝了yum工具。

    2,本機yum客服端:

            配置文件:

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

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

                常用的倉庫配置,具體的每個信息請man yum.conf

          庫指向的定義

        [repositoryID]—->這個yum源的名字,必須有

        name=Some name for this repository——>對于這個yum詳細描述

        [baseurl=url://path/to/repository

        url://path/to/repository

       url://path/to/repository

                yum源的指向地址,這是本地yum元的地址

        mirrorlist 互聯網鏡像指向,這個yum必須支持插件功能]必須有

        enabled={1|0}是否啟動,0代表不啟用,1代表啟用

        gpgcheck={1|0}是否檢查這個軟件包的來源是否合法,0代表不啟用,1代表啟用

        repo_gpgcheck={1|0}是否檢查這個yum源合法,0代表不啟用,1代表啟用

        gpgkey=URL 軟件包合法性key的位置,一般都在本機的

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

        enablegroup={0|1} 檢查軟件包組是否合法,0代表不啟用,1代表啟用

        failovermethod={roundrobin|priority} yum源的掃描方式,一共兩種方式:

        1、輪循掃描,隨機從一個baseurl地址開始,當這個baseurl鏈接服務器失敗后才鏈接下一個baseurl地址

        2、priority,直接從上到下依次掃描

        bandwidth

        username :服務器不允許匿名顯示需要輸入用戶名    

        passwd :服務器上面有密碼是需要輸入面

        顯示倉庫列表

        yum

    repolist [all|enabled|disabled]

    yum程序包管理工具的功能:

    升級/檢查/卸載

        查看程序包informat

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

    provides|whatprovides

    清理本地緩存

    clean

    構建緩存

    makecache (沒必要做,每次安裝都會構建緩存,更新緩存)

    搜索

    search(模糊匹配機制)

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

    重新安裝

    reinstall

    程序包降級

    downgrade

    顯示某個程序包的依賴關系

    deplist

    查看yum事務歷史

    yum history

    yum history summary

    yum 來安裝rpm包,可以解決rpm 的依賴關系

    localinstall(可以直接使用insall)

    localupdate(直接使用update)

    顯示包組

    grouplist

    包組安裝:

    groupinstall

    包組信息

    groupinfo

    包組移除:

    groupremove

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

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

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

     (2) 創建配置文件

     [CentOS7]

     name=

     baseurl=

     gpgcheck=

     enabled=

     yum的命令行選項

     –nogpgcheck  禁止執行gpg check

     -y 自動回答為“yes”

     -q 靜默模式:

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

     –enablerepo=repoidglob :臨時啟用此處的repo

    yum的repo配置文件中可用的變量

    $releasever :當前os發行版的主板號

    $arch :平臺類型

    $basearch :基礎平臺

    $YUM0-YUM9  (基本沒用)

    自建yum源

    createrepo [options]<directory>

    這個命令里面的選項基本沒用,若有需要自行man

    二、rpm

    rpm=rpm is packeage manager

    rpm的優勢:

                 使用RPM最大的好處在于它提供快速之安裝,減少編譯安裝之偵錯困擾。對于最終用戶來說,RPM所提供的眾多功能使維護系統要比以往容易的多。安裝、卸載和升級RPM軟件包均只需一條命令即可完成,所有煩瑣的細節問題無須您費心。RPM維護一個所有已安裝的軟件包和文件的數據庫,可以讓您進行功能強大的軟件包查詢和驗證工作。

在軟件包升級過程中,RPM會對配置文件進行特別處理,因此您絕對不會丟失以往的定制信息——這對于直接使用.tar.gz文件是不可能的。對于程序員,RPM可以讓您連同軟件的源代碼打包成源代碼和二進制軟件包供最終用戶使用。這個過程十分簡單,整個過程由一個主文件和可能的補丁程序組成。RPM在軟件的新版本發布時,這種“原始”源代碼,補丁程序和軟件生成指令的清晰描述簡化了軟件包的維護工作

                rpm包的劣勢:需要自己解決程序包的依賴關系

       rpm包命名的格式:

redis-3.0.2-1.centos7.x64.rpm

name-VERSION-release(打包次數).arch.rpm

VERSION:majior.minor.release(發行版本)

release.arch:rpm包的發行號

relese.os:2.el7.i386.rpm

archetceure:i386,x64(amd64),ppc,noarch

changelog:每次rpm更改后都有一個changelog開記錄更改信息

拆包:

redis-3.0.2.tar.gz–>redis-3.0.2-1.centos7.x64.rpm

把一個包當中的n個功能拆開,可以實現按需安裝

拆包后分為:主包和支包

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

支包:name-function-release.arch.rpm

function:devel,utils(工具程序),libs(庫包)

    rpm程序包管理器的功能

    安裝、升級、卸載、查詢、檢驗、數據庫維護

rpm 命令:rpm [options] [package_file]

安裝:-i,–install

升級:-U,-update,-F,–freshen

卸載:-e,–erase

查詢:-q,–query

校驗: -v,–verify

數據庫維護;–rebuilddb,–initdb

安裝:-i,–install

-h:hash ,以50個#來表示安裝進度

-v,–verbose:顯示安裝過程的詳細信息

-vv:更詳細的過程輸出

-vvv:超級詳細的過程輸出

組合使用:-ivh;-ivvh

–test:不執行真正的安裝過程,而僅僅報告依賴關系及沖突信息

–nodeps:忽略依賴關系,副作用是能安裝成功,不一定能運行成功;不建議這樣安裝

–replacepkgs:覆蓋安裝–重新安裝并覆蓋原文件,但是修改的配置文件不會還原,因為系統默認是你有意識的修改,刪除可以恢復

–force:強制安裝

注意:rpm可以自帶腳本:

四類:

preinstall:安裝過程開始之前運行的腳本,%pre,–nopre

postinstall:安裝過程完成之后的腳本,%post,–nopost

preuninstall:卸載過程真正開始執行之前運行的腳本,%preun,–nopreun

postuninstall:卸載過程完成之后運行的腳本,%postun,–nopostun

–noscripts 所有腳本都不執行

–nosingnature 不檢查包簽名信息,不檢查來源合法性

–nodigest不檢查包完整性信息,md5信息

升級

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

-U 升級或者安裝

{-F|–freshen}[install-iptions]PACKAGE_FILE…

-F 升級

組合使用-iUh;-iFh

–test,不執行真正的安裝或者升級過程,而僅僅報告依賴關系和沖突信息等

–oldpackage :將級;

–force :強制升級;

注意:(1)不要對內核做升級操作;Linux支持多內核并存,因此直接安裝新版本內核

(2)如果某原程序包的配置文件安裝后層級被修改過,升級是,新版本提供的配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENANME.rpmnew)后提供;

卸載:

{-e|–erase}[options]PACKAGE_NAME….

–nodeps

–test:測試卸載時,dry run模式

-allmathes:如果一個程序包同時安裝多個版本,則此選項一次全部卸載之

注意:如果程序包的配置文件被安裝后曾被修改,卸載時,此文件通常不會刪除,而是被重命名(加后綴.rpmsave)后留存。

查詢:

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

[select-options]

PACEAGE_NAME:查詢某包或某些包是否安裝;

rpm -q PACKAGE_NAME…

        -a,–all 查詢所有已經安裝過的包

        -f FILE :查詢某些文件是有那個包安裝生成;

        -f /PATH/TO/SOMEFILE

        -pi 查詢某些安裝的包文件的相關信息,使用-p選項

        -pi PACKAGE_FILE

        –whatprovides CAPABILITY:查詢指定的CAPABILITY由那個程序包提供

        –whatrequire CAPANILITY:查詢指定的CAPABILITY被那個包所依賴

   [query-options]

   -p 文件包名  用于執行查詢未安裝文件包的相關信息,接下面

    –changelog:查詢rpm包的changelog

        -l,–list:程序安裝生成的所有文件列表

        -i,–info 查詢程序包的相關信息

        -c,–configfiles 查詢程序包安裝完成后所有的配置文件

        -d, 查詢程序安裝完成后生成的所有的幫助文件

        –provides:列出指定程序包提供的所有的CAPABILITIES

        -R,–requires:查詢指定程序包所依賴的各種資源

        –scrips 查詢安裝或者卸載時執行的腳本

校驗:

{-v|–verify}[select-option][verify-options]

S file Size differs(文件大小是否發生改變)

       M Mode differs (includes permissions and file type)(權限是否發生改變)

       5 digest (formerly MD5 sum) differs

       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

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

     來源合法性驗證:由我們信任的制作者提供;依賴制作者的數字簽名,簽名是作者使用自己的私鑰加密程序包的特性碼進行的;

     所謂內容合法:包未被二次修改;完整性校驗成功,依賴于制作者提供的程序特征碼

    驗證方式:安裝者用同樣的特征碼提取算法提取程序包的特征碼,與原作者提供的比較

    centos 自帶 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    數據重建:

    rpm 管理器數據庫路徑:/var/lib/rpm/

    查詢操作:通過此處數據庫進行

    獲取幫助:

    CentOS6 man rpm

    CentOS6 man rpmdb


    rpm {–initdb|rebuilddb}

         –initdb:初始化數據庫

         –rebuilddb:重新構建數據庫

    但是構建數據庫不一定能讓原來程序的數據庫完全恢復,所以慎用,實在需要恢復是可以嘗試。

    三、編譯安裝

    編譯安裝的優勢:是將源代碼在本機編譯而成的安裝好,能夠更好地適應本機的硬件,不會存在兼容性的問題。

     程序包編譯安裝

   testapp-VERSION-release.src.rpm–>安裝后,使用rpmrebuild命令制作成二進制格式的rpm包,而后再安裝;

   源代碼組織格式:

   多文件:文件中的代碼之間,很可能存在跨文件依賴關系;

   源代碼–>預處理–>編譯器(gcc,c語言編譯器)–>匯編–>鏈接(鏈接器)–>執行

   C、C++:make(項目打包構建管理工具)(configure–>Makefile.in –>makefile)

   java:maven

   C代碼編譯安裝三步驟:

   ./configure

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

      (2)檢查各啟動特性依賴的外部環境

   make (*)

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

   make install

   開發工具:

   autoconf:生成configure腳本(有些程序未自帶,需要通過此工具生成)

   automake:生成Makefile.in

   建議安裝前查看install,沒有install看readme

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

   程序官方自建站點:

   apache.org(ASF)

   代碼托管:

   SourceForege

   Giphub.com

   code.google.com

   C/C++ gcc(GNC C Complier)

   編譯C源代碼:

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

   開發工具:make,gcc等

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

   gilbc:標準庫

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

   Centos 6:"Development Tools","Server platform Development"

   第一步:configuer腳本

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


   –help :獲取其支持的選項

   ./configure –prefix=PREFIX 指定默認安裝位置

   –sysconfdir=/PATH/TO/SOMEWHERE 配置文件安裝的位置

   System types:


   Optional Features:可選特性

   –disable-FEATURE

   –enable-FEATURE[=ARG]

   Optional Packages:可選包

   –with-PACKAGE[=ARG]

   –without-PACKAGE

   安裝后的配置:

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

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

   exprot PAHT=/PATH/TO/BIN:$PATH

    (2)導出庫文件路徑

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

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

    讓系統重新生成緩存:

    ldconfig [-var]

    (3)導出頭文件

    創建連接目錄或者文件

    ln -sv

    存放位置/usr/include

    (4)導出幫助手冊

    編輯/etc/man.conf

    添加一條新的路徑MANPATH


原創文章,作者:fighter,如若轉載,請注明出處:http://www.www58058.com/26383

(0)
fighterfighter
上一篇 2016-07-29
下一篇 2016-07-29

相關推薦

  • N23-北京-阿來

           我是阿來,我參加了馬哥Linux運維網絡班,從2016年9月開始我將跟隨馬哥學習Linux技術。我的學習宣言是:學習的路,就在腳下,一步一個腳印,領路的人,就這這里,一天一點進步!

    Linux干貨 2016-09-12
  • N22-第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # declare -i log_user declare -i notlog_user while read&n…

    Linux干貨 2016-10-24
  • M20 – 1- 第三周博客(1):Linux用戶、組

    Linux是個多用戶多任務的分時操作系統,因此要使用系統資源的用戶都必須先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。用戶的賬號一方面能幫助系統管理員對使用系統的用戶進行跟蹤,并控制他們對系統資源的訪問與限制,并為用戶提供安全性保護。每個用戶賬號都擁有一個惟一的用戶名(UID)和用戶口令(PASSWD)。用戶在登錄時鍵入正確的用戶名和口令后,才能…

    Linux干貨 2016-08-04
  • AOP面向方面編程

    1.引言         軟件開發的目標是要對世界的部分元素或者信息流建立模型,實現軟件系統的工程需要將系統分解成可以創建和管理的模塊。于是出現了以系統模塊化特性的面向對象程序設計技術。模塊化的面向對象編程極度極地提高了軟件系統的可讀性、復用性和可擴展性。向對象方法的焦點在于選擇對象作為模塊的主要單元,并將對象與系統的…

    Linux干貨 2015-04-07
  • 馬哥教育網絡班22期+第三周(8.22-8.28)博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。   # who|awk '{print $1}'|sort| uniq 2、取出最后登錄到當前系統的用戶的相關信息。   # last   # last|gr…

    Linux干貨 2016-08-29
  • 第二周作業

    第二周博客作業 1. Linux上常用的文件管理命令及使用 (1) CP命令:復制文件或文件夾語法格式        cp [OPTION]… [-T] SOURCE DEST     …

    Linux干貨 2016-12-16
欧美性久久久久