5月5日に実施したMastodonサーバを最後に、当方で管理していたCentOSサーバ5台全てをAlmaLinuxへ移行しました。
Geminiの全面的バックアップを受けながら足かけおよそ2ヶ月に及んだ移行を振り返ります。
<CentOSからの移行先探し>
本格的に動き出したのは3月6日頃。
まずはCentOSからの移行先を探すところから始まりました。
要件としては
- CentOS 7との互換性が高いこと
- CentOS 7からの移行が容易であること
- OS自体のアップデート周期が長いこと(いわゆるLTS)
- 完全無料で移行障壁が少ないこと
としてリサーチ要求を投げたところ、「Elevateプロジェクトを使ってAlmaLinux10へ移行するのがベスト」との回答が得られました。
<内部用VPNサーバから開始:メモリ1GBという極限状況での挑戦>
今回の移行に当たっては、影響範囲の小さいところで先に実施して感触を掴んでから、大きな所を目指すこととしました。
その中で一番影響範囲が小さいのが、自分しか使っていないVPNサーバ。
このサーバはCentOS7→AlmaLinux8→AlmaLinux9と順を追って移行していきました。
3月15日に作業を開始しましたが、いろいろなところで止まりました。主立ったものとしては
- メモリ1GBの環境のためエラーを吐く
→環境変数で無視させようとしてもそれを無視してしまったため、メモリ容量のチェックプログラムを強制削除して対応した
- 8→9移行時にネットワーク設定でエラーを吐く
→7→8移行時と同様の対応をしてもダメだったので、チェックプログラムを強制削除して対応した
…といったこともありながら、まずは1台AlmaLinux9まで移行が完了しました。
<メールサーバ:キメラ状態に陥り最終的には再構築する羽目に>
続いて2番目に影響範囲が小さいメールサーバに着手しました。
3月20日に作業を開始。VPNサーバと同様、メモリ1GBの中での作業という厳しい状況。
それに加えてディスクの空き容量にも余裕がなく、急遽用意したNFS(サーバに接続できる外付けドライブのようなもの)を含め、空けようにも空かない状態の中AlmaLinux8への移行を強行。
その結果、最初の再起動後のOS書き換え時に途中でストップ。この時点でSSH接続ができなかったため、コピペできないコンソール画面との戦いに陥りました。
その後再起動すると正常に起動したかのように思われましたが、アップデート用のコマンドをたたくとエラーが返ってくる事態に。
どうもCentOS7の中身でAlmaLinux8と主張するキメラ状態に陥ってしまっていたようです。
手作業で書き換えが上手くいかなかったファイルを書き換えて何とかAlmaLinux8が立ち上がるようになりました。
この勢いでAlmaLinux9への移行も行いましたが、またしても8系と9系のキメラ状態に。
こうなってはらちがあかないので、まず9系のファイルを8系に無理矢理戻して、まずは8系が起動するところまで戻しました。
そこから9系への移行を再度試行したもののまたしてもキメラ状態に。
Geminiも「これ以上あがくのは危険だから、クリーンインストールした方が早い」とさじを投げる結果となりました。
そしてクリーンインストールしたあとからも大変で、
- バックアップしたメールのデータがおかしい
- そもそもメールの送受信すらままならない
- ウイルススキャンの仕組みが動いていない
- DKIMによるメールの電子署名が動いていない
- LDAPでアカウントを管理しているが、そのアカウント管理のツールが動かない
- Webメールのソフトを2つ入れていたがどちらも動かない
…という「動かない」オンパレードに陥ってしまいました。
実に5日間(この間に平日があったので日常業務をこなしながら)かけて復旧に至りました。
<メインサーバ:大量のレガシーPHPコードと共に>
ここからは一般向けサービスを提供しているサーバの作業となるため、事前に告知を出して挑みました。
ここまでの経験上、特にメールサーバであったような不整合が発生した場合の対応と、もし無理だと判断した場合の切り戻しを考慮して、メンテナンスウインドウを12時間に設定しました(以降も同じ)。
このサーバには数多くのサイトが載っていて、その大半がPHPで動いています。
開発時期がバラバラと言うこともあり、古いバージョンを含む複数バージョンのPHPが並列で動いていたのです。
このうち7.x系がAlmaLinux9では動かないとのことだったので、このサーバについては8系にとどめることとしました。
実は今回の移行前調査までは5.x系といういわば骨董品まで入っていましたが、調査したところ使っているところがなかったので先に削除しました。
メールサーバでの経験から事前にいろいろな設定をした上で移行作業を開始したところ、アップデート時にブートローダの設定書き換えに失敗して起動しなくなるという深刻な不具合が発生。
ブートローダ側はUSキーボードとして認識している一方でこちらはJPキーボードであるが故に、なんと半角の閉じ括弧)が入らないという事態に。
幸いTAB補完で何とか進めることができました。
正しく起動できるようになってからも、
- MariaDBのバージョン衝突が起こった
- データベースの管理プログラムがなぜか消えていた
…といったトラブルに見舞われましたが、Geminiの的確なコマンド出力により解決しました。
その結果12時間確保していたウインドウの内、5時間で作業を完遂することができました。
とはいってもその後一般利用者向けには影響のない範囲での不具合修正を行ったので、全作業が終わったのはその数時間後のことでした。
<サブサーバ:Javaのバージョンに悩まされ>
サブサーバの構成としてはこうなっています。
- NHK番組bot:WebサイトとMastodon投稿プログラムを1つのJavaプログラムとしている
- sw_jjy:WebサイトはPHPでMastodon投稿プログラムはJava
メインサーバと違ってブートローダも問題なく更新されました。
一方で、先ほど触れたとおりこのサーバではJavaプログラムが動いています。
そのプログラムは、サーバ起動時に立ち上がるように設定していたのですが、移行後立ち上がってきませんでした。
ログを見ると、「プログラム側のJavaのバージョン」が、「サーバ側のJavaのバージョン」よりも新しくて起動しなかったとのこと。
移行時に先に入れていた新しい方のJavaが消え、システムデフォルトの古いJavaが入ってしまっていたようでした。
また、Javaプログラムでは、MariaDB上でのシーケンス管理に専用テーブルを用いていましたが、MariaDBのアップデートで上手く動かなくなっていました。アップデートでシーケンス管理専用の機構が導入されたのでそれにあわせるようにして対応しました。
最終的には約5時間で移行作業を完了することができました。
<Mastodonサーバ:最後に控えた強敵>
着手の前日何したら良いかGeminiに聞いたところ、「メディアファイルのバックアップ」が提案されました。
確かに
- サーバのフルバックアップ→週1回取得。今回の移行前にも取得予定
- データベースのバックアップ→毎日1回(未明帯)取得。今回の移行前にも取得予定
はありましたが、メディアファイルについては抜け落ちていました。
最初はそのままGoogle Driveに送り込んでいましたが、1つ1MBもないファイルが数万あったのもあり、とてつもない時間がかかっていました。
そこで提案されたのがresticというもので、複数のファイルを1つの大きなファイルにまとめて転送することにより、Google Driveとの通信回数を減らすことができたのです。
事前調査でブートローダ領域が非常に小さいというエラーが出ました。
しかしながらこの領域は今から拡大することができない状態。
様々な環境変数を山盛りにしてチェックをスキップさせようとしても聞く耳を持たず。
やむを得ずこちらもクリーンインストールとなりました。
サーバ・データベース・メディアに加え共通の設定もバックアップしてクリーンインストール。
数百にも及ぶパッケージのインストールとMastodonの重量級ビルド、そしてバックアップの戻しを行い、一般利用者向けに影響のある部分については15時までに終了。
その後裏側部分の修正を行い、夜までには全ての作業を完了しました。
<AlmaLinux10への移行断念>
今回、当初はAlmaLinux10へ移行しようと考えていたのですが、今回は断念せざるを得ませんでした。
AlmaLinux10以降だと、現状のファイルシステムが認識できなくなり、それに対応するためにはフォーマット(=全データの消去)が必要となってしまうため、実質再構築と同様の手間が発生することから、今回は断念しました。
<バックアップシステムの見直し>
各サーバとも週に1回(未明帯)フルバックアップを取っています。
今回の移行前までは以下のサーバを経由してGoogle Driveにバックアップを取る形としていました。
- サブサーバ以外:サブサーバ経由
- サブサーバ:メインサーバ経由
一旦別サーバ経由にしているのは、バックアッププログラムがGoogle Driveに対応していないからで、対応しているファイル共有の仕組みを使うためです。
ここまで出てきたサーバは、メールサーバ以外さくらのVPSで動いていて、インターネットを介さないローカル接続を行っていました。
ところがそれでもデータの滞留が発生し上手くバックアップが取れないこともありました。
そこで白羽の矢が立ったのが、「KAGOYA CLOUD VPS」。
さくらのVPSと比較すると、KAGOYAの方がよいという結論に至りました。
- インターネット速度:(実測データは2026/05/06の16時少し前に測定)
- さくらのVPS:100Mbps共有回線
実測:ダウンロード95.57 Mbps/アップロード96.79 Mbps
- KAGOYA:1Gbps(=1000Mbps)共有回線
実測:ダウンロード226.92 Mbps/アップロード238.27 Mbps
- 価格:
- さくらのVPS:4コア/メモリ4GB/SSD200GB(初期費用追加で400GBにすること可能)で月3520円
※メイン機がほぼこの仕様(400GB増強済 / SSDではなくHDDの古いタイプで、月額料金は少し高い)
- KAGOYA:4コア/メモリ4GB/SSD600GBで月1760円
全サーバのバックアップを無圧縮レベルで詰め込んでも余裕が生まれるかもしれないレベルで大容量のサーバを契約しました。
そのサーバに一度格納した後、Google Driveとの同期を取る形にしました。
その結果、
- さくら側サーバ→KAGOYAサーバ:さくら側サーバ1台に対し最大100Mbpsでの通信が可能で、複数並列で走らせても速度低下は起こりにくい
- KAGOYAサーバ→Google Drive:最大1000Mbpsでの通信が可能で、さくら側よりも高速に処理できる
…という環境を整えることができました。
<共通して行った事項>
- 廃止ドライバのアンロード
sudo modprobe -r floppy pata_acpi
- 廃止PAMモジュール削除への同意回答
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True
- SSH root ログインの許可
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
- 古い名前(eth0,eth1)のNICへの対応
- 環境変数で黙らせようとしたが聞かなかった
- インターネットに繋がっているeth0以外をOSから【隠す】
- AlmaLinux9でSSHが繋がらなくなった
→公開鍵認証に使っていたカギがssh-rsaで9のデフォルトだと強度が低くブロックされていた。閾値を下げて対応した。将来的にはカギを作り直して対応したいが、カギを作り直すといろいろなところを変える必要があって大変…
Mastodonサーバで最初に投入したコマンドをメモしていましたので共有。
# 何度もこれを指摘されたので先にやっておくのがよさそう
sudo yum remove -y kernel-devel
sudo modprobe -r floppy pata_acpi
# NICが複数あってエラーになるので、設定を隔離する
# 作業用のバックアップディレクトリ作成
mkdir /root/network_backup
# eth1 と eth2 の設定ファイルを一時的に避難させる
# (これにより Leapp のスキャン対象から外れます)
sudo mv /etc/sysconfig/network-scripts/ifcfg-eth1 /root/network_backup/
sudo mv /etc/sysconfig/network-scripts/ifcfg-eth2 /root/network_backup/
# eth1 (virtio1) と eth2 (virtio2) をドライバから切り離す
echo "virtio1" | sudo tee /sys/bus/virtio/devices/virtio1/driver/unbind
echo "virtio2" | sudo tee /sys/bus/virtio/devices/virtio2/driver/unbind
# ip a で確認。lo と eth0 だけになっていれば成功です。
ip a
# 1. ELevateリポジトリのインストール
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el7.noarch.rpm
# 2. Leapp本体とAlmaLinux用データのインストール
sudo yum install -y leapp-upgrade leapp-data-almalinux
# ネットワーク系のエラーがいつまでたっても消えないので環境変数で黙らせる
LEAPP_UNSUPPORTED=1 LEAPP_DEVEL_SKIP_NETWORK_INSTABILITY=1 LEAPP_NO_NETWORK_RENAME=1 leapp preupgrade
# 一旦preupgrade実施しないとanswerfileができないので
# PAM PKCS#11 モジュールの削除に関する確認(最も一般的な回答要求)
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True
# これで再実行したらどうだろうか?
LEAPP_UNSUPPORTED=1 LEAPP_DEVEL_SKIP_NETWORK_INSTABILITY=1 LEAPP_NO_NETWORK_RENAME=1 leapp preupgrade
<結びに>
3月6日頃から動き出した移行プロジェクトはこの記事の投稿を持って完結。
長い戦いではありましたが、Geminiに情報を共有するとすぐにコマンドが出てくるというのを存分に生かして進めることができました。
今回の移行後のOSはこんな感じになっています。
- メール:AlmaLinux 9.7 (Moss Jungle Cat) 2032年5月末までサポート
- Mastodon:AlmaLinux 9.7 (Moss Jungle Cat) 2032年5月末までサポート
- VPN:AlmaLinux 9.7 (Moss Jungle Cat) 2032年5月末までサポート
- メイン:AlmaLinux 8.10 (Cerulean Leopard) 2029年5月末までサポート
- サブ:AlmaLinux 8.10 (Cerulean Leopard) 2029年5月末までサポート
少なくともあと3年はこの態勢で動かせるようです。
さて、さくらのVPSでは「ホストサーバー収容機材変更」を順次実施しています。
対象はメールサーバ以外の4台で、
- 3月1日のMastodon
- 3月中旬のVPN
- 4月4日のメインサーバ
…に引き続き、5月下旬(遅くとも26日までに作業可能となる予定)にはサブサーバの対応を実施します。
諸々の条件が許せば、これまでと同様に未明帯に1時間程度のウインドウでメンテナンスを設定する予定です。
決まり次第お知らせします。
これでようやっと予定していたメンテナンスが終わることとなります。