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

  開源程序源代碼的獲取:

  官方自建站點:

  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


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