軟件包管理

一、軟件運行環境

    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 19:49
下一篇 2016-08-23 14:50

相關推薦

  • Linux FHS-文件系統層級結構標準簡要說明

    Linux FHS-文件系統層級結構標準簡要說明 FHS(Filesystem Hierarchy Standard) FHS針對目錄樹架構對以下三個目錄進行定義:     / (root, 根):與開機系統有關      /usr (unix software res…

    Linux干貨 2017-03-26
  • 二.Linux博客-2016年7月21日screen、echo

    格式說明: 操作 概念 命令 說明及舉例 二.screen、echo internet 因特網ethernet 以太網ctrl+alt+F1 圖形界面ctrl+alt+F2-F6 字符界面 命令:who am i/who/who me i/tty/df/ifconfig/w/ halt 關機 reboot&n…

    Linux干貨 2016-08-24
  • Linux-進程管理

    本小節介紹  1、進程的描述  2、用戶怎么樣管理進程  3、進程管理的命令 進程的概念        內核的功能:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等。        Pro…

    2017-07-02
  • 分布式存儲介紹、FastDFS 部署

    什么是分布式系統? 簡單來說,多臺主機提供同一個服務,例如負載均衡集群,就是一個分布式系統。 什么是分布式存儲? 看看某寶,上面多少圖片,如果使用傳統的單機存儲,需要準備多大的磁盤空間?讀寫性能如何提升? 上圖就是一個分布式存儲的結構,此處存儲節點不在是磁盤,而是多個主機組成,多個主機內部通信實現數據副本,客戶端發來的請求發往前端,前端分發至后端,有點像負載…

    2017-03-08
  • 描述LVS的工作原理

    一、LVS結構   LVS由前端的負載均衡器(Load Balancer,LB)和后端的真實服務器(Real Server,RS)群組成。RS間可通過局域網或廣域網連接。LVS的這種結構對用戶是透明的,用戶只能看見一臺作為LB的虛擬服務器(Virtual Server),而看不到提供服務的RS群。當用戶的請求發往虛擬服務器,LB根據設定的包轉發策略和負載均衡…

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

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; 創建一個10G的分區:  &nbs…

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