活动公告

系统通知
06-22 18:10
系统通知
06-14 00:00
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

CentOS Stream 9系统更新全指南 掌握最新版本升级技巧与常见问题解决方法确保系统安全稳定运行

SunJu_FaceMall

3万

主题

3082

科技点

3万

积分

执行版主

碾压王

积分
32876

塔罗立华奏

执行版主 发表于 2025-9-22 09:00:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

CentOS Stream 9是Red Hat Enterprise Linux (RHEL)的上游开发版本,它提供了一个稳定且先进的平台,适合企业和个人用户使用。系统更新是维护系统安全、稳定性和性能的关键环节。本文将全面介绍CentOS Stream 9的系统更新方法,从基础操作到高级技巧,以及常见问题的解决方法,帮助您确保系统始终处于最佳状态。

CentOS Stream 9概述

CentOS Stream是CentOS项目的一个转变,它不再是RHEL的下游副本,而是成为RHEL的上游开发分支。CentOS Stream 9基于Fedora和RHEL 9,提供了一个滚动更新的版本,让用户可以提前体验即将在RHEL中发布的功能。

与传统的CentOS Linux相比,CentOS Stream有以下特点:

• 更频繁的更新:提供更及时的安全补丁和功能更新
• 更接近RHEL的开发流程:可以提前体验RHEL的下一个版本的功能
• 持续交付模型:软件包更新更加频繁和及时

了解这些特点对于正确进行系统更新至关重要,因为更新策略可能需要根据这些特点进行调整。

系统更新前的准备工作

在进行系统更新之前,做好充分的准备工作可以避免许多潜在问题。

1. 数据备份

在执行任何系统更新之前,首要任务是备份重要数据。虽然系统更新通常不会影响用户数据,但以防万一,备份是必不可少的。
  1. # 备份重要目录到外部存储设备
  2. sudo rsync -avz /home/ /path/to/external/drive/backup/
  3. sudo rsync -avz /etc/ /path/to/external/drive/config_backup/
复制代码

2. 系统快照(如果使用LVM或Btrfs)

如果您使用LVM或Btrfs文件系统,创建系统快照是一个好习惯,这样可以在更新失败时快速恢复系统。
  1. # LVM快照创建示例
  2. sudo lvcreate --size 5G --snapshot --name root_snapshot /dev/vg00/root
  3. # Btrfs快照创建示例
  4. sudo btrfs subvolume snapshot / /root_snapshot_$(date +%Y%m%d)
复制代码

3. 检查系统状态

在更新前,检查系统是否有任何问题需要解决:
  1. # 检查磁盘空间
  2. df -h
  3. # 检查是否有未完成的软件包事务
  4. sudo rpmqa --last | head -20
  5. # 检查是否有损坏的RPM数据库
  6. sudo rpm --rebuilddb
  7. # 检查系统日志中是否有错误
  8. sudo journalctl -p 3 -xb
复制代码

4. 确认当前系统版本

了解当前系统版本有助于确定更新范围:
  1. # 检查CentOS Stream版本
  2. cat /etc/os-release
  3. # 或使用
  4. hostnamectl
复制代码

5. 配置正确的软件仓库

确保系统配置了正确的软件仓库,以便获取更新:
  1. # 列出已启用的仓库
  2. sudo dnf repolist
  3. # 检查仓库配置文件
  4. ls /etc/yum.repos.d/
复制代码

如果需要添加额外的仓库,如EPEL(Extra Packages for Enterprise Linux):
  1. # 安装EPEL仓库
  2. sudo dnf install epel-release
复制代码

基本系统更新方法

1. 使用DNF更新系统

DNF(Dandified YUM)是CentOS Stream 9中的默认软件包管理器,用于安装、更新和删除软件包。
  1. # 检查可用更新
  2. sudo dnf check-update
  3. # 更新所有软件包
  4. sudo dnf update
  5. # 或者使用upgrade命令,功能类似
  6. sudo dnf upgrade
复制代码

2. 安全更新

如果只想应用安全更新,可以使用以下命令:
  1. # 安装安全更新插件
  2. sudo dnf install dnf-plugins-core
  3. # 只应用安全更新
  4. sudo dnf update --security
复制代码

3. 单个软件包更新

如果只想更新特定的软件包:
  1. # 更新单个软件包
  2. sudo dnf update package_name
  3. # 例如,更新Apache服务器
  4. sudo dnf update httpd
复制代码

4. 更新内核

内核更新通常需要重启系统才能生效:
  1. # 更新内核
  2. sudo dnf update kernel
  3. # 检查当前安装的内核版本
  4. uname -r
  5. # 检查已安装的所有内核
  6. rpm -qa kernel
  7. # 重启系统以应用新内核
  8. sudo reboot
复制代码

5. 清理不需要的软件包

更新后,可以清理不需要的软件包以释放磁盘空间:
  1. # 删除旧的内核(保留最新的两个)
  2. sudo dnf install dnf-utils
  3. sudo package-cleanup --oldkernels --count=2
  4. # 删除不再需要的软件包
  5. sudo dnf autoremove
  6. # 清理DNF缓存
  7. sudo dnf clean all
复制代码

高级更新技巧

1. 使用DNF历史记录

DNF的历史记录功能允许您查看、撤销和重做事务:
  1. # 查看DNF历史记录
  2. sudo dnf history list
  3. # 查看特定事务的详细信息
  4. sudo dnf history info transaction_id
  5. # 撤销特定事务
  6. sudo dnf history undo transaction_id
  7. # 重做特定事务
  8. sudo dnf history redo transaction_id
复制代码

2. 排除特定软件包更新

有时您可能希望排除某些软件包不被更新:
  1. # 临时排除软件包更新
  2. sudo dnf update --exclude=package_name
  3. # 或者在/etc/dnf/dnf.conf中永久设置
  4. sudo echo "exclude=package_name1 package_name2" >> /etc/dnf/dnf.conf
复制代码

3. 下载更新但不安装

如果您想先下载更新,稍后再安装:
  1. # 下载所有更新但不安装
  2. sudo dnf update --downloadonly
  3. # 下载特定软件包的更新
  4. sudo dnf update package_name --downloadonly
  5. # 指定下载目录
  6. sudo dnf update --downloadonly --downloaddir=/path/to/directory
复制代码

4. 使用DNF组更新

DNF允许您更新软件包组:
  1. # 列出所有可用的组
  2. sudo dnf group list
  3. # 更新特定组
  4. sudo dnf group update "Group Name"
  5. # 例如,更新"Development Tools"组
  6. sudo dnf group update "Development Tools"
复制代码

5. 使用模块流(Module Streams)

CentOS Stream 9支持模块流,允许您安装不同版本的软件:
  1. # 列出所有可用的模块
  2. sudo dnf module list
  3. # 列出特定模块的可用流
  4. sudo dnf module list module_name
  5. # 启用特定流
  6. sudo dnf module enable module_name:stream
  7. # 安装模块的配置文件
  8. sudo dnf module install module_name:stream/profile
  9. # 重置模块选择
  10. sudo dnf module reset module_name
复制代码

6. 使用RPM直接安装

有时您可能需要直接从RPM文件安装软件包:
  1. # 从本地文件安装
  2. sudo dnf install /path/to/package.rpm
  3. # 从URL安装
  4. sudo dnf install https://example.com/package.rpm
复制代码

自动更新设置

1. 使用DNF-Automatic

DNF-Automatic是CentOS Stream 9中用于自动更新的工具:
  1. # 安装DNF-Automatic
  2. sudo dnf install dnf-automatic
  3. # 配置DNF-Automatic
  4. sudo nano /etc/dnf/automatic.conf
复制代码

在配置文件中,您可以设置以下选项:

• apply_updates = yes- 自动应用更新
• download_updates = yes- 下载更新但不自动安装
• emit_via = motd- 通过motd(Message of the Day)发送通知
• email_to = admin@example.com- 发送通知到指定邮箱

启动并启用DNF-Automatic服务:
  1. # 启动并启用DNF-Automatic
  2. sudo systemctl enable --now dnf-automatic.timer
  3. # 检查服务状态
  4. sudo systemctl status dnf-automatic.timer
复制代码

2. 使用Cron进行自动更新

您也可以使用cron作业来安排定期更新:
  1. # 编辑crontab
  2. sudo crontab -e
  3. # 添加以下行以每天凌晨2点检查并安装更新
  4. 0 2 * * * /usr/bin/dnf -y update > /var/log/dnf-automatic.log 2>&1
复制代码

3. 配置自动重启

如果需要,您可以配置系统在内核更新后自动重启:
  1. # 安装需要重启时通知的工具
  2. sudo dnf install dnf-utils
  3. # 创建脚本检查是否需要重启
  4. sudo nano /usr/local/bin/check-reboot
复制代码

在脚本中添加以下内容:
  1. #!/bin/bash
  2. if [ -f /var/run/reboot-required ]; then
  3.     echo "System restart is required."
  4.     # 取消注释以下行以自动重启
  5.     # /sbin/shutdown -r now
  6. else
  7.     echo "No restart required."
  8. fi
复制代码

使脚本可执行:
  1. sudo chmod +x /usr/local/bin/check-reboot
复制代码

然后可以将其添加到cron作业中:
  1. # 编辑crontab
  2. sudo crontab -e
  3. # 添加以下行以每天凌晨3点检查是否需要重启
  4. 0 3 * * * /usr/local/bin/check-reboot >> /var/log/check-reboot.log 2>&1
复制代码

常见问题及解决方法

1. 更新过程中出现依赖关系错误

有时在更新过程中可能会遇到依赖关系错误:
  1. # 错误示例:
  2. Error: Package: package_name-1.0-1.el9.x86_64 (baseos)
  3.            Requires: dependency_name >= 2.0, but none of the providers can be installed
复制代码

解决方法:
  1. # 清理DNF缓存
  2. sudo dnf clean all
  3. # 重建RPM数据库
  4. sudo rpm --rebuilddb
  5. # 尝试再次更新
  6. sudo dnf update
  7. # 如果仍然失败,尝试跳过依赖关系检查(不推荐)
  8. sudo dnf update --skip-broken
复制代码

2. 磁盘空间不足

更新过程中可能会遇到磁盘空间不足的问题:
  1. # 检查磁盘空间
  2. df -h
  3. # 清理DNF缓存
  4. sudo dnf clean all
  5. # 删除旧的日志文件
  6. sudo journalctl --vacuum-size=100M
  7. # 删除旧的软件包
  8. sudo package-cleanup --oldkernels --count=2
  9. sudo dnf autoremove
复制代码

3. GPG密钥验证失败

有时可能会遇到GPG密钥验证失败的问题:
  1. # 错误示例:
  2. error: Package: package_name-1.0-1.el9.x86_64 (baseos)
  3.            Failing package is: package_name-1.0-1.el9.x86_64
  4.            GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
复制代码

解决方法:
  1. # 导入CentOS官方GPG密钥
  2. sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
  3. # 如果使用EPEL仓库,导入EPEL GPG密钥
  4. sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9
  5. # 尝试再次更新
  6. sudo dnf update
复制代码

4. 软件包冲突

更新过程中可能会遇到软件包冲突:
  1. # 错误示例:
  2. Transaction check error:
  3.   file /path/to/file conflicts between attempted installs of package1-1.0-1.el9.x86_64 and package2-1.0-1.el9.x86_64
复制代码

解决方法:
  1. # 查找冲突的软件包
  2. sudo dnf provides /path/to/file
  3. # 删除冲突的软件包
  4. sudo dnf remove conflicting_package
  5. # 尝试再次更新
  6. sudo dnf update
复制代码

5. 更新后系统无法启动

如果更新后系统无法启动,可以尝试以下方法:
  1. # 在启动菜单中选择旧内核启动
  2. # 一旦系统启动,检查并修复问题
  3. sudo dnf history list
  4. sudo dnf history info last_transaction_id
  5. sudo dnf history undo last_transaction_id
  6. # 如果无法启动系统,使用救援模式
  7. # 1. 从安装媒体启动
  8. # 2. 选择"Troubleshooting" > "Rescue a CentOS system"
  9. # 3. 按照提示进入救援模式
  10. # 4. 挂载系统文件系统
  11. chroot /mnt/sysimage
  12. # 在救援模式下,您可以:
  13. # 回滚更新
  14. sudo dnf history undo last_transaction_id
  15. # 修复引导问题
  16. grub2-mkconfig -o /boot/grub2/grub.cfg
复制代码

6. 网络连接问题

更新过程中可能会遇到网络连接问题:
  1. # 检查网络连接
  2. ping -c 4 mirror.centos.org
  3. # 检查DNS解析
  4. nslookup mirror.centos.org
  5. # 如果DNS有问题,编辑/etc/resolv.conf
  6. sudo nano /etc/resolv.conf
  7. # 添加可靠的DNS服务器,如:
  8. nameserver 8.8.8.8
  9. nameserver 8.8.4.4
  10. # 检查防火墙设置
  11. sudo firewall-cmd --list-all
  12. # 如果需要,临时禁用防火墙
  13. sudo systemctl stop firewalld
  14. # 尝试使用不同的镜像
  15. sudo dnf update --disablerepo=* --enablerepo=baseos
复制代码

7. 软件包下载速度慢

如果软件包下载速度慢,可以尝试以下方法:
  1. # 安装 fastestmirror 插件
  2. sudo dnf install dnf-plugins-core
  3. # 编辑DNF配置以使用 fastestmirror
  4. sudo nano /etc/dnf/dnf.conf
  5. # 添加以下行:
  6. fastestmirror=True
  7. # 或者手动选择更快的镜像
  8. sudo nano /etc/yum.repos.d/CentOS-Stream-BaseOS.repo
  9. # 将baseurl更改为更快的镜像,如:
  10. baseurl=http://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/$basearch/os/
复制代码

更新后的系统维护

1. 验证更新

更新完成后,验证系统是否正常工作:
  1. # 检查系统版本
  2. cat /etc/os-release
  3. # 检查内核版本
  4. uname -r
  5. # 检查服务状态
  6. sudo systemctl status
  7. # 检查系统日志
  8. sudo journalctl -xe --since "1 hour ago"
复制代码

2. 检查并修复配置文件

更新可能会覆盖一些配置文件,检查并修复它们:
  1. # 查找.rpmnew和.rpmsave文件
  2. sudo find /etc -name "*.rpmnew" -o -name "*.rpmsave"
  3. # 比较并合并配置文件
  4. sudo diff /etc/original.conf /etc/original.conf.rpmnew
  5. # 根据需要更新配置文件
  6. sudo mv /etc/original.conf /etc/original.conf.old
  7. sudo mv /etc/original.conf.rpmnew /etc/original.conf
复制代码

3. 重新构建initramfs

如果更新了内核或关键驱动程序,可能需要重新构建initramfs:
  1. # 重新构建initramfs
  2. sudo dracut --force
  3. # 或者针对特定内核版本
  4. sudo dracut --force /boot/initramfs-$(uname -r).img $(uname -r)
复制代码

4. 更新引导加载程序

如果更新了内核或引导相关软件包,可能需要更新引导加载程序:
  1. # 对于GRUB
  2. sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  3. # 对于UEFI系统
  4. sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
复制代码

5. 检查SELinux上下文

更新后,SELinux上下文可能需要修复:
  1. # 检查SELinux状态
  2. sestatus
  3. # 修复SELinux上下文
  4. sudo restorecon -Rv /
  5. # 或者只修复特定目录
  6. sudo restorecon -Rv /var/www
复制代码

6. 清理系统

更新完成后,清理系统以释放空间:
  1. # 清理DNF缓存
  2. sudo dnf clean all
  3. # 删除不再需要的软件包
  4. sudo dnf autoremove
  5. # 删除旧的内核(保留最新的两个)
  6. sudo package-cleanup --oldkernels --count=2
  7. # 清理日志文件
  8. sudo journalctl --vacuum-size=100M
复制代码

最佳实践和建议

1. 定期更新系统

定期更新系统是保持系统安全和稳定的关键:
  1. # 每周检查一次更新
  2. sudo dnf check-update
  3. # 每月应用一次更新
  4. sudo dnf update
复制代码

2. 使用测试环境

在生产环境应用更新之前,先在测试环境中测试:
  1. # 在测试环境中应用更新
  2. sudo dnf update
  3. # 测试关键应用程序和服务
  4. sudo systemctl status httpd
  5. sudo systemctl status mysqld
  6. # 确认一切正常后,在生产环境中应用更新
复制代码

3. 监控更新日志

监控更新日志以了解系统变化:
  1. # 查看DNF历史记录
  2. sudo dnf history list
  3. # 查看特定事务的详细信息
  4. sudo dnf history info transaction_id
  5. # 查看更新日志
  6. sudo cat /var/log/dnf.log
复制代码

4. 使用版本控制管理配置文件

使用版本控制系统(如Git)管理配置文件:
  1. # 初始化Git仓库
  2. sudo git init /etc
  3. # 添加所有配置文件
  4. sudo git -C /etc add .
  5. # 提交初始配置
  6. sudo git -C /etc commit -m "Initial configuration"
  7. # 在更新后检查配置文件变化
  8. sudo git -C /etc diff
复制代码

5. 创建系统快照

在进行重大更新之前,创建系统快照:
  1. # 使用LVM创建快照
  2. sudo lvcreate --size 5G --snapshot --name pre_update_snapshot /dev/vg00/root
  3. # 使用Btrfs创建快照
  4. sudo btrfs subvolume snapshot / /pre_update_snapshot_$(date +%Y%m%d)
复制代码

6. 使用自动化工具

使用自动化工具(如Ansible)管理更新:
  1. # 示例Ansible playbook
  2. ---
  3. - name: Update CentOS Stream 9 systems
  4.   hosts: all
  5.   become: yes
  6.   
  7.   tasks:
  8.     - name: Update all packages
  9.       dnf:
  10.         name: "*"
  11.         state: latest
  12.         
  13.     - name: Check if reboot is required
  14.       command: /usr/bin/needs-restarting -r
  15.       register: reboot_required
  16.       ignore_errors: yes
  17.       
  18.     - name: Reboot the system if required
  19.       reboot:
  20.         msg: "Reboot required due to kernel update"
  21.         connect_timeout: 5
  22.         reboot_timeout: 300
  23.         pre_reboot_delay: 0
  24.         post_reboot_delay: 30
  25.         test_command: uptime
  26.       when: reboot_required.rc == 1
复制代码

7. 监控系统性能

更新后监控系统性能:
  1. # 安装性能监控工具
  2. sudo dnf install sysstat
  3. # 启用并启动sysstat
  4. sudo systemctl enable sysstat
  5. sudo systemctl start sysstat
  6. # 查看CPU使用情况
  7. sudo mpstat 1 5
  8. # 查看内存使用情况
  9. sudo free -h
  10. # 查看磁盘I/O
  11. sudo iostat 1 5
复制代码

总结

CentOS Stream 9系统更新是维护系统安全、稳定性和性能的关键环节。通过本文介绍的方法和技巧,您可以有效地管理系统更新,确保系统始终处于最佳状态。

关键要点包括:

1. 在更新前做好充分的准备工作,包括数据备份和系统检查
2. 使用DNF进行基本和高级系统更新
3. 配置自动更新以保持系统最新
4. 了解并解决常见的更新问题
5. 更新后进行适当的系统维护
6. 遵循最佳实践,如定期更新、使用测试环境和监控系统性能

通过遵循这些指南,您可以确保CentOS Stream 9系统始终保持安全、稳定和高效运行,为您的业务提供可靠的支持。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则