RPM的基本使用
RPM包的安装和升级
- 安装
rpm -ivh rpmfile
参数:
-i:install的意思,即安装
-v:显示详细信息
-h:以进度条的形式显示
范例:
[root@gugujun ~]# rpm -ivh vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:vsftpd-3.0.3-33.oe2203sp3 ################################# [100%]
或
[root@gugujun ~]# rpm -ivh https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS-SP3/everything/x86_64/Packages/vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm
Retrieving https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS-SP3/everything/x86_64/Packages/vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:vsftpd-3.0.3-33.oe2203sp3 ################################# [100%]
- 可选参数
- 升级
参数:
-U 如果该软件未安装,则直接安装。若已安装则升级至最新版
-F 只有旧版本存在才可以升级
RPM包的查询操作
rpm [参数] 包名
参数:
-q:查询后面接的软件是否安装,已安装有信息输出,否则没有
-qi:列出该软件的详细信息(information),包含开发商、版本与说明等
-ql:列出该软件所有的文件与目录(list)
-qc:列出该软件的所有配置文件
-qd:列出该软件的所有帮助文件(与man有关的文件)
-qR:列出与该软件有关的依赖软件所含的文件(Required)
-qpi:列出指定rpmfile的详细信息
-p 指定软件包的rpmfile
-qf:找出该文件属于哪个已安装的软件
-qp --scripts:列出rpmfile在安装和卸载时所需要执行的脚本
postinstall安装后执行的脚本
preinstall 安装前执行的脚本
postuninstall卸载后执行的脚本
preuninstall 卸载前执行的脚本
-qp --changelog:列出rpmfile的变更记录
删除RPM包
rpm -evh 包名
例:
[root@gugujun ~]# rpm -evh vsftpd
Preparing... ################################# [100%]
Cleaning up / removing...
1:vsftpd-3.0.3-33.oe2203sp3 ################################# [100%]
卸载过程要自上而下,否则会出现结构问题。由于一直在修改文件内容,有时候会导致数据库有点乱,这个时候就可以使用命令重建rpm的数据库。
RPM验证与数字签名
RPM验证
RPM包校验是将现有安装文件与最初使用RPM包安装时的初始文件进行对比,如有改动则提示给用户,但这种方法无法验证RPM包本身被修改的情况。
验证功能主要是向系统管理员提供一种有用的管理机制,方式是用数据库内容,来比较当前Linux系统环境的所有软件文件,当有数据丢失或者误删/修改某个软件的文件时,就用这种方法来验证原理的文件系统,以了解改动的地方。
通过命令查看
rpm [参数]
参数:
-Va:列出当前系统上所有可能改动过的文件
-V:跟软件名称,如果所含文件被更改过,才会列出来
-Vp:跟文件名称,列出该软件内可能更改过的文件
-Vf:列出某个文件是否被更改过
示例:
[root@gugujun ~]# rpm -V vsftpd
S.5....T. c /etc/vsftpd/vsftpd.conf
[root@gugujun ~]# rpm -Vf /etc/vsftpd/vsftpd.conf
S.5....T. c /etc/vsftpd/vsftpd.conf
[root@gugujun ~]# rpm -Vp vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm
S.5....T. c /etc/vsftpd/vsftpd.conf
回显解释:
- S:(file Size differs)文件的容量大小
- M:(Mode differs)文件的类型或属性,以及可执行参数
- 5:(MD5 sum differs)MD5这一加密防被黑的属性
- D:(Device major/minor number mis-match)设备名称
- L:(readLink(2)path mis-match)Link属性
- U:(User ownership differs)文件的拥有者
- G:(Group ownership differs)文件所属用户组
- T:(mTime differs)文件的建立时间
若该文件全部信息都改过:
SM5DLUGT c filename
其中c表示**config file**
,文件类型有以下几类:
- c:配置文件,config file
- d:文档文件,documentation
- g:ghost文件,通常该文件不包含在某个软件中,较少发生,ghost file
- l:授权文件,license file
- r:自述文件,read me
数字签名
RPM包校验方法只能用来校验已安装的RPM包以及安装文件,如果该RPM包本身就有问题,就需要通过数字签名验证了。
概念:
GPG在Linux上的应用主要是实现官方发布的包的签名机制,GPG分为公钥和私钥。
- 公钥:可共享的密钥,用于验证私钥加密的数据和签名要发送给私钥方的数据
- 私钥:由签名发起方保留,用于签名本地数据及验证公钥签名的数据
原理:
系统发行商会在系统中提供一个公钥,当用户在下载RPM包时,调用系统中的公钥,用来验证RPM包是不是官方签名的。
验证类似与校验码,用于识别软件包是不是被修改过,最常用的就是GPG及MD5签名,原方使用一定的MD5或GPG私钥与文件本身进行相应的运算得到一个定长的密钥。
加密是用一定的密钥对原数据进行修改,即使程序在传输中被截获,只要它不能解开密码,就不能对程序进行修改,除非破坏掉文件,那样我们就知道软件被修改过了。
数字签名的特点:
- 必须有原厂的公钥文件,才能进行安装
- 安装RPM包时会提取RPM包中的证书信息,然后与系统中安装的远程证书进行验证。如果验证通过,则允许安装,如果验证不通过,则不允许安装并告警
系统中的证书位置:
[root@gugujun ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-openEuler
-rw-r--r--. 1 root root 3033 Dec 17 2023 /etc/pki/rpm-gpg/RPM-GPG-KEY-openEuler
本地镜像中也存放了一把一模一样的公钥
安装证书:
[root@gugujun ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-openEuler
验证证书:
[root@gugujun ~]# rpm -qa | grep gpg-pubkey
gpg-pubkey-b675600b-63913a47
数字证书本身也是一个RPM包,因此可以用rpm命令进行查询及删除,命令如下:
[root@gugujun ~]# rpm -qi gpg-pubkey-b675600b-63913a47
Name : gpg-pubkey
Version : b675600b
Release : 63913a47
Architecture: (none)
Install Date: Sun 26 May 2024 10:30:48 PM CST
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Thu 08 Dec 2022 09:13:43 AM CST
Build Host : localhost
Packager : openeuler <openeuler@compass-ci.com>
Summary : openeuler <openeuler@compass-ci.com> public key
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.17.0 (NSS-3)
...以下省略
测试RPM包是否通过验证:
[root@gugujun ~]# rpm -K vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm
vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm: digests signatures OK
卸载数字证书:
[root@gugujun ~]# rpm -e gpg-pubkey-b675600b-63913a47
卸载证书后,再安装软件会提示安装证书:
[root@gugujun ~]# yum install vim
....此处省略
Importing GPG key 0xB675600B:
Userid : "openeuler <openeuler@compass-ci.com>"
Fingerprint: 8AA1 6BF9 F2CA 5244 010D CA96 3B47 7C60 B675 600B
From : http://repo.openeuler.org/openEuler-22.03-LTS-SP3/OS/x86_64/RPM-GPG-KEY-openEuler
Is this ok [y/N]:
软件的配置文件丢失或错误修改
如遇到配置文件的丢失或是错误修改后,想要重新获取配置文件,有以下两种方式:
- 重新安装当前软件包找回丢失或损坏文件
- 由于RPM为防止你修改后的配置文件因重装rpm包而丢失,所以不会覆盖原文件,需要删除原配置文件才能够获取新的配置文件
- 如果修改了配置文件,那么卸载软件包时,不会删除该文件
- 重装RPM包命令如下
[root@gugujun ~]# rpm -ivh --reinstall vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:vsftpd-3.0.3-33.oe2203sp3 ################################# [ 50%]
Cleaning up / removing...
2:vsftpd-3.0.3-33.oe2203sp3 ################################# [100%]
或
[root@gugujun ~]# rpm -ivh --replacepkgs vsftpd-3.0.3-33.oe2203sp3.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:vsftpd-3.0.3-33.oe2203sp3 ################################# [100%]
- 通过RPM软件包转换工具,提取出RPM包中的配置文件
rpm2cpio rpmfile | cpio -id
rpm2cpio解释:
rpm2cpio命令可以用于将rpm格式的文件转为cpio格式的文件。
cpio解释:
cpio 是用来建立,还原备份档的工具程序,它可以加入,解开 cpio 或 tar 备份档内的文件。
-d或--make-directories 如有需要cpio会自行建立目录。
-i或--extract 执行copy-in模式,还原备份档。
示例:
[root@gugujun ~]# rpm2cpio vsftpd-3.0.3-32.oe1.x86_64.rpm | cpio -id
424 blocks
[root@gugujun ~]# ll etc/vsftpd/
total 20
-rw-------. 1 root root 125 Jun 29 19:21 ftpusers
-rw-------. 1 root root 361 Jun 29 19:21 user_list
-rw-------. 1 root root 5039 Jun 29 19:21 vsftpd.conf
-rwxr--r--. 1 root root 348 Jun 29 19:21 vsftpd_conf_migrate.sh
什么是依赖性?
RPM对于具有依赖性的软件,无法自动解决软件包的依赖关系,需要操作者手动解决所有依赖关系(挨个装)。那如果遇到依赖关系非常多非常复杂的包时,那么管理难度将会非常的大。这个时候我们就需要yum或者dnf为我们解决依赖性的问题了。