Linux程序包管理

軟件包管理

  API:Application Programming Interface

POSIX:Portable OS 

              程序源代碼–>預處理–>編譯–>匯編–>鏈接

              靜態編譯:

              共享編譯:.so

  ABI:Application Binary Interface

  Windows與linux不兼容

              ELF(Executable and Linkable Format)

              PE(Portable Executable)

   庫級別的虛擬化:

              Linux:WINE

              Windows:Cywin

        

  包管理器

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

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

  程序包管理器:

              debian:deb文件,dpkg包管理器

              redhat:rpm文件,rpm包管理器

                 rpm:Redhat Package Manager

                  RPM Package Manager

  包命名和工具

            源代碼:name-VERSION.tar.gz|bz2|xz

            VERSION:major,minor,release

    rpm包命名方式:

             name-VERION-release.arch.rpm

             例:bash-4.2.46-19.el7.x86_64.rpm

                VERSION:major,minor,release

                release:release.OS

    常見的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 其它子包 

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

   解決依賴包管理工具:

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

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

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

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

  庫文件

  查看二進制程序所依賴的庫文件:

               ldd /PATH/TO/BINARY_FILE 

   管理及查看本機裝載的庫文件:

               ldconfig 

   /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

                配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 

                緩存文件:/etc/ld.so.cache

  程序包管理器:

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

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

                RPM包內的文件

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

                安裝或卸載時運行的腳本

   2.數據庫(公共)

               程序包名稱及版本

               依賴關系

               功能說明

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

     

  程序包的來源

    管理程序包的方式:

            使用包管理器:rpm

            使用前端工具:yum,dnf

    獲取程序包的途徑:

     1.官方服務器以及國內知名站點下載;

            https://www.centos.org/download/ 

            http://mirrors.aliyun.com 

            http://mirrors.sohu.com 

            http://mirrors.163.com 

     2.項目官方站點

     3.第三方組織:

      Fedora-EPEL: 

            Extra Packages for Enterprise Linux 

      Rpmforge:RHEL推薦,包很全 

      搜索引擎: 

            http://pkgs.org 

            http://rpmfind.net 

            http://rpm.pbone.net 

            https://sourceforge.net

 4.自己制作

 #注意:檢查其合法性:來源合法性,程序包的完整性

  rpm包管理

  Centos系統上使用rpm命令管理程序包:

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

  安裝:

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

             -v: verbose 

            -vv: 

             -h: 以#顯示程序包管理執行進度 

             rpm -ivh PACKAGE_FILE …

 [install-options] 

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

             –nodeps:忽略依賴關系 

             –replacepkgs | replacefiles 

       –nosignature: 不檢查來源合法性 

             –nodigest:不檢查包完整性 

             –noscripts:不執行程序包腳本 

                 %pre:  安裝前腳本; –nopre 

                %post:  安裝后腳本; –nopost 

         %preun:  卸載前腳本; –nopreun 

        %postun:  卸載后腳本; –nopostun

  rpm包升級

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

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

               upgrade:安裝有舊版程序包,則“升級” 

               如果不存在舊版程序包,則“安裝” 

               freshen:安裝有舊版程序包,則“升級” 

               如果不存在舊版程序包,則不執行升級操作 

               rpm -Uvh PACKAGE_FILE … 

               rpm -Fvh PACKAGE_FILE … 

               –oldpackage:降級

        –force:強行升級

  升級注意項

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

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

  包查詢

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

    [select-options] 

                -a: 所有包 

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

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

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

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

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

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

    

    [query-options] 

                –changelog:查詢rpm包的changelog 

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

                -d: 查詢程序的文檔 

                -i: information 

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

                –scripts:程序包自帶的腳本 

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

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

查詢方法

                -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE 

                -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, … 

                -qa 

卸載

                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 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

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

               完整性驗證:SHA256

           來源合法性驗證:RSA

公鑰加密:

           對稱加密:加密、解密使用同一密鑰;

 非對稱加密:密鑰是成對兒的

         public key:公鑰,公開所有人

         secret key:私鑰,不能公開

導入公鑰:

    rpm -K|checksig rpmfile 檢查包的完整性和簽名

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

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

    rpm -qa gpg-pubkey*

rpm數據庫重建:

/var/lib/rpm

  rpm{–initdb|–rebuilddb}

    initdb:初始化

    如果事先不存在數據庫,則新建之

    否則,不執行任何操作

    rebuilddb:重建已安裝的包頭的數據庫索引目錄

    

  yum配置:

   yum客戶端配置文件:

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

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

   創庫的指向的定義:

                    [repositoryID]

                name=Some name for this repository

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

                enabled={1|0}

                ggcheck={1|0}

                 gpgkey=URL

           enablegroups={1|0}

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

               cost= 默認為1000

               yum-config-manager –disable '倉庫名' 禁用倉庫

               yum-config-manager –enable  '倉庫名' 啟用倉庫

  顯示倉庫列表

               yum repolist [all|enabled|disabled]

  顯示程序包

               yum list

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

               yum list{available|installed|updates} [glob_exp1] […]

 安裝程序包:

               yum install package1 [package2][…]

               yum reinstall package1 [package2][…](重新安裝)

 升級程序包:

               yum update [package1] [package2] […] 

               yum downgrade package1 [package2] […] (降級) 

 檢查可用升級:

               yum check-update

 卸載程序包:

               yum remove | erase package1 [package2] […] 

 查看程序包:

               yum info […]

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

               yum provides | whatprovides feature1 [feature2] […]

 清理本地緩存:

               yum clean [Packages | metadata | expire-cache | rpmdb | plugins |all ]

 構建緩存:

               yum makecache

 搜索:

               yum search string1 [string2] […]

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

 查看指定包所依賴的capabilities:

               yum deplist package1 [package2] […]

 查看yum事務歷史:

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

               yum history 

               yum history info 6 

               yum history undo 6 

                日志:/var/log/yum.log

 安裝及升級本地程序包:

               yum localinstall rpmfile1 [rpmfile2] […] (用install替代)

               yum localupdate rpmfile1 [rpmfile2] […]  (用update替代)

 包組管理的相關命令:

               yum groupinstall group1 [group2] […] 

               yum groupupdate group1 [group2] […] 

               yum grouplist [hidden] [groupwildcard] […] 

               yum groupremove group1 [group2] […] 

               yum groupinfo group1 […]

 

 使用光盤當做本地yum倉庫:

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

               mount /dev/cdrom /media/cdrom

 2.創建配置文件

 [yum.CentOS 7]

               name=

      baseurl=

     gpgcheck=

            enabled=

 yum的命令行選項:

               –nogpgcheck:禁止進行gpg check 

               -y: 自動回答為“yes” -q:靜默模式 

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

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

               –noplugins:禁用所有插件

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

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

               $arch: 平臺,i386,i486,i586,x86_64等 

               $basearch:基礎平臺;i386 $YUM0-$YUM9:自定義變量

實例: 

               http://server/centos/$releasever/$basearch/ 

               http://server/centos/7/x86_64 

               http://server/centos/6/i384 

   程序包編譯:

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

  源代碼–>預處理–>編譯–>匯編–>鏈接–>執行

  源代碼組織格式: 

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

              C、C++:make (項目管理器,configure –> Makefile.in –> makefile) 

                java: maven

  編譯安裝:

  C代碼編譯安裝三步驟:

  1、./configure: 

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

   (2) 檢查依賴到的外部環境,如依賴的軟件包 

  2、make:根據makefile文件,構建應用程序 3、make install:復制文件到相應路徑

  3、make install:復制文件到相應路徑

  開發工具:

              autoconf:生成configure腳本

              automake:生成Makefile.in

  #注意:安裝前查看INSTALL,README

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

  官方自建站點:

  apache.org (ASF:Apache Software Foundation) 

  mariadb.org 

  … 

  代碼托管: 

  SourceForge.net 

  Github.com 

  code.google.com 

    c/c++編譯器: gcc (GNU C Complier)

    準備:提供開發工具及開發環境 

    開發工具:make, gcc等 

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

    glibc:標準庫 

    實現:通過“包組”提供開發組件 

    CentOS 6: 

               Development Tools Server Platform 

               Development 

    CentOS 7: 

               Development Tools 

               Development and Creative Workstation

  

  第一步:configure腳本 選項:指定安裝位置、指定啟用的特性 

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

   選項分類: 

   安裝路徑設定: 

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

                 –sysconfdir=/PATH:配置文件安裝位置 

  System types:支持交叉編譯

Optional Features: 可選特性 

                   –disable-FEATURE 

                   –enable-FEATURE[=ARG] 

                  Optional Packages: 可選包

                   –with-PACKAGE[=ARG],依賴包 

                   –without-PACKAGE,禁用依賴關系

                第二步:make 

                第三步:make install

  安裝后的配置: 

  (1) 二進制程序目錄導入至PATH環境變量中; 編輯文件/etc/profile.d/NAME.sh export PATH=/PATH/TO/BIN:$PATH 

  (2) 導入庫文件路徑 

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

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

  讓系統重新生成緩存: 

  ldconfig [-v]

       (3) 導入頭文件 基于鏈接的方式實現: ln -sv 

       (4) 導入幫助手冊 編輯/etc/man.config|man_db.conf文件 添加一個MANPATH

原創文章,作者:鬧鐘哥,如若轉載,請注明出處:http://www.www58058.com/40693

(0)
鬧鐘哥鬧鐘哥
上一篇 2016-08-29 08:49
下一篇 2016-08-29 08:49

相關推薦

  • 文本處理(1)

    文本處理工具最全整理上半部

    Linux干貨 2018-03-15
  • 第二章 操作系統發展史

    Linux主流版本:   Debian(英語發音:/?d?bi?n/)是由GPL和其他自由軟件許可協議授權的自由軟件組成的操作系統,由Debian項目(Debian Project)組織維護。   歷史: Debian于1993年8月16日由一名美國普渡大學學生伊恩·默多克(Ian Murdock)首次發表。伊恩·默多克最初把他的系統稱為…

    Linux干貨 2016-06-03
  • 用戶及組權限結合grep過濾示例

    grep與正則表達式,用戶及組權限管理

    Linux干貨 2018-02-06
  • M20 – 1- 第二周博客(2):Linux的文件系統與結構

    Linux系統對于一個初學者來說,其實并不那么容易.所以了解其系統的結構,及其表示的含義是非常重要的.否則安裝好系統后,都無從下手.也不知道怎么辦。下面介紹一下Linux 的目錄結構.及每個目錄表示的含義.方便初學者學習和使用Linux系統。 從上圖可以看出Linux的目錄結構屬于樹狀型的,是否已經對Linux的結構有個大概的認識了呢,接下來講的是這些目錄中…

    Linux干貨 2016-08-02
  • 幾種常見的linux發行版

    redhat :Red Hat Enterprise Linux,是一個非常強大的服務器系統,超強的生命周期支持10年以上的升級和技術支持同樣費用也非??捎^8千多一個授權一年。如果沒有license是不能在線升級系統,和通過yum安裝軟件。而centos則沒有這些限制,所以centos是非常收歡迎的系統。 centos:是一個社區企業系操系統,其基礎架構與r…

    Linux干貨 2017-08-19
  • 誰說C語言很簡單?

    前兩天,Neo寫了一篇《語言的歧義》其使用C語言討論了一些語言的歧義。大家應該也順便了解了一下C語言中的很多不可思異的東西,可能也是你從未注意到的東西。 是的,C語言并不簡單,讓我們來看看下面這些示例: 為什么下面的代碼會返回0?(這題應該很簡單吧) int x;   return x == (1&…

    Linux干貨 2016-03-20
欧美性久久久久