openEuler之软件包管理(2)

RPM的基本使用
RPM包的安装和升级
  1. 安装
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%]
  • 可选参数

image.png

  1. 升级
参数:
  -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私钥与文件本身进行相应的运算得到一个定长的密钥。
加密是用一定的密钥对原数据进行修改,即使程序在传输中被截获,只要它不能解开密码,就不能对程序进行修改,除非破坏掉文件,那样我们就知道软件被修改过了。
数字签名的特点:

  1. 必须有原厂的公钥文件,才能进行安装
  2. 安装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]:
软件的配置文件丢失或错误修改

如遇到配置文件的丢失或是错误修改后,想要重新获取配置文件,有以下两种方式:

  1. 重新安装当前软件包找回丢失或损坏文件
    1. 由于RPM为防止你修改后的配置文件因重装rpm包而丢失,所以不会覆盖原文件,需要删除原配置文件才能够获取新的配置文件
    2. 如果修改了配置文件,那么卸载软件包时,不会删除该文件
    3. 重装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%]
  1. 通过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为我们解决依赖性的问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值