内容目录

RPM基本概述

什么是rpm

rpm全称redhat package manager说写,是由红帽开发用于软件包的安装、升级、卸载与查询工具

rpm包名组成部分

rpm包命名以-将软件分成了若干部分bash-4.2.46-34.el7.x86_64.rpm

file

如何获取rpm包

在我们刚开始学习rpm包,建议先从本地镜像中获取rpm,但实际生产环境中大多数是通过联网方式获取rpm包,或者搭建企业私有包管理仓库平台

其他类型的安装包

linux中除了rpm格式类型的包,还存在一些其他类型的软件包

分类 安装 版本
rpm包 预先编译打包,安装简单 软件版本偏低
源码包 手动编译打包,安装繁琐 软件版本随意
二进制包 解压即可使用,安装简单 不能修改源码

RPM包管理命令

rpm安装软件包

  • -i:安装软件包
  • -v:显示安装过程
  • -h:显示安装进度条

1.使用rpm命令安装本地路径下软件包

rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

2.使用rpm命令安装互联网上的软件包

rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent2-5.0.40-1.el7.x86_64.rpm

rpm依赖包安装

包依赖是指A-->依赖-->BB-->依赖-->C,而C-->依赖-->A。当我们需要安装的rpm类型包出现了依赖关系应该如何处理,比如安装samba软件包
PS:由于rpm工具安装rpm包依赖关系太强,所以通常我们都是使用yum来解决

rpm升级软件包

下载zabbix-agent软件包,分别下载3.2.0低版本,然后下载4.0.2高版本进行测试与实验

wget https://mirrors.aliyun.com/centos/7.9.2009/infra/x86_64/infra-common/Packages/z/zabbix-agent-3.2.0-1.el7.x86_64.rpm?spm=a2c6h.13651111.0.0.489d2f70a8et9A&file=zabbix-agent-3.2.0-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/centos/7.9.2009/infra/x86_64/infra-common/Packages/z/zabbix-agent-4.0.2-1.el7.x86_64.rpm?spm=a2c6h.13651111.0.0.489d2f70a8et9A&file=zabbix-agent-4.0.2-1.el7.x86_64.rpm

1.先安装zabbix-agent-3.2.0低版本

rpm -ivh zabbix-agent-3.2.0-1.el7.x86_64.rpm

2.尝试使用rpm -ivh安装zabbix-agent-4.0.2高版本(会出现报错)

rpm -ivh zabbix-agent-4.0.2-1.el7.x86_64.rpm

3.使用rpm -Uvh升级zabbix-agent至4.0.3版本(完美解决)

rpm -Uvh zabbix-agent-4.0.2-1.el7.x86_64.rpm

rpm卸载软件包

如果需要卸载rpm包,可以先查看该包是否存在系统中,然后进行卸载操作
1.使用rpm -q查询软件包是否存在系统

rpm -q zsh

2.使用rpm -e卸载软件包

rpm -e zsh

rpm查询软件包

选项 描述
rpm -q 查看指定软件包是否安装
rpm -qa 查看系统中已安装的所有rpm软件包列表
rpm -qi 查看指定软件的详细信息
rpm -ql 查看指定软件包所安装的目录、文件列表
rpm -qc 查看指定软件包的配置文件
rpm -qf 查询文件或目录属于哪个rpm软件

1.查询vsftpd这个rpm包是否安装

rpm -q vsftpd

2.模糊查找系统已安装的rpm

rpm -qa php74*
rpm -qa | grep php74

3.查询zabbix-agent2软件包相关信息

rpm -qi zabbix-agent2

4.查询zabbix-agent2软件包所安装后在系统中生成的文件路径

rpm -ql zabbix-agent2

5.查询zabbix-agent2软件包的主配置文件

rpm -qc zabbix-agent2

6.查询配置文件或系统命令是由哪个rpm包提供

rpm -qf /etc/zabbix/zabbix_agent2.conf
zabbix-agent2-5.0.40-1.el7.x86_64
rpm -qf /usr/sbin/ifconfig
net-tools-2.0-0.25.20131004git.el7.x86_64
yum provides ifconfig

7.查询未安装的rpm包会产生哪些文件
rpm -rlp https://mirrors.aliyun.com/centos/7.9.2009/infra/x86_64/infra-common/Packages/z/zabbix-agent-4.0.2-1.el7.x86_64.rpm?spm=a2c6h.13651111.0.0.489d2f70a8et9A&file=zabbix-agent-4.0.2-1.el7.x86_64.rpm

rpm包管理小结

  • 如何查询util-linux软件包安装了哪些文件?
    rpm -ql util-linux

  • 如何查询mkdir命令是由哪个rpm软件包安装的?

    rpm -qf /usr/bin/mkdir
    coreutils-8.22-24.el7.x86_64
    yum provides mkdir
    rpm -qf $(which mkdir)
    which mkdir | xargs rpm -qf
  • 安装rpm软件包时,-i、-U选项有何区别?

    • -i,--install:安装
    • -U,--Upgrade:升级

YUM基本介绍

什么YUM

yum/dnfRedHatCentOS系统中的软件包管理器。它能够通过互联网下载.rpm格式包进行安装,并能自动处理其依赖包关系,无效繁琐地一次次下载安装

什么YUM源

要使用yum命令工具安装更新软件,需要一个包含各种rpm软件包的仓库,这个软件仓库我们 一般称为yum源。当然这个源可以是本地仓库、也可以是网络仓库。
client-->ftp/http/file-->yum地址-->yum仓库rpm包集合)

YUM配置文件

  • CentOS7的配置文件
more /etc/yum.conf
cachedir=/var/cache/yum/$basearch/$releasever  # 缓存目录
keepcache=0  # 缓存软件包,1启动 0关闭
debuglevel=2  # 调试级别
logfile=/var/log/yum.log  # 日志记录位置
exactarch=1  # 检查平台是否兼容
obsoletes=1  # 检查包是否废弃
gpgcheck=1  # 检查来源是否合法,需要有制作者的公钥信息
plugins=1
installonly_limit=5  # 同时可以安装5个软件包,最小为2,设置为0或1则不限制
# metadata_expire=90m  # 每小时手动检查元数据
# in /etc/yum.repos.d  # 包含repos.d目录中的.repo文件

配置YUM源示例

系统默认的源是国外提供,需要替换为国内的源
1.配置阿里yum

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

2.配置第三方yum源(EPEL)
EPEL(Extra Packages for Enterprise Linux), 是由Fedora Special Interest Group维护的Enterprise Linux(RHEL、CentOS)中经常用到的包。

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

3.nginx官方源,后期在学习nginx时需要使用官方的yum源来安装软件

vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  • yum源的查找方式大体一致Apache、Docker、Nginx、Openstack、ELKStack

YUM日常操作

yum查询软件包

1.使用yum/dnf list查询所有仓库中的所有软件包

yum list
yum list | grep ftp

2.使用yum/dnf list installed查询所有已安装至系统中的软件包

yum list installed 或者 rpm -qa

3.使用yum/dnf provides查询系统命令来自于哪个软件包

rpm -qf $(which cd)
bash-4.2.46-34.el7.x86_64
# PS:rpm需要知道命令的绝对路径,如果不存在该命令时无法查找到该命令所属的软件包
yum provides cd
yum provides sl

yum安装软件包

1.使用yum/dnf install通过仓库获取软件包进行安装

# 交互,麻烦
yum install vsftpd
# 非交互
yum install vsftpd -y

2.使用yum/dnf localinstall安装本地的rpm包,如果rpm包存在依赖,会通过当前已有的仓库获取解决依赖关系

# 安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系
yum localinstall samba-4.8.3-4.el7.x86_64.rpm -y

yum重装软件包

当我们按照好服务后,如果不小心删除了服务的配置文件,此时可以通过重装的方式修复
1.首先删除vsftpd配置主文件

rpm -qc vsftpd
rm -f /etc/vsftpd/vsftpd.conf

2.使用yum reinstall对软件进行重新安装

yum reinstall vsftpd

3.检查vsftpd服务配置文件是否恢复,以及软件是否能正常使用

rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

yum更新软件包

# 对比linux已安装的软件和yum仓库中的软件,有哪些需要升级
yum check-update
# 更新gzip软件
yum update gzip
# 更新整个系统所有的软件,包括内核(通常刚装完系统会进行执行)
yum update

yum删除软件包

yum install samba
yum remove samba

yum管理组包

1.使用yum groups install安装一整个组的软件

yum groups list
yum groups install Development\ Tools

2.使用yum groups remove删除组包

yum groups remove Development\ Tools

yum管理仓库

1.列出yum repolist源可用的软件仓库

yum repolist
yum repolist all  # 查看所有的仓库

2.通过yum-config-manager启用和禁用仓库(本质是修改repo文件中的enable参数)

yum provides yum-config-manager
yum install yum-utils
yum-config-manager --enable epel-source  # 启用仓库
yum-config-manager --disable epel-source  # 关闭仓库

yum管理历史记录

当我们删除了某个软件时,希望撤销删除的操作,可以使用yum history undo
1.删除httpd软件,然后查看操作记录

yum remov httpd
yum history

2.使用yum history undo Number撤销

yum history info N
yum history undo N

yum缓存软件包

1.方式一:通过修改yum全局配置文件

vim /etc/yum.conf
keepcache=1  # 启动缓存
yum install lrzsz
find /var/cache/yum/ -type f -name "*.rpm"

2.方式二:通过yum下载该软件包至本地,不进行安装

yum install vsftpd --downloadonly --downloaddir=/opt

3.清理缓存,可以使用yum clean

# 清理所有yum缓存信息,包括缓存的软件包
yum clean all
# 仅清理所有缓存的软件包
yum clean package

源码包管理实践

什么是源码包

源码包指的是开发编写好的程序源代码,但并没有将其编译为一个能正常使用的二进制工具

为何需要源码包

  • 部分软件官网仅提供源码包,需要自行编译并安装
  • 部分软件在新版本有一些特性还没来得及制作成rpm包时,可以自行编译软件使用其新特性

源码包的优缺点

  • 优点:
    • 可以自行修改源代码,需要会C
    • 可以定制需要的相关功能
    • 新版软件优先更新源码
  • 缺点:
    • 相对rpm安装软件的方式会复杂很多
    • 标准化实施困难,自动化就无法落地

源码包如何获取

  • 常见的软件包都可以在官网获取源码包,比如:nginx、httpd、zabbix
    • nginx源码包地址:http://nginx.org/en/download.html
    • httpd源码包地址:https://httpd.apache.org/download.cgi
    • zabbix源码包地址:https://www.zabbix.com/cn/download_sources

源码包如何安装

将源码包编译为二进制可执行文件步骤如下,简称编译三部曲:

file

PS:此方法不是百分比通用于所有源码包,建议拿到源码包解压后,进入到目录找相关的README帮助文档

nginx源码包编译

下面通过编译nginx软件来深入了解下源码包编译的过程
1.基础环境准备

yum install gcc make wget

2.下载nginx源码包

wget http://nginx.org/download/nginx-1.24.0.tar.gz

3.解压nginx源码包,并进入相应目录

tar xf nginx-1.24.0.tar.gz
cd nginx-1.24.0

4.配置相关的选项,并生成Makefile

./configure --prefix=/opt/nginx-1.24.0

5.根据Makefile文件,将软件编译为可执行的二进制程序

make

6.将编译好的二进制文件拷贝至对应的目录

make install

  • 源码编译报错信息处理
checking for C compiler ... not found ./configure:error: C compiler cc is not found
# yum install gcc gcc-c++ make
# yum install prre-devel
# yum install zlib-devel
# yum install openssl-devel
最后修改日期: 2024年10月1日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。