嘿,朋友。我知道你此刻正盯着屏幕,心里可能有点打鼓。从 AlmaLinux 8 升级到 9,这可不像是给手机换个壳那么简单。这就像是要给你的老房子换地基,同时还得保证里面的家具(你的业务应用)不能散架。AlmaLinux 作为 RHEL(Red Hat Enterprise Linux)的完美二进制兼容替代品,其升级过程其实非常稳健,但前提是你得按部就班,不能跳步。
别担心,我不是来给你念枯燥的手册的。我是来帮你把这事儿办得漂漂亮亮,确保你的服务器在升级后不仅跑得快,还稳如泰山。我们将一起走过这个旅程,从准备工作到最终的验证,我会把那些容易踩坑的地方都标出来,甚至还会给你准备一些“急救包”。
第一步:心理建设与全面体检
在敲下第一个命令之前,我们先停一停。很多灾难性的升级失败,不是因为技术不行,而是因为准备不足。AlmaLinux 9 基于 RHEL 9,这意味着底层有很多变化:Python 3.9 成了默认版本(虽然 Python 3.6 还在,但不再默认),Firewalld 的配置逻辑微调了,甚至一些旧的系统服务也被替换了。
1. 确认硬件与虚拟化环境
首先,确保你的硬件支持 AlmaLinux 9 的要求。虽然它不像 Windows 11 那样强制要求 TPM 2.0 和特定的 CPU 指令集,但如果你是在虚拟机上运行,建议至少分配 2GB 内存和 20GB 磁盘空间(如果是最小化安装)。对于生产环境,我强烈建议使用 SSD 存储,因为 I/O 性能对升级过程中的包处理速度影响很大。
2. 备份!备份!还是备份!
这是老生常谈,但我必须说一万遍。在升级前,你需要做到以下几点:
- 全系统快照:如果你使用的是 KVM、VMware 或云服务商(如 AWS EC2、阿里云 ECS),请在升级前创建实例快照或镜像。这是你的后悔药。
- 数据备份:备份
/var/lib/下的数据库文件(MySQL/MariaDB, PostgreSQL),以及/etc/下的配置文件。 - 导出软件列表:运行以下命令,保存当前已安装的 RPM 包列表,以便升级后对比:
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' > /tmp/alma8_packages_before_upgrade.txt
3. 检查当前系统的健康状况
确保 AlmaLinux 8 已经是最新的补丁状态。如果基础系统都不干净,升级过程可能会因为依赖冲突而中断。
sudo dnf update -y
sudo reboot
重启后,再次登录,确认系统版本确实是 8.x 的最新小版本(例如 8.8 或 8.9)。
第二步:安装迁移工具 leapp
AlmaLinux 官方推荐使用 leapp 工具来进行版本迁移。它是一个智能的分析器和执行器,能帮你检测不兼容项并尝试自动修复。
1. 安装 leapp 和相关数据
sudo dnf install leapp-upgrade leapp-data-alma linux
这里要注意,leapp-data-alma-linux 包含了针对 AlmaLinux 特定的配置和规则。如果没有它,leapp 可能会按照通用的 RHEL 规则运行,导致一些 Alma 特有的包被误判。
2. 预检分析(The Pre-Upgrade Audit)
这是最关键的一步。运行以下命令,leapp 会深入扫描你的系统,找出所有可能导致升级失败的问题。
sudo leapp preupgrade
这个过程可能需要几分钟到几十分钟,取决于你的系统复杂程度。完成后,它会生成一份详细的报告,通常位于 /var/log/leapp/leapp-report.txt。
你需要仔细查看这份报告。 重点关注 [INAPPLICABLE] 和 [ABORTING] 级别的错误。
- 常见兼容性问题示例:
- 自定义内核模块:如果你安装了第三方内核模块(如某些网卡驱动、加密狗驱动),它们可能没有提供 AlmaLinux 9 (Kernel 5.14+) 的兼容版本。
leapp会标记这些为高风险。 - 旧版 Python 脚本:虽然 Python 3.9 向后兼容性好,但一些硬编码使用了
/usr/bin/python(指向 Python 2) 的脚本会报错。 - 第三方仓库冲突:EPEL 7 或旧的第三方源可能与 AlmaLinux 9 的包名冲突。
- 自定义内核模块:如果你安装了第三方内核模块(如某些网卡驱动、加密狗驱动),它们可能没有提供 AlmaLinux 9 (Kernel 5.14+) 的兼容版本。
3. 解决预检问题
假设 leapp 报告了一个典型问题:“检测到自定义内核模块”。
解决方案: 你需要联系驱动供应商获取支持 Kernel 5.14+ 的新版本驱动,或者暂时卸载该模块。
再比如,“检测到使用 Python 2 的服务”。
解决方案:
在 /etc/leapp/files/answerfile 中,你可以告诉 leapp 忽略某些非关键警告,或者手动修改脚本。例如,创建一个答案文件来抑制某些误报:
[preupgrade]
# 如果确信某个风险可接受,可以添加如下配置(需谨慎)
skip_check = custom_kernel_module_warning
注意:不要盲目地忽略所有警告。只在你完全理解后果的情况下这样做。
第三步:执行升级
当 leapp preupgrade 顺利通过,或者你已经解决了所有阻断性问题后,就可以开始真正的升级了。
1. 生成升级事务
sudo leapp upgrade
这一步会下载 AlmaLinux 9 的基础包和元数据,并构建一个升级事务。它不会立即重启,只是做好准备。
2. 重启进入升级模式
sudo reboot
重启后,你会看到 GRUB 菜单中多了一个“AlmaLinux 9 Upgrade”选项。选择它启动。系统会自动执行包替换、配置合并等操作。这个过程可能需要较长时间,请耐心等待,切勿断电。
3. 首次启动与初始配置
升级完成后,系统会自动重启进入新的 AlmaLinux 9 环境。第一次登录时,你可能会遇到 SELinux 重新标记(Relabeling)的过程,这会花费一些时间。如果看到类似 SELinux relabeling... 的提示,请等待完成。
第四步:兼容性排查与故障排除
升级完成并不意味着结束,而是挑战的开始。你需要验证系统是否真正稳定。
1. 验证核心服务
检查关键服务是否正常运行:
systemctl status httpd nginx mariadb postgresql sshd
如果发现服务无法启动,查看日志:
journalctl -xeu <service_name>
常见故障案例:Apache/Nginx 启动失败
在 AlmaLinux 9 中,Web 服务器的配置文件路径可能没有大变化,但模块加载机制变了。如果 Apache 报错 Module mpm_event is already loaded,可能是因为配置文件中重复加载了模块。
解决方法:
编辑 /etc/httpd/conf.modules.d/00-mpm.conf,注释掉显式加载的行,让系统自动处理。
2. 网络与防火墙
AlmaLinux 9 继续使用 Firewalld,但默认区域策略可能略有不同。
sudo firewall-cmd --list-all
如果外部无法访问你的 Web 服务,检查是否开放了端口:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
3. Python 环境检查
由于 Python 3.9 成为默认版本,许多依赖 Python 2 的旧脚本会失效。
检查方法:
python3 --version
which python
如果某个应用依赖 Python 2,你需要安装 python2 包(通过 EPEL 或源码编译),并在脚本中明确指定 #!/usr/bin/env python2,而不是依赖默认的 python 命令。
4. 数据库迁移
对于 MariaDB/MySQL,AlmaLinux 9 通常自带较新版本。升级过程中,leapp 会尝试自动处理数据目录的兼容性。但如果遇到字符集问题或存储引擎不支持,你可能需要手动运行:
sudo mysql_upgrade -u root -p
注意:在新版 MySQL/MariaDB 中,mysql_upgrade 可能已弃用,建议在启动服务前备份数据,并在升级后检查 SHOW VARIABLES LIKE 'version'; 确认版本正确。
第五步:优化与长期维护
1. 清理旧内核
升级后,系统可能保留了多个旧内核。为了节省空间和减少混淆,可以保留最近两个内核,删除更早的:
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)
2. 更新 EPEL 源
AlmaLinux 8 的 EPEL 7 源不再适用。你需要安装 EPEL 9 源:
sudo dnf install epel-release
sudo dnf makecache
3. 监控与告警
升级后的头一周是观察期。设置好监控告警,关注 CPU、内存、磁盘 I/O 和网络流量。如果发现异常,立即回滚到之前的快照。
真实场景案例:某电商平台的平滑升级
让我分享一个真实的案例。一家中型电商平台运行在 AlmaLinux 8 上,使用 Nginx, PHP-FPM, 和 PostgreSQL。
遇到的问题: 升级后,PHP-FPM 频繁崩溃,导致网站间歇性不可用。
排查过程:
- 查看
/var/log/php-fpm/error.log,发现大量Segfault at ...错误。 - 检查系统日志
journalctl -k,发现与内核模块相关的警告。 - 原来,该平台使用了一个自定义的加速插件,该插件编译时链接了旧版本的 glibc 和 libstdc++。
- AlmaLinux 9 升级了 glibc 到 2.34+,导致二进制不兼容。
解决方案:
- 暂时禁用该插件,恢复网站稳定性。
- 联系插件提供商,获取重新编译的版本。
- 在测试环境中,使用 AlmaLinux 9 的容器镜像重新编译插件。
- 部署新插件,问题解决。
这个案例告诉我们:第三方闭源软件是最大的风险点。在升级前,务必列出所有非官方源的软件,并确认其厂商支持新版本。
结语:拥抱变化,保持冷静
从 AlmaLinux 8 到 9 的升级,是一次系统生命力的焕新。它带来了更好的安全性、更现代的内核支持和长期的维护保障。虽然过程中会有小插曲,但只要遵循“备份-预检-执行-验证”的流程,你就能从容应对。
记住,你不是一个人在战斗。AlmaLinux 社区非常活跃,遇到问题时,查阅官方文档和论坛,往往能找到志同道合的伙伴。现在,深呼吸,打开终端,让我们开始这场升级之旅吧。你的系统将会感谢你的谨慎与专业。
