AWS EC2でCentOS 6からCentOS 7へアップグレードする際の注意点
「CentOS Upgrade Tool」というツールを使用して、CentOS 6をCentOS 7にアップグレードすることができます。
・CentOS Upgrade Tool – CentOS
https://wiki.centos.org/TipsAndTricks/CentOSUpgradeTool
ここでは、AWS EC2で稼働するCentOS 6をアップグレードするときの注意点についてまとめます。
動作確認に使用したAMIは、CentOS.orgが提供するCentOS 6のうち、2018年3月時点で最新の「CentOS 6 (x86_64) – with Updates HVM(ami-88b923ee)」です。
CentOS 6のバージョンは、6.9です。
アップグレード手順
アップグレードの手順は、以下の記事がとてもわかりやすいので、そちらを参照してください。
・CentOS6.9を7.3にアップグレード – Akashic Records
http://a-records.info/2017/08/12/56/
大まかな手順は次のとおりです。
- アップグレードツールのインストール
- アップグレード検証ツール(preupg)の実行
- 検証結果に従って対処
- アップグレードツール(redhat-upgrade-tool)の実行
- OSの再起動
- アップグレード後の確認、設定
検証結果は /root/preupgrade/result.html に出力されるので、ひととおり目を通しましょう。
とくに、「needs_action」と提示された項目は、しっかり対処します。
何か不具合があれば、サーバーにアクセスできなくなる可能性もあるので、作業前にスナップショットを作成しておきます。
スナップショットさえあれば、何度でもテスト、リカバリーができます。
AWS EC2でアップグレードする際の注意点
アップグレードツールの実行後、OSを再起動することで、サーバーがCentOS 7として起動してきます。
このとき、デフォルトではsshdが起動していないので、SSHログインができません。
コンソールにアクセスできれば、rootユーザーでログインしてsshdを起動すればよいのですが、残念ながら、AWS EC2には、他社VPSやクラウドサービスにあるようなコンソール機能は用意されていません。
つまり、このままだとサーバーへのSSHログイン、操作ができなくなってしまいます。
この問題の対処として、一連のアップグレード作業の中で、アップグレードツールを実行後、OSを再起動する前に、「OS起動時にsshdを起動する」設定を行います。
また、念のため、/etc/rc.d/rc.local に実行権限を付与します。
# vi /etc/rc.d/rc.local -- 末尾に追記 ... systemctl enable sshd && systemctl start sshd.service -- # chmod +x /etc/rc.d/rc.local
ちなみにAWS EC2は、SSMエージェントをインストール、設定すれば「EC2 Run Command」を利用して、AWSマネジメントコンソールから任意のLinuxコマンドを実行できます。
(参考)
・【新機能】EC2に任意のコマンドを実行できるボタン「Run Command」がついにLinuxにも追加 – Developers.IO
https://dev.classmethod.jp/cloud/aws/introduce-to-run-a-command-button-for-linux/
「CentOS 7にアップデートしたあと、この機能を使ってAWSマネジメントコンソールからsshdを起動すればよいのでは?」と思いつき、試してみましたが、この場合も、アップデート後にSSMエージェントが起動していないので、「EC2 Run Command」によるコマンド実行はできません。
やはり、アップグレード前に、「OS起動時にSSMエージェントを起動する」設定が必要です。
sshdとSSMエージェントの両方の起動設定を行っておくと、より安心ですね。
# vi /etc/rc.d/rc.local -- 末尾に追記 ... systemctl enable sshd && systemctl start sshd.service systemctl enable amazon-ssm-agent && systemctl start amazon-ssm-agent --
アップグレードツールを使用するかどうか
CentOSのアップグレードツールですが、公式ページでも、以下のように「DO NOT USE this tool.」と、非推奨となっています。
DO NOT USE this tool. Warning: use of this tool is currently BROKEN as several system-critical packages are of a higher version number in CentOS 6.7 than they are in CentOS 7 so those do not get upgraded correctly. This renders yum and several other system tools non-functional.
CentOS 6.7以上だと、ソフトウェアパッケージによっては、CentOS 7の同パッケージよりもよりもバージョンが上のものがあるため、正しくアップデートされないことがある、という感じでしょうか。
僕が試してみても、アップデートされないソフトウェアパッケージがありました。
また、アップグレードツールは、CentOSリポジトリのパッケージをアップデート対象とするため、EPELやRemiなど、サードパーティリポジトリのパッケージはアップデートしません。
これらのパッケージは、rpmコマンドで検索してCentOS 6用パッケージをリストアップし、いったんアンインストールしてから、CentOS 7用パッケージを再インストールする必要があります。
# rpm -qa | grep el6 # yum remove <package> # yum install <package>
この、手作業でCentOS 6用パッケージを削除~CentOS 7用パッケージを再インストールするのが、依存関係もあるおかげでかなり苦労しました。
この部分はサーバー構築のスキルが要求されるところですね。
ですので、本当は、アップグレードツールを使用するのではなく、新しくCentOS 7インスタンスを作成して、必要なソフトウェアパッケージを追加インストール、設定して、CentOS 6サーバーからデータ移行するのが安全でしょう。
何らかの理由で、同じサーバーインスタンスのままCentOS 7にアップグレードしなければならないときに、「アップグレードツールを使用する」という選択肢があることを覚えておくとよいと思います。
まとめ
AWS EC2環境で、アップグレードツールを使用してCentOSをアップグレードするときの注意点を記載しました。
CentOS 6のサポート期限は、2020年11月30日です。
(参考)
・CentOS End-of-support schedule – Wikipedia
https://en.wikipedia.org/wiki/CentOS#End-of-support_schedule
2018年時点ではまだちょっと早いかもしれませんが、サーバー管理者は、サーバーの移行、アップグレードの方針や時期を意識する必要があるでしょう。