RHCE8 资料整理(六)

第 六 篇 软件管理

第 23 章 用rpm管理软件

详细查看 https://blog.csdn.net/u010230019/article/details/130016072

rpm全称是redhat package manager,后来改成rpm package manager,这是根据源码包编译出来的包。以vsftpd-3.0.3-33.el8.x86_64.rpm为例,各字段的含义:

  1. vsftpd 包的名称
  2. 3.0.3 版本,即version
  3. 33.el8 小版本号,即release,el8指适用于RHEL8系统
  4. x86_64 指架构,是32位还是64位

rpm安装命令是rpm -ivh 安装包

rpm安装时已经指定了安装路径,如下:

[root@node-138 docker]# rpm2cpio docker-1.13.1-205.git7d71120.el7.centos.x86_64.rpm |cpio -id	#解压rpm包
130330 blocks
[root@node-138 docker]# tree
.
├── docker-1.13.1-205.git7d71120.el7.centos.x86_64.rpm
├── etc
│   ├── docker
│   │   ├── certs.d
│   │   │   ├── redhat.com
│   │   │   │   └── redhat-ca.crt -> /etc/rhsm/ca/redhat-uep.pem
│   │   │   ├── redhat.io
│   │   │   │   └── redhat-ca.crt -> /etc/rhsm/ca/redhat-uep.pem
│   │   │   └── registry.access.redhat.com
│   │   │       └── redhat-ca.crt -> /etc/rhsm/ca/redhat-uep.pem
│   │   ├── daemon.json
│   │   └── seccomp.json
│   └── sysconfig
│       ├── docker-network
│       └── docker-storage
├── usr
│   ├── bin
│   │   ├── docker-containerd-current
│   │   ├── docker-containerd-shim-current
│   │   ├── docker-ctr-current
│   │   ├── dockerd-current
│   │   └── docker-storage-setup -> /usr/bin/container-storage-setup
│   ├── lib
│   │   ├── systemd
│   │   │   └── system
│   │   │       ├── docker-cleanup.service
│   │   │       ├── docker-cleanup.timer
│   │   │       ├── docker.service
│   │   │       └── docker-storage-setup.service
│   │   └── udev
│   │       └── rules.d
│   │           └── 80-docker.rules
│   ├── libexec
│   │   └── docker
│   │       ├── docker-init-current
│   │       ├── docker-proxy-current
│   │       └── docker-runc-current
│   └── share
│       ├── bash-completion
│       │   └── completions
│       │       └── docker
│       ├── doc
│       │   └── docker-1.13.1
│       │       ├── AUTHORS
│       │       ├── CHANGELOG.md
│       │       ├── CONTRIBUTING.md
│       │       ├── MAINTAINERS
│       │       ├── NOTICE
│       │       ├── README.md
│       │       └── README-vim-syntax.md
│       ├── fish
│       │   └── vendor_completions.d
│       │       └── docker.fish
│       ├── licenses
│       │   └── docker-1.13.1
│       │       ├── LICENSE
│       │       └── LICENSE-vim-syntax
│       ├── man
│       │   ├── man1
...
│       │   │   └── docker-wait.1.gz
│       │   ├── man5
│       │   │   ├── docker-config-json.5.gz
│       │   │   └── Dockerfile.5.gz
│       │   └── man8
│       │       └── dockerd.8.gz
│       ├── vim
│       │   └── vimfiles
│       │       ├── doc
│       │       │   └── dockerfile.txt
│       │       ├── ftdetect
│       │       │   └── dockerfile.vim
│       │       └── syntax
│       │           └── dockerfile.vim
│       └── zsh
│           └── site-functions
│               └── _docker
└── var
    └── lib
        └── docker

39 directories, 87 files

可以看到,我们安装rpm包时,它会把包中的内容安装这个结构拷贝到系统,所以安装的路径都是安排好的。

23.1 rpm查询

如果需要查询已经安装过的软件包的信息,rpm第一个选项需要使用-q,表示查询的意思,查询所有安装使用rpm -qa

查询已安装的某个软件版本,如下:

[root@node-138 docker]# rpm -qa  vsftpd
vsftpd-3.0.2-29.el7_9.x86_64
#或
[root@node-138 docker]# rpm -qa|grep vsftpd
vsftpd-3.0.2-29.el7_9.x86_64

查询安装某个软件之后所生成的文件rpm -ql 包名,如下

[root@node-138 docker]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
...

这样就可以看到软件安装位置。

查询软件包生成的配置文件rpm -qc 包名,如下:

[root@node-138 docker]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

查询包的信息用rpm -qi 包名,如下:

[root@node-138 docker]# rpm -qi vsftpd
Name        : vsftpd
Version     : 3.0.2
Release     : 29.el7_9
Architecture: x86_64
Install Date: Thu 17 Aug 2023 09:10:25 AM CST
Group       : System Environment/Daemons
Size        : 361349
License     : GPLv2 with exceptions
Signature   : RSA/SHA256, Fri 11 Jun 2021 11:06:15 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : vsftpd-3.0.2-29.el7_9.src.rpm
Build Date  : Thu 10 Jun 2021 12:15:50 AM CST
Build Host  : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : https://security.appspot.com/vsftpd.html
Summary     : Very Secure Ftp Daemon
Description :
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.

查询某个文件由哪个软件包生成的用rpm -qf /path/file,如下

[root@node-138 docker]# rpm -qf /usr/sbin/vsftpd
vsftpd-3.0.2-29.el7_9.x86_64
[root@node-138 docker]# rpm -qf /etc/shadow
setup-2.8.71-11.el7.noarch

可以看到shadow使用setup这个包生成的

以上是对已安装的软件包进行查询,如果要查询未安装的软件包,则需要加上-p,如下:

[root@node-138 docker]# rpm -qcp docker-1.13.1-205.git7d71120.el7.centos.x86_64.rpm
/etc/docker/daemon.json
/etc/docker/seccomp.json
/etc/sysconfig/docker-network
/etc/sysconfig/docker-storage

23.2 rpm卸载

卸载软件包用rpm -e 软件名,如下

[root@node-138 docker]# rpm -e vsftpd
warning: /etc/pam.d/vsftpd saved as /etc/pam.d/vsftpd.rpmsave
[root@node-138 docker]# rpm -qa vsftpd

强制安装,场景:如果提示软件已经安装过了,无法再次安装,或者某个配置文件被误删,此时可以加上--force选项强制安装

rpm -ivh docker-1.13.1-205.git7d71120.el7.centos.x86_64.rpm --force

此时会重新生成被误删的文件,但其他文件即使做了修改也不会被覆盖替换

23.3 软件包升级

所谓升级或更新,即卸载旧版本软件,然后安装新版本软件包。如果安装路径不同,则可以共存,如果相同则会冲突,此时可以使用rpm -Uvh 软件包进行更新,如:

rpm -Uvh docker-1.13.1-205.git7d71120.el7.centos.x86_64.rpm 

对于内核来说,不同的版本安装路径是不一样的,所以可同时安装多个版本而不会产生冲突。所以更新内核建议使用rpm -ivh而不是rpm -Uvh。因为rpm -Uvh会卸载旧版本内核,如果新版本内核有问题则无法进入系统。

23.4 rpm验证

当我们安装一个软件包之后会产生许多文件,想要判断这些文件是否被修改过,可以使用rpm -V命令,如

[root@node-138 docker]# rpm -V docker
S.5....T.  c /etc/sysconfig/docker-storage
[root@node-138 docker]# rpm -V openssh
[root@node-138 docker]# rpm -qc openssh
/etc/ssh/moduli

可以看到/etc/sysconfig/docker-storage被修改过

  • S 指size大小
  • 5 指MD5值
  • T 指时间
  • c 指此文件是docker的配置文件

可以看到/etc/sysconfig/docker-storage被修改过,我们再修改openssh的配置文件,例如

[root@node-138 docker]# touch /etc/ssh/moduli
[root@node-138 docker]# rpm -V openssh
.......T.  c /etc/ssh/moduli

可以看到/etc/ssh/moduli的时间发生了变化

红帽发行的每一个数据包都对他做了数字签名,以证明该包是红帽官方的,需要再本机用红帽密钥来验证。首先检查本机是否安装了红帽的密钥,命令如下:

[root@node-138 docker]# rpm -qa |grep pubkey
gpg-pubkey-dc6315a3-6091b7b3
gpg-pubkey-621e9f35-58adea78
gpg-pubkey-3e1ba8d5-558ab6a8
gpg-pubkey-352c64e5-52ae6884
gpg-pubkey-b6792c39-53c4fbdd
gpg-pubkey-f4a80eb5-53a7ff4b
gpg-pubkey-a621e701-63bdbc3d

如果没有安装,则需要手动导入,如:

[root@server opt]# rpm -qa |grep pubkey
[root@server opt]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[root@server opt]# rpm -qa |grep pubkey
gpg-pubkey-fd431d51-4ae0493b
gpg-pubkey-5a6340b3-6229229e

验证是否为红帽发布的包,即是否是红帽的数字签名,如下:

[root@server opt]# rpm -K dnf-4.14.0-2.fc38.noarch.rpm
dnf-4.14.0-2.fc38.noarch.rpm: digests SIGNATURES NOT OK

第 24 章 用yum/dnf管理软件包

使用rpm安装软件包时经常会遇到一个问题就是 包依赖,所谓的包依赖就是在安装A时必须把B和C安装上去,如果用rpm一个个安装是非常困难的,这里就可以使用yum或dnf来解决。yum其实是软连接到dnf命令上的,所以输入dnf或yum都可以。

[root@server opt]# ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Jan 19  2023 /usr/bin/yum -> dnf-3

REHL8/Centos8以前版本,yum是单独的命令

[root@node-138 docker]# uname -r
3.10.0-1160.92.1.el7.x86_64
[root@node-138 docker]# ll /usr/bin/yum
-rwxr-xr-x. 1 root root 801 Oct  2  2020 /usr/bin/yum

24.1 yum架构介绍

在这里插入图片描述
在yum服务器上的某个目录中存储了大量的软件包,然后通过ftp或http把这些目录进行共享,使得客户端可以通过ftp或http能够访问到这些目录。

如果按照软A,而A依赖B、C、X,而指定的yum服务器只有B、C,则需要额外指定X的源,否则会按照失败

24.2 用光盘搭建yum源

假设光盘中已经包含了最常用的软件包,就需要把关盘的内容作为源,使用vsftpd将光盘内容共享。

修改vsftp的配置文件/etc/vsftpd/vsftpd.conf中的annoymous_enable选项,如下

annoymous_enable=YES
...
pasv_min_port=10010
pasv_max_port=10020

vsftp的被动模式端口区间

启动vsftpd,并设置防火墙

firewall-cmd --add-port=20-21/tcp --permanent
firewall-cmd --add-port=10010-10020/tcp --permanent
firewall-cmd --reload

设置SELinux相关的布尔值,命令如下

setsebool -P ftpd_full_access 1

创建挂载目录

mkdir /var/ftp/dvd
mount /dev/cdrom /var/ftp/dvd

可修改/etc/fstab进行持久化和自动挂载

此时客户端不能直接把此目录作为源使用,因为服务器需要配置每个包和其他包之间的依赖关系,系统会把某个目录中的rpm包的元数据信息放在repodata目录中。但是在/var/ftp/dvd中并没有repodata目录,一般dvd光盘中都会有AppStreamBaseOS目录,其内包含了repodata各自的rpm信息。

所以当前服务器的源,分别是/var/ftp/dvd/AppStream/var/ftp/dvd/BaseOS,客户端可以通过ftp://192.168.20.101/dvd/AppStreamftp://192.168.20.101/dvd/BaseOS进行访问

24.3 创建私有仓库

我们把光盘源挂载到/mnt目录上,并设置自动挂载,这样访问访问/mnt就是访问光盘了,创建/etc/yum.repos.d/aa.repo,内容如下:

cat /etc/yum.repos.d/aa.repo
[aa]
name=aa
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0

这里的file:///包含3个/,其中前两个类似于http://这样的通用写法,而第三个/表示绝对路径

可以通过createrepo工具生成repodata,例如

createrepo -v /var/ftp/myrepo/

就会在myrepo目录中生成repodata,里面包含了myrepo中所有的rpm包的信息,那么/var/ftp/myrepo也可作为一个源使用

24.4 yum客户端配置

客户端要安装软件包必须指定使用哪些源,指定源的方法是在目录/etc/yum.repos.d/创建后缀为repo的文件[必须为repo为后缀],本地配置格式如下:

[名称] --- 用于标注不同的源
name=  --- 注释信息
baseurl= ---指定源的URL地址
enabled= --用于指定是否启用这个源,值为0或1 enabled也可写为enable
					0---不使用此源
					1---使用
gpgcheck= --用于指定安装的软件是否进行数字签名验证,值为0或1
					0---不验证
					1---验证
gpgkey=/path/ 如果上面设置gpgcheck=1,则需要使用此选项的公钥

例如:

[centos-kernel]
name=CentOS LTS Kernels for $basearch
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=kernel&infra=$infra
#baseurl=http://mirror.centos.org/altarch/7/kernel/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

24.5 yum基本使用

查询当前使用的源,使用yum repolist

[root@server opt]# yum repolist
Updating Subscription Management repositories.
...
repo id                                          repo name
AppStream                                        CentOS-8.5.2111 - AppStream - mirrors.aliyun.com
BaseOS                                           BaseOS
aa                                               aa
base                                             CentOS-8.5.2111 - Base - mirrors.aliyun.com
extras                                           CentOS-8.5.2111 - Extras - mirrors.aliyun.com

当源内容发生变化,使用yum clean all清空缓存

yum clean all

重建缓存,使用yum makecache

yum makecache
24.5.1 查询

查询yum源是否存在某个包,可以使用yum search 或 yum list,例如

[root@node-138 docker]# yum search lrzsz
...
========================================================== N/S matched: lrzsz ==========================================================
lrzsz-debuginfo.x86_64 : Debug information for package lrzsz
lrzsz.x86_64 : The lrz and lsz modem communications programs

  Name and summary matches only, use "search all" for everything.
[root@node-138 docker]# yum list lrzsz
...
Available Packages
lrzsz.x86_64                                                     0.12.20-36.el7                                                     base

yum search是通过包名查找是否包含lrzsz,如果输入yum search lrzs也可以找到,也就是后面可以是不完整的包名,但yum list不可以,必须是完整的包名,否则查询不到

[root@node-138 docker]# yum list lrzs
...
Error: No matching Packages to list

yum search无法判断包是否已安装,但是通过yum list则可以,如下:

[root@node-138 docker]# yum list lrzsz
Loaded plugins: auto-update-debuginfo, fastestmirror, product-id, search-disabled-repos
Loading mirror speeds from cached hostfile
 * base: mirrors.jlu.edu.cn
 * epel: mirrors.bfsu.edu.cn
 * epel-debuginfo: mirrors.bfsu.edu.cn
 * extras: mirrors.jlu.edu.cn
 * updates: mirrors.bfsu.edu.cn
Installed Packages
lrzsz.x86_64                                                    0.12.20-36.el7                                                     @base

当我们安装完该软件后,再使用yum list查询的时候,提示信息从Available Packages变成了Installed Packages

24.5.2 安装与卸载

安装软件使用yum install [-y] 包名-y表示在安装过程中确定信息yes

卸载软件包用yum remove [-y] 包名

更新软件包,使用yum update [-y] 包名

yum install -y lrzsz
yum update -y lrzsz
yum remove -y lrzsz
24.5.3 下载

使用yum安装软件时,可以只下载包到本地缓存而不安装,格式

[root@node-138 docker]# yum install -y httpd --downloadonly --downloaddir ./
...
Total                                                                                                   5.7 MB/s | 2.7 MB  00:00:00
exiting because "Download Only" specified
[root@node-138 docker]# ll
...
-rw-r--r-- 1 root root  2849200 May 30 23:15 httpd-2.4.6-99.el7.centos.1.x86_64.rpm

该命令会把httpd及其依赖包全部下载

24.5.4 查询缺失命令

命令不同于包名,当我们执行某个命令却发现没有时,可以通过yum whatprovides */conmand进行查询,如

yum whatprovides */smbclient
samba-client-4.14.5-2.el8.x86_64 : Samba client programs
Repo        : base
Matched from:
Filename    : /usr/bin/smbclient

这里*/是路径通配符,即不管smbclient在哪个目录

24.6 组的使用

前面安装软件都是一个个安装的,假设现在想在服务器上实现某个“功能”,这个功能需要很多个包,但不清楚需要安装哪些包,该怎么办?
可以利用yum中的group功能,例如:

[root@node-138 docker]# yum grouplist
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Cinnamon Desktop
   MATE Desktop
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Available Groups:
   Cinnamon
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Educational Software
   Electronic Lab
   Fedora Packager
   General Purpose Desktop
   Graphical Administration Tools
   Haskell
   LXQt Desktop
   Legacy UNIX Compatibility
   MATE
   Milkymist
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
   TurboGears application framework
   Xfce
Done

这里显示的可用组是系统没有安装或者组中的包没有安装完全,已安装组说明这个组已经安装完整了。

如果要查询某个组的信息,可以使用yum groupinfo 组名,例如:

[root@node-138 docker]# yum groupinfo "Minimal Install"
Loaded plugins: auto-update-debuginfo, fastestmirror, product-id, search-disabled-repos
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirrors.jlu.edu.cn
 * epel: mirrors.tuna.tsinghua.edu.cn
 * epel-debuginfo: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.huaweicloud.com

Environment Group: Minimal Install
 Environment-Id: minimal
 Description: Basic functionality.
 Mandatory Groups:
   +core
 Optional Groups:
   +debugging

可以使用yum groupinstall 组名安装某个组,例如:

yum groupinstall "Minimal Install" -y

通过yum groupremove 组名卸载某个组

yum groupremove "Minimal Install"

24.7 使用第三方yum源

添加第三方的yum源,对于CentOS或者REHL来说,最常用的源就是epel了,如下

[root@node-138 yum.repos.d]# yum list ansible
Loaded plugins: auto-update-debuginfo, fastestmirror, product-id, search-disabled-repos
Loading mirror speeds from cached hostfile
 * base: mirrors.jlu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.huaweicloud.com
Error: No matching Packages to list
[root@node-138 yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@node-138 yum.repos.d]# sed -i 's|^#baseurl=http://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel.repo
[root@node-138 yum.repos.d]# yum list ansible
Loaded plugins: auto-update-debuginfo, fastestmirror, product-id, search-disabled-repos
...
Available Packages
ansible.noarch                                                     2.9.27-1.el7                                                     epel
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值