軟件包管理

一、軟件運行環境

    API: Application Programming Interface

        POSIX: Portable OS

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

        靜態編譯:.a

        共享編譯:.so

    ABI: Application Binary Interface

        Windows與Linux不兼容

            ELF(Executable and Linkable Format)

            PE( Portable Executable)

        庫級別的虛擬化:

            Linux: WINE

            Windows: Cywin

    開發語言

        系統級開發

            C

            C++

        應用級開發

            java

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

    程序包管理器:

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

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

            RPM包內的文件

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

            安裝或卸載時運行的腳本

        數據庫(公共)

            程序包名稱及版本

            依賴關系

            功能說明

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

    管理程序包的方式:

        使用包管理器: rpm

        使用前端工具: yum, dnf

    獲取程序包的途徑

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

            CentOS鏡像:

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

            http://mirrors.aliyun.com

            http://mirrors.sohu.com

            http://mirrors.163.com

        項目官方站點

        第三方組織:

            Fedora-EPEL:

                Extra Packages for Enterprise Linux

            Rpmforge:RHEL推薦,包很全

            搜索引擎:

                http://pkgs.org

                http://rpmfind.net

                http://rpm.pbone.net

                https://sourceforge.net/

        自己制作

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

三、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:不檢查包完整性

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

                %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:降級(配合-i選項)

            –force: 強行升級

    升級注意項:

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

        如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(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, -qlPACKAGE, -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

    CentOS: yum, dnf

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

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

            文件服務器:

                ftp://

                http://

                file:///

    yum命令的用法:

        yum [options] [command] [package …]

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

        生成172.16.0.1_cobbler_ks_mirror_CentOS-Xx86_64_.repo

        yum-config-manager –add-repo=

        http://172.16.0.1/cobbler/ks_mirror/CentOS-Xx86_64/

        yum-config-manager –disable “倉庫名" 禁用倉庫

        yum-config-manager –enable “倉庫名” 啟用倉庫

    顯示倉庫列表:

        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事務歷史:

        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

    安裝及升級本地程序包:

        * localinstall rpmfile1 [rpmfile2] […]

            (用install替代)

        * localupdate rpmfile1 [rpmfile2] […]

            (用update替代)

    包組管理的相關命令:

        groupinstall group1 [group2] […]

        groupupdate group1 [group2] […]

        grouplist [hidden] [groupwildcard] […]

        groupremove group1 [group2] […]

        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

    創建yum倉庫:

        createrepo [options] <directory>

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

(0)
DYWDYW
上一篇 2016-08-22
下一篇 2016-08-23

相關推薦

  • sed編輯器

    sed: Stream EDitor, 行編輯器;  用法: sed [option]… ‘script’ inputfile… script: ‘地址命令‘  常用選項: -n:不輸出模式中的內容至屏幕; -e: 多點編輯; -f /PATH/TO/SCRIPT_F…

    Linux干貨 2015-07-06
  • N25-第七周作業

    第七周 1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@zf ~]# fdisk /dev/sdb Command (m for help): n Command action e extended p primary partit…

    Linux干貨 2017-02-24
  • 第八周作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;     在線的主機使用綠色顯示;     不在線的主使用紅色顯示; #!/bin/bash for i in {1..254};do if ping -c 1 -w 1 192.16…

    2017-07-03
  • shell腳本循環及函數

    16.循環執行                 將代碼段重復運行多次           &nbsp…

    Linux干貨 2016-08-24
  • 什么是文件系統

    文件系統:層級結構;有索引; /: 原初起點; 倒置樹狀結構; /dev/pts/2: 最左側/: 表示根目錄 其它的/: 表示路徑分隔符 Linux的路徑分隔符是/ Windows的是\ 文件的路徑表示: 絕對路徑:從根開始表示出的路徑  相對路徑:從當前位置開始表示出的路徑 文件名使用法則: 嚴格區分字符大小寫:file1, File1, FI…

    Linux干貨 2016-10-29
欧美性久久久久