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文件后綴
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 包
各倉庫的配置文件:
/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,數字越小表示越優先使用
repo文件中的baseurl可有多個地址
file:///media/cdrom/
nfs://server/nfs_path
此外,在repo文件中還有一些可用的變量,可簡化配置過程
$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386
$YUM0-$YUM9:自定義變量
實例
http://server/centos/$releasever/$basearch/
使用光盤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倉庫。
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, 第一次使用會從服務器上下載元數據
顯示程序包
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 […]
查看指定的特性是由哪個程序包提供
provides| whatprovieds feature […]
清理本地緩存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all]
構建緩存:
makecache
以指定關鍵字搜索程序包名及summary信息
search string […]
查看指定包依賴關系
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 rpmfile1yum localupdate rpmfile1 [rpmfile2] […]
或者
yum update rpmfile1
包組管理的相關命令:
groupinstall group1 [group2] […]
groupupdate group1 [group2] […]
grouplist [hidden] [groupwildcard] […]
groupremove group1 [group2] […]
groupinfo group1 […]
yum日志文件
/var/log/yum.log 記錄了安裝、卸載等信息
練習
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