说实话,看着服务器上的 8.x 版本号,心里总有点毛毛的,尤其是当你知道 AlmaLinux 8 的生命周期还剩没多少的时候。别慌,从 8 到 9 的升级其实不像以前那些大版本跳跃那么恐怖,但绝对不是点一下鼠标就能完事儿的“无脑”操作。今天咱们就把这事儿掰开揉碎了讲清楚,特别是那些能把你坑到半夜凌晨的“坑点”。
先别急着动手,这步最容易被忽视
在命令行里敲下第一个命令之前,我想请你先去喝杯水,冷静一下。升级大版本就像给飞行的飞机换引擎,你得确保机身结实、零件齐全、而且你有退路。
第一步:备份!备份!备份!
这不是套话。不管是 /home 下的用户数据、/var 下的应用配置(比如 Nginx、MySQL、Docker 的容器数据)、还是你自己的 SSH 密钥和 cron 任务,全都要有。如果你用的是 AlmaLinux 的默认 LAMP 或 LEMP 栈,至少要把数据库导出来,配置文件打包好。
我还见过有人忘了备份 /etc 目录,结果升级后网络配置乱了,防火墙规则全没了,那种崩溃感简直无法形容。
第二步:确保 AlmaLinux 8 是最新的
你要升级的目标环境,本身必须是 AlmaLinux 8.9(或者最新的 8.x 点发布版本)。如果还卡在 8.0 或 8.5,先跑一遍:
sudo dnf update -y
sudo reboot # 建议重启一下,确保内核和相关服务都干净
这一步是为了清除历史包袱。带着旧的内核、旧的库文件去升级,后面报错能报到你怀疑人生。
安装dnf-plugin-system-upgrade
AlmaLinux 9 和 RHEL 9 一样,官方推荐的平滑升级方式是通过 dnf-plugin-system-upgrade。这个插件的工作方式有点特别——它不会直接在当前运行的系统上修改文件,而是下载好所有新文件,然后创建一个临时的启动环境(initramfs),重启后进入那个环境完成安装,最后再重启进新系统。
安装插件:
sudo dnf install dnf-plugin-system-upgrade -y
然后下载 AlmaLinux 9 的所有包:
sudo dnf system-upgrade download --releasever=9
这时候你可能会看到一堆提示,比如“某些包无法升级”、“依赖冲突”之类的。别无视它们,仔细读。
常见的“无法升级”包通常分两类:
- 第三方仓库的包:比如 Remi 的 PHP、Nginx 官方源、EPEL 里的一些包。这些包在 EL9 的 EPEL 里可能版本变了,或者根本没了。
- 自己从源码安装的软件:比如你自己编译的 Nginx、PostgreSQL,这些 dnf 管不到,升级插件会直接跳过,你得心里有数。
如果看到红字报错,先别慌,试试加 --skip-broken 参数,但最好还是先去解决那些依赖冲突,不然升级完可能缺胳膊少腿。
开始升级:漫长的等待
下载完成后(可能几十分钟到几小时,取决于你带宽和包的大小),执行:
sudo dnf system-upgrade reboot
然后服务器就会重启。注意,这次重启后,你看到的不会是熟悉的登录界面,而是一个类似 GRUB 的启动菜单,提示你正在升级到 AlmaLinux 9。这个过程可能持续很久,取决于你的磁盘速度和包数量。千万别强制关机,否则系统直接报废,只能重装。
如果运气好,你会看到“Upgrade completed successfully”之类的提示,然后自动重启进入新系统。如果失败,通常会回滚到 AlmaLinux 8 的状态,这也是为什么要备份的原因——万一回滚失败,你还有救。
升级后的“排雷”时间
重启进入 AlmaLinux 9 后,第一件事不是高兴,而是检查系统状态:
cat /etc/os-release
dnf distro-sync
distro-sync 很重要,它会把系统里残留的旧包和新版本对齐,清除那些“孤儿包”。
接下来,逐个检查你的服务:
1. Nginx / Apache
如果你之前用的是 EPEL 或 AppStream 里的 Nginx,升级后配置路径可能没变,但模块可能换了。比如,AlmaLinux 9 默认开启了更多的安全模块,你可能会发现之前的虚拟主机配置报错了。
sudo nginx -t
sudo systemctl restart nginx
Apache 同理:
sudo apachectl configtest
sudo systemctl restart httpd
2. PHP
这是重灾区。AlmaLinux 9 的 AppStream 里,PHP 默认版本是 8.0 或 8.1(取决于你的镜像),而 AlmaLinux 8 可能还是 7.4。如果你的应用依赖旧版 PHP,别想着强行升 PHP 8,先想想你的代码能不能扛住。
如果用了 Remi 源,记得更新 Remi 源的配置:
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module enable remi-php81 # 根据你需要的版本调整
sudo dnf distro-sync
3. Database
MySQL/MariaDB 在 AlmaLinux 9 里升级后,字符集默认可能变了。旧版本的数据库如果是 latin1,新环境可能兼容有问题。建议升级后跑一遍:
mysql_upgrade -u root -p
或者如果是 MariaDB:
mariadb-upgrade -u root -p
4. Docker
Docker 本身是独立于系统版本的,但如果你之前把 Docker 装在 /var/lib/docker 下,并且容器里有依赖系统库的数据,可能会出问题。建议先停止所有容器,导出镜像,升级后再重建。
sudo systemctl stop docker
sudo docker save $(sudo docker ps -aq) -o /tmp/docker-images.tar
# 升级后...
sudo docker load -i /tmp/docker-images.tar
5. SELinux
AlmaLinux 9 的 SELinux 策略更严格了。如果你之前关掉了 SELinux,升级后它可能默认是 Enforcing 模式。这会导致一些老旧应用直接挂掉。
getenforce
如果发现是 Enforcing,但应用跑不起来,先别急着关掉,用 audit2allow 生成策略:
sudo audit2allow -a > local.te
sudo semodule -i local.pp
如果嫌麻烦,且环境是内网测试机,可以在 /etc/selinux/config 里改成 SELINUX=permissive,或者 disabled(不推荐生产环境)。
那些真实的“坑点”
坑点一:Python 版本变更
AlmaLinux 8 默认 Python 3.6,AlmaLinux 9 默认 Python 3.9。很多系统工具(比如 dnf 本身、firewalld)依赖 Python,但它们都用的是系统路径下的 symlink。升级后,如果你之前自己装了 Python 3.8 或 3.10 在 /usr/local/bin,可能会和系统路径冲突。
建议:升级前把所有自定义 Python 环境打包备份,升级后重新编译或重装。
坑点二:Firewall 规则丢失
AlmaLinux 9 换了新的 firewalld 配置方式,虽然兼容旧规则,但有些自定义的 direct rules(直接 iptables 规则)可能会失效。
升级后检查:
sudo firewall-cmd --list-all
sudo grep -r "direct" /etc/firewalld/
如果有重要的 direct 规则,手动迁移一下。
坑点三:OpenSSH 配置安全加固
AlmaLinux 9 默认禁用了 SSH 的 root 登录和密码登录,只允许密钥登录。如果你之前习惯密码登录,升级后可能直接登不上去。
升级前先在 /etc/ssh/sshd_config 里确认:
PermitRootLogin yes
PasswordAuthentication yes
(当然,生产环境建议还是用密钥登录,安全第一。)
坑点四:第三方仓库不兼容
比如 CentOS 7 时代流行的 rpmfusion、artix 等,很多在 EL9 下还没有移植。如果你依赖这些源的软件,得提前找替代品,或者等社区跟进。
给小朋友也能听懂的总结
想象一下,你要把整个教室(你的服务器)从小学(AlmaLinux 8)升级到初中(AlmaLinux 9)。
- 整理书包:把你的课本(数据)、文具(配置文件)都拍照存档,万一弄丢了还能找回来。
- 检查书包里有没有坏掉的东西:有些旧玩具(不支持的包)初中不让带,得提前扔掉或换新的。
- 坐校车去新学校:这个过程不能中途下车(强制关机),不然你就迷路了。
- 到了新学校,先看看教室变没变:桌椅(服务)是不是还在原位,黑板(系统工具)好不好用。
- 适应新规则:初中的规矩更严了(SELinux、SSH 策略),你得重新学习怎么开门、怎么借书(配置应用)。
最后一点贴心话
升级 AlmaLinux 8 到 9,整体来说比从 CentOS 7 到 8 要顺滑得多,因为大版本跨度小,技术栈变化相对温和。但“平滑”不代表“无脑”。永远不要在生产环境直接升级,先在测试机或虚拟机上演练一遍。
如果你实在怕麻烦,或者服务器上的应用乱七八糟、依赖复杂,我真心建议:备份好数据,装一台新的 AlmaLinux 9 机器,把应用迁移过去。 这往往比升级一个满是补丁的旧系统更省时、更稳定。
毕竟,服务器的稳定运行,才是我们真正关心的事,对吧?
