1. 程式人生 > >軟件包管理(rpm,yum)

軟件包管理(rpm,yum)

dpt 重命名 asf adb rebuild prior upgrade failover ada

軟件包管理相關軟件:

軟件包管理器的核心功能:
    1.制作軟件包
    2.安裝,卸載,升級,查詢,效驗
    
    Redhat ,SUSE : RPM 
    Debian    :dpt
    
    依賴關系;
        
    前端工具;yum ,apt-get
    yum 是RPM 的前端工具
    apt-get 是dpt 的前端工具
    後端工具:RPM,dpt

rpm:

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

    安裝:
        rpm {
-i|--install} [install-options] PACKAGE_FILE ... -v: verbose -vv: -h: 以#顯示程序包管理執行進度;每個#表示2%的進度 rpm -ivh PACKAGE_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 公鑰加密: 對稱加密:加密、解密使用同一密鑰; 非對稱加密:密鑰是成對兒的, public key: 公鑰,公開所有人 secret key: 私鑰, 不能公開 導入所需要公鑰: rpm --import /PATH/FROM/GPG-PUBKEY-FILE CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7 數據庫重建: rpm {--initdb|--rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之;否則,不執行任何操作; rebuilddb:重建 無論當前存在與否,直接重新創建數據庫;

安裝,查詢,卸載,升級,效驗,數據庫的重建工作
    
    noarch是no architecture的縮寫,說明這個包可以在各個不同的cpu上使用    
        
    1.安裝
        rpm -i /PATH/TO/PACKET_FILE
                -i : 指定安裝文件
                -h : 以#號顯示進度,每個# 表示2%-v :顯示詳細過程
                -vv :顯示更詳細的過程
            
            examples:
            
            rpm -ivh /PATH/TO/PACKET_FILE
                --nodeps: 忽略依賴關系
                --replacepkgs:重新安裝,替換原有安裝
                
                --force    :強行安裝,可以實現重裝和降級
                
                
                
rmp格式文件有兩種形式
二進制包(Binary)以及源代碼包(Source)兩種。
二進制包可以直接安裝在計算機中,而源代碼包將會由RPM自動編譯、安裝。
源代碼包經常以src.rpm        
            
    2.查詢
            -q :查詢模式
        rpm -a 包名
        rpm -qa  :查詢安裝的所有包,
        rpm -qi  PACKET_NAME :查詢指定包的信息
        rpm -ql PACKAGE_NAME :查詢指定安裝包生成的文件列表
        rpm -qf  /path/to/somefle :查詢指定的文件是有那個rpm 包生成的
        rpm -qc    NAME : 查詢指定安裝包的配置文件
        rpm -qd NAME :查詢指定安裝包的幫助文件
        rpm -q  --scripts  PACKAGE_NAME: 查詢指定安裝包包含的腳本
        rpm     deplist:顯示rpm軟件包的所有依賴關系。


        rpm -qpi /PATH/TO/PACKAGE_NAME :
        rpm -qpl /PATH/TO/PACKAGE_NAME :
        #查詢某個rpm包尚未安裝,查詢其說明信息,安裝以後的生成的文件
        
    3.升級
        rpm -Uvh /PATH/TO/NAME_FILE :如果有老版本則升級,否則退出
        rpm -fvh /PATH/TO/NAME_FILE :如果有老版本則升級,否則退出
        rpm  -ivh --oldpackage   NAME :降級到低版本
        
    4,卸載
        rpm -e PACKAGE_NAME :卸載,
                --nodeps :有依賴關系無法卸載,使用nodeps 強制卸載
    
    
    
    5.效驗            
        rpm  -V  package_name : 效驗
    
    6.重建數據庫
        rpm :
            --rebuilddb :重建數據庫,一定會重新建立
            --initdb     :初始化數據庫。沒有則進行建立
             
    
    
    7.檢驗來源合法性,及軟件完整性
        rpm -K /path/to/file_name  
        
        rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
        #導入秘鑰
    
    
    
    
    scp :scp命令用於在Linux下進行遠程拷貝文件的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器,而且scp傳輸是加密的。可能會稍微影響一下速度

    #將本地文件傳送到遠程服務器
    scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root
    #將遠程服務器文件傳送傳到本地
    scp [email protected]:/home/root/others/music /home/space/music/1.mp3 
        
    
    
    
    

yum:

    CentOS: yum, dnf

    URL: ftp://172.16.0.1/pub/    

    YUM: yellow dog, Yellowdog Update Modifier

    yum repository: yum repo
        存儲了眾多rpm包,以及包的相關的元數據文件(放置於特定目錄下:repodata);

        文件服務器:
            ftp://
            http://
            nfs://
            file:///

    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 [options] [command] [package ...]

       command is one of:
        * install package1 [package2] [...]
        * update [package1] [package2] [...]
        * update-to [package1] [package2] [...]
        * check-update
        * upgrade [package1] [package2] [...]
        * upgrade-to [package1] [package2] [...]
        * distribution-synchronization [package1] [package2] [...]
        * remove | erase package1 [package2] [...]
        * list [...]
        * info [...]
        * provides | whatprovides feature1 [feature2] [...]
        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
        * makecache
        * 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]

    顯示程序包:
        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]
        name=
        baseurl=
        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 [options] <directory>

    程序包編譯安裝:
        testapp-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令制作成二進制格式的rpm包,而後再安裝;

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

        源代碼組織格式:
            多文件:文件中的代碼之間,很可能存在跨文件依賴關系;

            C、C++: make (configure --> Makefile.in --> makefile)
            java: maven


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

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

            建議:安裝前查看INSTALL,README

        開源程序源代碼的獲取:
            官方自建站點:
                apache.org (ASF)
                mariadb.org
                ...
            代碼托管:
                SourceForge
                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/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

        安裝後的配置:
            (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
client :
         配置文件:指定yum 倉庫的信息,路徑等
yum工具作為rpm包的軟件管理器,可以進行rpm包的安裝、升級以及刪除等日常管理工作,而且對於rpm包之間的依賴關系可以自動分析,大大簡化了rpm包的維護成本。
yum工具的配置,主要由兩個文件控制:/etc/yum.conf以及/etc/yum.repos.d/filename.repo
關於/etc/yum.conf文件:主要承擔全局配置[main],此外也可以在此處配置軟件倉庫(repository)
關於/etc/yum.repos.d/filename.repo:主要承擔具體軟件倉庫的配置(若上面yum.conf中配置了軟件倉庫,此處也可以選擇不配置),filename可自行定義。
     
    
    
    參數解釋如下:
[rhel-debuginfo]:用於區分不同的repository,在一個filename.repo文件中,可以定義一個或者多個repository
name:用於對repository的描述
baseurl:用於指定獲取rpm包的源位置,支持http://、ftp://、file://三種協議。
enabled:用於定義此軟件倉庫是否可用。0:不可用,1:可用
gpgcheck:定義是否對rpm包進行GPG校驗。
gpgkey:用於定義校驗的gpg密鑰文件的位置。    
        
            
        
        
        
以下是關於管理的常用命令

yum repolist : 查看可用的軟件倉庫信息
yum list rpm包 : 查看rpm包的安裝情況,支持通配符*,若為被安裝,顯示可用的軟件倉庫
yum list installed |grep rpm包: 查看rpm包是否被安裝
yum info rpm包 : 查看rpm包詳細信息
yum check-update : 檢查可用的rpm包更新
yum install rpm包 : 安裝rpm包,支持通配符*
yum remove rpm包 : 刪除rpm包
yum clean packages : 清除rpm包緩存
yum clean headers : 清除rpm頭文件緩存
yum clean all : 清除rpm頭文件以及包緩存    
        
yum -y update :更新yum 源,
yum makecache : 就是把服務器的包信息下載到本地電腦緩存起來        
        

***************************        
運行命令生成緩存:
yum clean all
yum makecache    
#替換yum 必須要做的動作
********************************
        
    wget 命令:
        wget 命令用來從指定的URL 下載文件。
        
        
    編譯環境,開發環境
    手動編譯安裝;
    make :項目管理工具,
        Makefile :
        
    make install :安裝
****************************************************    
#準備編譯環境,安裝"development tool"


    編譯安裝的三步驟:
    ./configure
        --help   :獲取腳本使用幫助
        --prefix=/path/to/somewhere :
        --sysconfdir=/path/to/config_file ;指定配置文件安裝位置
        
    make

    make install
************************************************
這些都是典型的使用GNU的AUTOCONF和AUTOMAKE產生的程序的安裝步驟。
./configure是用來檢測你的安裝平臺的目標特征的。比如它會檢測你是不是有CC或GCC,並不是需要CC或GCC,它是個shell腳本。
make是用來編譯的,它從Makefile中讀取指令,然後編譯。
make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。
AUTOMAKE和AUTOCONF是非常有用的用來發布C程序的東西。    
****************************************************    
    
    ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf

其中我們通過--prefix制定了安裝路徑,
通過--conf-path制定了配置文件的具體位置    
        
    1.修改path 環境變量,能夠識別二進制程序路勁
    2. 添加額外的lib 庫路徑
    3.頭文件:include
    
        
    netstat -ntlp:
        -t或--tcp:顯示TCP傳輸協議的連線狀況; 
        -u或--udp:顯示UDP傳輸協議的連線狀況;
        -r :顯示路由
        -p:
        

軟件包管理(rpm,yum)