8月20日軟件包管理

軟件包管理

本章內容

軟件運行環境
軟件包基礎
Rpm包管理
yum管理
定制yum倉庫
編譯安裝

軟件運行環境

API:Application Programming Interface
    POSIX:Portable OS
程序源代碼-->預處理-->編譯-->匯編-->鏈接
    靜態編譯: .a
    共享編譯: .so
ABI:Application Binary Interface
   Windows與Linux不兼容
       ELF(Exeutable 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, i686
x86_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包管理器的前端工具(記住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

包管理器

? 程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
? 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: 以#顯示程序包管理執行進度
        rpm -ivh PACKAGE_FILE ...

rpm包安裝

? [install-options]
    --test: 測試安裝,但不真正執行安裝; dry run模式
    --nodeps:忽略依賴關系(不建議使用,裝上去也沒法用)
    --replacepkgs | replacefiles:替代安裝(覆蓋)(當文件損壞時,無法重新安裝使用)

8月20日軟件包管理

8月20日軟件包管理

8月20日軟件包管理

    --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...
    upgrade:安裝有舊版程序包,則“升級”
             如果不存在舊版程序包,則“安裝”
    freshen:安裝有舊版程序包,則“升級”
             如果不存在舊版程序包,則不執行升級操作
    rpm -Uvh PACKAGE_FILE ...
    rpm -Fvh PACKAGE_FILE ...
    --oldpackage:降級
配合rpm -ivh --oldpackage 包名
    --force: 強行升級(可替代之前所學的替代安裝(--replacefiles))

升級注意項

? 注意:
1) 不要對內核做升級操作; Linux支持多內核版本并存,因此對直接安裝新版本內核
2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

包查詢

? rpm {-q|--query} [select-options] [query-options]
? [select-options]
  rpm -ql 后面跟的是包名
    -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, -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
? 公鑰加密:
    對稱加密:加密、解密使用同一密鑰;
    非對稱加密:密鑰是成對兒的
        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下)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-Xx86_64/
? CentOS epel:
    http://172.16.0.1/fedora-epel/7/x86_64/
? yum命令的用法:
    yum [options] [command] [package ...]

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 “倉庫名” 啟用倉庫

yum

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

程序包編譯

? 程序包編譯安裝:
? Application-VERSION-release.src.rpm --> 安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝
? 源代碼-->預處理-->編譯(gcc)-->匯編-->鏈接-->執行
? 源代碼組織格式:
    多文件:文件中的代碼之間,很可能存在跨文件依賴關系
    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

? 開源程序源代碼的獲?。?
    官方自建站點:
        apache.org (ASF)
        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",

? 第一步: 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.con
            添加一個MANPATH

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

(0)
1515218807015152188070
上一篇 2016-08-21
下一篇 2016-08-21

相關推薦

  • echo命令使用詳解

        echo命令用于在shell中打印shell變量的值,或者直接輸出指定的字符串。linux的echo命令,在shell編程中極為常用,在終端下打印變量的時候也是常常用到的,因此有必要了解下echo的用法。 語法: ? 語法: echo [-neE][字符串]   命令選項:   &…

    Linux干貨 2016-08-22
  • shell基礎if與case

    1.read   使用read來把輸入值分配給一個或多個shell變量;   -p 指定要顯示的提示;例如 read -p "SHURU" num   -t TIMEOUT   read 從標準輸入中讀取值,給每個單詞分配一個變量,所有剩余單詞都被分配給最后一個變量 2.流程控制   過程…

    Linux干貨 2016-08-18
  • Linux文件和目錄管理類命令初識

    簡述 在Linux操作系統使用過程中,因為運維需要頻繁的對文件、目錄進行操作,所以需要學習一些關于文件、目錄的命令 Linux上文件是什么? 「文件」:存儲空間存儲的一段流式數據,可以按名「存取」這些數據 常見文件類型 -:常規文件d:目錄文件b:塊設備文件,以「block」為單位進行隨機訪問,常見設備「硬盤」c:字符設備文件,以「character」為單位…

    Linux干貨 2016-11-06
  • 初識Linux-即使是997也不能停止學習

    1.計算機的組成及其功能:    從1946年第一臺通用計算機ENIAC誕生至今,幾乎所有的計算機系統都是建立在馮諾依曼體系結構上的。那么何為馮諾依曼體系結構? 馮諾依曼體系結構:        控制器:是整個計算機的中樞,負責計算機的整體調度工作,將指令從存儲器中取出,并對指令進行解釋執行。 &n…

    Linux干貨 2016-10-29
  • N26_第二周

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 a 文件查看類  cat tac  head  tail more  less b 文件操作類  touch cp  mv  rm more命令:   &nbsp…

    2017-05-26
  • LVS+keepalived高可用web集群搭建的疑惑

    參考文章是這一份:http://ox0spy.github.io/debian/2014/06/26/setup-lvs-and-keepalived-on-debian/ 一:操作系統與ip               ip地址形式:19…

    Linux干貨 2016-02-14

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-22 14:15

    對學到的知識總結的很好,標題不要帶著日期,練習等字眼,希望下次能改進。

欧美性久久久久