目前在linux系统之上软件安装方式最常见的有两种,分别是:
dpkg:这个机制最早是由Debian Linux社区所开发出来的,透过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时还能提供安装后的软件资讯,实在非常不错。只要是衍生于Debian的其他linux发行版,大多使用dpkg这个机制来管理软件的,包括B2D、Ubuntu等等。
RPM:这个机制最早是由RedHat这家公司开发出来的,后来实在很好用,因此很多发行版就使用这个机制来作为软件安装的管理方式。包括Fedora、CentOS、SuSE等等知名的发行厂商。
今天要记录的是RPM软件管理器与RPM的前端工具YUM。
一、RPM软件包管理器
1、RPM包命名方式
源代码:name-VERSION.tar.gz|bz2|xz
例:bash-4.2.46-19.el7.x86_64.rpm
bash:包名
4:主版本
2:次版本
46:发行版本号
19:编译的次数
e17:RedHat Linux的版本号
x86_64:64位系统架构
2、包的依赖关系命名
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm开发子包
Application-utils-VERSION-ARHC.rpm其它子包
Application-libs-VERSION-ARHC.rpm其它子包
注意:包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:
yum | rpm包管理器的前端工具 |
apt-get | deb包管理器前端工具 |
zypper | suse上的rpm前端管理工具 |
dnf | Fedora 18+ rpm包管理器前端管理工具 |
3、二进制的库文件
查看二进制程序所依赖的库文件:ldd/PATH/TO/BINARY_FILE
管理及查看本机装载的库文件:ldconfig;/sbin/ldconfig-p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
4、RPM包的管理器
程序包管理器
(1)功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
(2)组成(每个包独有):RPM包内的文件和RPM的元数据,如名称,版本,依赖性,描述以及安装或卸载时运行的脚本
(3)包的公共数据:程序包名称及版本;依赖关系;功能说明;包安装后生成的各文件路径及校验码信息
5、程序包的来源与管理工具
(1)管理程序包的方式:使用包管理器rpm命令;使用前端工具yum和dnf命令
(2)获取程序包的途径:
(1)系统发版的光盘或官方的服务器 | (2)项目官方站点 | (3)第三方组织 | (4)自己制作RPM包 |
https://www.centos.org/download/ | http://nginx.org/en/download.html(nginx) | Fedora-EPEL源 | 检查其合法性 |
http://mirrors.aliyun.com | http://httpd.apache.org/download.cgi(httpd) | 检查其来源性 | |
http://mirrors.sohu.com | http://tomcat.apache.org/download-90.cgi(tom) | 程序包的完整性 | |
http://mirrors.163.com | … | … |
6、RPM包的管理
CentOS系统上使用rpm命令管理程序包:安装、卸载、升级、查询、校验、数据库维护
(1)初步安装
格式: rpm {-i|--install} PACKAGE_FILE…
选项: -v: 显示指令执行过程 -vv:详细显示指令执行过程,便于排错 -h:以#显示程序包管理执行进度
示例1: [root@localhost ~]# ls anaconda-ks.cfg bin tree-1.6.0-10.el7.x86_64.rpm [root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:tree-1.6.0-10.el7 ################################# [100%] [root@localhost ~]#
7、安装与管理
格式: rpm [install-options] PACKAGE_FILE…
选项: --test: 测试安装,但不真正执行安装;dry run模式 --nodeps:忽略依赖关系 --replacepkgs| replacefiles --nosignature: 不检查来源合法性 --nodigest:不检查包完整性 --noscipts:不执行程序包脚本片断 %pre: 安装前脚本;--nopre %post: 安装后脚本;--nopost %preun: 卸载前脚本;--nopreun %postun: 卸载后脚本;--nopostun
8、升级
格式: rpm {-U|--upgrade} [install-options] PACKAGE_FILE... rpm {-F|--freshen} [install-options] PACKAGE_FILE...
选项: upgrade:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装” freshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作 --oldpackage:降级 --force: 强行升级
示例: rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... 升级注意事项: (1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,可直接安装新版本内核 (2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
9、包查询
格式: rpm [select-options]
选项: -a: 所有包 -f: 查看指定的文件由哪个程序包安装生成 -p rpmfile:针对尚未安装的程序包文件做查询操作 --whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个包所提供 --whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖
示例: rpm2cpio 包文件|cpio–itv预览包内文件 rpm2cpio 包文件|cpio–id “*.conf”释放包内文件
实例: 假设将不小心将RPM命令删除了,而虚拟机又无法上外网,可以操作如下: [root@centos6 ~]# which rpm [root@centos6 ~]# rm -rf /bin/rpm [root@centos6 ~]# mount /dev/cdrom /mnt [root@centos6 ~]# cp -af /mnt/Packages/rpm-4.8.0-55.el6.x86_64.rpm /root/ [root@centos6 ~]# rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm |cpio -tv| grep "/bin/rpm" [root@centos6 ~]# rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm |cpio -id "./bin/rpm" [root@centos6 ~]# mv /root/bin/rpm /bin/ [root@centos6 ~]# source /etc/profile
10、包文件查询
格式: rpm [query-options]
选项: --changelog:查询rpm包的changelog -c: 查询程序的配置文件 -d: 查询程序的文档 -i: information -l: 查看指定的程序包安装后生成的所有文件 --scripts:程序包自带的脚本片断 -R: 查询指定的程序包所依赖的CAPABILITY --provides: 列出指定程序包所提供的CAPABILITY
示例: rpm -qi PACKAGE #查看某个包的信息 rpm -qf FILE #查询某个文件是由那个包安装生成的 rpm -qc PACKAGE #查询某个包的配置文件 rpm -ql PACKAGE #查询某个包的所有文件 rpm -qd PACKAGE #查询某个包的文档 rpm -qpi PACKAGE_FILE # rpm -qpl PACKAGE_FILE # rpm -qa #查询该系统中装了哪些包
11、卸载
格式: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
示例: rpm -e|--erase PACKAGE
实例: [root@centos6 ~]# rpm -q tree tree-1.5.3-3.el6.x86_64 [root@centos6 ~]# rpm -e tree [root@centos6 ~]# rpm -q tree package tree is not installed [root@centos6 ~]#
12、包校验
格式: rpm {-V|--verify} [select-options] [verify-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
(1)包来源合法性验正及完整性验正: 完整性验正:SHA256 来源合法性验正:RSA (2)公钥加密: 对称加密:加密、解密使用同一密钥 非对称加密:密钥是成对儿的(public key: 公钥,公开所有人;secret key: 私钥, 不能公开) (3)导入所需要公钥: rpm -K|checksig rpmfile检查包的完整性和签名 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7 rpm -qa gpg-pubkey*
13、RPM数据库
数据库路径:/var/lib/rpm
格式: rpm {--initdb|--rebuilddb} initdb: 初始化 如果事先不存在数据库,则新建之 否则,不执行任何操作 rebuilddb:重建 无论当前存在与否,直接重新创建数据库
二、PRM的前端工具YUM
1、简介
YUM(YellowdogUpdate Modifier),rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,up2date的替代工具。
yum repo(yum repository),存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)
2、yum客户端配置文件
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
/var/log/yum.log:yum的日志
yum配置文件详解(/etc/yum.conf) [main] #仓库名称 cachedir=/var/cache/yum/$basearch/$releasever #yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum keepcache=0 #是否保留本地缓存,0为不保存 debuglevel=2 #调试级别 logfile=/var/log/yum.log #日志文件的路径 exactarch=1 #精确匹配系统版本arch的PACKAGE obsoletes=1 gpgcheck=1 #检验包的来源和完整性 plugins=1 #yum支不支持插件机制 installonly_limit=5 #支持同时安装多少个包 bugtracker_url= #追踪bug的url distroverpkg=centos-release #发行版版本号为centos-release Tips:可以用[root@centos6 ~]# man yum.conf查看详解
yum仓库配置文件(/etc/yum.repos.d/CentOS-Base.repo) [base] name=CentOS-$releasever - Base #对repository的描述 mirrorlist= #指向以镜像服务器的地址 #baseurl= #指向yum仓库的地址 gpgcheck=1 #检验包的来源和完整性 gpgkey= #gpg的密钥文件路径 enabled=1 #是否启用此仓库,1为启用(默认启用) repo_gpgcheck=1 #检验包的元数据信息是否安全,1为启用
yum仓库文件自定义 [base] name=Centos 6.8 #定义仓库名称 baseurl= #定义yum中的网址路径 gpgcheck=1 #检验包的来源和完整性 gpgkey= #gpg的密钥文件路径(第一次yum安装会导入密钥) enabled=1 #启用此仓库
3、yum-config-manager命令
格式: yum-config-manager --add-repo= yum-config-manager --disable “仓库名" 禁用仓库 yum-config-manager --enable “仓库名” 启用仓库
实例1: 用镜像快速创建yum仓库 [root@centos6 ~]# mount /dev/cdrom /mnt [root@centos6 ~]# yum-config-manager --add-repo=///mnt/Packages/ Loaded plugins: fastestmirror, refresh-packagekit adding repo from: ///mnt/Packages/ [_mnt_Packages_] name=added from: ///mnt/Packages/ baseurl=///mnt/Packages/ enabled=1 [root@centos6 ~]#
4、yum库中的查询、安装、升级、检查、卸载
显示仓库列表:
格式: yum repolist [all|enabled|disabled]
显示程序包:
格式 yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1]
安装程序包:
格式: yum install package1 [package2] [...] yum reinstall package1 [package2] [...] (重新安装)
升级程序包:
格式: yum update [package1] [package2] [...] yum downgrade package1 [package2] [...] (降级)
检查可用升级:
格式: yum check-update
卸载程序包:
格式: yum remove | erase package1 [package2] [...]
5、yum中查看、缓存、搜索、事务历史
查看程序包information:
格式: yum info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
格式: yum provides | whatprovidesfeature1 [feature2] [...]
清理本地缓存:
格式: yum clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]
构建缓存:
格式: yum makecache
搜索:
格式: yum search string1 [string2] [...] #以指定的关键字搜索程序包名及summary信息
查看指定包所依赖的capabilities:
格式: yum deplistpackage1 [package2] [...]
查看yum事务历史:
格式: 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
6、yum中的升级与包组管理
安装及升级本地程序包:
格式: yum localinstallrpmfile1 [rpmfile2] [...] #可以用install替代 yum localupdaterpmfile1 [rpmfile2] [...] #可以用update替代
包组管理的相关命令:
格式: yum groupinstallgroup1 [group2] [...] yum groupupdategroup1 [group2] [...] yum grouplist[hidden] [groupwildcard] [...] yum groupremovegroup1 [group2] [...] yum groupinfogroup1 [...]
7、yum命令中的其他选项
选项: --nogpgcheck:禁止进行gpgcheck -y: 自动回答为“yes” -q:静默模式 --disablerepo=repoidglob:临时禁用此处指定的repo --enablerepo=repoidglob:临时启用此处指定的repo --noplugins:禁用所有插件
8、yum中的repo配置文件详解
repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号 $arch: 平台,i386,i486,i586,x86_64等 $basearch:基础平台;i386 $YUM0-$YUM9:自定义变量
示例: http://server/centos/$releasever/$basearch/ http://server/centos/7/x86_64 http://server/centos/6/i384
9、yum自建仓库命令
格式: yum createrepo[options] <directory>
原创文章,作者:Aleen,如若转载,请注明出处:http://www.178linux.com/37750