嘿,朋友!看到你在研究 AlmaLinux 的升级,这真是一个既让人兴奋又有点小紧张的话题。毕竟,生产环境的服务器就像家里的老伙计,谁都不想随便把它折腾坏。但好消息是,AlmaLinux 作为 CentOS 的完美继任者,它的升级路径其实比想象中要稳健得多。今天咱们就坐下来,泡杯咖啡,细细聊聊怎么把 AlmaLinux 9 升级到 10,或者从 8 一路升级到 9,中间有哪些坑,又有哪些“救命稻草”你必须提前准备好。
为什么我们需要升级?先看看“新旧势力”的差别
在动手之前,你得心里有数,知道你即将跨过的是什么门槛。AlmaLinux 9 和 AlmaLinux 10 虽然都穿着红帽系那套“企业级”的蓝袍子,但内核和基础软件的版本可是天差地别。
AlmaLinux 9 基于 RHEL 9,内核版本是 5.14,主要亮点是引入了 cephfs 的支持、更现代化的 Python 3.9 环境,以及更强的容器化体验。而 AlmaLinux 10(基于 RHEL 10)则直接跳到了内核 6.x,彻底拥抱了更激进的现代硬件特性,比如对 ARM64 架构的深度优化、更新的 SELinux 策略,以及默认的 Rust 和 Go 开发环境。
如果你还在用 AlmaLinux 8,那你的系统可能已经有点“步履蹒跚”了,因为 CentOS 8 的生命周期已经结束,而 AlmaLinux 8 的支持也将在 2029 年随 RHEL 8 一起终结。所以,从 8 升到 9,或者从 9 升到 10,不仅仅是换个版本号,更是为了让你能继续用上那些安全补丁和社区支持。很多老用户反映,不升级的话,连一些新的 Docker 镜像都跑不起来,那种无力感,我相信你不想要。
升级前的“体检”:那些必须做的准备工作
我见过太多人上来就敲 dnf system-upgrade,结果第二天哭着找 IT 支持。别成为他们中的一个。升级前的准备工作,决定了你今晚能不能睡个好觉。
1. 数据备份是底线,别抱侥幸心理
首先,也是最重要的一点:备份。不要跟我说“我的数据都在云端”或者“这只是个测试机”。即使是最小的失误,也可能导致文件系统损坏或配置丢失。
如果可能,做一个完整的快照。如果你用的是云服务商(比如 AWS、阿里云、腾讯云),直接控制台点“创建快照”。如果是物理机或者 KVM 虚拟机,建议用 dd 或者 rsync 把整个 / 分区备份到一个外部存储。
# 一个简单的 rsync 备份命令示例,假设你的数据盘是 /data,备份目标是 /backup
sudo rsync -avh --progress /data/ /backup/data-backup-$(date +%Y%m%d)/
2. 记录当前状态,知己知彼
在动手前,先拍几张“照片”。记录下你当前安装了哪些软件包、运行着哪些服务、配置文件有什么特殊修改。
# 查看当前已安装的软件包列表
sudo dnf list installed > /tmp/installed_packages_$(date +%Y%m%d).txt
# 查看关键服务的状态
systemctl list-units --type=service --state=running > /tmp/services_state.txt
# 如果有自定义的配置文件(比如 nginx, mysql),记得单独备份
sudo cp -r /etc/nginx /tmp/
sudo cp -r /etc/mysql /tmp/
这一步看似繁琐,但当升级后某个服务起不来,你可以通过对比 /etc 目录下的差异,快速定位是哪个配置文件被覆盖了。
3. 清理系统,减少升级阻力
旧系统里往往堆积着很多不再需要的依赖包。升级工具在处理这些“历史遗留问题”时可能会卡壳。所以,先跑一次清理:
sudo dnf autoremove
sudo dnf distro-sync
autoremove 会卸载那些因为不再被依赖而被孤立出来的包,distro-sync 则确保你当前的系统已经是最新状态,没有半更新的软件。这一步能极大降低升级过程中出现依赖冲突的概率。
4. 检查关键服务的兼容性
有些软件是有版本偏好的。比如,你的业务应用是否依赖于某个特定版本的 PHP 或 Python?如果是用源码编译安装的软件,或者通过 Docker 容器部署的,通常问题不大,因为容器环境是隔离的。但如果是直接安装在宿主机上的二进制服务,建议你查阅一下官方文档,确认它们在 AlmaLinux 10 下是否兼容。
特别要注意那些老旧的、维护不善的第三方软件源(repo)。如果某个 repo 只支持 EL8,它在升级到 EL9 时可能会成为阻碍。你可以先列出所有的 repo:
sudo dnf repolist all
然后逐个检查那些非官方的 repo,看看它们是否有 EL9 的支持版本。如果没有,你可能需要暂时禁用它们,等升级完成后再处理。
正式升级:两种主流路径的选择
现在,让我们进入正题。AlmaLinux 官方推荐两种升级方式:一种是使用 dnf system-upgrade 工具,另一种是使用 leapp 工具(主要用于从 EL8 升级到 EL9)。
路径一:使用 dnf system-upgrade(适合 9 到 10 的升级)
这是目前最通用、最直观的方法。它的原理是下载新版本的所有 RPM 包,然后在重启后完成替换。
第一步:安装升级插件
sudo dnf install dnf-plugin-system-upgrade
第二步:下载新的系统包
这一步很关键,你可以选择下载到本地缓存,或者直接执行升级。建议先下载,这样你可以检查有没有冲突。
# 下载到本地,目标版本为 10
sudo dnf system-upgrade download --releasever=10
下载过程中,终端会打印出大量的依赖解析信息。如果看到红色的 Error 或者 Conflict 警告,一定要停下来仔细看。通常,冲突的原因是一些第三方软件包与新版基础库不兼容。你需要手动解决这些冲突,可能是卸载冲突的软件包,或者暂时禁用相关的 repo。
第三步:执行升级
确认没有严重冲突后,就可以正式升级了:
sudo dnf system-upgrade reboot
执行这个命令后,系统会进入一个新的引导阶段,屏幕上的输出会像黑客电影里那样快速滚动。这个过程可能需要十几分钟到几十分钟,取决于你的硬件速度和包数量。千万不要强制关机! 耐心等它自动重启。
重启后,系统会进入新的版本。你可以登录进去,用 cat /etc/os-release 确认版本是否已经变成 AlmaLinux 10。
路径二:使用 leapp 工具(专用于 8 到 9 的升级)
如果你是从 AlmaLinux 8 升级到 9,dnf system-upgrade 可能会遇到很多麻烦,因为两个大版本之间的变化太大(比如从 SysVinit 完全转向 Systemd 的深化、Python 2 到 Python 3 的彻底剥离等)。这时候,AlmaLinux 官方推荐使用 leapp。
第一步:安装 leapp
sudo dnf install leapp leapp-upgrade leapp-data-almalinux
第二步:运行预升级检查
这是 leapp 最强大的地方——它会先给你一个“体检报告”,告诉你哪些地方有问题,哪些包必须删除,哪些配置需要手动修改。
sudo leapp preupgrade
命令跑完后,它会生成一个详细的报告,通常位于 /var/log/leapp/leapp-report.txt。你需要仔细阅读这份报告。
第三步:解决预检查中的问题
报告中会明确列出需要你手动处理的“阻断性”问题。比如,可能会说“你安装了某个不支持的第三方模块,必须删除”。你需要按照报告的指引,逐一处理。
# 示例:根据报告提示,禁用或卸载某些包
sudo dnf remove <problematic-package>
第四步:执行升级
所有问题都解决后,就可以开始真正的升级了:
sudo leapp upgrade
升级完成后,系统会提示你重启:
sudo reboot
重启后,系统就会进入 AlmaLinux 9 的世界。
升级后的“验伤”与优化
升级完成并成功进入新系统,并不意味着万事大吉。接下来,你需要做一些“验伤”和“优化”工作,确保系统稳定运行。
1. 验证系统版本和内核
首先,确认系统确实升级成功了。
cat /etc/os-release
uname -r
你应该能看到 VERSION="10" 或者 VERSION="9",以及对应的内核版本。
2. 清理旧的软件包和缓存
升级过程中会产生大量的临时文件和旧的 RPM 包。为了节省空间并保持系统整洁,执行清理:
sudo dnf autoremove
sudo dnf clean all
3. 检查关键服务的状态
这是最关键的一步。升级可能会改变一些服务的配置或依赖。你需要逐一检查核心服务是否正常运行:
- Web 服务器:如果是 Nginx 或 Apache,检查
systemctl status nginx或httpd。尝试访问一下你的网站,看看页面是否正常加载。 - 数据库:MySQL、PostgreSQL 或 MongoDB,检查服务状态,并尝试连接一下数据库,执行一个简单的查询。
- 应用服务:你业务相关的任何后台服务,都要起来看看。
如果发现服务启动失败,不要慌。先查看日志:
# 查看服务日志
journalctl -u <service-name> -n 50 --no-pager
很多时候,问题出在配置文件上。你可以对比升级前备份的 /etc 目录,看看哪些配置文件被修改了。AlmaLinux 可能会生成 .rpmsave 或 .rpmnew 文件,你需要手动合并这些差异。
4. 更新 SELinux 上下文
有时候,升级后文件的 SELinux 上下文可能不对,导致服务无法访问某些文件。你可以运行以下命令重新标记:
sudo fixfiles -B onboot
sudo reboot
5. 重新加载系统配置
如果是从 8 升到 9,或者从 9 升到 10,系统级的一些配置可能需要重新加载。比如,防火墙规则、定时任务(cron)等。检查一下 /etc/crontab 和 firewalld 的状态,确保它们按预期工作。
那些常见的“坑”和应对策略
在实际操作中,我遇到用户最多的几个问题,这里提前给你打打预防针。
坑一:第三方软件源冲突
很多用户喜欢添加 EPEL、Remi、Nginx 官方源等。这些源在跨大版本升级时,经常会出现包冲突。
对策:在升级前,先禁用所有非系统自带的源。
sudo dnf config-manager --set-disabled epel remi nginx repo-name
升级完成后,再逐一启用,并检查是否有新版本兼容。
坑二:Python 应用的依赖问题
AlmaLinux 9⁄10 默认只支持 Python 3.x,并且版本较高。如果你的应用依赖某个特定的旧版 Python 库,可能会挂掉。
对策:对于关键的 Python 应用,建议使用虚拟环境(venv)或容器化部署。这样,应用的环境就和系统环境隔离开来了,不受系统升级的影响。
坑三:内核模块失效
如果你使用了一些需要内核模块的软件,比如某些显卡驱动、虚拟化工具等,升级内核后,这些模块可能需要重新编译。
对策:在升级前,检查你安装了哪些 DKMS 模块。升级后,使用 dkms status 查看状态,如果显示 failed,需要手动重新构建。
给小朋友也能听懂的总结
好了,说了这么多技术细节,我用一个简单的比喻来总结一下。
把 AlmaLinux 系统想象成一栋你住了很久的房子。升级系统,就像是对这栋房子进行大规模的翻新改造。
- 备份,就是在你动工前,把家里所有的贵重物品、重要文件都拍照记录,甚至拷贝一份放到安全的地方。万一翻新过程中弄坏了什么,你还有底。
- 预检查,就像是请了一位专业的装修监理。他会告诉你,这面墙能不能拆,那个管道能不能动。如果你不听监理的话,直接乱砸,房子可能会塌。
- 执行升级,就是真正的装修过程。会有噪音,会有灰尘,房子暂时不能住人(服务器不能访问)。你需要耐心等待,不能中途跑出去逛街(强制重启)。
- 升级后的检查,就是装修完后的验收。你打开灯,看看电通不通;打开水龙头,看看水顺不顺;检查一下家具摆放对不对。如果有问题,赶紧找工人(查看日志)修好。
记住,翻新房子是为了住得更舒服、更安全,但过程需要细心和耐心。只要步骤对、准备足,你的 AlmaLinux 系统一定能焕然一新,运行得更流畅、更安全。
希望这篇文章能帮你顺利升级!如果过程中遇到具体的报错,别慌张,先把报错信息截图保存,然后冷静地查阅日志。记住,每一个报错背后,都是一个让你变得更懂系统的机会。祝你升级顺利!
