Linux軟件包管理

軟件運行和編譯
ABI:Application Binary Interface
Windows與Linux不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
庫級別的虛擬化:
Linux: WINE
Windows: Cygwin
API:Application Programming Interface
POSIX:Portable OS
程序源代碼 --> 預處理 --> 編譯 --> 彙編 --> 鏈接
靜態編譯:.a
動態編譯:.so

開發語言
    系統級開發
        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包管理器的前端工具
        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的元數據,如名稱,版本,依賴性,描述等
        安裝或卸載時運行的腳本
    數據庫(公共):/var/lib/rpm
        程序包名稱及版本
        依賴關係
        功能說明
        包安裝後生成的各文件路徑及校驗碼信息

程序包的來源
    管理程序包的方式:
        使用包管理器: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
    --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:降級
    --force: 強制安裝
升級注意項
注意:
(1) 不要對內核做升級操作;Linux支持多內核版本並存,因此,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝後曾被修改,升級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(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:程序包自帶的腳本
        --provides: 列出指定程序包所提供的CAPABILITY
        -R: 查詢指定的程序包所依賴的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 ...

包校驗
    包來源合法性驗正及完整性驗正
        完整性驗正: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源
    阿里雲repo文件:
        http://mirrors.aliyun.com/repo/
    CentOS系統的yum源
        阿里雲:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
    EPEL的yum源:
        阿里雲: https://mirrors.aliyun.com/epel/$releasever/x86_64

yum命令
    yum命令的用法:
        yum [options] [command] [package ...]
    顯示倉庫列表:
        yum repolist [all|enabled|disabled]
    顯示程序包:
        yum list
        yum list [all | glob_exp1] [glob_exp2] [...]
        yum list {available|installed|updates} [glob_exp1] [...]
    安裝程序包:
        yum install package1 [package2] [...]
        yum reinstall package1 [package2] [...] (重新安裝)
    升級程序包:
        yum update [package1] [package2] [...]
        yum downgrade package1 [package2] [...] (降級)
    檢查可用升級:
        yum check-update
    卸載程序包:
        yum remove | erase package1 [package2] [...]
    查看程序包information:
        yum info [...]
    查看指定的特性(可以是某文件)是由哪個程序包所提供:
        yum provides | whatprovides feature1 [feature2] [...]
    清理本地緩存:
        清除/var/cache/yum/$basearch/$releasever緩存
        yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    構建緩存:
        yum makecache
    搜索:yum search string1 [string2] [...]
        以指定的關鍵字搜索程序包名及summary信息
    查看指定包所依賴的capabilities:
        yum deplist package1 [package2] [...]
    查看yum事務歷史:
        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
    安裝及升級本地程序包:
        yum localinstall rpmfile1 [rpmfile2] [...]
        (用install替代)
        yum localupdate rpmfile1 [rpmfile2] [...]
        (用update替代)
    包組管理的相關命令:
        yum groupinstall group1 [group2] [...]
        yum groupupdate group1 [group2] [...]
        yum grouplist [hidden] [groupwildcard] [...]
        yum groupremove group1 [group2] [...]
        yum groupinfo group1 [...]
    yum的命令行選項:
        --nogpgcheck:禁止進行gpg check
        -y: 自動回答爲“yes”
        -q:靜默模式
        --disablerepo=repoidglob:臨時禁用此處指定的repo
        --enablerepo=repoidglob:臨時啓用此處指定的repo
        --noplugins:禁用所有插件

系統光盤yum倉庫
        系統安裝光盤作爲本地yum倉庫:
        (1) 掛載光盤至某目錄,例如/mnt/cdrom
            mount /dev/cdrom /mnt/cdrom
        (2) 創建配置文件
        [CentOS7]
            name=
            baseurl=
            gpgcheck=
            enabled=
        創建yum倉庫:
            createrepo [options] <directory>

問題:如何創建一個本地yum倉庫???
將/etc/yum.repos.d/的文件放在其他目錄中自己創建一個的新的倉庫
mkdir -pv /etc/yum.repo/org
mv Centos-* /org
mkdir -pv /mnt/cdrom
mount /dev/sr1 /mnt/cdrom

vim list.repo
[base]
name=base
baseurl=file:///mnt/cdrom
gpgcheck=0
可在建一個倉庫
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64
gpgcheck=0

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

編譯安裝
    編譯C源代碼:
    準備:提供開發工具及開發環境
    開發工具:make, gcc等
    開發環境:開發庫,頭文件
    glibc:標準庫
    實現:通過“包組”提供開發組件
    Development Tools
    Server Platform Development

問題1:在centos6中如何編譯安裝httpd2.2版本???
1、先安裝開發編譯包組
yum groupinstall -y "Develoment tools"
2、解壓縮
tar xvf httpd-2.2.34.tar.bz2
生成httpd-2.2.34
注意在編譯時必須要進入生成的文件進行編譯安裝
yum -y install openssl-devel 解決依賴關係
./configure --prefix=/hh \ 用於存放文件路徑
--sysconfdir=/etc/httpd223 \ 存放配置文件路徑
--enable-ssl
make -j 4
make install
apache restart 啓用服務

問題2:在centos7中編譯安裝httpd2.4版本???
1、解決開發包組和依賴關係
yum groupinstall "Develoment tools" 開發包組
yum -y install pcre-devel 解決依賴關係

httpd官方網站:httpd.apache.org www.apache.org
2、解壓縮
tar xvf httpd-2.4.25.tar.bz2
生成httpd-2.4.25
編譯安裝時進入生成文件
./configure --prefix=/hh \ 存放文件的路徑 路徑可自己定義
--sysconfdir=/etc/httpd223 \ 存放主配置文件
make -j 4
make install
/hh/bin/apachectl restart 啓動此服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章