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です。

isdアップグレード手順

アップグレードの手順は、以下の記事がとてもわかりやすいので、そちらを参照してください。

・CentOS6.9を7.3にアップグレード – Akashic Records
http://a-records.info/2017/08/12/56/

大まかな手順は次のとおりです。

  1. アップグレードツールのインストール
  2. アップグレード検証ツール(preupg)の実行
  3. 検証結果に従って対処
  4. アップグレードツール(redhat-upgrade-tool)の実行
  5. OSの再起動
  6. アップグレード後の確認、設定

検証結果は /root/preupgrade/result.html に出力されるので、ひととおり目を通しましょう。
とくに、「needs_action」と提示された項目は、しっかり対処します。

何か不具合があれば、サーバーにアクセスできなくなる可能性もあるので、作業前にスナップショットを作成しておきます。
スナップショットさえあれば、何度でもテスト、リカバリーができます。

isdAWS 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
--

 

isdアップグレードツールを使用するかどうか

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にアップグレードしなければならないときに、「アップグレードツールを使用する」という選択肢があることを覚えておくとよいと思います。

isdまとめ

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年時点ではまだちょっと早いかもしれませんが、サーバー管理者は、サーバーの移行、アップグレードの方針や時期を意識する必要があるでしょう。
 

Follow me!