rpm和yum整理

rpm和yum整理

Linux程序包管理:
    API:Application programing Interface
程序編譯需要通過以下的幾個步驟:
程序源代碼-->預處理-->編譯-->目標代碼-->匯編-->鏈接
編譯有分成2種:
    靜態編譯:
    動態編譯:.so

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

程序包管理器:
    debian:deb,dpt
    redhat:rpm,rpm
    rpm:redhat package manager
    RPM is package manager

rpm的命名方式:
    name_VERSION_release.arch.rpm
VERSION: major.minor.release
    對應主版本號.次版本號.修訂號
release.arch:
    release: 包的發行號和對應的操作系統
    arch表示適用的平臺
    X86: i386 i486 i586 i686
    X86_64: x86 x86_64 amd64
    noarch:表示此包可以安裝到所有的平臺上

例如:zsh-5.0.2-7.el7.x86_64.rpm:
    zsh:軟件名稱
    5.0.2:軟件版本
    7.el7:軟件包發行商版本,7表示發行號,el7表示RHEL7
    x86_64:適用的平臺

注意:軟件包中包和包之間存在著依賴關系;

RPM中的管理工具:
    yum:rpm包管理器的前端工具;
    apt-get:deb包管理器前端工具;
    zypper: suse上的rpm前端管理工具;
    dnf: Fedora 22+ rpm包管理器前端管理工具;  

查看二進制程序所依賴的庫文件:
    ldd /PATH/TO/BINARY_FILE

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

配置文件為:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

[root@localhost ~]# cat /etc/ld.so.conf.d/*.conf
# This directive teaches ldconfig to search in nosegneg subdirectories
# and cache the DSOs there with extra bit 1 set in their hwcap match
# fields.  In Xen guest kernels, the vDSO tells the dynamic linker to
# search in nosegneg subdirectories and to match this extra hwcap bit
# in the ld.so.cache file.
hwcap 1 nosegneg
/usr/lib64/mysql
/usr/lib64/qt-3.3/lib
/usr/lib64/xulrunner-2

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

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

1,程序的組成組成清單(每個包獨有)
    文件清單
    安裝或卸載時運行的腳本

2,數據庫(公共)
    程序包名稱及版本
    依賴關系:
    功能說明:
    安裝生成的各文件的文件路徑及效驗碼信息:

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

CentOS系統上rpm命令管理程序包:
    安裝,卸載,升級,查詢,校驗,數據庫維護

rpm命令的分解:
    安裝:
        rpm {-i|--install} [install-options] PACKAGE_FILE ...
            -v:顯示詳細信息
            -vv:顯示更多丑陋的調試信息
            -h:以#顯示程序包管理執行進度,每個#表示2%的進度

        rpm -ivh packge——file。。。

        [install-options]
        --test:測試安裝,但不是真正的執行安裝過程,dry run模式;
        --nodeps:忽略依賴關系:
        --replacepkgs: 重新安裝;
        --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 ...

                upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”;
                freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作;


                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 /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;
            --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
            --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
            [query-options]
            --changelog:查詢rpm包的changlog
            -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

導入所需要公鑰:
    rpm --import /PATH/FROM/GPG-PUBKEY-FILE

    CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7           

數據庫重建:
    rpm {--initdb|--rebuilddb}
    initdb: 初始化
    如果事先不存在數據庫,則新建之;否則,不執行任何操作;

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

安裝沒依賴關系的軟件包:
[root@localhost Packages]# pwd 
/media/cdrom/Packages
[root@localhost Packages]# rpm -ivh tree-1.5.3-2.el6.x86_64.rpm 
warning: tree-1.5.3-2.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
package tree-1.5.3-2.el6.x86_64 is already installed

安裝有依賴關系的軟件包:
[root@localhost Packages]# rpm -ivh tomcat6-6.0.24-49.el6.noarch.rpm 
warning: tomcat6-6.0.24-49.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:
jakarta-commons-collections is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-daemon is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-dbcp is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-logging is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-pool is needed by tomcat6-0:6.0.24-49.el6.noarch
log4j is needed by tomcat6-0:6.0.24-49.el6.noarch
mx4j is needed by tomcat6-0:6.0.24-49.el6.noarch
tomcat6-lib = 0:6.0.24-49.el6 is needed by tomcat6-0:6.0.24-49.el6.noarch

查詢一個已安裝的軟件包:
    [root@localhost Packages]# rpm -qa | grep tree
    tree-1.5.3-2.el6.x86_64


Linux程序包管理:
    CentOS上用的rpm前置工具:yum與dnf
    yum repository: yum repo
    存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄下:repodata);

    在編寫yum中需要指定文件服務器:
    我們常用的文件服務器有如下的幾種方式可以進行下載:
        ftp://
        http://
        nfs://
        file:///

yum相當于一個眾多的rpm包的一個倉庫:
    配置文件放在如下幾個位置:
        /etc/yum.conf:為所有倉庫提供公共配置
        /etc/yum.repos.d/*.repo:為倉庫的指向提供配置

設定yum的庫的定義:
    [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命令的用法:
    * install package1 [package2] [...]安裝指定的包:
    * update [package1] [package2] [...]指定更新包:
    * update-to [package1] [package2] [...]更新指定包組到目標包
    * remove | erase package1 [package2] [...]對指定包重命名:
    * list [...]查看已安裝的包:
    *  clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]清除指定的緩存:
    *  groupinstall group1 [group2] [...]安裝指定的包組
    * groupupdate group1 [group2] [...]指定更新包組
    * grouplist [hidden] [groupwildcard] [...]查看已安裝的包組
    * groupremove group1 [group2] [...]對指定包組重命名
    * 以及以下幾個命令:
    * groupinfo group1 [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
    * localinstall rpmfile1 [rpmfile2] [...](maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...](maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * check
    * help [command]


顯示倉庫列表:
repolist [all|enabled|disabled]

顯示倉庫列表:
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]

安裝及升級本地程序包:
    * localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)


包組管理的相關命令:
    * groupinstall group1 [group2] [...]
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]

如何使用光盤當作本地yum倉庫:
(1) 掛載光盤至某目錄,例如/media/cdrom
    # mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 創建配置文件
    [CentOS7]=定義ID
    name=對yum源起名:
    baseurl=定義yum源的地址可以使用網址,ftp,本地目錄
    gpgcheck=
    enabled=

yum的命令行選項:
    --nogpgcheck:禁止進行gpg check;
    -y: 自動回答為“yes”;
    -q:靜默模式;
    --disablerepo=repoidglob:臨時禁用此處指定的repo;
    --enablerepo=repoidglob:臨時啟用此處指定的repo;
    --noplugins:禁用所有插件;

yum的repo配置文件中可用的變量:
    $releasever: 當前OS的發行版的主版本號;
    $arch: 平臺;
    $basearch:基礎平臺;
    $YUM0-$YUM9

例如:http://mirrors.magedu.com/centos/$releasever/$basearch/os

創建本地的yum源:
    必須要先安裝createrepo
createrepo [options] <directory>

程序包的編譯安裝:

源代碼 --> 預處理 --> 編譯(gcc) --> 匯編 --> 鏈接 --> 執行

源代碼組織格式:C或C++要使用到make
make(configure --> Makefile.in --> makefile)

C代碼編譯安裝三步驟:
    ./configure:
    (1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;
    (2) 檢查依賴到的外部環境;
    make:
    根據makefile文件,構建應用程序;
    make install


開發工具:
    autoconf: 生成configure腳本
    automake:生成Makefile.in



編譯C源代碼:
    前提:提供開發工具及開發環境
    開發工具:make, gcc等
    開發環境:開發庫,頭文件
    glibc:標準庫

使用yum grouplist查看已有的可以安裝的包組:
[root@localhost ~]# yum grouplist
已加載插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* c7-media: 
* extras: centos.ustc.edu.cn
* updates: mirrors.163.com
可用的環境分組:
   最小安裝
   基礎設施服務器
   計算節點
   文件及打印服務器
   基本網頁服務器
   虛擬化主機
   帶 GUI 的服務器
   GNOME 桌面
   KDE Plasma Workspaces
   開發及生成工作站
已安裝的組:
   CIFS 文件服務器
   MySQL 數據庫客戶端
   MySQL 數據庫服務器
   基于網頁的企業級管理
   開發工具
可用組:
   Eclipse
   FCoE 存儲客戶端
   NFS 文件服務器
   SNMP 支持
   TeX 支持
   TurboGear 應用程序框架
   iSCSI 存儲客戶端
   傳統 UNIX 兼容性
   兼容性程序庫
   可擴展文件系統
   圖形管理工具
   存儲可用性工具
   安全性工具
   客戶端管理工具
   控制臺互聯網工具
   智能卡支持
   服務器平臺
   服務器平臺開發
   桌面
   桌面平臺
   桌面平臺開發
   短信客戶端支持
   科學記數法支持
   系統管理
   系統管理工具
   系統管理消息服務器支持
   網絡存儲服務器
   虛擬化
   通用桌面
   高可用性管理

CentOS6上要安裝:
    "Development Tools", 
    "Server Platform Development",


第一步:configure腳本
    選項:指定安裝位置、指定啟用的特性

    --help: 獲取其支持使用的選項
        選項分類:
    安裝路徑設定:
    --prefix=/PATH/TO/SOMEWHERE: 指定默認安裝位置;默認為/usr/local/
    --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置;

    System types:目標系統平臺結構

    Optional Features: 可選特性
    --disable-FEATURE
    --enable-FEATURE[=ARG]

    Optional Packages: 可選包
    --with-PACKAGE[=ARG]
    --without-PACKAGE

第二步:make

第三步:make install
以上我就不一一演示了:在安裝完成以后需要到特定的目錄下使用bin/文件進行

由于本地的bin文件以及man文件都沒有系統默認的需要加入到系統默認當中:

安裝后的配置:
    (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文件
        添加一個MANPATH

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

(0)
wostopwostop
上一篇 2016-07-26
下一篇 2016-07-26

相關推薦

  • 馬哥教育網絡班22期第一周課程練習2-未聞花名

    語法:export [-fnp][變量名稱]=[變量設置值] 補充說明:在shell中執行程序時,shell會提供一組環境變量。export可新增,修改或刪除環境變量,供后續執行的程序使用。export的效力僅及于該此登陸操作。 參數: -f 代表[變量名稱]中為函數名稱。 -n 刪除指定的變量。變量實際上并未刪除,只是不會輸出到后續指令的執行環境中。 -p…

    Linux干貨 2016-08-15
  • 磁盤、文件系統管理

    linux磁盤、文件系統管理 硬盤:機械硬盤、固態硬盤     計算硬盤速度:IoPs:(Io  per  second ) 每秒20次 機械硬盤:     track:磁道     平均尋道時間  &nbsp…

    Linux干貨 2016-08-25
  • 磁盤陣列及邏輯卷的創建

    磁盤陣列 軟件RAID的實現 mdadm:模式化的工具 命令的語法格式:mdadm[mode] <raiddevice> [options] <component-devices> 支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10 模式: 創建:-C 裝配: -A …

    Linux筆記 2018-04-30
  • rpm管理包

    rpm命令是RPM軟件包的管理工具。rpm原本是Red Hat Linux發行版專門用來管理Linux各項套件的程序,由于它遵循GPL規則且功能強大方便,因而廣受歡迎。逐漸受到其他發行版的采用。RPM套件管理方式的出現,讓Linux易于安裝,升級,間接提升了Linux的適用度。接下來聊一聊如何安裝、卸載、查詢、檢驗rpm類的軟件。 安裝:…

    2017-08-19
  • Linux磁盤管理

    一、磁盤管理總體分類  1)磁盤結構  2)分區類型  3)管理分區 4)管理文件系統  5)掛載設備 6)管理虛擬內存 ……………………………………………………………………………………………………………………… 重要分類模塊詳解 ………………………………………………………………………………………………………………………

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