rpm

軟件運行環境

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

linux 軟件的組成

二進制程序

共享庫--給別應用程序用的
    共享庫,把程序的某些功能做成庫。

配置文件
幫助文件

/etc
/bin
/lib
/usr/share/man

/usr/local/
/usr/
也有類似的層級結構

包管理器:

二進制應用程序的組成部分:
    二進制文件、庫文件、配置文件、幫助文件

程序包管理器:
    debian:deb文件, dpkg包管理器

    redhat: rpm文件, rpm包管理器
    rpm: RedhatPackage 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, amd64powerpc: ppc
        跟平臺無關:noarch

包命名和工具

包:分類和拆包
    Application-VERSION-ARCH.rpm: 主包
    Application-devel-VERSION-ARCH.rpm開發子包
    Application-utils-VERSION-ARHC.rpm其它子包
    Application-libs-VERSION-ARHC.rpm其它子包

包名+版本號+發行號+平臺

注安裝過程中不要裝錯rpm包。一般情況都是需要裝主包的,其他包看需要。

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

安裝軟件的時候會有提示依賴關系,但是僅提示該軟件的依賴關系,可能所依賴的軟件包還有依賴關系。

解決依賴包管理工具:
    yum:rpm包管理器的前端工具
    apt-get:deb包管理器前端工具
    zypper: suse上的rpm前端管理工具

    dnf: Fedora 18+ rpm包管理器前端管理工具,未來的包管理工具。

庫文件

查看二進制程序所依賴的庫文件:
    ldd /PATH/TO/BINARY_FILE
        [root@localhost ~]# ldd /bin/cat
        linux-vdso.so.1 =>  (0x00007ffc0f7e8000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2fbfc85000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2fc005b000)

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

    配置文件:有時候需要編寫配置文件,使系統識別第三方軟件帶的庫文件。

            /etc/ld.so.conf  #主配置文件,不用管
            /etc/ld.so.conf.d/*.conf  #如果自己安裝的軟件,自己帶庫文件。需要用戶自定編寫庫配置文件。讓操作系統識別。
            自己創建一個.conf結尾的文件。只需要把放庫文件的路徑(目錄)寫進去,再執行 ldconfig 使系統重新讀取配置文件。               

                ldconfig -p 查看系統識別到的庫文件。

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

程序包管理器:

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

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

        RPM包內的文件
        RPM的元數據,如名稱,版本,依賴性,描述等
        安裝或卸載時運行的腳本

    2、數據庫(公共)--系統生成的  /var/lib/rpm
        程序包名稱及版本
        依賴關系
        功能說明
        包安裝后生成的各文件路徑及校驗碼信息

    rpm --intdb | --rebuiddb 初始化或重建數據庫

該數據庫非常重要需要備份,如損壞的話即使重建也是空的。

程序包的來源

管理程序包的方式:
    使用包管理器:rpm
    使用前端工具:yum, dnf

獲取程序包的途徑:

    (1) 系統發版的光盤或官方的服務器;
        CentOS鏡像:
        https://www.centos.org/download/
        http://mirrors.aliyun.com
        http://mirrors.sohu.com
        http://mirrors.163.com

    (2) 項目官方站點
        http://httpd.apache.org/

    (3) 第三方組織:
        Fedora-EPEL:
            Extra Packages for Enterprise Linux
以上方式推薦使用。除非都找不到,而且非關鍵性業務的可以使用如下方式

        Rpmforge:RHEL推薦,包很全

    搜索引擎:rpm包搜索引擎,不是百度也不谷歌。
        http://pkgs.org
        http://rpmfind.net
        http://rpm.pbone.net
        https://sourceforge.net/
    (4) 自己制作

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

軟件使用一定不要用盜版,包括管理軟件

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 安裝程序生成的文件可能和的軟件的文件沖突,安裝的位置和名稱都一樣,rpm會有提示,不能進行安裝,這事需要使用replacefiles

    --nosignature: 不檢查來源合法性
    --nodigest:不檢查包完整性  

    --noscipts:不執行程序包腳本片斷
        %pre: 安裝前腳本;--nopre
        %post: 安裝后腳本;--nopost
        %preun: 卸載前腳本;--nopreun
        %postun: 卸載后腳本;--nopostun

升級:意味著老版本刪除,只留一個版本的該程序。

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配合使用。 
    rpm -ivh --oldpackgage PACKAGE-FILE

    --force: 可與 安裝 -i 或 升級 -U -F配合使用。


升級注意項

注意:

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

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

包查詢 -q

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


[select-options]
    -a: 所有包
    -f: 查看指定的文件由哪個程序包安裝生成
        系統上已經安裝生成的文件,是由那個軟件安裝包生成的

    -p rpmfile:針對尚未安裝的程序包文件做查詢操作;
    --whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供
    --whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

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

        [root@localhost Packages]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -itv
        -rwxr-xr-x   1 root     root        62768 Jun 10  2014 ./usr/bin/tree
        drwxr-xr-x   2 root     root            0 Jun 10  2014 ./usr/share/doc/tree-1.6.0
        -rw-r--r--   1 root     root        18009 Aug 13  2004 ./usr/share/doc/tree-1.6.0/LICENSE
        -rw-r--r--   1 root     root         4628 Jun 24  2011 ./usr/share/doc/tree-1.6.0/README
        -rw-r--r--   1 root     root         4100 Jun 24  2011 ./usr/share/man/man1/tree.1.gz
        177 blocks

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

        [root@localhost ~]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -id ./usr/bin/tree
        177 blocks

        [root@localhost ~]# tree /root
        /root
        ├── anaconda-ks.cfg
        ├── fenge.sh
        ├── old
        ├── tree-1.6.0-10.el7.x86_64.rpm
        └── usr
            └── bin
                └── tree
        可能會出現的一個問題是權限屬主或屬組的問題??赡苄枰薷?。

3 directories, 4 files

[query-options]
    --changelog:查詢rpm包的changelog
    -c: 查詢程序的配置文件
    -d: 查詢程序的文檔
    -i: information
    -l: 查看指定的程序包安裝后生成的所有文件;列表

    --scripts:程序包自帶的腳本片斷

    -R: 查詢指定的程序包所依賴的CAPABILITY;  ##查詢軟件都依賴那些文件或程序
    --provides: 列出指定程序包所提供的CAPABILITY;##列出該軟件都能提供哪些能力。

查詢用法:

-qi PACKAGE, -qfFILE, -qc PACKAGE, -qlPACKAGE, -qdPACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
-qa

卸載:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

    --allmatches 安裝了多個版本的同名軟件,全部卸載
    --notriggers 觸發器,多是腳本
    --test 測試不真實卸載

    ##卸載時,如有該程序為其他程序所依賴,不能卸載,忽略依賴關系強行卸載,可以。但是會影響到其他軟件的運行。

安裝過的軟件–校驗

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 mTimediffers
    P capabilities differ

    rpm -V PACKAGEFILE  ##安裝過的軟件的包名不帶版本號例如 tree
    rpm -Va 檢查系統所有軟件的完整性。比較耗時間和系統資源。

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

完整性驗正:SHA256
來源合法性驗正:RSA

公鑰加密:
    對稱加密:加密、解密使用同一密鑰;
    非對稱加密:密鑰是成對兒的
    public key: 公鑰,公開所有人
    secret key: 私鑰, 不能公開

導入所需要公鑰:
    rpm -K|checksigrpmfile檢查包的完整性和簽名
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
    rpm -qa gpg-pubkey* 查詢安裝的key

常用選項

rpm數據庫

數據庫重建:
    /var/lib/rpm

rpm {--initdb|--rebuilddb}

    initdb: 初始化
    如果事先不存在數據庫,則新建之
    否則,不執行任何操作

    rebuilddb:重建
    無論當前存在與否,直接重新創建數據庫

rpm常用用法:

安裝 [root@yangyouwei ~]# rpm -ivh /media/CentOS6.8Final/Packages/tree-1.5.3-3.el6.x8664.rpm warning: /media/CentOS6.8Final/Packages/tree-1.5.3-3.el6.x8664.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing… ########################################### [100%] 1:tree ########################################### [100%] 升級

    rpm -uvh FILEPACKAGE...
    rpm -fvh FILEPACKAGE...

卸載

    [root@yangyouwei ~]# rpm -e  tree

查詢 查詢已經安裝的軟件包。后面跟的是包名 [root@localhost ~]# rpm -q tree #必須是準確的包名 tree-1.6.0-10.el7.x86_64 #已經安裝的軟件的版本

    使用正則表達式查詢已經安裝的軟件
    [root@localhost ~]# rpm -qa | grep "^tr" #配合grep使用正則表達式查詢
    trousers-0.3.13-1.el7.x86_64
    traceroute-2.0.19-5.el7.x86_64
    tree-1.6.0-10.el7.x86_64

    查詢文件系統上的文件是由那個rpm包生成的
    [root@yangyouwei ~]# rpm -qf /etc/ssh/ssh_config 
    openssh-clients-5.3p1-117.el6.x86_64

    查詢已經安裝的軟件包是由哪些文件構成的。一個列表。后面跟的是包名
    [root@yangyouwei ~]# rpm -ql tree
    /usr/bin/tree
    /usr/share/doc/tree-1.5.3
    /usr/share/doc/tree-1.5.3/LICENSE
    /usr/share/doc/tree-1.5.3/README
    /usr/share/man/man1/tree.1.gz

    查詢rpm包內都有哪些文件
    [root@yangyouwei ~]# rpm -qpl /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm
    /usr/bin/tree
    /usr/share/doc/tree-1.5.3
    /usr/share/doc/tree-1.5.3/LICENSE
    /usr/share/doc/tree-1.5.3/README
    /usr/share/man/man1/tree.1.gz

校驗 導入公鑰 rpm –import /media/CentOS6.8Final/RPM-GPG-KEY-CentOS-6 查詢安裝的公鑰,用于來源和完整性校驗

    rpm包校驗
    [root@yangyouwei ~]# rpm -K /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm
    /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

    查詢已經安裝導入的key
    [root@yangyouwei ~]# rpm -qa gpg-pubkey*
    gpg-pubkey-c105b9de-4e0fd3a3

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

(0)
yywyyw
上一篇 2016-08-21 20:46
下一篇 2016-08-21 20:46

相關推薦

  • CentOS 5.0系統啟動流程

    注:CentOS系統5.x,6.x和7.x的啟動流程不同,所以本文僅討論CentOS 5.x的啟動流程。 1. POST加電自檢 服務器在開機之后首先會先進行硬件的檢測,在開機界面我們可能會看到檢測硬盤,cpu或raid卡等信息,此界面即硬件自檢界面。 2. BIOS引導 BIOS(BootSequence)用于通過指定的引導裝置引導系統啟動。 3. Boo…

    2017-05-14
  • 在馬幫的宣言

    好好學習,在這半年時間讓自己的道路上再邁出一大步

    Linux干貨 2016-10-28
  • 第6天預習xargs命令的用法

    Xargs用法詳解 1. 簡介   之所以能用到這個命令,關鍵是由于很多命令不支持|管道來傳遞參數,而日常工作中有有這個必要,所以就有了xargs命令,例如: find /sbin -perm +700 |ls -l     &n…

    Linux干貨 2016-08-05
  • 知乎上推薦的幾款快速上手的UI框架

    1、Flat UI Flat UI是一套精美的扁平風格 UI 工具包,基于 Twitter Bootstrap 實現。地址:designmodo/Flat-UI · GitHub 2、BootMetro 基于 Twitter Bootstrap 框架構建,用于創建 Windows 8 的 Metro 風格的網站,靈感來自于 Metro UI CSS 。地址:…

    2015-03-17
  • ?N22-℡浮生.若夢 ╮第五周作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; ~]# grep -E "^(root|user1|fedora)" /etc/passwd |cut -d: -f1,7 root:/bin/bash user1:/bin/bash fedo…

    Linux干貨 2016-10-09
  • http

    練習:分別使用CentOS 7和CentOS 6實現以下任務 一、配置三個基于名稱的虛擬主機          (a) discuzX          (b) wordpress  &nb…

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