马哥-51CTO-Linux培训-0910-程序包管理
(注:此博文源于夜歸人的博客)
程序包管理,rpm、yum的使用
?
?
程序包管理的相關(guān)概念:
<<===============================================================================================>>
軟件包的組成部分:
1、二進制程序:可執(zhí)行文件
通常安裝在 /bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin, /usr/local/sbin 目錄之下
2、庫文件:
程序的運行依賴于庫文件,Linux的核心庫是glibc,某些軟件也會將自己的核心文件封裝成庫文件,
以供其他程序調(diào)用或二次開發(fā)。
Linux下的庫分為靜態(tài)庫和動態(tài)庫,靜態(tài)庫通常以".a"結(jié)尾,動態(tài)庫通常以".so"結(jié)尾。
通常安裝在 /usr/lib, /usr/lib64, /var/lib, /usr/local/lib 目錄下
★庫文件也是可執(zhí)行程序,但不能直接執(zhí)行,因為庫文件沒有執(zhí)行入口,只能被其他文件調(diào)用執(zhí)行。
調(diào)用的兩種方式:
開發(fā)調(diào)用:二進制格式的庫
運行調(diào)用:文本格式的頭文件
函數(shù)(參數(shù))頭文件 /usr/include, /usr/local/include
#inclue stdio.h
鏈接程序所要查找動態(tài)格式的共享對象庫時的路徑:
/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結(jié)尾的壓縮文件的名字
/usr/share/man/
man 的配置文件: /etc/man.config
★總結(jié):如果是指定路徑安裝程序
例如:/usr/local/nginx
二進制程序:bin、sbin
庫:lib
頭文件:include
配置文件:etc、conf
幫助文件:man
軟件包管理器的兩個重要功能:
1、數(shù)據(jù)庫:
軟件名和版本
安裝生成的各文件路徑及校驗碼
各軟件包之間的依賴關(guān)系
提供功能性說明
rpm -qi FILENAME
2、提供程序組成格式:
文件清單
安裝或卸載時運行的腳本
常見的軟件包管理器:
Debian系列:dpkg (DebianPackager) 管理 以.deb 結(jié)尾的軟件包。
“Debian”的“Linux ”發(fā)行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等。
RedHat系列: rpm ( RPM isPackage Manager ) 管理 以.rpm 結(jié)尾的軟件包。
以前是RedHat Package Manager的縮寫,現(xiàn)在包括OpenLinux、S.u.S.E.以及TurboLinux等
Linux的分發(fā)版本都有采用該包管理器,算是公認(rèn)的行業(yè)標(biāo)準(zhǔn)了。
包管理器的基本功能:
制作程序包
安裝程序包
查詢程序包
升級程序包
卸載程序包
校驗程序包
數(shù)據(jù)庫管理
應(yīng)用程序的安裝方式
1、使用包管理器:便捷、易用
2、包管理器的前端工具:yum
3、簡單打包的二進制格式:展開到特定路徑下
4、使用源代碼編譯:
rpm包命名格式:
源程序:PackageName-version.tar.{gz|bz2|xz}
version:major.minor.release
通常版本號(Version)有三個:major.minor.release——主版本號.次版本號.發(fā)行號
主版本號:是程序的主要功能發(fā)生了巨大的改變時才使用;
次版本號:是在程序的部分功能有重大改變時使用;
發(fā)行號:是在修復(fù)了一些bug,調(diào)整了一些屬性后進行的升級。
rpm包:name-version-release.arch.rpm
RPM包的Version號和源程序的版本號需要保持一致,這里的release號通常包含rpm的制作發(fā)行號,
和源程序本身沒有關(guān)系,并且這個Release號可能會標(biāo)明所適用的操作系統(tǒng)平臺。
arch指的是安裝在哪種主機平臺上,常見的主機平臺有:
i686、x86_64、amd64、ppc(powerPC)、noarch(不依賴平臺)等。
如:bash-4.3.2-6.el6.x86_64.rpm
表明這是一個bash程序包;其源程序的主版本號為4,次版本號是3,發(fā)行號2;
它是第6次修正的RPM包;這個包用在RedHat6的Enterprise版上;適用于x86_64的主機平臺。
有些沒有指定arch的rpm包,可能是通用版本
如:nginx.1.4.16-5.rpm
rpm包的分包:
將程序的某些功能做成獨立的包,讓用戶選擇安裝
一個程序可能會有許多功能,其中不少功能是用不上的,如某些程序提供了頭文件,用來供程序員
進行二次開發(fā),而普通用戶根本不需要對該程序進行二次開發(fā),所以只需要安裝該程序的配置文件
和二進制文件就即可。
RPM包可以分為主包(核心包)和分包(支包),其中主包的包名遵循RPM包的基本命名規(guī)則。
如:主包: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包:發(fā)行商提供的合法性是可信的
驗證包完整性:校驗碼
驗證來源合法:公鑰
獲取rpm包的途徑:
1、發(fā)行商的光盤或站點服務(wù)器
以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,以#的個數(shù)顯示安裝進度,一個#表示2%的進度;
--test: 僅測試,不真正執(zhí)行安裝過程
每個rpm包都提供一個或多個capability,安裝一個程序包時可能需要依賴或被別的包所依賴
如果存在依賴:
解決依賴關(guān)系:
忽略依賴關(guān)系: --nodeps
重新安裝: --replacepkgs
原來的配置文件不會被覆蓋,新安裝的配置文件將會重命名為以.rpmnew為后綴的文件
實例1:安裝程序包
實例2:測試安裝程序包
實例3:安裝程序包時忽略依賴關(guān)系
實例4:重新安裝已安裝過的程序包
<<====================================【rpm管理:卸載】====================================>>
rpm包管理:卸載
rpm -e或--erase
rpm -e package_name
如果卸載被其他程序所依賴的包
1、把依賴者一同卸載;
2、忽略依賴關(guān)系;
--nodeps
--noscrips: 卸載時不運行腳本
3、不再卸載
實例:卸載已安裝的程序包
實例:卸載時忽略依賴關(guān)系
<<======================================【rpm管理:查詢】======================================>>
rpm包管理:查詢
查詢所有已安裝的包:rpm -qa
查詢某單個包是否安裝: rpm -q package_name
查詢包安裝之后在當(dāng)前系統(tǒng)生成的文件列表: rpm -ql package_name
查詢某文件是哪個包安裝生成的: rpm -qf /PATH/TO/SOMEFILE
查詢包安裝后生成的幫助文檔: rpm -qd package_name
查詢包安裝后生成的配置文件: rpm -qc package_name
查詢包的描述信息:rpm -qi package_name
查詢包相關(guān)的腳本: 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程序包安裝后生成的文件列表
實例2:查詢/usr/share/man/man8/lsof.8.gz文件是由哪個包安裝所生成的
實例3:查詢程序包安裝后生成有哪些幫助文檔
實例4:查詢程序包安裝后生成的配置文件
實例5:查詢程序包安裝完后生成的腳本
實例6:查詢bash程序包的描述信息
Name:軟件名稱
Relocations:在安裝時是否可指定安裝路徑(重定位)
Version:版本號
Vendor:提供商
Release:rpm的發(fā)行號
BuildDate:rpm包的制作日期
InstallDate:安裝時間
Build Host:在哪個系統(tǒng)上制作的rpm包
Group:包組
SourceRPM:源碼的rpm包
Size:包大小
License:許可證
Signature:數(shù)字簽名(驗證來源合法性和包完整性)
Packager:包的制作者
URL:獲取源碼的網(wǎng)址
Summary:簡要說明
Description:略詳細的說明
<<======================================【rpm管理:升級】======================================>>
rpm包管理:升級
rpm -U: 升級或安裝,如果有舊版程序包,則升級,如果沒有,則安裝
rpm -F: 僅升級,如果有舊版程序包,則升級,如果沒有,則不安裝
rpm {-Uvh|-Fvh} /PATH/TO/package_file
--nodeps: 忽略依賴關(guān)系
--oldpackage: 降級
--force: 強行安裝
注意: 不要對內(nèi)核執(zhí)行升級操作
多版本內(nèi)核可并存,因此,要執(zhí)行安裝操作
實例1:升級程序包,升級過程中提示有依賴關(guān)系時忽略,繼續(xù)更新
實例2:把剛升級的程序包降級為原來的版本
<<======================================【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)
導(dǎo)入制作者的公鑰:CentOS發(fā)行版的公鑰在iso文件中
導(dǎo)入命令:rpm --import /PATH/TO/gpg-key-file
檢查: rpm -K /PATH/TO/package_file
rpm --checksig /PATH/TO/package_file
--nosignature: 不檢查來源合法性
--nodigest:不檢查完整性
實例1:分別對程序包安裝后生成的文件進行改名和修改操作,然后驗證
實例2:導(dǎo)入公鑰驗證軟件包的來源合法性和完整性
<<================================【rpm管理:數(shù)據(jù)庫重建】================================>>
rpm包管理:數(shù)據(jù)庫重建
數(shù)據(jù)庫:/var/lib/rpm/
重建:
rpm --initdb:初始化
如果事先不存在一個數(shù)據(jù)庫,則新建
rpm --rebuilddb:重建
直接重建數(shù)據(jù),會覆蓋原有的庫
程序包的依賴關(guān)系:
<<===============================================================================================>>
由于許多程序包之間存在這依賴關(guān)系,例如A依賴B,而B又依賴X、Y...
所以使用rpm管理器安裝或卸載程序時會有諸多不便,很可能安裝一個程序包之后由于所依賴的另外一個程序
包沒有安裝,造成安裝失敗,或是卸載程序把被其他程序包依賴的包卸載了,導(dǎo)致其他程序無法運行等……
因此為了解決這一問題,后來便有了程序包的前端管理器,它會自動處理程序包之間的依賴關(guān)系
前端管理器:
Debian:apt-get
RedHat:yum (Yellowdog Update Modifed)
dnf:下一代解決依賴關(guān)系的程序包前端管理器
文件服務(wù)器(共享rpm包):通過yum所支持的文件共享機制,將各rpm包通過文件服務(wù)共享
repository:倉庫
1、各rpm包
2、依賴關(guān)系、程序包安裝后所能生成文件列表等元數(shù)據(jù)文件
yum客戶端:
1、配置文件:指定各可用的yum倉庫
2、緩存元數(shù)據(jù): yum會到各可用yum倉庫獲取元數(shù)據(jù),并緩存至本地
3、分析元數(shù)據(jù):根據(jù)具體操作請求完成元數(shù)據(jù)分析,可能包括檢查依賴關(guān)系,文件列表等信息
4、執(zhí)行具體操作
客戶端配置文件指定對應(yīng)服務(wù)器的訪問方式
ftp ftp://server/path/to/repo
http http://server/path/to/repo
nfs nfs://server/nfs_path
file file:///path/to/repository
yum程序的配置文件:
<<===============================================================================================>>
要使用yum管理應(yīng)用程序,首先得配置其可用的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 #調(diào)試級別
logfile=/var/log/yum.log #日志文件
exactarch=1 #必須跟當(dāng)前主機的版本完全精確匹配才安裝
obsoletes=1 #過去的,廢棄的
gpgcheck=1 #是否檢驗其來源合法性及數(shù)據(jù)包完整性
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=公鑰文件(可以在本地,也可以是服務(wù)器端路徑)
cost=定義此倉庫的開銷,默認(rèn)為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: #系統(tǒng)CPU架構(gòu)
$basearch: #系統(tǒng)基本架構(gòu),如i686,i586等的基本架構(gòu)為i386
$YUM0-9: #在系統(tǒng)中定義的環(huán)境變量,可以在yum中使用
★宏的作用是變量替換,如:想讓不同系統(tǒng)架構(gòu)都使用同一個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": 顯示包組相關(guān)信息
三個跟開發(fā)相關(guān)的包組:
Desktop Platform Development :有圖形程序時需安裝此組
Server Platform Development :服務(wù)器平臺開發(fā)包組
Developmetn tools:開發(fā)包組
★提示:
如果系統(tǒng)為CentOS 5,常用的開發(fā)包組為"DevelopmentTools" 和 "Development Libraries"
如果系統(tǒng)為CentOS 6,常用的開發(fā)包組為"DevelopmentTools" 和 "Server Platfrom Development"
實例1:查看當(dāng)前系統(tǒng)上所有可用的yum源
實例2:卸載指定的程序包
實例3:檢測指定的程序包是否有更新,然后更新程序包
實例4:對指定的程序包進行降級處理
降級完后查看版本:
<<========================================【制作yum源】========================================>>
制作yum源
yum repositories
文件服務(wù)器
ftp://hostname/PATH/TO/REPO
http://hostname//PATH/TO/REPO
/PATH/TO/REPO
repodata/
repomd.xml
使用發(fā)行版光盤當(dāng)本地yum倉庫:
1、先禁用當(dāng)前可用的yum倉庫,(可把repo配置文件改名)然后執(zhí)行 yum clean all 命令清空
2、創(chuàng)建一個 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
創(chuàng)建本地yum倉庫
crepodata是一個目錄,里面包含了yum倉庫索引文件和rpm包的一些信息。
創(chuàng)建本地yum倉庫時使用createropo命令,它會自動創(chuàng)建repodata目錄及目錄內(nèi)的數(shù)據(jù)庫文件
createrepo /PATH/DirName
實例:
使用發(fā)行版光盤當(dāng)本地yum倉庫
1、先禁用當(dāng)前可用的yum倉庫(修改當(dāng)前yum倉庫配置文件后綴名)
2、插入光盤-->掛載-->
3、在/etc/yum.repo.d/目錄下創(chuàng)建repo配置文件local-media-repo,并編輯
4、使用yum repolist 驗證,查看當(dāng)前系統(tǒng)可用yum倉庫
轉(zhuǎn)載于:https://blog.51cto.com/maxiaoyu/1694955
總結(jié)
以上是生活随笔為你收集整理的马哥-51CTO-Linux培训-0910-程序包管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 数据库 'xxx'
- 下一篇: linux 其他常用命令