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 20:47
下一篇 2016-08-21 20:47

相關推薦

  • 基礎命令

    1,對于Linux的實驗環境我們要用到虛擬機,往往每次上線都要登錄,這時候如果把用戶設為自動登錄就會方便許多,接下來就介紹下設置虛擬機的自動登錄 , /etc/gdm/custom.conf 這個就是設置自動登錄的一個配置文件,我們先來使用nano打開這個文件,如下 # GDM configuration storage 這是GDM的一個配置存儲 [daem…

    2017-11-19
  • Linux基礎知識及常用命令

    pwd:printing working directory -顯示當前工作目錄            [root@edu tmp]# pwd          &nbs…

    Linux干貨 2016-09-15
  • Linux基礎知識之邏輯卷管理器(LVM)

    邏輯卷管理器(LVM)        允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小     允許在多個物理設備間重新組織文件系統將設備指定為物理卷     用一個或者多個物理卷來創建一個卷組  &n…

    Linux干貨 2016-09-01
  • Linux文件管理類命令相關

    Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 1)、查看文件命令: (1)ls命令: list,列出目錄下的內容 語法: ls [OPTION]… [FILE]… 常用選項: -a: 顯示所有文件,包括隱藏文件; -A:顯示除.和..之外的所有文件; -l: –long, 長格式列表,即顯示文件的詳細屬性信息; -h, –huma…

    Linux干貨 2016-11-06
  • 系統基礎之shell腳本編程詳解4(數組及字符串處理,變量賦值和配置文件)

    系統基礎之shell腳本編程詳解4(數組及字符串處理,變量賦值和配置文件)     今天來講shell腳本編程的最后一些內容,數組及字符串處理,變量賦值和配置文件.這些內容也是我們經常在工作中使用到的知識點.下面讓我們來詳細了解下: 數組:   程序=指令+數據        &…

    Linux干貨 2016-08-24
  • Linux下用戶屬性的更改

      Linux下更改用戶的屬性一般使用usermod命令   基本格式如下:            Usermod[options]  login      [options]中具體參數如下:    -u  U…

    Linux干貨 2017-05-30

評論列表(1條)

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

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

欧美性久久久久