Linux程序包管理

Linux程序包管理

API:Application Programming Interface
    POSIX:Portable OS
程序源代碼-->預處理-->編譯-->彙編
    靜態編譯:
    共享編譯:.so

ABI:Application Binary Interface
    Windows與linux不兼容
    庫級別的虛擬化:
        liunx:WINE
        Windows:Cywin
靜態和動態鏈接
    鏈接主要作用是把各個模塊之間相互引用的部分處理好,使得各個模塊之間能
    夠正確地銜接,分爲靜態鏈接和動態鏈接
    靜態鏈接
        把程序對應的依賴庫複製一份到包
        libxxx.a
        嵌入程序包
        升級難,需重新編譯
        佔用較多空間,遷移容易
    動態鏈接
        只把依賴加做一個動態鏈接
        libxxx.so
        連接指向
        佔用較少空間,升級方便
系統級開發:
    C
    C++
應用級開發:
    java
    Python
    php
二進制應用程序包的組成部分:
    二進制文件、庫文件、配置文件、幫助文件

    程序包管理器:
        debian:deb,dpt,dpkg包管理器
        redhat:rpm,rpm
            rpm:Redhat Package Manager
                RPM is Package Manager
        Gentoo
        Archlinux

    file命令:查看文件類型

    開放源碼:就是程序代碼,寫給人類看的程序語言,但機器並不認識,所以無法執行;
    編譯程序:將程序代碼轉譯爲機器看得懂的語言,就類似翻譯者的角色;
    可執行文件:經過編譯程序變成二進制程序後,機器看的懂所以可以執行的文件;
    函式庫:就類似子程序的角色,可以被呼叫來執行的一段功能函數;

    安裝gcc等軟件開發工具:
        yum groupinstall 'Development Tools'

    編譯安裝步驟:
        解壓:tar
        ./configure
        make clean      非必要步驟
        make
        make install    安裝到預定的目錄中

    ldconfig -p:列出目前有的所有函式庫資料內容(在/etc/ld.so.cache內的資料!)
        ldconfig [-f conf] [-C cache]
            /etc/ld.so.conf
            /etc/ld.co.cache

    ldd:判斷某個可執行的binary文件還有什麼動態函式庫

        ldd [-vdr] [filename]
            -v:列出所有內容信息;
            -d:重新將資料有遺失的link點繡出來;
            -r:將ELF有關的錯誤內容繡出來;

    md5sum/sha1sum/sha256sum [-bct] filename
    md5sum/sha1sum/sha256sum [--status|--warn] --check filename
        -b:使用binary的讀檔方式,默認爲Windows/DOS文件型態的讀取方式;
        -c:校驗文件指紋;
        -t:以文字型態來讀取文件指紋;
包命名
    源代碼:name-VERSION.tar.gz
        VERSION:major.minor.release
    rpm包命名方式:
        name-VERSION-release.ARCH.rpm
            VERSION:major.minor.release
            ARCH:release.os.arch
            release.arch:
                release:release.OS
            常見的arch:
                x86:i386,i486,i586,i686
                x86_64:x64,x86_64,amd64
                powerpc:ppc
                跟平臺無關:noarch
    包工具
        testapp:分類和拆包
            testapp-VERSION-ARCH.rpm:主包
            testapp-devel-VERSION-ARCH.rpm:開發子包
            Application-utils-VERSION-ARHC.rpm 其它子包
            Application-libs-VERSION-ARHC.rpm 其它子包
        包之間:可能存在依賴關係,甚至循環依賴
            X,Y,Z
        解決依賴包管理工具:
            yum:rpm包管理器的前端工具;
            apt-get:deb包管理器前端工具;
            zypper:suse上的rpm前端管理工具;
            dnf:Fedora 22+ rpm包管理器前端管理工具;
    庫文件
        查看二進制程序所依賴的庫文件:
            ldd /path/to/BINARY_FILE
        管理及查看本機已經轉載的庫文件:
            ldconfig:
                -p:顯示本機已經緩存的所有可用庫文件及文件路徑映射關係;

                配置文件爲:/etc/ld.so.conf  /etc/ld.so.conf.d/*.conf
                緩存文件:/etc/ld.so.cache
        映射關係
            配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
            緩存文件:/etc/ld.so.cache

    程序包管理:
        功能:將編譯好的應用程序的各組文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作;
        1、程序包文件的組成清單(每個包獨有)
            RPM包內的文件清單
            RPM的元數據,如名稱,版本,依賴性,描述等
            安裝或卸載時運行的腳本
        2、數據庫(公共)
            程序包名稱及版本
            依賴關係
            功能說明
            安裝生成的各文件的文件路徑及校驗碼信息

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

    獲取程序包的途徑:
        1、系統發版的光盤或官方的服務器:
            CentOS鏡像:
            https://opsx.alibaba.com/mirror
            http://mirrors.aliyun.com
            http://mirrors.163.com/
            http://mirrors.sohu.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、自己製作
        建議:第三方包建議要檢查其合法性,來源合法性,程序包的完整性

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

    安裝:
        rpm {-i|--install} [install-options] PACKAGE_FILE ...
            rpm -ivh package_name
            -i:install的意思
            -v:verbose,查看更詳細的安裝信息畫面
            -vv:更詳細的安裝信息
            -h:以#顯示程序包管理執行進度:每個#表示2%的進度,以安裝信息列顯示安裝進度

            rpm -ivh PACKAGE_FILE ...
                [install-options]
                    --test:測試安裝,但不真正執行安裝過程;dry run模式;
                    強制安裝時的參數:
                    --nodeps:忽略依賴關係;
                    --replacepkgs:重新安裝;重新安裝某個已經安裝過的軟件!可使用這個選項來重複安裝!
                    --replacefiles:如果在安裝的過程當中出現了[某個文件已經被安裝在你的系統上面]的信息,
                        又或許出現版本不合的訊息(confilcting files)時,可以使用這個參數來直接覆蓋文件。
                    --nosignatue:不檢查來源合法性;
                    --nodigest:不檢查包完整性
                    --noscripts:不執行程序包腳本片段;
                        %pre:安裝前腳本;   --nopre
                        %post:安裝後腳本;    --nopost
                        %preun:卸載前腳本   --nopreun
                        %postun:卸載後腳本  --nopostun
    升級:
        -Uvh:如果沒有安裝過,系統將予以直接安裝;如果有安裝過舊版軟件,則系統自動更新至新版;
        -Fvh:只有安裝在linux系統內的軟件纔會被升級;
        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:強制升級;這個參數其實就是 --replacefiles 與 --replacepkgs的綜合體;

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

    查詢:
        rpm {-q|--query} [select-options] [query-options]
            rpm -qa
            rpm -q[lcdR] 已安裝的軟件名稱
            rpm -qf 存在於系統上面的某個文件名
            rpm -qp[licdR] 未安裝的某個文件名

            -q:僅查詢,後面接的軟件名稱是否有安裝;
            -qa:列出所有的,已經安裝在本機Linux系統上面的所有軟件名稱;
            -qi:列出該軟件的詳細信息(information),包含開發商、版本與說明等;
            -ql:列出該軟件所有的文件與目錄所在完整文件名(list);
            -qc:列出該軟件的所有配置文件(找出在/etc/底下的檔名而已);
            -qd:列出該軟件的所有說明文件(找出與man有關的文件而已);
            -qR:列出與該軟件有關的相依軟件所含的文件(Required的意思);
            -qf:由後面接的文件名,找出該文件屬於哪一個已安裝的軟件;
            -q --scripts:列出是否含有安裝後需要執行的腳本檔,可用以debug喔!
            查詢某個RPM文件內含有的信息:
            -qp[icdlR]:注意-qp後面接的所有參數以上面的說明一致。但用途僅在於找出某個RPM文件內的信息,而非已安裝的軟件信息!注意!

        [select-options]:
            -a:所有包
            -f:查詢指定的文件由那個程序包安裝生成
            -p /PARH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;
            --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:移除,注意移除的依賴問題
        rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
       [--notriggers] [--test] PACKAGE_NAME ...
       當包卸載時,對應的配置文件不會刪除, 以FILENAME.rpmsave形式保留

    校驗:
        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 -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*”
    數據庫重建:
    /var/lib/rpm/:目錄,RPM文件被安裝到系統上,該軟件的信息就會被寫入/var/lib/rpm/目錄下的數據庫文件中了
        rpm {--initdb|--rebuilddb}
            initdb:初始化
                如果事先不存在數據庫,則新建之;否則,不執行任何操作;
            rebuilddb:重建數據庫,重建已安裝的包頭的數據庫索引目錄(/var/lib/rpm/內的文件破損)
                無論當前存在與否,直接重新創建數據庫;
        下面大括號的部分暫時未找到相關資料,建議暫時不要關注這部分內容
            {
            --prefix 新路徑:

            驗證與數字簽名(Verify/signature)

            rpm -Va
            rpm -V 已安裝的軟件名稱
            rpm -Vp 某個RPM文件的檔名
            rpm -Vf 在系統上面的某個文件

            選項與參數:
            -V:後面加的是軟件名稱,若該軟件所含的文件被更動過,纔會列出來;
            -Va:列出目前系統上面所有可能被更動過的文件;
            -Vp:後面加的是文件名,列出該軟件內可能被更動過的文件;
            -Vf:列出某個文件是否被更動過;
            }

CentOS:yum,dnf

YUM:yellow dog,yellowdog update modifier
    rpm的前端程序,可解決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具
yum repository:yum repo
    存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄下:repodata):
    文件服務器:
        ftp://
        http://
        nfs://
        file:///

yum客戶端:
    配置文件:
        /etc/yum.conf:爲所有倉庫提供公共配置
        /etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
            列出目前yum server所使用的軟件庫:yum repolist all  顯示結果中最右邊有寫enabled纔是有激活的。
        修改軟件庫產生的問題與解決之道
            由於使用的軟件庫版本有新舊之分,yum會先下載軟件庫的清單到本機的/var/cache/yum裏面去!
            注意:由於修改了網址卻沒有修改軟件庫名稱(中括號內的文字),可能機會造成本機的列表與yum服務器的列表不同步,此時就會出現無法更新的問題了!

            此時,需要清除掉本機上面的舊數據即可!
                yum clean [packages|headers|all]
                    packages:將已下載的軟件文件刪除
                    headers :將下載的軟件文件頭刪除
                    all     :將所有軟件庫數據都刪除

    倉庫的定義:
        [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即隨機挑選
            priority:按順序訪問
        cost=
            開銷數字,默認爲1000
    yum倉庫
        yum的repo配置文件中可用的變量:
            $releasever: 當前OS的發行版的主版本號
            $arch: 平臺,i386,i486,i586,x86_64等
            $basearch:基礎平臺;i386, x86_64
            $YUM0-$YUM9:自定義變量
            http://mirrors.magedu.com/centos/$releaserver/$basearch/os
        示例:
            http://server/centos/$releasever/$basearch/
            http://server/centos/7/x86_64
            http://server/centos/6/i386

        yum源
            阿里雲repo文件
            http://mirrors.aliyun.com/repo/
            CentOS系統的yum源
            阿里雲:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
            清華大學:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
            EPEL的yum源
            阿里雲:https://mirrors.aliyun.com/epel/$releasever/x86_64
            阿里巴巴開源軟件
            https://opsx.alibaba.com/
        yum-config-manager
            生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
            yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
            yum-config-manager --disable “倉庫名" 禁用倉庫
            yum-config-manager --enable “倉庫名” 啓用倉庫

yum命令的用法:
    yum [options] [command] [package ...]
    yum [option] [查詢工作項目] [相關參數]

    * install package1 [package2] [...]
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * update-minimal [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * autoremove [package1] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache [fast]
    * groups [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
       (maintained for legacy reasons only - use repoquery or yum provides)
    * 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]
    * repoinfo [all|enabled|disabled]
    *  repository-packages  <enabled-repoid>  <install|remove|remove-or-reinstall|remove-or-distribution-syn‐
   chronization> [package2] [...]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * load-transaction [txfile]
    * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-ker‐
   nel]
    * fssnapshot [summary | list | have-space | create | delete]
    * fs [filters | refilter | refilter-cleanup | du]
    * check
    * help [command]

顯示倉庫列表:
    * repolist [all|enabled|disabled]
顯示程序包:列出目前yum所管理的所有的軟件名稱與版本,有點類似rpm -qa;
    * list [...]
        yum list [all | glob_exp1] [glob_exp2] [...]
        yum list available [glob_exp1] [...]
        yum list updates [glob_exp1] [...]
        yum list installed [glob_exp1] [...]
安裝程序包:
    * install package1 [package2] [...]
重新安裝程序包:
    * reinstall package1 [package2] [...]
升級程序包:
    * update [package1] [package2] [...]
        若要整個系統都升級,就直接update即可
降級:
    * downgrade package1 [package2] [...]
檢查可用升級:
    * check-update
卸載程序包:移除功能
    * remove | erase package1 [package2] [...]
查看程序包information   有點類似rpm -qai的執行結果;
    * info [...]
查看指定的特性(可以使某文件)是由哪個程序包所提供:從文件去搜尋軟件!類似rpm -qf的功能;
    * provides | whatprovides feature1 [feature2] [...]
清理本地緩存:
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:
    * makecache [fast]
搜索:搜尋某個軟件名稱或者是描述(description)的重要關鍵字;
    * 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 undo 任務ID 撤銷ID對應的任務
        yum history redo 任務ID 重做ID對應的任務
安裝及升級本地程序包:
    * 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、創建設置文件
    #注意[]中的名稱不能有空格,如果有空格,使用yum repolist時會提示Bad id
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled=

yum的命令行選項:
    --nogpgcheck:禁止進行gpg check;
    -y:自動回答爲“yes”;當yum要等待用戶輸入時,這個選項可以自動提供yes的響應;
    -q:靜默模式;
    --disablerepo=repoidglob:臨時禁用此處指定的repo;
    --enablerepo=repoidglob:臨時啓用此處指定的repo;
    --noplugins:禁用所有插件;
    ######## --installlroot=/some/path:將該軟件安裝在/some/path而不使用默認路徑

創建yum倉庫:
    yum -y install createrepo
    用法:
    createrepo [options] <directory>

DNF:
        DNF 介紹:新一代的RPM軟件包管理器。DNF 發行日期是2015年5月11日,DNF 包管理器採用Python 編寫,發行許可爲GPL v2,首先出現在Fedora 18 發行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶頸,提升了包括用戶體驗,內存佔用,依賴分析,運行速度等
        安裝所需軟件包,依賴epel源
            wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
            wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm
            wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm
            yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm
        配置文件:/etc/dnf/dnf.conf
        倉庫文件:/etc/yum.repos.d/ *.repo
        日誌: /var/log/dnf.rpm.log
        幫助:man dnf
    dnf 用法:與yum一致
        dnf [options] <command> [<arguments>...]
        dnf --version
        dnf repolist
        dnf clean all
        dnf makecache
        dnf list installed
        dnf list available
        dnf search nano
        dnf history
        dnf history undo 1

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

    源代碼——預處理——編譯(編譯器gcc)——彙編——鏈接——執行

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

        C、C++:make 項目管理器
            make(configure腳本 --> Makefile.in --> makefile)
        java:maven

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

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

        建議:安裝前查看INSTALL,README

    開源程序源代碼的獲取:
        官方自建站點;
            apache.org(ASF:Apache Software Foundation))
            mariadb.org
        代碼託管:
            SourceForge
            Github.com
            code.google.com

    c、c++編譯器:gcc(GNU C Complier)

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

            實現:通過“包組”提供開發組件
                CentOS6:Development tools  Server Platform Development
                CentOS7:Development tools
        生產實踐:(基於最小化安裝的系統)
            yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils
    編譯安裝:
        第一步: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 禁用依賴關係
                注意:通常被編譯操作依賴的程序包,需要安裝此程序包的“開發”組件,其包名一般類似於name-devel-VERSION
        第二步:make
        第三步:make install

    安裝後的配置:
        a、導出二進制程序目錄至PATH環境變量中:
            編輯/etc/profile.d/NAME.sh
                export PATH=/PATH/TO/BIN:$PATH
        b、導出庫文件路徑
            編輯/etc/ld.so.conf.d/NAME.conf
                添加新的庫文件所在目錄至此文件中;
            讓系統重新生成緩存:
                ldconfig [-v]
        c、導出頭文件
            基於鏈接的方式實現:
                ln -sv
        d、導出幫助手冊
            編輯/etc/man.config文件
                添加一個MANPATH
練習:
    1、yum的配置和使用:保羅yum repository的創建;
    2、編譯安裝apache2.4;啓動此服務;
博客作業:程序包管理:rpm、yum、編譯

yum實驗:
1、關閉selinux和firewalld
1.1、關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.2、關閉firewalld
centos7:設置爲開機禁止啓動和關閉防火牆(重啓的話不需要關閉也可以)
systemctl disable firewalld
systemctl stop firewalld
centos6:設置爲開機禁止啓動和關閉防火牆iptables(重啓的話不需要關閉也可以)
chkconfig iptables off
service iptables stop
2、安裝httpd
yum -y install httpd
瀏覽器可以訪問即爲成功
網站默認的存放目錄爲:
/var/www/html
根據阿里雲等的源配置創建目錄:mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/
3、掛載centos7和centos6的光盤
注意在虛擬機中設置6和7的鏡像後,如果無法識別,請執行以下命令
一般執行第一個中的host0即可,如果不行再執行host1,host2,執行完畢後,可以使用lsblk命令查看分區
echo '- - -' > /sys/class/scsi_host/host0/scan
echo '- - -' > /sys/class/scsi_host/host1/scan
echo '- - -' > /sys/class/scsi_host/host2/scan
光盤掛載
mount /dev/sr0 /var/www/html/centos/7/os/x86_64/
mount /dev/sr1 /var/www/html/centos/6/os/x86_64/

4、配置yum源
    centos7:
        備份/etc/yum.repos.d下的所有文件
            mkdir /etc/yum.repos.d/backup
            mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
        創建/etc/yum.repos.d/base.repo文件
            [Centos7]
            name=Centos7
            baseurl=http://192.168.41.151/centos/7/os/x86_64/
            gpgcheck=0
    centos6:
        備份/etc/yum.repos.d下的所有文件
            mkdir /etc/yum.repos.d/backup
            mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
        創建/etc/yum.repos.d/base.repo文件
            [base]
            name=base
            baseurl=http://192.168.41.151/centos/6/os/x86_64/
            gpgcheck=0

    配置完成後,使用yum repolist查看是否成功。

擴展:
    一、配置yum源
        1、yum源配置:以centos7爲例
            編輯/etc/yum.repos.d/base.repo文件,注意baseurl的位置
            [Centos7]
            name=Centos7
            baseurl=file:///var/www/html/centos/7/os/x86_64/
                    http://192.168.41.151/centos/7/os/x86_64/
            gpgcheck=0
        2:創建一個文件
            vim /root/yumlise.txt
            內容如下:
                file:///var/www/html/centos/7/os/x86_64/
                http://192.168.41.151/centos/7/os/x86_64/
            修改/etc/yum.repos.d/base.repo文件,使用mirrorlist配置
                [Centos7]
                name=Centos7
                #baseurl=file:///var/www/html/centos/7/os/x86_64/
                                http://192.168.41.151/centos/7/os/x86_64/
                mirrorlist=file:///root/yumlise.txt
                gpgcheck=0

        注意:
            刪除虛擬除了eth0、ens33、lo之外的等其他網卡
                yum remove libvirt-daemon
            類似pan0的需要設置虛擬機USB設備中與藍牙有關的選項取消勾選
    二、強制卸載rpm還原方法
        rpm -e rpm --nodeps:忽略依賴關係,強制卸載
        虛擬機啓動滾動條按ESC鍵一次,只能按一次,否則不能進入選擇CD-ROM的界面
        選擇cd-rom啓動後,進入營救模式,輸入1繼續
        鍵入rpm命令看是否能否使用,繼續查看光盤是否掛載沒,如果沒有掛載,請重新掛載
        重新安裝rpm:需要使用--root參數指定root根目錄的位置
            rpm -ivh /run/install/repo/Packages/rpm-4.11.3-35.el7.x86_64.rpm --root=/mnt/sysimage/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章