CentOS 7 停止维护后 YUM 报错怎么办?一份完整的 Linux 软件包管理从入门到精通指南

CentOS 7 停止维护后 YUM 报错怎么办?一份完整的 Linux 软件包管理从入门到精通指南
Linux 软件包管理完全指南从零到一掌握 RPM、YUM 及源码编译构建你的软件管理知识体系 前言在 Linux 系统管理中软件包的安装、升级和卸载是最基础也是最重要的技能之一。无论你是初学者还是有一定经验的运维人员深入理解软件包管理机制都能让你在工作中更加得心应手。本文将从 Windows 类比 出发系统讲解 Linux特别是 RHEL/CentOS 系列的软件包管理知识涵盖 RPM 底层工具、YUM 高层包管理器、源码编译安装 以及 自建 YUM 仓库 等核心内容并结合 CentOS 7 EOL停止维护 后的实际排错经验帮助你真正掌握这门技能。一、软件包管理概述1.1 Windows 与 Linux 的对比理解维度WindowsLinuxRHEL/CentOS包管理工具控制面板「程序和功能」绿色软件如 Rufusrpm底层、yum/dnf上层软件来源官方网站下载、应用商城系统仓库Repo、EPEL 扩展仓库、源码编译安装信息记录写入 Windows 注册表记录在 RPM 数据库/var/lib/rpm中1.2 Linux 发行版的两大体系体系发行版包管理工具RPM 系红帽家族RHEL、CentOS、Fedora、Rocky Linux、AlmaLinux、OELrpm、yum、dnfDEB 系Debian 家族Debian、Ubuntu、Kali Linuxdpkg、apt其他Arch Linux、Gentoopacman、源码编译本文聚焦于 RPM 系发行版这也是企业级生产环境中最常见的类型。二、RPM 包深度解析2.1 RPM 包文件名格式RPM 包遵循一套标准的命名规范理解它有助于你快速识别软件包的用途和适用环境。textname-version-release.architecture.rpm示例lrzsz-0.12.20-36.el7.x86_64.rpm字段含义示例值name软件名称lrzszversion软件原始版本号0.12.20releaseRPM 打包版本号含操作系统版本36.el7表示 CentOS 7 构建architecture适用处理器架构x86_6464位、noarch通用、aarch64ARM 64位2.2 RPM 包的内部组成每个 RPM 包包含三个核心部分文件清单需要安装到系统中的具体文件二进制程序、配置文件、文档等。元数据信息包的名称、版本、架构、依赖关系Requires、软件说明、许可证、变更日志等。脚本片段在安装pre/post、卸载preun/postun等阶段自动执行的 Shell 命令。2.3 安全机制GPG 数字签名RPM 系统通过非对称加密保证包的完整性和来源可信软件提供商使用私钥对 RPM 包进行签名。客户端使用公钥如RPM-GPG-KEY-CentOS-7验证签名。若签名不匹配RPM 将拒绝安装。bash# 导入 CentOS 官方 GPG 密钥rpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7# 跳过 GPG 检查不推荐生产环境使用rpm-ivhpackage.rpm--nogpgcheck三、RPM 命令实战⚠️rpm是底层包管理工具不会自动解决依赖关系适合查询和操作本地包文件。3.1 查询操作-q命令作用rpm -qa列出系统中所有已安装的软件包rpm -q httpd查询指定包是否已安装rpm -qi httpd查看包详细信息版本、描述、安装日期等rpm -ql httpd列出该包安装的所有文件路径rpm -qc httpd列出该包的配置文件如/etc/ssh/sshd_configrpm -qd httpd列出该包的文档文件如 man 手册rpm -qf /etc/ssh/sshd_config查询某个系统文件属于哪个软件包rpm -q --scripts httpd查看该包关联的安装/卸载脚本rpm -qg System Environment/Base查询某个软件包组包含的所有包操作未安装的包文件-p参数bash# 查看一个未安装的 rpm 包里有哪些文件rpm-qplhttpd-2.4.6-99.el7.centos.1.x86_64.rpm# 查看未安装包的配置文件列表rpm-qpchttpd-2.4.6-99.el7.centos.1.x86_64.rpm3.2 验证操作-V验证已安装包的文件是否被篡改或损坏bashrpm-Vopenssh-server如果文件被修改会输出类似以下信息textS.5....T. c /etc/ssh/sshd_config字符含义速查表字符含义S文件大小Size改变5MD5 校验和改变T修改时间Time改变c该文件是配置文件configmissing文件丢失3.3 安装与卸载bash# 安装-i-v 显示详情-h 显示进度条rpm-ivhlrzsz-0.12.20-36.el7.x86_64.rpm# 卸载-erpm-elrzsz# 重新安装--reinstallrpm--reinstall-vhlrzsz*# 强制安装慎用可能破坏依赖rpm-ivh--nodepspackage.rpm3.4 从 RPM 包中提取文件不安装bash# 方法一分步提取rpm2cpio httpd.rpmhttpd.cpio cpio-id./etc/httpd/conf/httpd.confhttpd.cpio# 方法二一步提取所有文件rpm2cpio httpd.rpm|cpio-id*四、YUM 包管理核心工具YUMYellowdog Updater Modified是基于 RPM 的上层包管理器能够自动解决依赖关系是目前生产环境最常用的工具。4.1 常用查询命令命令说明yum repolist查看当前启用的仓库列表及软件包数量yum repolist all查看所有仓库含已禁用的yum list http*模糊查询软件包支持通配符yum list httpd --showduplicates查看仓库中该包的所有可用版本yum info httpd查看包的详细信息比rpm -qi更丰富yum search web server在描述和简介中搜索关键字yum provides */sar查找哪个包提供了sar命令等价于yum whatprovides4.2 安装、升级、降级、卸载bash# 安装软件包yuminstallvsftpd# 只下载包不安装用于离线迁移或备份yuminstallvsftpd--downloadonly--downloaddir/root/# 安装本地已下载的 rpm 包自动解决依赖yum localinstall ./vsftpd-3.0.2-29.el7_9.x86_64.rpm# 升级特定包yum update vsftpd# 升级系统中所有包yum update# 降级注意依赖包需要一起降级否则会报错yum downgrade httpd-tools-2.4.6-97.el7.centos httpd-2.4.6-97.el7.centos# 卸载软件包yum remove vsftpd4.3 YUM 事务历史后悔药YUM 会记录每次操作的 ID支持回滚和重做bashyumhistorylist# 查看事务列表yumhistoryinfo3# 查看第 3 次事务的详情yumhistoryundo3# 回滚第 3 次事务极其有用yumhistoryredo3# 重做第 3 次事务4.4 软件包组管理用于批量安装一组工具如 GNOME 桌面或开发工具链bashyum grouplist-v# 查看所有组含组 IDyum groupinfoServer with GUI# 查看组详情yum groupinstallDevelopment Tools# 安装编译工具链yum groupremove mariadb-client# 卸载组五、YUM 仓库配置与管理5.1 仓库配置文件存放目录/etc/yum.repos.d/*.repo核心配置参数ini[repo-id]# 仓库唯一标识符name仓库名称# 描述性名称baseurlhttp://...# 软件包下载地址mirrorlisthttp://...# 镜像列表地址与 baseurl 二选一enabled1# 1启用0禁用gpgcheck1# 开启 GPG 签名验证gpgkeyfile:///path/to/key# 公钥文件地址5.2 仓库管理命令bash# 启用/禁用仓库yum-config-manager--enableepel-debuginfo yum-config-manager--disableepel-debuginfo# 清理缓存CentOS 7 EOL 后推荐频繁使用yum clean allrm-rf/var/cache/yum/*# 暴力清理# 生成缓存用于 Tab 补全和加速查询yum makecache5.3 常用第三方仓库添加EPELExtra Packages for Enterprise LinuxEPEL 提供了大量 RHEL/CentOS 官方仓库中没有的软件包。bash# 使用阿里云镜像curl-o/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoDocker CE 仓库bash# 方法一使用 yum-config-manageryum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 方法二手动创建 repo 文件catEOF/etc/yum.repos.d/docker-ce.repo[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable enabled1 gpgcheck0 EOFKubernetes 仓库bashyum-config-manager --add-repohttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/六、源码编译安装当 YUM 仓库中没有所需软件或需要自定义编译参数如指定安装路径、启用特定功能时采用源码编译方式。6.1 通用步骤阶段命令说明1. 安装依赖yum install gcc make autoconf ...安装编译工具和开发库2. 下载解压wget xxx.tar.gz tar -xf xxx.tar.gz获取源码包3. 配置./configure --prefix/usr/local/xxx生成 Makefile指定安装路径4. 编译make编译二进制文件5. 安装make install复制文件到目标路径6. 环境变量export PATH$PATH:/usr/local/xxx/bin将可执行文件加入 PATH6.2 实战案例一编译安装 Nginxbash# 1. 安装依赖yuminstall-ygccmakepcre-devel zlib-devel# 2. 下载源码wgethttps://nginx.org/download/nginx-1.24.0.tar.gztar-xfnginx-1.24.0.tar.gzcdnginx-1.24.0/# 3. 配置指定安装路径./configure--prefix/usr/local/nginx# 4. 编译并安装makemakeinstall# 5. 配置环境变量exportPATH$PATH:/usr/local/nginx/sbin/echoexport PATH$PATH:/usr/local/nginx/sbin/~/.bashrc# 6. 启动测试nginxcurl-shttp://localhost|grepThank you for using nginx# 7. 注册为系统服务可选cp/usr/lib/systemd/system/sshd.service /etc/systemd/system/nginx.service# 编辑 nginx.service 配置 ExecStart/ExecStop 等systemctl daemon-reload systemctlenablenginx--now6.3 实战案例二编译安装 Cmatrix代码雨屏保 此案例特别适合CentOS 7 EOL 后 EPEL 缺包的场景。bash# 1. 安装依赖yuminstall-ygccmakeautoconf ncurses-devel# 2. 下载源码wgethttps://github.com/abishekvashok/cmatrix/archive/refs/tags/v2.0.tar.gztar-xfv2.0.tar.gzcdcmatrix-2.0# 3. 生成 configure 脚本并配置autoreconf-i./configure--prefix/usr/local/cmatrix# 4. 编译安装makemakeinstall# 5. 配置环境变量并运行exportPATH$PATH:/usr/local/cmatrix/bin cmatrix-Cred# 红色代码雨Cmatrix 常用参数参数说明-C red设置颜色green/red/blue/yellow/cyan/magenta-b加粗字体-u 3更新速度0-10数字越小越快-s屏保模式按任意键退出七、自建 YUM 仓库企业内网必备当服务器无法访问外网时可以搭建本地镜像源供内网机器使用。7.1 服务端操作bash# 1. 安装 createrepo 工具yuminstall-ycreaterepo# 2. 准备软件包目录mkdir-p/var/www/html/tools/Packagescd/var/www/html/tools/Packages# 3. 下载软件包及其依赖yumdownloadervimopen-vm-tools vsftpd lrzsz bash-completion# 4. 生成仓库索引信息createrepo /var/www/html/tools/# 5. 启动 Web 服务器发布yuminstall-yhttpd systemctlenablehttpd--nowsystemctl stop firewalld# 测试环境可关闭防火墙7.2 客户端配置bash# 1. 备份原有仓库配置mkdir/etc/yum.repos.d/oldmv/etc/yum.repos.d/*.repo /etc/yum.repos.d/old/# 2. 添加新仓库catEOF/etc/yum.repos.d/tools.repo[tools] nameLocal Tools Repository baseurlhttp://server-ip/tools/ enabled1 gpgcheck0 EOF# 3. 测试安装yum makecache yuminstall-yvim7.3 同步远程仓库到本地reposyncbash# 将远程仓库的软件包和元数据全部同步到本地reposync--repoidtools --download-metadata createrepo toolslstools/# Packages repodata八、⚠️ CentOS 7 EOL 排错专题8.1 问题现象执行yum相关命令时出现以下报错textCould not resolve host: mirrorlist.centos.org Cannotfinda valid baseurlforrepo: base/7/x86_64curl#6 - Could not resolve host8.2 根本原因CentOS 7 已于 2024 年 6 月 30 日停止维护EOL官方镜像列表服务已关闭原有的mirrorlist.centos.org地址已不可用。8.3 解决方案方案一切换至阿里云镜像推荐bash# 备份原配置mv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak# 下载阿里云镜像配置curl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 清理并重建缓存yum clean all yum makecache方案二使用 Vault 官方存档源bashcat/etc/yum.repos.d/CentOS-Base.repoEOF [base] nameCentOS-7 - Base baseurlhttp://vault.centos.org/7.9.2009/os/x86_64/ gpgcheck1 gpgkeyhttp://vault.centos.org/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7 [updates] nameCentOS-7 - Updates baseurlhttp://vault.centos.org/7.9.2009/updates/x86_64/ gpgcheck1 gpgkeyhttp://vault.centos.org/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7 [extras] nameCentOS-7 - Extras baseurlhttp://vault.centos.org/7.9.2009/extras/x86_64/ gpgcheck1 gpgkeyhttp://vault.centos.org/7.9.2009/os/x86_64/RPM-GPG-KEY-CentOS-7 EOFyum clean all yum makecache方案三修复 DNS 解析bash# 临时配置 DNSechonameserver 114.114.114.114/etc/resolv.confechonameserver 8.8.8.8/etc/resolv.conf# 测试网络连通性ping-c2www.baidu.com九、键盘快捷键小贴士快捷键说明CtrlC强制中断当前运行的程序CtrlZ暂停当前程序fg恢复前台bg恢复后台Tab命令/文件名自动补全⚠️ 注意按键盘按键不是输入字符tabCtrlD退出当前 Shell 或发送 EOFCtrlL清屏等价于clear 结语本文从RPM 底层工具到YUM 高层包管理器再到源码编译和自建仓库系统介绍了 LinuxRHEL/CentOS 系列软件包管理的完整知识体系。掌握这些技能你将能够✅ 快速定位和解决软件安装问题✅ 应对 CentOS 7 EOL 后的各种报错✅ 在无外网环境搭建内部软件源✅ 编译安装官方仓库未提供的软件 如发现文中错误或有改进建议欢迎指正交流。Happy Linuxing!

最新新闻

日新闻

周新闻

月新闻