EC2 ubuntu でパッケージのアップデートを行うコマンドのメモ

# この記事は何？
セキュリティ対応のため AWS EC2 (ubuntu) サーバーのパッケージをアップデートした時のメモです。

:::note warn
OS バージョンのアップデートについての記事ではありません！
:::

# 手順
## 1. バックアップ作成

まず、EC2インスタンスのバックアップ（AMI）を作成します。これにより、何か問題が発生した場合に、システムを以前の状態に復元できます。

1. AWS Management Consoleにログインし、EC2ダッシュボードに移動します。
2. バックアップしたいインスタンスを選択します。
3. 「アクション」→「イメージとテンプレート」→「イメージを作成」を選択します。
4. 以下の情報を入力します：
   - イメージ名
   - イメージの説明
   - 「インスタンスを再起動」オプション設定
     - **このオプションを有効にすると、バックアップ作成中にサーバーが停止します。停止したくない場合はチェックを外しておきます。**
5. 「イメージを作成」ボタンをクリックします。

作成には少し時間がかかります。EC2ダッシュボードの「AMI」セクションで、ステータスが「利用可能」になったことを確認してください。

また、「スナップショット」セクションにも新しいエントリが追加されているはずです。両方のリソースに対して、**Nameタグ**を設定しておくと、後で識別しやすくなります。

## 2. システムアップデート

バックアップが完了したら、システムのアップデートを行います。

1. EC2インスタンスにSSH接続します

2. 現在のカーネルバージョンを確認します

   ```bash
   uname -a
   ```
   出力例
   ```
   Linux ip-10-1-2-23 5.15.0-1019-aws ...
   ```
   
3. rootユーザーに切り替えます

   ```bash
   sudo su -
   ```

4. パッケージリストを更新し、システムをアップグレードします

   ```bash
   apt update
   apt upgrade
   ```

   **解説**: 
   - `apt update`: パッケージリストを最新の状態に更新します。これにより、利用可能な最新のソフトウェアバージョン情報を取得します。
   - `apt upgrade`: 実際にインストールされているパッケージを最新バージョンにアップグレードします。セキュリティパッチや機能改善が適用されます。

    :::note warn
    このプロセスは時間がかかることがあります。途中でピンク色の画面（ncursesベースのダイアログ）が表示されることがありますが、問題ありません。「OK」を選択して進めてください。

5. アップグレードが完了したら、システムを再起動します

   ```bash
   reboot
   ```

## 3. 古いカーネルイメージの削除

システムアップデート後、不要になった古いカーネルイメージを削除して、ディスク容量を節約します。

1. 再びrootユーザーに切り替えます

   ```bash
   sudo su -
   ```

2. 不要なパッケージを自動削除します

   ```bash
   apt autoremove
   ```

   **解説**: `apt autoremove` は、他のパッケージに依存されていない不要なパッケージを自動的に削除します。これにより、システムがクリーンに保たれ、ディスク容量を節約できます。

3. 現在のカーネルバージョンを確認します

   ```bash
   uname -a
   ```

   出力例
   ```
   Linux ip-10-1-2-23 6.5.0-1024-aws ...
   ```


4. インストールされているすべてのカーネルイメージを確認します

   ```bash
   dpkg --list | grep linux-image
   ```
   出力例
   ```
   ii  linux-image-5.15.0-1011-aws       5.15.0-1011.14 ...
   rc  linux-image-5.15.0-1017-aws       5.15.0-1017.21 ...
   ii  linux-image-5.15.0-1019-aws       5.15.0-1019.23 ...
   ii  linux-image-6.5.0-1024-aws        6.5.0-1024.24~22.04.1 ...
   ii  linux-image-aws                   6.5.0.1024.24~22.04.1 ...
   ```

   **解説**: このコマンドは2つの部分から成ります
   - `dpkg --list`: インストールされているすべてのパッケージをリスト表示します。
   - `grep linux-image`: 出力から "linux-image" を含む行のみをフィルタリングします。
   
   これにより、システムにインストールされているすべてのLinuxカーネルイメージを確認できます。

5. 古いカーネルイメージを削除します

   ```bash
   apt-get remove --purge linux-image-5.15.0-1011-aws
   apt-get remove --purge linux-image-5.15.0-1017-aws
   apt-get remove --purge linux-image-5.15.0-1019-aws
   ```

   **解説**: `apt-get remove --purge` コマンドは、指定したパッケージを完全に削除します。`--purge` オプションは、パッケージの設定ファイルも含めて完全に削除することを指示します。これにより、古いカーネルイメージが完全にシステムから削除されます。

6. 再度、不要なパッケージを削除し、GRUBを更新します

   ```bash
   apt-get autoremove
   update-grub
   ```

   **解説**: 
   - `apt-get autoremove`: 再度不要なパッケージを削除します。カーネル削除後に依存関係がなくなったパッケージも削除されます。
   - `update-grub`: GRUBブートローダーの設定を更新します。これにより、ブートメニューから削除したカーネルのエントリが取り除かれます。

7. 正しく削除されたことを確認します：

   ```bash
   dpkg --list | grep linux-image
   ```

   **解説**: このコマンドを再度実行することで、古いカーネルイメージが正しく削除され、最新のカーネルイメージのみが残っていることを確認できます。

   出力例
   ```
   ii  linux-image-6.5.0-1024-aws        6.5.0-1024.24~22.04.1 ...
   ii  linux-image-aws                   6.5.0.1024.24~22.04.1 ...
   ```

8. 最後に、システムを再起動して問題がないことを確認します

   ```bash
   reboot
   ```

## 4. 動作確認

すべての更新と再起動が完了したら、稼働させているアプリケーションが正常に動作することを確認します。
問題が発見された場合は、直ちにトラブルシューティングを行うか、必要に応じて作成したAMIバックアップを使用してシステムを復元することができます。

## まとめ

メンテナンスは結構大変ですね...
もし間違いなどあればお知らせください。