CentOS程序安裝的3種方式{ 源碼包安裝 | rpm包安裝 | yum安裝;}

CentOS程序安裝的3種方式{ 源碼包安裝 | rpm包安裝 | yum安裝;}


CentOS軟件安裝主要由3種方式,第一種是源碼包安裝,需要從網站下載并解壓之后通過手動編譯的方式安裝,過程相對比較復雜;第二種是rpm包安裝,通過rmp這個包管理器實現程序的安裝、升級、卸載等操作,rpm包管理器是RPM Package Manager的簡稱,功能非常強大,但是由于程序安裝過程中可能存在依賴關系,甚至循環依賴,導致程序無法安裝,期Linux用戶就深受這個問題的困擾,安裝一個軟件需要很多時間。直到后來,第三種方式出現了,解決了軟件包依賴關系,如yum、apt-get、dnf等。yum是rpm包管理器的前端工具,不但解決了rpm包的依賴關系問題,還提高了安裝程序的速度。本文主要介紹CentOS系統下的程序安裝的3種方式中的yum安裝。

yum安裝

yum的全稱是yellowdog updater modified,它是rpm包管理器的前端程序,yum主要用于軟件的自動升級,安裝/移除RPM軟件包,它能夠自動查找并解決RPM包之間的依賴關系,而無需管理員逐個,手工的去安裝每一個RPM包,使管理員維護大量的Linux主機時更加輕松自如。 
要成功使用yum工具更新系統和軟件,需要有一個包含各種RPM軟件包的repository(軟件倉庫),提供軟件倉庫的服務器習慣稱為“源”服務器。軟件倉庫可以基于HTTP,FTP,nfs協議或者本地文件目錄提供服務,并收集目錄中所有的RPM包的header(頭部)信息組成repodata(倉庫數據),以供yum客戶端工具查詢分析。它的主要功能是:
倉庫管理、軟件包管理軟件包組管理。yum的使用提高了軟件安裝的效率,彌補了rpm包管理器的的不足。

安裝yum工具

#查詢yum是否已經安裝
[root@cent7]/media/cdrom/Packages>rpm -qa|grep '^yum'
   yum-metadata-parser-1.1.4-10.el7.x86_64
   yum-plugin-fastestmirror-1.1.31-34.el7.noarch
   yum-3.4.3-132.el7.centos.0.1.noarch
#如果看到以上信息則已經安裝了yum工具,否則執行下面的命令
[root@cent7]/media/cdrom/Packages>rpm -ivh yum-3.4.3-132.el7.centos.0.1.noarch.rpm
#再次執行第一條命令可看到yum已經安裝成功了

yum特點

  • 自動解決軟件包的依賴關系

  • 保持與rpm數據庫的一致性

  • 可同時配置多個倉庫

  • 簡易的配置文件

yum倉庫—repodata文件

  • 組成 

    • 數據:包含所有的rpm軟件包文件

    • 元數據:每個軟件包的包名、版本信息、各包所包含的文件列表、包與包之間的依賴關系、包的分組信息等

  • 創建repodata相關文件

  • 使用createrepo工具,能夠簡潔的快速的將我們所指定的存放大量RPM包的目錄,里面所有的RPM包信息都讀出來,分析他的依賴關系并生成元數據。所以createrepo可以理解為它是制作yum元數據的工具。在光盤里其實也有這個元數據,路徑在光盤中的 repodata/ 里, sqlite文件后綴

11.jpg

yum配置文件

  • 主配置文件:/etc/yum.conf 

    • 為所有倉庫提供公共配置

[main]    
cachedir=/var/cache/yum/$basearch/$releasever     #下載RPM包的緩存目錄
keepcache=0                                       #RPM緩存的程序包安裝完成后是否保存,0表示不保存,1表示保存
buglevel=2                                        #調試級別 取值范圍 0 - 10,默認值為2    
logfile=/var/log/yum.log                          #yum相關日志存放路徑
exactarch=1                                       #是否要平臺完全匹配才能安裝
obsoletes=1                                       #需不需要檢查已過期的倉庫
gpgcheck=1                                        #是否檢查包的完整性和合法性
plugins=1     #是否允許支持yum的插件功能,0 表示不允許 ,1表示允許,建議允許,一般會用yum-fastestmirror這個插件          
installonly_limit=5                               #允許保留多少個內核包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release                       #指定一個軟件包,yum 會根據這個包判斷你的發行版本,默認是redhat-release,也可以是安裝的任何針對自己發行版的rpm 包

12.jpg

  • 各倉庫的配置文件:/etc/yum.repo.d/xxx.repo 

    • 上圖中指出了倉庫配置文件的位置,該配置文件以.repo結尾,定義了倉庫的名字、多個倉庫位置、驗證密鑰、啟用開關等。下面是CentOS7默認生效的配置文件

【第一段】注釋說明了yum是從如何獲取軟件包和緩存的

[root@cent7]~>cat /etc/yum.repos.d/CentOS-Sources.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#

【第二段】CentOS默認的yum源配置

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

【第三段】發行版的更新源

#released updates 
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

【第五段】繼承已經存在包功能的包,默認不可用

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

【第四段】額外可用的包

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
我們需要用到的配置信息
  [REPOID]             #容器名字,必須是唯一的
 name=                #some name for this repository倉庫的名字,僅作一個標識
 baseurl=             #指定真正倉庫所在的路徑,可以指多個倉庫
                      #例如:baseurl=file:///media/cdrom
                      #      ftp://10.1.0.1/path    #備注第二行不能頂格寫,否則會出錯
 mirrorlist=          #列出容器可以使用站點,如果不想使用,可以再前面加 # 注釋
 enabled= {0 | 1}     #指是否啟用這個倉庫,0表示不啟用,1表示啟用
 gpgcheck= {0 | 1}    #是否要檢測軟件包的合法性,0表示不檢測,1表示不檢查
 gpgkey=              #軟件包的公鑰文件所在路徑,例如
 gpgkey=file:///media/cdrom/GPG-RPM-KEY-centos-6
 cost=                #倉庫優先級,比如一個軟件包在多個倉庫都有,那應該選擇哪個安裝呢?就是根據這個優先級,默認是1000,數字越小表示越優先使用

使用光盤yum源 (系統默認的配置文件已經支持了cdrom作為yum源)

  • 首先將本地鏡像文件掛載好之后進入掛載目錄/etc/cdrom/下面查看,有一個Package目錄

 ~]#mount -r /dev/cdrom /media/cdrom   如果/media下沒有cdrom目錄需要手動創建
~]#cat /etc/yum.repos.d/myLocal.repo
[CentOS7.2]         源標識 為 CentOS7.2
name=CentOS 7.2     源名字 為 CentOS7.2
baseurl=file:///media/cdrom 源路徑 這里就是鏡像的掛載路徑
gpgcheck=0          是否檢查來源合法性和包完整性,不檢查
enabled=1           是否啟用此倉庫,默認為1 啟用,可以不用寫
  • 這是CentOS7上自帶的本地yum源的配置信息,與上面的相似,可直接使用,無需再自己配置,上面的例子是參照下面這個文件寫的,省略了gpgcheck的驗證

[root@cent7]~>cat /etc/yum.repos.d/CentOS-Media.repo 
# CentOS-Media.repo
#
#  This repo can be used with mounted DVD media, verify the mount point for
#  CentOS-7.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c7-media [command]
#  
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c7-media [command]

[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
       file:///media/cdrom/
       file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • 接著清理一下yum的緩存

[root@cent7]~>[root@cent7]~>yum clean all
已加載插件:fastestmirror, langpacks
正在清理軟件源: CentOS7.2 Fedora-EPEL
Cleaning up everything
Cleaning up list of fastest mirrors
[root@Daniel cdrom]# yum repolist
已加載插件:fastestmirror, langpacks
CentOS7.2   | 3.6 kB  00:00:00
Fedora-EPEL | 4.3 kB  00:00:00
(1/5): CentOS7.2/group_gz   | 155 kB  00:00:00
(2/5): CentOS7.2/primary_db | 5.3 MB  00:00:00
(3/5): Fedora-EPEL/group_gz | 170 kB  00:00:02
(4/5): Fedora-EPEL/updateinfo   | 558 kB  00:00:03
(5/5): Fedora-EPEL/primary_db   | 4.1 MB  00:00:04
Determining fastest mirrors
源標識源名稱 狀態
CentOS7.2 CentOS 7.2  9,007
Fedora-EPEL   Fedora EPEL for EL710,082
repolist: 19,089

可以看到上述源標識名稱和狀態可用,yum源配置成功。

基于http的yum源

雖然系統自帶的倉庫已經很常用,只要連接到互聯網我們就能很容易有獲取到互聯網的yum倉庫。但是如果是在企業內網,企業內部不允許訪問互聯網,又或者如果企業服務器眾多,如果都要從互聯網去獲取yum倉庫,那將很占用帶寬?;谶@種情況,我們就需要自己在企業內部創建yum倉庫。

13.jpg

yum命令的使用

  • yum [options] [command] [package…]

  • yum的命令行選項: 

    • –nogpgcheck:禁止進行gpg check

    • -y:自動回答為”yes”

    • -q:靜默模式

    • –disablerepo=repoid 臨時禁用此處指定的repo

    • –enablerepo=repoid 臨時啟動此處啟用的repo

    • –noplugins:禁用所有插件

  • 顯示倉庫列表 

    • yum repolist [all|enabled|disabled] #顯示repository, 第一次使用會從服務器上下載元數據

14.jpg

  • 顯示程序包 

    • yum list [all | glob_exp1] [glob_exp2] […]

    • yum list [available | installed | updates] [glob_exp1] […]

  • 安裝程序包 

    • install package1 […]

    • reinstall package1 […]

  • 升級程序包 

    • update [package1] […]

    • downgrade [package1] […] #降級安裝

  • 檢查可用升級: 

    • check-update

  • 卸載程序包 

    • remove | erase package1 […]

  • 查看程序的information 

    • info […]

15.jpg

  • 查看指定的特性是由哪個程序包提供 

    • provides| whatprovieds feature […]

  • 清理本地緩存: 

    • clean [ packages | metadata | expire-cache | rpmdb | plugins | all]

  • 構建緩存: 

    • makecache

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

    • search string […]

16.jpg

  • 查看指定包依賴關系 

    • deplist package1 […]

  • 查看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

  • 安裝及升級本地程序包: 

    • yum localinstall rpmfile1 [rpmfile2] […]

    • 或者 yum install rpmfile1

    • yum localupdate rpmfile1 [rpmfile2] […]

    • 或者 yum update rpmfile1

17.jpg

  • 包組管理的相關命令: 

    • groupinstall group1 [group2] […]

    • groupupdate group1 [group2] […]

    • grouplist [hidden] [groupwildcard] […]

    • groupremove group1 [group2] […]

    • groupinfo group1 […]

  • yum日志文件 

    • /var/log/yum.log 記錄了安裝、卸載等信息

18.jpg

19.jpg

練習

1.模擬服務管理

  1 #!/bin/bash
 2 #
 3 #Author:jasonmc
 4 #Date:2016-08-19
 5 #Description:編寫服務腳本/root/bi/testsrv.sh,完成如下要求
 6 # (1) 腳本可接受參數:start, stop, restart, status
 7 # (2) 如果參數非此四者之一,提示使用格式后報錯退出
10 # (5) 如是restart,則先stop, 再start,考慮:如果本來沒有start,如何處理?
12 #
13 SCRIPT_NAME=/var/lock/subsys/SCRIPT_NAME
14
15 declare -x true=0
16 declare -x false=1
17
22         else
23                 return $false
24         fi
25 }
26 start_service(){
27         if file_exist
28         then
31                 echo "failed."
32         else
33                 touch $SCRIPT_NAME
34                 file_exist &&echo "Starting SCRIPT_NAME SUCCESS!"\
35                            ||echo "ERROR An unexpected error occurred."
36         fi
37 }
38
39 stop_service(){
40
43 }
44 restart_service(){
47 }
48 status_service(){
49         if file_exist
50         then
51                 echo "SCRIPT_NAME (pid xxxx) is running..."
52         else
53                 echo "SCRIPT_NAME is stopped."
54         fi
55 }
56 case $1 in
57         start)
58                 start_service
59                 ;;
60         stop)
61                 stop_service
62                 ;;
63         restart)
64                 restart_service
65                 ;;
66         status)
67                 status_service
68                 ;;
69         *)
70                 echo "Usage: testsrv.sh {start|stop|restart|status}  [ SCR    IPT_NAME server options ]"
71                 ;;
72 esac
73 unset SCRIPT_NAME true false
74

2.備份命令的可執行文件和庫

  1 #!/bin/bash
 2 #
 3 #Author:jasonmc
 4 #Date:2016-08-19
 5 #Description:編寫腳本/root/bin/copycmd.sh
 6 #(1) 提示用戶輸入一個可執行命令名稱;
 7 #(2) 獲取此命令所依賴到的所有庫文件列表
14 #
15 clear
16
17 dest_dir=/testdir/cmd
18
19 read -p "Please input a executable command:" cmd
20
21 until [ "$cmd" = 'quit' ]
22 do
23
24         cmd_path=`which $cmd 2> /dev/null`
25
26         if [ $? -eq 0 ]
27         then
28                 if [ ! -e "$dest_dir$cmd_path" ]
29                 then
30                         cp -p -u --parents $cmd_path  $dest_dir &&\
31                                 ldd $cmd_path|grep -o '/.* '|cp -p -u --parents `xargs` $dest_dir&&{ \
32                                         echo -ne " the command \"$cmd\" and dynamically linked libs "
33                                         echo -ne "has been copy to \"$dest_dir/\" "
34                                         echo -e "with The original directory structure.";}
35                 else
36                         echo "the $dest_dir$cmd_path does exist."
37                 fi
38         else
39                 echo " Confirm the existence of the command you entered."
40         fi
41
42         read -p "Please input a executable command:" cmd
43 done

3.漢諾塔問題

  1 #!/bin/bash
 2 #
 3 #Author:jasonmc
 4 #Date:2016-08-19
 5 #Description:漢諾塔(又稱河內塔)問題是源于印度一個古老傳說。大梵天創造世>    界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓
   盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且
   規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。利用函數
   ,實現N片盤的漢諾塔的移動步驟
 6 #
 7 step=0
 8 hanoi(){
 9         if [ $1 -eq 1 ]
10         then
11                 let ++step
12                 echo "Step=$step;[Move] $2 --> $4"
13         else
14                 hanoi $[$1-1] $2 $4 $3
15                 let ++step
16                 echo "Step=$step;[Move] $2 --> $4"
17                 hanoi $[$1-1] $3 $2 $4
18         fi
19
20 }
21 hanoi $1 A B C



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

(0)
hellochelloc
上一篇 2016-08-23
下一篇 2016-08-24

相關推薦

  • HTTP的基礎配置

    目錄: 1.修改監聽的IP和PORT 2.持久連接(保持連接,長連接) 3.MPM 4.DSO 5.定義’Main’ server_name的文檔頁面路徑 6.站點訪問控制常見機制 7.定義站點主頁面: 8.定義路徑別名 9.設定默認字符集 10.日志設定 11.基于用戶的訪問控制 12.虛擬主機 13.status頁面 14.cur…

    Linux干貨 2017-08-08
  • 關于大型網站技術演進的思考(十一)–網站靜態化處理—動靜分離策略(3)

    原文出處: 夏天的森林   前文里我講到了網站靜態化的關鍵點是動靜分離,動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。由此可見,網站靜態化處理的核心就是動靜分離和緩存兩大方面,上篇我簡單講述了動靜…

    Linux干貨 2015-03-11
  • 第二周作業

    第二周

    Linux干貨 2017-12-11
  • VIM 文 本 編 輯 工 具-20160808

    VIM 文 本 編 輯 工 具 §·學習大綱   一·使用vi和vim的三種主要模式 二·擴展模式下基本操作 三·命令模式下基本操作 四·編輯模式下基本操作 五·VIM寄存器 六·編輯二進制文件 七·可視化模式 八·多文件模式 九·使用多個“窗口” 十·定制vim的工作特性 十一·VIM了解更多 十二·練習題     §·使用v…

    Linux干貨 2016-08-10
  • 入門——計算機基礎簡介

    一、計算機系統 計算機系統:由硬件(Hardware)系統和軟件(Software)系統倆大部分組成 二、計算機硬件 計算機(computer):是一種能接收和存儲信息,并按照存儲在其內部的程序對海量數據進行自動、高速的處理,然后把處理結果輸出的現代化電子設備。 計算機硬件組成部分 馮.諾依曼體系結構: 1946年數學家馮.諾依曼提出運算器、控制器、存儲器、…

    2018-03-27
  • Centos7上安裝Ansible和基礎應用

    Ansible 簡介 ansible是個什么東西呢?官方的title是“Ansible is Simple IT Automation”——簡單的自動化IT工具。這個工具的目標有這么幾項:自動化部署APP;自動化管理配置項;自動化的持續交互;自動化的(AWS)云服務管理。所有的這幾個目標從本質上來說都是在一個臺或者幾臺服務器上,執行一系列的命令而已。通俗的說…

    Linux干貨 2016-04-15
欧美性久久久久