軟件包管理

  軟件運行環境 

     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

C程序編譯過程圖

blob.png

   Java程序運行過程圖

blob.png

blob.png

    開發語言 

系統級開發:C,C++

      應用級開發:jav,a,delphi,Python,go,php,perl,ruby

    包管理器

         簡介:

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

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

      程序包管理器:

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

庫文件

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

               ldd /PATH/TO/BINARY_FILE

blob.png

bash所以來的庫文件

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

        ldconfig

        /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件

      名及文件路徑映射關系:

        配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf,在/etc/ld.so.conf.d中創建.conf后綴的文件

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

blob.png

包管理器

    程序包管理器

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

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

          RPM包內的文件

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

          安裝或卸載時運行的腳本

       2數據庫(公共)

          程序包名稱及版本

          依賴關系

          功能說明

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

程序包的來源

      管理程序包的方式

             使用包管理器:rpm

             使用前端工具:yum, dnf

        獲取程序包的途徑

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

               CentOS 鏡像:

                   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: 以#顯示程序包管理執行進度

            -q:查詢安裝包是否裝上,后面加包名必須是正確的或已安裝的

        rpm -ivh PACKAGE_FILE …  安裝某包,顯示詳細過程,并且以#顯示程序包管理執行進度 后面要跟路徑

實驗安裝:ftp服務

blob.png

rpm包安裝

    [install-options]   -i選項的配合選項

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

blob.png

當然,之前已經安裝過此包,所以會提示已經安裝

        –nodeps:忽略依賴關系

        –replacepkgs覆蓋安裝rpm包 | replacefiles如果兩個安裝包有相同的文件,安裝時發生沖突,此命令可強行安裝rpm包

blob.png

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

        -U -F選項會刪除原程序

            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: 所有包,模糊搜索可配合其他命令查詢

blob.png

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

blob.png

    -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: 查看指定的程序包安裝后生成的所有文件;

blob.png

    –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

blob.png

blob.png

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

        完整性驗正: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*

    數據庫重建:

        /var/lib/rpm

blob.png

     rpm {–initdb|–rebuilddb}

        initdb: 初始化

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

        否則,不執行任何操作

        rebuilddb :重建已 安裝的包頭的數據庫

yum:

    CentOS: yum, dnf

    YUM: Yellowdog Update Modifier ,rpm 的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,

    up2date的替代工具

        yum repository: yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)

        文件服務器:

            ftp://

            http://

            file:///

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}

        gpgcheck={1|0}

        gpgkey=URL

        enablegroups={1|0}

        failovermethod={roundrobin|priority}

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

        cost= 默認為1000

教學環境yum源

    教室里的yum 源

        http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/

    CentOS epel:

        http://172.16.0.1/fedora-epel/7/x86_64/

    yum命令的用法:

        yum [options] [command] [package …]

        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] […]

    查看程序包information

        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) 創建配置文件

            [CentOS7]

            name=  可寫,可不寫

            baseurl=  路徑必須寫,而且要正確

            gpgcheck=

            enabled=

    yum的命令行選項

        –nogpgcheck :禁止進行gpg check

        -y: 自動回答為“yes”

        -q :靜默模式

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

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

        –noplugins:禁用所有插件

    yum倉庫

        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: 復制文件到相應路徑

    開發工具

        autoconf: 生成configure 腳本

        automake:生成Makefile.in

注意:安裝前查看INSTALL ,README

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

        官方自建站點:

            apache.org (ASF :Apache Software Foundation)

            mariadb.org

            …

    代碼托管:

        SourceForge.net

        Github.com

        code.google.com

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

編譯安裝

    編譯C源代碼

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

        開發工具: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/37725

(0)
舊城以西舊城以西
上一篇 2016-08-29 08:44
下一篇 2016-08-29 08:44

相關推薦

  • 6個用于大數據分析的最好工具

    大數據是一個含義廣泛的術語,是指數據集,如此龐大而復雜的,他們需要專門設計的硬件和軟件工具進行處理。該數據集通常是萬億或EB的大小。這些數據集收集自各種各樣的來源:傳感器,氣候信息,公開的信息,如雜志,報紙,文章。大數據產生的其他例子包括購買交易記錄,網絡日志,病歷,軍事監控,視頻和圖像檔案,及大型電子商務。  在大數據和大數據分析,他們對企業的影…

    Linux干貨 2015-04-04
  • 第二十二周作業

    1、請描述本地文件系統和分布式文件系統的特點 本地文件系統 本地文件系統主要是指Ext2,Ext3,Btrfs,XFS這類,它們通常提供以下功能: 擴展性:隨著系統容量的增加保持性能,不隨容量變化而導致性能震蕩。比如一個目錄下的海量文件,在EXT2/3中由于目錄設計問題會導致較大的性能問題。再比如EXT2/3中的Metadata的占用和inode的劃分可能會…

    2017-08-06
  • 馬哥教育網絡班22期第三周課程練習1

    1、who | awk {'print $1'} | sort | uniq  2、last | head -n1 3、awk -F":" {'print $7'} /etc/passwd |  awk '{for(i=1;i<=NF;i++)a[$i]++}EN…

    Linux干貨 2016-08-29
  • 隨筆—SVN倉庫轉換為Git倉庫

    假設需要轉換的SVN倉庫地址為:https://tmp/svn 1、使用git svn clone命令開始轉換 $ git svn clone https://tmp/svn -T trunk -b branches -t tags #git svn…

    Linux干貨 2016-07-04
  • Linux內核編譯

    1.安裝前準備:     安裝開發環境     獲取內核源碼包(www.kernel.org)     安裝軟件包        *curses*    &nb…

    Linux干貨 2016-09-17
  • tomcat-session server實現

    要求:tomcat cluster將會話保存至memcached中 1、利用nginx反代 2、兩臺tomcat服務器 3、兩臺memcache服務器 拓撲:      架構前配置:      1、反代服務器:nginx     &nbsp…

    2017-07-03
欧美性久久久久