イントロダクション#
Tencent Cloud の軽量サーバーで提供されているイメージの選択肢が限られているため、Rocky Linux 9 のイメージを直接取得することができません。そのため、既存の CentOS Stream 9(以下 CS 9 と略す)システムを手動で移行することにしました。Rocky Linux 公式の移行スクリプトを使用し、以下に遭遇した問題と解決策を示します。
移行#
CS 8 では、公式ガイドに従って進めるだけで問題は発生しませんでした。
スクリプトの取得#
curl https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky9.sh
ネットワークが遅い場合は、stilleshanが提供する GitHub のアクセラレーションサービスを使用できます。
curl https://mirror.ghproxy.com/https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky9.sh
または、まずダウンロードしてからアップロードすることもできます。
スクリプトの実行とインストール#
スクリプトに実行権限を付与します。
chmod +x migrate2rocky.sh
スクリプトを実行します。
./migrate2rocky.sh -r
スクリプトの実行は、screen や tmux を使用して接続が中断されてもシステムがクラッシュしないようにするために検討してください。
遭遇した問題と初歩的な分析#
Rocky Linux 9 の公式移行スクリプトを使用しようとすると、CentOS-Stream-BaseOS.repo
ファイルに関するエラーメッセージが表示され、そのファイルを提供するパッケージが見つからないと指摘されます。
Error: No matches found. ...
Can't get package that provides /etc/yum.repos.d/CentOS-Stream-BaseOS.repo.
調査の結果、CentOS-Stream-BaseOS.repo
の内容は次のようになります。
[baseos]
name=CentOS Stream $releasever - BaseOS
baseurl=http://mirrors.tencentyun.com/$contentdir/$stream/BaseOS/$basearch/os/
また、Tencent Cloud のイメージライブラリには CS 9 の関連するイメージが見つからず、CS 8 のイメージリソースしか見つかりませんでした。これに基づいて、Tencent Cloud はまだ CS 9 のイメージを提供していないか、非標準のイメージパスを使用している可能性があり、これが Rocky スクリプトが必要なパッケージのパスを正しく認識および特定できない原因となっていると推測されます。
解決の過程#
アプローチ#
清華大学の CS 9 ミラーソースを使用し、スクリプトを再試行します。
実行#
- バックアップディレクトリを作成し、
/etc/yum.repos.d/
内のすべてのファイルを/root/backup/
にバックアップします。 - 清華大学ミラーサイトのガイドに従って、ミラーソースに置き換えます。新しい
centos.repo
とcentos-addons.repo
ファイルが得られます。 - パッケージキャッシュをクリーンアップして再構築します。
dnf clean all && dnf makecache
- 再度実行します。
問題#
依存モジュールの問題#
清華大学ミラーサイトの推奨するupdate_mirror.pl
スクリプトを実行してミラーソースのアドレスを更新しようとすると、autodie.pm
モジュールが見つからないというエラーが発生します。dnf
ツールを使用してperl-autodie.noarch
モジュールを検索してインストールすることで、この問題を解決できます。
dnf install perl-autodie.noarch
設定の重複問題#
しかし、dnf
コマンドを実行すると、複数のリポジトリが複数回表示されることがわかりました。これは、Tencent Cloud が CentOS Stream のリポジトリ情報を異なるファイルに分散しているため、置換後も元のソースが残っているためです。この問題を解消するためには、重複した定義を削除する必要があります。私は元のファイルを直接削除しました。注意:この操作は、置換スクリプトを使用して置換を完了した後に実行する必要があります。
rm CentOS-Stream-*.repo
最後に、Rocky Linux の移行スクリプト./migrate2rocky.sh -r
を実行して、CentOS Stream 9 から Rocky Linux 9 への移行を完了します。
その他#
元のファイルを直接削除して、清華大学ミラーサイトのファイルをコピー&ペーストすることもできますが、権限の問題に注意してください。
スクリプトはファイル名の大文字と小文字を要求するようです。スクリプトの実行が失敗した場合は、ファイル名をcentos.repo
とcentos-addons.repo
に変更することを検討してください。