軟件包管理(rpm,yum,源碼安裝)

API:Application Programming Interface  ==>軟件開發接口

    POSIX :Portable OS

程序源代碼 –> 預處理 –> 編譯 –> 匯編 –>鏈接

    靜態編譯 : .a

    共享編譯(動態編譯):.so

ABI:Programming Binary Interface ==>軟件運行接口

    Windows和linux不兼容

    庫級別的虛擬化:

        linux:WINE

        Windows:Cywin

C程序編譯過程

blob.png

JAVA程序運行

blob.png

開發語言

    C

    C++

運用級開發

    java , delphi , python, go  , php , perl,  ruby

包管理器

二進制應用程序的組成部分:

    二進制文件,庫文件,配置文件,幫助文件

程序包管理器:

    debian:deb文件===》dpkg包管理器

    redhat:rpm文件===》rpm包管理器 ===》 redhat package manager

因為我們現在主流用的是centos,所以我們主要來看看rpm包管理器

包命名

源代碼: name-VERSION.tar.gz|bz2|xz

    VERSION:major(主).minor(次).relsase

rpm包命名方式:

    name-VERSION-release.arch.rpm

    例:bash-4.2.46-19.el7.x86_64.rpm

    name:bash    

    VERSION:4.2.46

    release:19.el7 (release.OS)

    arch:x86_64

常見的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64

powerpc: ppc

包:分類和拆包

        Application-VERSION-ARCH.rpm:  主包

        Application-devel-VERSION-ARCH.rpm  開發子包

        Application-utils-VERSION-ARHC.rpm  其它子包

        Application-libs-VERSION-ARHC.rpm  其它

包之間:可能存在依賴關系,甚至循環依賴(裝A包時,提示要裝B,C包,裝B包時,又提示要裝X包…..)

解決依賴包管理工具:

    yum:rpm包管理器的前端工具

    apt-get:deb包管理器前端工具

    zypper:suse上的rpm前端管理工具

    dnf:fedora 18+ rmp包管理器前端管理工具

庫文件file

查看二進制程序所依賴的庫文件

    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.第三方組織

        搜索引擎:

            http://pkgs.org

            http://rpmfind.net

            http://rpm.pbone.net

            https://sourceforge.net/

     4.自己制作       

注意:要檢查其合法性: 來源合法性,程序包的完整性

rmp包管理


rpm -e rpm -qa rpm -ql rpm -qf 
rpm -i 

安裝:

   rpm

    -i或–install [install-options] package_file

    -v:顯示詳細過程

    -vv:顯示更詳細的過程

    -h:以#顯示程序包管理執行進度

rmp -ivh  package_file…

  blob.png  

顯示yum-3.4.3-132.el7.centos.0.1.noarch 已安裝

[install-options]

        –test:測試安裝,但不真正執行安裝;dry run模式

        –nodeps:忽略依賴關系

        –replacepkgs|replacefiles

        –nosignature:不檢查來源合法性

        –nodigest:不檢查包完整性

        –noscipts:不執行程序包腳本片段

                %pre :安裝前腳本;–nopre

                %post:安裝后腳本;–nopost

                %preun:卸載前腳本;–nopreun

                %postun:卸載后腳本;–nopostun

rpm包升級:

-U 或–upgrade [install-options]package_file

-F 或–freshen [install-options]package_file

    upgrade:安裝有舊版程序包,則升級

           如果不存在舊版程序包,則安裝

    freshen:安裝有舊版程序包,則升級

           如果不存在舊版程序包,則不執行升級操作

rmp -Uvh  packa_file…

rmp -Fvh packa_file…

blob.png

–oldpackage:降級

–force:強行升級

注意:1.不要對內核做升級操作;linux支持多內核版本并存,因此,會直接安裝新版本內核

    2.如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件

并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(filename.rpmnew)后保留

卸載:

    rmp -e packa_name

    –allmatches :卸載所有品牌指定名稱的程序包的各版本

    –nodeps:忽略依賴關系

    –test:測試卸載

blob.png

rpm包查詢   

rpm {-q|–query} [select-options] [query-options]

[select-options]

    -a:所有包

    -f:查看指定的文件由哪個程序包安裝生成

    -p rpmfile:針對尚未安裝的程序包文件做查詢操作

    –whatprovides CAPABILITY :查詢指定的CAPABILITY由哪個包所提供

    –whatrequires CAPABILITY :查詢指定的CAPABILITY被哪個包所依賴

blob.png

rmp2cpio 包文件|cpio -itv 預覽包內文件

rpm2cpio 包文件|cpio –id “*.conf” ”     

blob.png

blob.png

包查詢

[query-options]

–changlog:查詢rpm包的changelog

-l   –list:程序安裝生存的全部文件列表

-i –info:程序包的相關信息,版本號,大小,所屬的包組等等

-c  –configfiles :查詢指定的程序提供的匹配文件

-d –docfiles 查詢指定的程序包提供的文檔

–provides:列出指定的程序包提供的所有CAPABILITY

-R –requires:查詢指定的程序包的依賴關系

–scripts:查詢程序包自帶的腳本片段

查詢的用法

-qi packag 包名

-qf file 文件名

-qc package

-ql package

-qd package

-qpi package_file

-qpl package_file

-qa

blob.png

blob.png

校驗:

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  MD5碼

    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

包來源合法性驗證:RSA

包來源完整性驗證 :SHA256

公鑰加密:

    對稱加密:加密,解密使用同一密鑰

    非對稱加密:密鑰是成對的

        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*

 blob.png   

rpm數據庫

數據庫重建

    /var/lib/rpm

rpm –initdb:初始化

    如果事先不存在數據庫,則新建

    否則,不執行任何操作

rpm –rebuilddb:重建

    無論當前存在與否,直接重新創建數據庫

blob.png

yum:yellowdog update modifier,prm的前端程序,用來解決軟件包相關依賴性,可以在多個

庫之間定位軟件包,up2date的替代工具

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

文件服務器:

    ftp://

    heep://

    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-config-manager –disable “ 倉庫名" 禁用倉庫

yum-config-manager –enable “ 倉庫名” 啟用倉庫

顯示倉庫列表

    yum repolist [all|enabled|diasbale]

顯示程序包:

    list 

    yum list [all|glob_exp1|….]

    yum list [available|installed|updates]

blob.png

安裝程序包

  yum  install package1 [package2]….

  yum reinstall package1 [package]….重新安裝

升級程序包

 yum update package1 [package2]….

 yum downgrade package1 [package2]….  降級

檢查可用升級

 yum check-update

卸載程序包

 remove | erase package1 [package2]….

查看程序包information   

    yum info […]

blob.png    

查看指定的特性(開始某文件)是由哪個程序包提供

    yum provides|whatprovides feature1 [feature2]….

blob.png

清楚本地緩存

   yum clean[packages |metadate |expire-cache|rpmdb|plugins|all]

blob.png

構建緩存

    yum makecache

搜索:search string1 [string2]…

    以指定的關鍵字所搜程序包名及summary信息

查看指定包所依賴的capabilities:

     yum deplist package1…..

blob.png

查看yum事務歷史

   yum history [info|list|packages-lsit|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

   yum history

   yum history info 6==>歷史6的詳細信息

   yum history undo 6==>撤銷歷史6中的操作,如果歷史6是安裝就卸載,如果歷史6是卸載就安裝

日志:/var/log/yum.log

安裝及升級本地程序包

    yum install rpmfile1….

    yum undate rmpfile1…

包組管理的相關命令:

    groupinstall group1….
    groupupdate group1….

    grouplist [hidden] [groupwildcard]….

    groupremove group1….

    groupinfo group…

如何使用光盤當作本地yum倉庫

    1.掛載光盤之某目錄,例如/media/cdrom

        #mount /dev/cdrom /media/cdrom

    2.創建配置文件

        [centos7]

        name=

        baseurl=

        gpgcheck=

        enabled=

blob.png

blob.png

yum的命令行選項

    –nogpgcheck:禁止進行pgp 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] /path/to/directory

blob.png

程序包編譯

程序包編譯安裝:

     Application-VERSION-release.src.rpm –>  安裝后,使

  用rpmbuild 命令制作成二進制格式的rpm 包,而后 再 安裝

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

   源代碼組織格式:

    多文件:文件中的代碼之間,很可能存在跨文件依賴關系

    C 、C++ :make ( 項目管理器,configure –>Makefile.in –> makefile)   

    java: maven

編譯安裝

C代碼編譯安裝三步驟:

    1, ./configure:

    a.通過選項傳遞參數,指定啟用特性,安裝路徑等;執行時會參考以后的指定以及

makefile.in文件生成makefile

    b.檢查依賴到的外部環境

    2.make:根據makefile文件,構建應用程序

    3.make install:復制文件到相應路徑

開發工具:

    autoconf:生成configure腳本

    automake:生成makefile.in

注意:安裝前查看INSTALL ,README

來源程序源代碼的獲?。?/p>

    官方自建站點:

        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:指定默認安裝位置,默認為/舊/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.conf文件

            條件一個MANPATH

作業:

  1. 刪除kernel包后,無法啟動,并恢復之

    1.刪除kernel

blob.png

  2.重啟虛擬機,選擇cdrom模式進入,然后選擇troubleshooting,進入到如下界面

blob.png

3.選擇Rescue a CentOS system,然后選擇1

blob.png

4按照提示輸入return

blob.png

5.進入系統

blob.png

6.使用rpm命令重新安裝kernel

注意:kernel是要安裝到/mnt/sysimages下

    光盤是在/run/install/repo/Packages/下

命令為:rpm -ivh /run/install/repo/Pcakages/kernel…. –root=/mnt/sysimage

blob.png

blob.png

7.reboot重啟,回復正常

blob.png

第二題:

源碼安裝PHP

  1. 在官網上下載源碼,我是在如下網站下載的

    http://php.net/downloads.php

  2. 將源碼包放在指定位置,然后解壓解歸檔

blob.png

3.解壓解歸檔后,目錄內容如下,在開始安裝前最好先看看INSTALL和README文件,里面的內容還是挺重要的,

 在這里我就不截圖了

blob.png

4.使用./configure –help查看各種文件安裝路徑設置,可以自己設置,默認為/usr/local

./configure --prefix=/usr/local/PHP --sysconfdir=/etc/PHP
將默認安裝位置設置為/usr/local/prefix/PHP下,配置文件安裝在/etc/PHP,其他的就先不做詳細設置了
篇幅有限,就全不截圖了

blob.png

5.執行make命令 ====>漫長等待中…..

blob.png

5.make test  …….

blob.png

6.執行manke install

blob.png

7.安裝完成,然導入配置文件

    1.將二進制程序目錄導入之PATH環境變量中;

1 PATH=/usr/local/PHP/bin:$PATH

blob.png

    2.導入庫文件路徑,添加新的庫文件是在目錄至此文件中,然后讓系統重新生成緩存:ldconfig[-v]

1 /usr/local/PHP/lib

blob.png

blob.png

    3.導入頭文件

      基于鏈接的方式實現

        ln -sv

ln -s /usr/local/PHP/include/  /usr/include/php

blob.png

    4.導入幫助手冊

       編輯/etc/man.config|man_db.conf 文件

        添加man幫助手冊路徑至文件中

  blob.png  

這樣就安裝完成了!

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

(0)
qiuweiqiuwei
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • linux下的打包與壓縮

    linux壓縮或解壓縮工具有很多,除了已經很少有人使用的compress外,現在常用的還有tar,bzip2,xz 和gzip等,我們來說說它們的用法。 先來說bzip2。bunzip2和bzcat可以由bzip2指定選項來執行同樣的結果,這里只介紹bzip2的用法。使用bzip2這個工具創建的文件以.bz2,.bz,.tbz,.tar.bz2或者…

    Linux干貨 2017-04-16
  • MBR

    關于磁盤的使用,必須要弄明白MBR 分區劃分方式     centos 6:扇區劃分     centos 7:柱面劃分 MBR:Master Boot Record:512bytes 0磁道0扇區 512bytes=446bytes(boot loader) + 4*16byt…

    Linux干貨 2016-09-05
  • Linux screen命令

    screen命令 一、簡介 Screen是一款終端模擬的屏幕管理器,用于命令行終端自由切換。 當我們需要執行一個用時較多的作業,不希望自己或者他人誤操作關閉終端導致作業中斷,可以進入screen,這樣,當終端關閉,作業仍會繼續執行。 GNU’s Screen 官方站點:http://www.gnu.org/software/screen/ &nb…

    2017-07-13
  • 冒泡算法,源碼安裝http,yum淺談

    生成10個隨機數,采用冒泡算法進行升序或降序排序 #!/bin/bash #author:maoxiong QQ:111111111 #verson:1.0  date:2016-08  #illustrate: declare -a array #create 10 randomnum for num in {0..9} do &nbs…

    Linux干貨 2016-08-26
  • 運維自動化之系統安裝

    自動化安裝系統,cobbler的安裝使用

    Linux干貨 2018-01-15
  • tcpdump輸出詳解

    在這里不得不再吐槽下國內整個IT粗糙浮躁,度娘下來的中文文檔幾盡抄襲~google下來的文檔英文文檔質量遠高于國內中文文檔.用ie或沒有安裝插件的瀏覽器訪問,不然可能會有其它訪問請求數據干擾分析 IP數據包結構 TCP數據包結構 // tcpdump需root權限 # tcpdump -x -i eth1 i…

    Linux干貨 2015-04-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-26 13:27

    內容整體很完整,對專用名詞應該進行一些詳細的解釋,而不是簡單的羅列,同時對知識點多一些文字性的描述,這樣不僅能增加文章的可讀性,同時更能增強自己的語言組織能力。

欧美性久久久久