程序包管理與編譯安裝詳解

(注:內容太多,容納不下,編譯安裝apache單獨成文)

一、程序包管理工具

不同的發行版采用的管理工具不盡相同:

              debian: 程序文件以deb結尾,包管理器為dpkg

              redhat:程序文件以rpm結尾,包管理器為rpm 

前端工具:自動解決依賴關系

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

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

1、程序包管理器的功能:

       將編譯好的應用程序的各組成文件打包成一個或多個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查看、升級和校驗等管理操作。

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

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

3、二進制文件包的命名方式:

       name-Version-release-arch.rpm

blob.png

如:zlib-1.2.3-29.el6.x86_64.rpm

              zlib:包名

              1.2.3:主版本號

              29:在主版本的基礎上的打包數。由于修復bug等原因進行修改,每修改一次,增加一次打包數。

              el6:應用于哪個發行版。el6標識RHEL的發行版

              x86_64:基于哪個架構平臺發行的

                     常見的架構平臺

                            32位: i386 i486 i686

                            64位: x64  x86_64  amd 64

                            noarch:不局限于某架構平臺的,通用

              rpm:軟件包的擴展名 

4、二進制文件包的類型

       主包:name-Version-release.arch.rpm

       支寶:name-function-Version-release.arch.rpm

                      function:devel,utils,libs…

比如:yum的rpm就由yum主包和多個功能包組成

  

blob.png

    

5、包文件的組成

       (1)每個包都單獨實現的:

              文件清單

              安裝或卸載時運行的腳本

       (2)公共的數據庫:

              程序包名稱及版本

              依賴關系

              功能說明

              包安裝后生成的各文件路徑及校驗碼信息

      

6、獲取程序包的途徑:

       1、發行版的光盤或官方的文件服務器(或鏡像站點)

              http://mirrors.aliyun | sohu | 163.com

       2、項目的官方站點

       3、第三方組織

              a、EPEL

              b、搜索引擎,包含但不限于下列搜索引擎:

                     http://pkgs.org

                     http://rpmfind.net

                     http://rpm.phone.net

使用非官方程序包的建議:在使用非官方的程序包時,應檢查其合法性,以保障系統的安全。

合法性包括:

       來源合法性:即程序包是從開心來的途徑獲得。

       內容合法性:即程序包的內容沒有發生改動。

 

二、rpm命令的使用

1、安裝

       rpm –i|–install  [install-options]  Package_File1…

       常用選項:

              -v(verbose):顯示安裝過程詳細信息

              -vv:更詳細

              -h:hash marks輸出進度條;每個#表示2%的進度

              –test:測試安裝是否成功,并報告依賴關系及沖突消息等,并不真正地安裝。

              –nosignature:不檢查來源合法性,不檢查包簽名信息

              -nodigest:不檢查包完整性

              –noscripts:不執行程序包腳本

                     rpm包可以自帶腳本

                     腳本分為4類:

                            preinstall:安裝過程開始之前運行的腳本,以%pre標識,–nopre(不執行該腳本片段)

       postinstall:安裝過程完成之后運行的腳本,以%post標識,–nopost(不執行該腳本片段)

preuninstall:卸載過程開始前運行的腳本,以%preun標識,–nopreun(不執行該腳本片段)                     

postuninstall:卸載過程完成之后運行的腳本,以%postun表示,–nopostun(不執行該腳本片段)

             

              通常使用: rpm –ivh Package_File1…來進行安裝

blob.png

–test檢測依賴關系,當然也可直接安裝,依賴關系不滿足也會返回錯誤

blob.png

2、升級

       rpm {-U|–upgrade} [install-options] PACKAGE_FILE …

       rpm {-F|–freshen} [install-options] PACKAGE_FILE …

              rpm -Uvh:升級(若已安裝)或安裝(若未安裝)

              rpm -Fvh:只升級

              常用選項:

                     –oldpackage:降級

                     –force:強制升級

              注意:(1)不要對內核做升級操作;內核支持多版本并存,若有需要,可另安裝新版本內核

(2) 如果原程序包的配置文件在安裝之后被修改,升級時,新版本程序提供的同意配置文件不會覆蓋原有的配置文件,而是把新版本的配置文件重命名為(Filename.repnre)后提供。

例:安裝zsh-4.3.10,之后升級至4.3.11

blob.png

3、卸載

       rpm {-e|–erase}  [–allmatches]  [–nodeps]  [–noscripts] [–test] PACKAGE_NAME …

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

              –nodeps:忽略依賴關系

              –test:測試卸載,dry run模式

blob.png

4、查詢

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

              [select-options]

                     Package_Name:查詢指定的程序包是否已安裝,及其版本信息

                     -a|–all:查詢所有已安裝過的包

                     -f File:查詢指定的文件由哪個程序包安裝生產

                     -p|–package Package_File:用于實現對未安裝的程序包執行查詢操作。

                     –whatprovides  CapAbility :查詢指定的CapAbility由哪個程序包提供

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

                                         

               [query-options]

                     –changelog:查詢rpm包的changelog

                     -l|–list:程序安裝生產的所有文件列表

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

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

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

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

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

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

                                         

              用法:

                     -qi  Package :產看程序包的詳細信息

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

                     -qc  Package:查看指定程序包安裝生成的配置文件

                     -ql  Package:查看指定包安裝產生的所有文件

                     -qd  Package:查看指定程序包提供的文檔

                     -p選項為查看未安裝程序包的信息,其余選項基本一致,不再解釋

                     -qpi  Package

                     -qpl  Package

                     -qpc  file

例1:查看httpd安裝包自帶的腳本

blob.png

例2:查看httpd安裝包提供的Capability

blob.png

例3:查看zsh安裝包生成的配置文件

blob.png

例4:查看/etc/zshrc文件由哪個程序包安裝生成

blob.png

例5:查看zsh安裝生成的所有文檔

blob.png

5、校驗

       rpm  {-V|–verify}  [select-options]  [varify-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

        

 包來源合法性驗證和完整性驗證:

       來源合法性驗證:數字簽名

       完整性驗證:

             

       獲取并導入信任的包制作者的密鑰:

              rpm  –import  /etc/pki/rpm-apg/RPM-GPK-KEY-CentOS-7

                                  

       驗證:

              (1)安裝此組織簽名的程序時,會自動執行驗證

              (2)手動驗證:rpm -K Package_File

  

blob.png

                         

數據庫重建:

       rpm管理器數據庫路徑:/var/lib/rpm

       查詢操作:通過此處的數據庫進行

              rpm {–initdb|–rebuilddb}

                     initdb:初始化數據庫,當前無任何數據庫時創建一個新的;當前有時不執行任何操作

                     -rebuilddb:重新構建,通過讀取當前系統上所有已安裝過的程序包進行創建。

獲取幫助:

       CentOS6:man rpm

       CentOS7:man rpmdb

                           

三、yum命令

       yum命令依賴于rpm命令,但是yum自動解決了包的依賴關系,在使用中較rpm更為方便。

 

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

      

1、  yum倉庫提供的方式:

a、本地yum倉庫:

本地yum倉庫多使用光盤作為yum源,如何使用光盤當作本地yum倉庫:

              (1)掛載光盤

                     mount -r -t iso9660 /dev/cdrom  /media/cdrom

              (2)創建配置文件:yum-config-manager –add-repo=file:///path/to/iso_file

              (3)修改配置文件:

                     設置gpgcheck=0|1;若設置為1;需指定

                     gpgkey= file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

blob.png

blob.png

blob.png

blob.png

       b、自建yum倉庫

              當我們有多個零散的rpm包時,可以將這些包組合在一個目錄中,配置成yum倉庫,方便日常使用

              rpm包的獲取方式有多種,下面只介紹在ftp服務器中獲取rpm包:

              (1)登錄ftp之后,可以使用!+command使用linux的命令,而不是執行ftp的命令

              (2)lcd切換本地目錄,這樣下載的rpm將包存放于該目錄

              (3)get下載

      

如何自建yum 倉庫

              (1)下載rpm包,

              (2)組合在一個目錄中

              (3)創建repodata:  createrepo [options] <dirctory>

                            createrepo -d somedir

              (4)創建yum配置文件: yum-config-manager  –add-repo=file:///

              (5)修改配置文件:

c、遠程yum倉庫。

遠程服務器要提供yum倉庫服務,器本身需要提供以下幾種服務中的一種:

              ftp://文件服務器

              http://

              nfs://

              file:///

             

2、yum客戶端配置:

       配置文件:/etc/yum.conf:提供公共配置。通常不要做修改

                     etc/yum.repos.d/*.repo:為倉庫的指向提供配置。我們使用的常用配置文件。

                     每個repo結尾的文件對應一個yum服務器,當然也可以將多個yum服務器配置寫在同一個配置文件中。但寫入不同的文件在管理時操作叫方便

             

3、倉庫的定義:

       [repositoryID]      #倉庫id

       name=                  #倉庫名,指定與否皆可

       baseurl-url=path/to/repository          #指定倉庫路徑

       enabled={1|0}     #是否啟用此倉庫,默認為1,啟用

       gpgcheck={1|0}   #是否檢查此倉庫中rpm包的合法性,默認為1,檢查

       gpgkey=url       #若gpgcheck為1,則必須給密鑰文件路徑,否則報錯。

                     file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

       enablegroup={1|0}:是否支持組軟件包管理,默認支持。可不做特別指定                          

yum命令的用法:

       顯示倉庫列表

              yum  repolist{all|enabled|disabled}

       顯示程序包:

              yum list [all]

              yum list {available|installed|updates}

       安裝程序包:

              yum install package1 [package2] …

       升級程序包

              yum update package1 [package2] …

       檢查可用升級:

              yum check-update

       卸載程序包:

              yum remove|erase package1 [package2] …

       查看程序包information:

              yum info […]

       查看指定的特性(可以是某文件)是由那個程序包提供:

              yum  provides | whatprovides feature1 [feature2]…

       清理本地緩存

              yum clean [all | packages | rpmdb…]

       構建緩存

              yum makecache

       搜索

              yum search string1 [string2]…

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

       查看指定包所以來的capabilities

              yum deplist package1 [package2] …

       查看yum事務歷史

              yum history [list | summary |stats…]

 

包組管理的相關命令,包組管理使用類似,在此不再做詳細介紹:

       yum grouplist                      #查看包組

groupinstall                  #安裝包組

              groupupdate                #升級

              groupremove               #刪除

              groupinfo                     #查看指定包組的詳細信息

 

注:低版本的系統可以指向搞版本的yum倉庫,但高版本的系統不能指向低版本的yum源

              CentOS6.0的yum源可以指向6.1等更高的6系列的yum源,但反過來不支持

 

                           

yum的命令行選項:

       –nogpgcheck:禁止進行gpg check

       -y:自動回答為yes

       -q:靜默模式

       –disablerepo=[repo]:臨時禁用此repo

       –enablerepo=[repo]:臨時啟用此repo

      

yum的repo配置文件中可用的變量:

       應用場景:為多臺pc/server配置yum倉庫時,不用為每臺pc/server指定特別的倉庫路徑,而是通過變量獲取當前系統的基本信息,從而到對應版本的倉庫中獲取yum源。

       $releasever:當前OS的發行版的主版本號

       $arch:平臺

       $basearch:基礎平臺

       $YUM0-$YUM9

       http://mirrors.163.com/centos/$releasever/$basearch/os

      

      

四、程序包編譯安裝:

不同語言的編譯工具:

              C、C++:make(configure–>Makefile.in–>makefile)

              java:maven

             

              C代碼編譯安裝三步驟:

                     1 ./configure:

                     (1)、通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定及Makefile.in文件生成makefile

                     (2)、檢查依賴的外部環境

                     2 make:

                            根據makefile文件,構建應用程序。

                     3 make install

                    

       編譯安裝前建議:安裝前先查看INSTALL、README,可以獲取該程序的幫助信息

      

       開源程序源代碼的獲?。?/span>

              官方自建站點

              代碼托管站點:

                     SourceForge

                     Github.com

                     code.google.com

                    

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

      

       如何編譯安裝C源代碼程序

前提:準備好開發工具及開發環境。最好安裝開發工具包組,當然,也可以單獨安裝需要的開發工具。

              CentOS6: “Development Tools”,“Server Platform Development”

CentOS7: “Development Tools”

開發工具:make、gcc

                     開發環境:開發庫、頭文件

                                   glibc:標準庫

安裝開發包組:yum groupinstall “Development Tools”

              第一步:執行configure腳本

                     選項:指定安裝位置、指定啟用的特性

                    

                     –help:獲取其支持使用的選項

                            選項分類:

                            安裝路徑設定:

                                   –prefix=/path/to/some_dir:指定默認安裝位置

                                   –sysconfdir=/path/to/somewhere:指定配置文件安裝路徑

                            System types:

                                   Optional Feature:可選特性

                                          –disable-FEATURE:禁用某特性

                                          –enable-FEATURE[=ARG]:啟用某特性

                                         

                            Optional Packages:可選包

                                          –with-PACKAGE[=arg]

                                          –without-PACKAGE

              第二步:make

              第三步:make install

       安裝后的配置:

              (1)、導出二進制程序目錄至PATH環境變量中

                            編輯/etc/profile.d/NAME.sh (NAME為程序名)

                                   export PATH=/PATH/to/Binary:$PATH

blob.png

              (2)、導出庫文件路徑

                            編輯/etc/ld.so.conf.d/NAME.conf

                                   添加新的庫文件所在的目錄至此文件中

                            ldcofig –v

blob.png

              (3)、導出頭文件

                            基于鏈接的方式實現

                                   ln –sv

blob.png

              (4)、導出幫助手冊

                            編輯/etc/man.config文件

                                   添加一個MANPATH

 

blob.png 

五、實戰演練

1、輸入若干個數值存入數組中,采用冒泡算法進行升序或降序排序

#!/bin/bash
#
echo "please enter some random number: "
read -a arr

for ((i=0;i<${#arr[@]};i++))
do
for  ((j=0;j<${#arr[@]}-1;j++))
do
if [ ${arr[$j]} -gt ${arr[$j+1]} ]
then
tmp=${arr[$j]}
arr[$j]=${arr[$j+1]}
arr[$j+1]=$tmp
fi
done
done
echo "after sort:"
echo ${arr[@]}


for ((i=0;i<${#arr[@]};i++))
do
for  ((j=0;j<${#arr[@]}-1;j++))
do
if [ ${arr[$j]} -lt ${arr[$j+1]} ]
then
tmp=${arr[$j]}
arr[$j]=${arr[$j+1]}
arr[$j+1]=$tmp
fi
done
done
echo "anthoer method: "
echo ${arr[@]}

blob.png

  2、刪除kernel包后,無法啟動,并恢復之

    

1)、卸載內核

rpm –e kernel –nodeps

重啟之后,無法登陸系統

 

blob.png

2)、進入救援模式

blob.png

blob.png

 

3)、重新安裝內核至/mnt/sysimage;安裝耗時較久

rpm -ivh /run/install/repo/Pakages/kernel-3.10.0-327-el7-x86_64.rpm –root=/mnt/sysimage

blob.png

4)、重啟系統

發現內核已出現在選擇面板

blob.png

登錄系統成功

blob.png

(注:內容太多,容納不下,編譯安裝apache單獨成文)

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/39372

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • 基于nginx實現7層http的負載均衡

    一、實驗環境實驗環境為三臺服務器:1. nginx負載均衡器1. 內網ip:192.168.11.1002. 外網ip:172.16.251.892. 提供網頁服務的RS-1服務器:192.168.11.2013. 提供網頁服務的RS-2服務器:192.168.11.2024. 拓撲如下:二、實驗配置后臺服務器配置:1. 后臺提供網頁服務的兩臺服務器配置:y…

    Linux干貨 2017-06-29
  • Docker入門

    一、Docker 架構 Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。 Docker 容器通過 Docker 鏡像來創建。 容器與鏡像的關系類似于面向對象編程中的對象與類。 Docker 面向對象 容器 對象 鏡像 類 Docker 鏡像(Images) Docker 鏡像是用于創建 Docker 容器的…

    2018-01-20
  • 淺談用戶和組相關配置文件

    用戶、組和權限的管理 Linux如何像Windows系統那樣,可以不輸入密碼直接進入圖形界面?那么如何如何自動登錄圖形界面呢?這就要用到編輯配置文件: nano  /etc/gdm/custom.cof  ,在里面加上   automaticLoginEnable=true automaticLogin=root 退出…

    Linux干貨 2016-10-23
  • LVS NAT模型

    LVS NAT NAT模式顧名思義就是對地址進行轉換 通過訪問前端外網的VIP調度到后端兩臺真實主機 拓撲圖如下                      &n…

    2017-05-15
  • 第一天

    今天講了很多

    Linux干貨 2018-03-26
  • N25_第十一周的作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 2、描述創建私有CA的過程,以及為客戶端發來的證書請求進行辦法證書。 3、描述DNS查詢過程以及DNS服務器類別。          第一段:主機到運營商的DNS服務器(遞歸)    &nbs…

    Linux干貨 2017-02-22
欧美性久久久久