馬哥-51CTO-Linux培訓-0910-程序包管理

(注:此博文源於夜歸人的博客)

程序包管理,rpm、yum的使用

 

 

程序包管理的相關概念:

<<===============================================================================================>>

軟件包的組成部分:

1、二進制程序:可執行文件

通常安裝在 /bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin, /usr/local/sbin 目錄之下

2、庫文件:

程序的運行依賴於庫文件,Linux的核心庫是glibc,某些軟件也會將自己的核心文件封裝成庫文件,

以供其他程序調用或二次開發。

Linux下的庫分爲靜態庫和動態庫,靜態庫通常以".a"結尾,動態庫通常以".so"結尾。

通常安裝在 /usr/lib, /usr/lib64, /var/lib, /usr/local/lib 目錄下

★庫文件也是可執行程序,但不能直接執行,因爲庫文件沒有執行入口,只能被其他文件調用執行。

調用的兩種方式:

開發調用:二進制格式的庫

運行調用:文本格式的頭文件

函數(參數)頭文件 /usr/include, /usr/local/include

#inclue stdio.h

鏈接程序所要查找動態格式的共享對象庫時的路徑:

/etc/ld.so.conf

/etc/ld.so.conf.d/*.conf

ldd:用於查看程序或者庫文件所依賴的共享庫列表

ldd [OPTION]... FILE...

例如:

[root@CentOS7 ~]# ldd /bin/cat

linux-vdso.so.1 => (0x00007fffa5ffe000)

libc.so.6 => /lib64/libc.so.6 (0x00007f013c418000)

/lib64/ld-linux-x86-64.so.2 (0x00007f013c7e2000)

3、配置文件:通常是純文本文件,用來定義程序的特性。

通常存放在:/etc, /usr/etc, /usr/local/etc 或指定的路徑下(配置文件一般無需額外配置)

4、幫助文檔:man手冊、info文件、README、INSTALL、ChangeLog

man COMMAND

到某路徑下查找與命令同名的,通常以.gz結尾的壓縮文件的名字

/usr/share/man/

man 的配置文件: /etc/man.config

★總結:如果是指定路徑安裝程序

例如:/usr/local/nginx

二進制程序:bin、sbin

庫:lib

頭文件:include

配置文件:etc、conf

幫助文件:man

軟件包管理器的兩個重要功能:

1、數據庫:

軟件名和版本

安裝生成的各文件路徑及校驗碼

各軟件包之間的依賴關係

提供功能性說明

rpm -qi FILENAME

2、提供程序組成格式:

文件清單

安裝或卸載時運行的腳本

常見的軟件包管理器:

Debian系列:dpkg (DebianPackager) 管理 以.deb 結尾的軟件包。

“Debian”的“Linux ”發行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等。

RedHat系列: rpm ( RPM isPackage Manager ) 管理 以.rpm 結尾的軟件包。

以前是RedHat Package Manager的縮寫,現在包括OpenLinux、S.u.S.E.以及TurboLinux等

Linux的分發版本都有采用該包管理器,算是公認的行業標準了。

包管理器的基本功能:

製作程序包

安裝程序包

查詢程序包

升級程序包

卸載程序包

校驗程序包

數據庫管理

應用程序的安裝方式

1、使用包管理器:便捷、易用

2、包管理器的前端工具:yum

3、簡單打包的二進制格式:展開到特定路徑下

4、使用源代碼編譯:

rpm包命名格式:

源程序:PackageName-version.tar.{gz|bz2|xz}

version:major.minor.release

通常版本號(Version)有三個:major.minor.release——主版本號.次版本號.發行號

主版本號:是程序的主要功能發生了巨大的改變時才使用;

次版本號:是在程序的部分功能有重大改變時使用;

發行號:是在修復了一些bug,調整了一些屬性後進行的升級。

rpm包:name-version-release.arch.rpm

RPM包的Version號和源程序的版本號需要保持一致,這裏的release號通常包含rpm的製作發行號,

和源程序本身沒有關係,並且這個Release號可能會標明所適用的操作系統平臺。

arch指的是安裝在哪種主機平臺上,常見的主機平臺有:

i686、x86_64、amd64、ppc(powerPC)、noarch(不依賴平臺)等。

如:bash-4.3.2-6.el6.x86_64.rpm

表明這是一個bash程序包;其源程序的主版本號爲4,次版本號是3,發行號2;

它是第6次修正的RPM包;這個包用在RedHat6的Enterprise版上;適用於x86_64的主機平臺。

有些沒有指定arch的rpm包,可能是通用版本

如:nginx.1.4.16-5.rpm

rpm包的分包:

將程序的某些功能做成獨立的包,讓用戶選擇安裝

一個程序可能會有許多功能,其中不少功能是用不上的,如某些程序提供了頭文件,用來供程序員

進行二次開發,而普通用戶根本不需要對該程序進行二次開發,所以只需要安裝該程序的配置文件

和二進制文件就即可。

RPM包可以分爲主包(核心包)和分包(支包),其中主包的包名遵循RPM包的基本命名規則。

如:主包:bash-4.3.2-2.el6.x86_64.rpm

支包:bash-hello-4.3.2-2.el6.x86_64.rpm

bash-world-4.3.2-2.el6.x86_64.rpm

DNS: bind, bind-devel, bind-libs, bind-utils

程序包來源合法性驗證:

源程序:通過md5或sha1驗證碼驗證

rpm包:發行商提供的合法性是可信的

驗證包完整性:校驗碼

驗證來源合法:公鑰

獲取rpm包的途徑:

1、發行商的光盤或站點服務器

以CentOS爲例:

http://mirrors.163.com

http://mirrors.sohu.com

2、fedora-EPEL

3、項目的官方站點

4、搜索引擎:

http://rpmfind.net

http://rpm.pbone.net

http://pkgs.org

rpm包管理器的使用:

<<======================================【rpm管理:安裝】======================================>>

rpm包管理:安裝

rpm {-i|--install} [install-options] PACKAGE_FILE ...

-v verbose

-vv

-vvv

-h hash,以#的個數顯示安裝進度,一個#表示2%的進度;

--test: 僅測試,不真正執行安裝過程

每個rpm包都提供一個或多個capability,安裝一個程序包時可能需要依賴或被別的包所依賴

如果存在依賴:

解決依賴關係:

忽略依賴關係: --nodeps

重新安裝: --replacepkgs

原來的配置文件不會被覆蓋,新安裝的配置文件將會重命名爲以.rpmnew爲後綴的文件

實例1:安裝程序包

wKiom1XyiBHBu0zzAACp1Jnurd0944.jpg

實例2:測試安裝程序包

wKiom1XyiB3Dyb9_AACrfXiiCjk210.jpg

實例3:安裝程序包時忽略依賴關係

wKioL1XyiljiJUvFAAJiEoBJh18330.jpg

實例4:重新安裝已安裝過的程序包

wKioL1XyimSBKjKwAACtR9b84Is333.jpg

<<====================================【rpm管理:卸載】====================================>>

rpm包管理:卸載

rpm -e或--erase

rpm -e package_name

如果卸載被其他程序所依賴的包

1、把依賴者一同卸載;

2、忽略依賴關係;

--nodeps

--noscrips: 卸載時不運行腳本

3、不再卸載

實例:卸載已安裝的程序包

wKioL1XyinHgsqAOAAGGNv-YAUE160.jpg

實例:卸載時忽略依賴關係

wKiom1XyiFLzsyzUAAHvuXVGoGg391.jpg

<<======================================【rpm管理:查詢】======================================>>

rpm包管理:查詢

查詢所有已安裝的包:rpm -qa

查詢某單個包是否安裝: rpm -q package_name

查詢包安裝之後在當前系統生成的文件列表: rpm -ql package_name

查詢某文件是哪個包安裝生成的: rpm -qf /PATH/TO/SOMEFILE

查詢包安裝後生成的幫助文檔: rpm -qd package_name

查詢包安裝後生成的配置文件: rpm -qc package_name

查詢包的描述信息:rpm -qi package_name

查詢包相關的腳本: rpm -q --scripts package_name

腳本有四類:

preinstall: 安裝前腳本

postinstall: 安裝後腳本

preuninstall: 卸載前腳本

postuninstall: 卸載後腳本

查詢尚未安裝的rpm包文件:rpm -qp

查詢安裝後會生成的文件列表:rpm -qpl /PATH/TO/package_file

查詢其簡單描述信息: rpm -qpi /PATH/TO/package_file

實例1:查詢 lsof-4.82-5.el6.x86_64程序包安裝後生成的文件列表

wKiom1XyiHDxj76qAAILiIIRI-s023.jpg

實例2:查詢/usr/share/man/man8/lsof.8.gz文件是由哪個包安裝所生成的

wKioL1Xyip-gmGvBAABZQSHDBhY973.jpg

實例3:查詢程序包安裝後生成有哪些幫助文檔

wKiom1XyiIrBtIKPAAHITGHVE3Y120.jpg

實例4:查詢程序包安裝後生成的配置文件

wKiom1XyigjSWlt3AACFKwE-76w105.jpg

實例5:查詢程序包安裝完後生成的腳本

wKioL1XyivnBAI-gAAEAj0NbXp4589.jpg

實例6:查詢bash程序包的描述信息

wKiom1XyiPCCONqtAAJx7INaqMY783.jpg

Name:軟件名稱

Relocations:在安裝時是否可指定安裝路徑(重定位)

Version:版本號

Vendor:提供商

Release:rpm的發行號

BuildDate:rpm包的製作日期

InstallDate:安裝時間

Build Host:在哪個系統上製作的rpm包

Group:包組

SourceRPM:源碼的rpm包

Size:包大小

License:許可證

Signature:數字簽名(驗證來源合法性和包完整性)

Packager:包的製作者

URL:獲取源碼的網址

Summary:簡要說明

Description:略詳細的說明

<<======================================【rpm管理:升級】======================================>>

rpm包管理:升級

rpm -U: 升級或安裝,如果有舊版程序包,則升級,如果沒有,則安裝

rpm -F: 僅升級,如果有舊版程序包,則升級,如果沒有,則不安裝

rpm {-Uvh|-Fvh} /PATH/TO/package_file

--nodeps: 忽略依賴關係

--oldpackage: 降級

--force: 強行安裝

注意: 不要對內核執行升級操作

多版本內核可並存,因此,要執行安裝操作

實例1:升級程序包,升級過程中提示有依賴關係時忽略,繼續更新

wKioL1Xyix-BsxaKAAGLorb7Gpg482.jpg

實例2:把剛升級的程序包降級爲原來的版本

wKioL1XyjGaiHIY5AARhGsI0f74277.jpg

<<======================================【rpm管理:校驗】======================================>>

rpm包管理:校驗

檢查包安裝後生成的文件是否被修改過

rpm -V package_name

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

校驗軟件包來源合法性和完整性

包完整性:通過單向加加密機制(md5|sha1)

來源合法性:通過公鑰加密機制(RSA)

導入製作者的公鑰:CentOS發行版的公鑰在iso文件中

導入命令:rpm --import /PATH/TO/gpg-key-file

檢查: rpm -K /PATH/TO/package_file

rpm --checksig /PATH/TO/package_file

--nosignature: 不檢查來源合法性

--nodigest:不檢查完整性

實例1:分別對程序包安裝後生成的文件進行改名和修改操作,然後驗證

wKioL1XyjM6wypHYAAJjilbJhjE167.jpg

實例2:導入公鑰驗證軟件包的來源合法性和完整性

wKiom1XyiqDR8UthAAFFPxfqoAc981.jpg

<<================================【rpm管理:數據庫重建】================================>>

rpm包管理:數據庫重建

數據庫:/var/lib/rpm/

重建:

rpm --initdb:初始化

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

rpm --rebuilddb:重建

直接重建數據,會覆蓋原有的庫

程序包的依賴關係:

<<===============================================================================================>>

由於許多程序包之間存在這依賴關係,例如A依賴B,而B又依賴X、Y...

所以使用rpm管理器安裝或卸載程序時會有諸多不便,很可能安裝一個程序包之後由於所依賴的另外一個程序

包沒有安裝,造成安裝失敗,或是卸載程序把被其他程序包依賴的包卸載了,導致其他程序無法運行等……

因此爲了解決這一問題,後來便有了程序包的前端管理器,它會自動處理程序包之間的依賴關係

前端管理器:

Debian:apt-get

RedHat:yum (Yellowdog Update Modifed)

dnf:下一代解決依賴關係的程序包前端管理器

文件服務器(共享rpm包):通過yum所支持的文件共享機制,將各rpm包通過文件服務共享

repository:倉庫

1、各rpm包

2、依賴關係、程序包安裝後所能生成文件列表等元數據文件

yum客戶端:

1、配置文件:指定各可用的yum倉庫

2、緩存元數據: yum會到各可用yum倉庫獲取元數據,並緩存至本地

3、分析元數據:根據具體操作請求完成元數據分析,可能包括檢查依賴關係,文件列表等信息

4、執行具體操作

客戶端配置文件指定對應服務器的訪問方式

ftp ftp://server/path/to/repo

http http://server/path/to/repo

nfs nfs://server/nfs_path

file file:///path/to/repository

yum程序的配置文件:

<<===============================================================================================>>

要使用yum管理應用程序,首先得配置其可用的yum倉庫,保存在配置文件中

/etc/yum.conf

/etc/yum.repos.d/

配置文件格式:

由兩段組成,類似windows的ini配置文件

[main]:主配置段

[repo]:倉庫配置段

[root@CentOS-6 ~]# cat /etc/yum.conf

[main]

cachedir=/var/cache/yum/$basearch/$releasever #緩存目錄

keepcache=0 #刪除緩存中已安裝的rpm包

debuglevel=2 #調試級別

logfile=/var/log/yum.log #日誌文件

exactarch=1 #必須跟當前主機的版本完全精確匹配才安裝

obsoletes=1 #過去的,廢棄的

gpgcheck=1 #是否檢驗其來源合法性及數據包完整性

plugins=1 #是否支持插件

installonly_limit=5 #

bugtracker_url= #追蹤bug保存的位置

distroverpkg=centos-release

定義一個倉庫指向(配置repo):

[repo_ID]

name=倉庫描述信息

baseurl=倉庫的訪問路徑

# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE

enabled={1|0}

gpgcheck={1|0}

gpgkey=公鑰文件(可以在本地,也可以是服務器端路徑)

cost=定義此倉庫的開銷,默認爲1000

例:

repo文件:

[base]

name=CentOS-6 - Base - 163.com

baseurl=http://mirrors.163.com/centos/6/os/x86_64/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

yum配置文件中可用的四個宏:

$releasever: #程序的版本,對yum而言指的是redhat-release版本,只替換爲主版本號,RedHat6.5,則替換爲6

$arch: #系統CPU架構

$basearch: #系統基本架構,如i686,i586等的基本架構爲i386

$YUM0-9: #在系統中定義的環境變量,可以在yum中使用

★宏的作用是變量替換,如:想讓不同系統架構都使用同一個repo(通用版本)。

[base]

name=CentOS-$releasever -Base - 163.com

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

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

<<=========================================【yum命令】=========================================>>

yum命令

格式:

yum [options] [command] [package ...]

yum的各命令:

repolist [all|enabled|disabled]: 列出所有可用yumrepo

clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理緩存

makecache: 生成緩存

list [all|installed|available]: 列出rpm包

info package_name: 列出包的描述信息

install package_name ... : 安裝指定的程序包

reinstall package_name ... : 重新安裝指定的程序包

chek-update package_name: 檢查可升級的程序包

downgrade package_name: 降級

update package_name: 升級指定的程序包

★直接update 程序包名,將會升級到最新的版本,

如果有多個版本,想升級到指定的版本號,要明確指定版本號

erase|remove package_name... :卸載時所依賴的包也將一併卸載

whatprovides|provides /PATH/TO/SOMEFILE: 查詢指定文件由哪個包安裝生成

history: yum的歷史

search KEYWORD:搜索程序包

★安裝本地包:

install /PATH/TO/package_file

手動禁止檢查來源及完整性: --nogpgcheck

如:

yum install /tmp/finger-0.17-40.el6.x86_64 --nogpgcheck

grouplist: 列出所有包組

groupinstall "group_name": 安裝指定的包組

groupremove "group_name" : 卸載指定的包組

groupinfo "package_name": 顯示包組相關信息

三個跟開發相關的包組:

Desktop Platform Development :有圖形程序時需安裝此組

Server Platform Development :服務器平臺開發包組

Developmetn tools:開發包組

★提示:

如果系統爲CentOS 5,常用的開發包組爲"DevelopmentTools" 和 "Development Libraries"

如果系統爲CentOS 6,常用的開發包組爲"DevelopmentTools" 和 "Server Platfrom Development"

實例1:查看當前系統上所有可用的yum源

wKioL1XyjQCC0wVbAAFQE9qlEpI471.jpg

實例2:卸載指定的程序包

wKiom1XyitHx-dJ2AAKratu8twI734.jpg

實例3:檢測指定的程序包是否有更新,然後更新程序包

wKioL1XyjQHBmnadAAMrjY6nDgY566.jpg

實例4:對指定的程序包進行降級處理

wKiom1XyitLhCgJoAANDzg3W_ig428.jpg

降級完後查看版本:

wKioL1XyjQGTwjXhAAEjYEB_LJg502.jpg

<<========================================【製作yum源】========================================>>

製作yum源

yum repositories

文件服務器

ftp://hostname/PATH/TO/REPO

http://hostname//PATH/TO/REPO

/PATH/TO/REPO

repodata/

repomd.xml

使用發行版光盤當本地yum倉庫:

1、先禁用當前可用的yum倉庫,(可把repo配置文件改名)然後執行 yum clean all 命令清空

2、創建一個 local-media-repo 配置文件

[CentOS 6.7 ISO]

name=CentOS 6.7 x86_64 release iso file

baseurl=file:///media/

enable=1

gpgcheck=1

gpgky=file:///RPM-GPG-KEY-CentOS-6

創建本地yum倉庫

crepodata是一個目錄,裏面包含了yum倉庫索引文件和rpm包的一些信息。

創建本地yum倉庫時使用createropo命令,它會自動創建repodata目錄及目錄內的數據庫文件

createrepo /PATH/DirName

實例:

使用發行版光盤當本地yum倉庫

1、先禁用當前可用的yum倉庫(修改當前yum倉庫配置文件後綴名)

wKioL1XyjX2Rnk6nAAHL0LrFnJE008.jpg

2、插入光盤-->掛載-->

wKiom1Xyi0_DhurHAAKrrE4Ooyc324.jpg

3、在/etc/yum.repo.d/目錄下創建repo配置文件local-media-repo,並編輯

wKioL1XyjX6xr_8PAABxAteUX28407.jpg

4、使用yum repolist 驗證,查看當前系統可用yum倉庫

wKioL1XyjcWSR97HAAEZwb2pkCg677.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章