CentOS 7はすでにサポートが終了しており、セキュリティ更新が提供されません。とはいえ、社内で長く動いているサーバーをまるごと作り直すのは簡単ではなく、「動いているものをそのまま新しいOSに上げたい」という場面は多いはずです。本記事では、AlmaLinuxが提供するELevate(leapp)を使って、CentOS 7をAlmaLinux 10までインプレースアップグレードする手順を解説します。よく混同されるalmalinux-deployとの違いにも触れます。
1. なぜAlmaLinuxへ移行するのか
1.1 CentOS 7を使い続けるリスク
CentOS 7はサポートが終了しているため、新たに脆弱性が見つかっても修正パッケージは提供されません。インターネットに面したサーバーはもちろん、社内サーバーであっても、監査やセキュリティ基準の観点で「サポート切れOSの継続利用」は指摘対象になります。
1.2 移行先としてのAlmaLinux
RHEL系の移行先としてはAlmaLinuxとRocky Linuxが代表的ですが、企業での採用はAlmaLinuxが優勢です。AlmaLinux OS Foundationという非営利財団による運営、OpenELAへの参加によるソース確保、そしてサイバートラスト社のMIRACLE LINUXとの統合により「無償ならAlmaLinux、商用サポートが必要ならMIRACLE LINUX」という選択肢が成立していることが理由として挙げられます。
2. 移行方式を選ぶ:ELevateとalmalinux-deployの違い
ここが最初のつまずきポイントです。AlmaLinuxへの移行ツールは2種類あり、用途がまったく違います。
| ツール | 用途 | CentOS 7 |
|---|---|---|
almalinux-deploy | 同じメジャーバージョン間の乗り換え(例:Rocky Linux 9 → AlmaLinux 9) | 非対応 |
ELevate(leapp) | メジャーバージョンをまたぐインプレースアップグレード | 対応 |
almalinux-deployがサポートするのはCentOS Linux 8.4以降、CentOS Stream 8/9/10、Rocky Linux 8/9/10、Oracle Linux 8/9/10などで、CentOS 7は対象外です。「CentOS 7にalmalinux-deployを実行する」という手順を紹介している記事も見かけますが、これは誤りなので注意してください。
CentOS 7からの移行に使うのはELevateです。ELevateはRed Hatのleappユーティリティをベースに、RHEL派生ディストリビューション間のメジャーバージョンアップグレードを可能にするプロジェクトです。
そしてもう一点重要なのが、EL7からEL10へは一気に上げられないということです。AlmaLinux 10まで到達するには、次の3段階を順に実施します。
- CentOS 7 → AlmaLinux 8
- AlmaLinux 8 → AlmaLinux 9
- AlmaLinux 9 → AlmaLinux 10

3. 移行前に必ず準備すること
インプレースアップグレードは失敗すると起動しなくなる可能性がある作業です。以下は省略しないでください。
- スナップショット/フルバックアップの取得:仮想環境ならスナップショット、物理環境ならフルバックアップを取ります。切り戻せる状態を必ず作ってから着手します。
- 物理コンソールまたはIPMI等の確保:SSHセッションが切れると復旧できなくなります。ELevate公式も「接続が中断されないコンソールセッションから実行すること」と明記しています。
- 検証環境での事前実行:同じ構成のクローンを作り、本番前に一度通してください。導入しているミドルウェアによって発生するinhibitor(アップグレード阻害要因)は環境ごとに異なります。
- サードパーティリポジトリの棚卸し:EPEL、Docker CE、nginx、PostgreSQL、MariaDBなどはELevateが対応していますが、独自リポジトリを使っている場合は個別確認が必要です。
4. ステージ1:CentOS 7からAlmaLinux 8へ
各ステージでやることは共通しています。ELevateのリポジトリを追加してleappを入れ、leapp preupgradeで指摘を洗い出し、それを解消してからleapp upgradeを実行する、という流れです。

4.1 CentOS 7リポジトリの差し替え
CentOS 7の公式リポジトリはすでに停止しているため、そのままではyumが動きません。AlmaLinuxが提供するミラーに差し替えてから、いったん最新化して再起動します。
# 停止済みのCentOS 7リポジトリをAlmaLinux提供のミラーに差し替える
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://el7.repo.almalinux.org/centos/CentOS-Base.repo
# 現行バージョン内で最新化してから再起動する
sudo yum upgrade -y
sudo reboot
4.2 leappのインストール
ELevateのリポジトリを追加し、leapp本体とAlmaLinux用の移行データを入れます。rpm --eval %rhelで現在のメジャーバージョンが埋まるので、3段階すべてで同じコマンドが使えます。
# ELevateリポジトリを追加(%rhel には現在のメジャーバージョンが入る)
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
# leapp本体とAlmaLinux用の移行データを導入
sudo yum install -y leapp-upgrade leapp-data-almalinux
4.3 事前チェックと修正
leapp preupgradeで、アップグレードを阻害する要因を洗い出します。初回は失敗するのが普通です。出力された内容を/var/log/leapp/leapp-report.txtで確認し、1つずつ潰していきます。
# アップグレード可否を事前チェックする(この時点では何も変更されない)
sudo leapp preupgrade
# 指摘内容の詳細を確認する
sudo cat /var/log/leapp/leapp-report.txt
CentOS 7でよく出る指摘への対処は次のとおりです。root SSHログインの許可は移行完了後に必ず元へ戻してください。
# 非対応カーネルモジュールをアンロードする
sudo rmmod pata_acpi
# アップグレード中の復旧手段としてrootログインを一時的に許可する
echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config
# pam_pkcs11モジュール削除の確認に回答する
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True
4.4 アップグレードの実行と確認
preupgradeが通ったら本実行です。再起動後、システムは「ELevate-Upgrade-Initramfs」で自動的に起動し、パッケージの入れ替えが進みます。完了までは環境によっては数十分かかります。
# アップグレードを実行し、再起動して適用する
sudo leapp upgrade
sudo reboot
起動してきたら、バージョンとel7パッケージの残骸を確認します。
# AlmaLinux 8になっているか確認する
cat /etc/redhat-release
# 取り残されたel7パッケージがないか確認する
rpm -qa | grep el7
5. ステージ2:AlmaLinux 8からAlmaLinux 9へ
EL7から上げてきた場合のみ、次の段階に進む前に後片付けが必要です。/etc/yum.confと/etc/dnf/dnf.confのexclude=行に、elevateやleapp関連の記述が残っていたら削除します。
そのうえで、残っているel7パッケージを削除し、leappの作業ディレクトリをクリアします。
# 残存しているel7パッケージを確認して個別に削除する
rpm -qa | grep el7
sudo rpm -e --nodeps <パッケージ名>
# キャッシュとleappの作業ディレクトリをクリアする
sudo dnf clean all
sudo rm -fr /root/tmp_leapp_py3
あとはステージ1と同じ流れです。leappを導入し、preupgradeで指摘を潰してからupgradeします。
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
sudo yum install -y leapp-upgrade leapp-data-almalinux
sudo leapp preupgrade
RHEL 8ベースのシステムでよく出る指摘への対処は次の2つです。
# firewalldの非推奨設定を無効化する
sudo sed -i "s/^AllowZoneDrifting=.*/AllowZoneDrifting=no/" /etc/firewalld/firewalld.conf
# VDOチェックの確認に回答する
sudo leapp answer --section check_vdo.confirm=True
sudo leapp upgrade
sudo reboot
6. ステージ3:AlmaLinux 9からAlmaLinux 10へ
ステージ2と同様に、まずel8パッケージの後片付けを行います。
# 残存しているel8パッケージを確認して削除する
rpm -qa | grep el8
sudo rpm -e --nodeps <パッケージ名>
sudo dnf clean all
sudo rm -fr /root/tmp_leapp_py3
以降の手順は同じです。EL9からEL10へのアップグレードは比較的スムーズに進むとされています。
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
sudo yum install -y leapp-upgrade leapp-data-almalinux
sudo leapp preupgrade
sudo leapp upgrade
sudo reboot
7. つまずきやすいポイントと対処
CentOS 7から段階的に上げてきた環境では、ステージ3で以下の問題が出ることがあります。
「Deprecated DHCP plugin configured」でブロックされる場合は、NetworkManagerの設定をdhclientから移行します。
# 接続設定を新形式へ移行し、DHCPタイムアウトを設定する
sudo nmcli conn migrate
sudo nmcli connection modify <接続名> ipv4.dhcp-timeout 30 ipv6.dhcp-timeout 30
# 非推奨のdhclientプラグイン指定を削除する
sudo sed -i'.bak' 's/^dhcp=dhclient//g' /usr/lib/NetworkManager/conf.d/10-dhcp-dhclient.conf
sudo systemctl restart NetworkManager
dracutモジュール関連のエラーが出る場合は、EL7時代の設定ファイルが残っていることが原因です。
# 旧世代のネットワーク設定を削除する
sudo rm -f /etc/dracut.conf.d/50-network-legacy.conf
また、シリアルコンソールで作業している場合は、/etc/default/grubの出力先設定を確認しておくと、再起動後に画面が見えなくなる事故を防げます。
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=ttyS0,115200 console=tty0"
8. まとめ
CentOS 7からAlmaLinux 10への移行は、almalinux-deployではなくELevate(leapp)で3段階というのが要点です。
almalinux-deployはCentOS 7非対応。使うのはELevate- EL7 → EL8 → EL9 → EL10と段階を踏む
- 各段階で
leapp preupgradeが失敗するのは想定内。レポートを見て潰す - 段階の合間に、前バージョンの残存パッケージを削除する
- バックアップと中断されないコンソールは必須
なお、本記事の手順はAlmaLinux公式Wikiの「ELevating CentOS7 to AlmaLinux 10」に基づいています。実際に発生するinhibitorは導入しているミドルウェアによって変わるため、必ず検証環境で一度通してから本番に適用してください。
移行が完了したら、新しい環境の整備に進みましょう。AlmaLinux上でのDocker環境構築についてはAlmaLinuxにDockerとDocker Composeをインストールする方法で、社内向けドキュメント基盤の構築についてはBookStackをAlmaLinux 9.4にインストールする手順で解説しています。サポート切れのOSを卒業し、安心して運用できる環境を整えていきましょう。


コメント