kdump サービス起動失敗の対処 "kexec_file_load failed: Required key not available"


## RHEL8へのインプレースアップグレードで、サービス起動エラー
RHEL7.8->8.2のleappを使ったインプレースアップグレードを実行した後、
サービスを確認したところ、以下2つのサービスが”Failed”。

- Postgresql
- kdump

---

### PostgreSQLのエラー対処
PostgreSQLについては、OSアップグレードの中でバージョンアップしており、サービス起動時に（Postgreesの）アップグレードユーティリティを実行しようとして、インストールされていなかった事による起動失敗だったので、`postgresql-upgrade`をインストール、アップグレードして、サービス正常起動。

```
# yum install postgresql-upgrade
```
```
# postgresql-setup --upgrade
```

---

### kdumpのエラー対処
kdumpについては以下のエラーでサービス起動失敗している

```
# systemctl status kdump
:
* kdump.service loaded failed failed Crash recovery kernel arming
* kdump.service - Crash recovery kernel arming
  Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
 Process: 25875 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILURE)
localhost.localdomain dracut[27907]: *** Creating initramfs image file '/boot/initramfs-3.10.0-957.el7.x86_64kdump.img' done ***
localhost.localdomain kdumpctl[25875]: Secure Boot is enabled. Using kexec file based syscall.
localhost.localdomain kdumpctl[25875]: kexec_file_load failed: Required key not available
localhost.localdomain kdumpctl[25875]: kexec: failed to load kdump kernel
localhost.localdomain kdumpctl[25875]: Starting kdump: [FAILED]
localhost.localdomain systemd[1]: kdump.service: main process exited, code=exited, status=1/FAILURE
localhost.localdomain systemd[1]: Unit kdump.service entered failed state.
localhost.localdomain systemd[1]: kdump.service failed.
```
アップグレードでセキュアブートが有効となったが、UEFIの鍵データベースに必要なキーが存在しないことによる起動失敗と推測。  

```
localhost.localdomain kdumpctl[25875]: kexec_file_load failed: Required key not available
```

RHEL7の現象についてだが、以下のKBのワークアラウンドを参考にしてみる。
[kdump service fails with message "kexec_file_load failed: Required key not available"](https://access.redhat.com/solutions/3683241)

1. キーのインポート
 
    ```
    # mokutil --import /usr/share/doc/kernel-keys/<kernel-ver>/kernel-signing-ca.cer
    input password:
    input password again:
    ```
    パスワードを求められるので、適当なパスワードを決めて入力する  
参考：  [RHEL8  カーネルの管理、監視、および更新](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/signing-kernel-modules-for-secure-boot_managing-kernel-modules)

2. 再起動

    ```
    # reboot
    ```

3. 直後、青い画面（Shim UEFI鍵管理コンソール）が表示されるので、キーボードでなんらかのキーを押す。
![shim_console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566760/73f5cc48-61fc-30fe-7cde-37b2c8352f47.png)
Shim UEFI鍵管理コンソール
    > ここでキーを時間内に押さないと通常のブートが始まってしまう。

4. [Perform MOK management]画面で、[Enroll MOK]を選択。
5. [Enroll the key(s)?]画面で[Yes]を選択してから、上記で設定したパスワードを入力。
6. [The system must now be rebooted]画面で[OK]を選択後、再起動。
7. OS起動後、サービスの状態確認
8. 
    ```
    # systemctl status kdump
    ● kdump.service - Crash recovery kernel arming
    Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
    Active: active (exited) since Thu 2020-08-20 14:03:57 JST; 22min ago
    Main PID: 2069 (code=exited, status=0/SUCCESS)
        Tasks: 0 (limit: 100065)
    Memory: 0B
    CGroup: /system.slice/kdump.service

    8月 20 14:03:55 athena01 systemd[1]: Starting Crash recovery kernel arming...
    8月 20 14:03:56 athena01 kdumpctl[2069]: Secure Boot is enabled. Using kexec file based syscall.
    8月 20 14:03:57 athena01 kdumpctl[2069]: kexec: loaded kdump kernel
    8月 20 14:03:57 athena01 kdumpctl[2069]: Starting kdump: [OK]
    8月 20 14:03:57 athena01 systemd[1]: Started Crash recovery kernel arming.
    ```

kdumpの起動確認。