AlmaLinuxでdnfやyumを使うとGPG checkエラーになった

AlmaLinuxでdnfやyumを使うとGPG checkエラーになった

久しぶりのサーバー移行案件が発生。

CentOS7 → AlmaLinux9

とある会社でVPSを契約してみるとAlmaLinux8.5だったので、自分の過去の備忘録記事を見ながらアップグレードすることに。まさにこういう時のために書いたのだよ!

GPG checkエラーの解決策

先に答えを書いてしまおう。

「AlmaLinuxでdnfやyumを使うとGPG checkエラーになった」場合は、下記コマンドでキーを更新すればよろし。これ以下の記事は、何も解決しない蛇足である。が、個人的な記録として残しておくよ。

# rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux

以下蛇足。無駄なメモ。ChatGPTと歩んだ無駄な冒険譚。

念のためSSHでログインしてOSを確認

# tail /etc/redhat-release
AlmaLinux release 8.5 (Arctic Sphynx)

OK。
次は最新に更新。

# dnf update -y
:
:
Public key for wget-1.19.5-12.el8_10.x86_64.rpm is not installed. Failing package is: wget-1.19.5-12.el8_10.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: GPG check FAILED

GPGキーが無いとか言ってる。

# rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux

# tail /etc/redhat-release 
AlmaLinux release 8.10 (Cerulean Leopard)

8.10まで進んだ。以前最新の8.9まで行ったら、9系にアップグレードできなったとメモされていたので、少し不安になった。

# dnf install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm
# dnf install -y leapp-upgrade leapp-data-almalinux
:
:
RPM: error: db5 error(-30969) from dbenv->open: BDB0091 DB_VERSION_MISMATCH: Database environment version mismatch
RPM: error: cannot open Packages index using db5 -  (-30969)
RPM: error: cannot open Packages database in /var/lib/rpm
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: Could not run transaction.

調べるのもめんどー。
こういうときは、文明の利器「ChatGPT」に訊けばよろし。

GPT曰く、

このエラーは、RPMパッケージデータベースのバージョンの不一致によって発生しています。具体的には、RPMデータベースの形式が古く、現在のシステムで使用されているRPMバージョンと互換性がないためです。この問題を解決するためには、RPMデータベースを再構築する必要があります。以下の手順で進めてください。

手順

  1. RPMデータベースのバックアップを作成
    念のため、RPMデータベースのバックアップを作成します。bashコードをコピーする
    cp -a /var/lib/rpm /var/lib/rpm.bak
  2. RPMデータベースの再構築
    次に、RPMデータベースを再構築します。bashコードをコピーする
    rm -f /var/lib/rpm/__db*
    rpm --rebuilddb
  3. DNFキャッシュのクリア
    DNFキャッシュをクリアしてから再度試みます。bashコードをコピーする
    dnf clean all
    dnf upgrade -y
  4. 問題のコマンドを再実行
    上記の手順を完了した後、もう一度元のコマンドを実行します。bashコードをコピーする
    dnf install -y leapp-upgrade leapp-data-almalinux

注意点

  • 上記の手順を実行するには、ルート権限が必要です。
  • RPMデータベースの再構築が成功しない場合、システムに問題がある可能性があります。その場合は、システムを再起動してから再試行するか、さらに深いトラブルシューティングが必要かもしれません。

これで問題が解決するはずです。

素晴らしい。しっかり解決だ。

# dnf install -y leapp-upgrade leapp-data-almalinux
:
:
Installed:
  NetworkManager-libnm-1:1.40.16-15.el8_9.x86_64          checkpolicy-2.9-1.el8.x86_64                       leapp-0.16.0-2.el8.noarch                      
  leapp-data-almalinux-0.2-15.el8.20230823.noarch         leapp-deps-0.16.0-2.el8.noarch                     leapp-upgrade-el8toel9-1:0.19.0-7.1.el8.noarch 
  leapp-upgrade-el8toel9-deps-1:0.19.0-7.1.el8.noarch     policycoreutils-python-utils-2.9-26.el8_10.noarch  python3-audit-3.1.2-1.el8.x86_64               
  python3-chardet-3.0.4-7.el8.noarch                      python3-idna-2.5-7.el8_10.noarch                   python3-leapp-0.16.0-2.el8.noarch              
  python3-libsemanage-2.9-9.el8_6.x86_64                  python3-pip-9.0.3-24.el8.noarch                    python3-policycoreutils-2.9-26.el8_10.noarch   
  python3-pysocks-1.6.8-3.el8.noarch                      python3-pyudev-0.21.0-7.el8.noarch                 python3-requests-2.20.0-3.el8_8.noarch         
  python3-setools-4.3.0-5.el8.x86_64                      python3-setuptools-39.2.0-8.el8_10.noarch          python3-urllib3-1.24.2-8.el8_10.noarch         
  python36-3.6.8-39.module_el8.10.0+3769+3838165b.x86_64  systemd-container-239-82.el8_10.1.x86_64          

Complete!

firewalldの設定を変えて

# vi /etc/firewalld/firewalld.conf

# AllowZoneDrifting=yes
AllowZoneDrifting=no

いざ、アップグレード!

# leapp preupgrade
==> Processing phase `configuration_phase`
====> * ipu_workflow_config
        IPU workflow config actor
==> Processing phase `FactsCollection`
====> * vendor_repositories_mapping
        Scan the vendor repository mapping files and provide the data to other actors.
====> * system_facts
        Provides data about many facts from system.
Process Process-184:
Traceback (most recent call last):
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.6/site-packages/leapp/repository/actor_definition.py", line 74, in _do_run
    actor_instance.run(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/leapp/actors/__init__.py", line 289, in run
    self.process(*args)
  File "/etc/leapp/repos.d/system_upgrade/common/actors/systemfacts/actor.py", line 65, in process
    bios_grubcfg_details = systemfacts.get_bios_grubcfg_details()
  File "/etc/leapp/repos.d/system_upgrade/common/actors/systemfacts/libraries/systemfacts.py", line 352, in get_bios_grubcfg_details
    with open('/boot/grub2/grub.cfg') as fo:
FileNotFoundError: [Errno 2] No such file or directory: '/boot/grub2/grub.cfg'
2024-08-23 17:55:22.944 ERROR    PID: 28056 leapp.workflow.FactsCollection: Actor system_facts has crashed: Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/leapp/repository/actor_definition.py", line 74, in _do_run
    actor_instance.run(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/leapp/actors/__init__.py", line 289, in run
    self.process(*args)
  File "/etc/leapp/repos.d/system_upgrade/common/actors/systemfacts/actor.py", line 65, in process
    bios_grubcfg_details = systemfacts.get_bios_grubcfg_details()
  File "/etc/leapp/repos.d/system_upgrade/common/actors/systemfacts/libraries/systemfacts.py", line 352, in get_bios_grubcfg_details
    with open('/boot/grub2/grub.cfg') as fo:
FileNotFoundError: [Errno 2] No such file or directory: '/boot/grub2/grub.cfg'



=============================================================================================
Actor system_facts unexpectedly terminated with exit code: 1 - Please check the above details
=============================================================================================

Debug output written to /var/log/leapp/leapp-preupgrade.log

============================================================
                      REPORT OVERVIEW                       
============================================================

Upgrade has been inhibited due to the following problems:
    1. File "/etc/default/grub" does not exist!

Reports summary:
    Errors:                      1
    Inhibitors:                  1
    HIGH severity reports:       0
    MEDIUM severity reports:     0
    LOW severity reports:        0
    INFO severity reports:       0

Before continuing consult the full report:
    A report has been generated at /var/log/leapp/leapp-report.json
    A report has been generated at /var/log/leapp/leapp-report.txt

============================================================
                   END OF REPORT OVERVIEW                   
============================================================

Answerfile has been generated at /var/log/leapp/answerfile

GPTさん?

このエラーメッセージは、leapp preupgrade がシステムのアップグレードを試みた際に、/boot/grub2/grub.cfg ファイルが存在しないことが原因で発生しています。また、/etc/default/grub ファイルも存在しないため、アップグレードが抑止されているようです。

問題の概要

  • leapp preupgrade/boot/grub2/grub.cfg ファイルを探していますが、見つからないため、プロセスがクラッシュしています。
  • /etc/default/grub ファイルがないため、アップグレードが抑止されています。

解決方法

1. GRUB 設定ファイルの確認と再生成

まず、/boot/grub2/grub.cfg ファイルが存在しないため、GRUB設定ファイルを再生成する必要があります。以下のコマンドを実行してみてください。

# grub2-mkconfig -o /boot/grub2/grub.cfg

このコマンドは、現在のシステム状態に基づいてGRUB設定ファイルを再生成します。

2. /etc/default/grub ファイルの確認

/etc/default/grub ファイルが存在しないため、このファイルを作成する必要があります。通常、このファイルはGRUBの設定ファイルで、ブートローダーのオプションを設定します。

/etc/default/grub ファイルを次の内容で作成してください。

# vi /etc/default/grub

GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

ファイルを保存して閉じます。

3. 再試行

GRUB設定ファイルと/etc/default/grubファイルを修正した後、leapp preupgrade コマンドを再実行してみてください。

# leapp preupgrade

最後に

これでエラーが解決し、アップグレードを進めることができるはずです。問題が解決しない場合は、ログファイル(/var/log/leapp/leapp-preupgrade.log/var/log/leapp/leapp-report.txt)を確認し、追加のエラーメッセージや警告を調べてください。

ほうほう。なんか、やっかいそうだけど。。

# leapp preupgrade
:
:
Following errors occurred and the upgrade cannot continue:
    1. Actor: scan_source_kernel
       Message: Unable to obtain kernel information of the booted kernel: no package is providing the booted kernel release returned by uname.

Reports summary:
    Errors:                      1
    Inhibitors:                  0
    HIGH severity reports:       0
    MEDIUM severity reports:     0
    LOW severity reports:        0
    INFO severity reports:       0

このエラーメッセージは、leapp preupgrade が実行された際に、現在のカーネルに関連するパッケージ情報を取得できなかったために発生しています。この問題は、現在のカーネルがインストールされているパッケージから提供されていない場合や、カーネル関連のパッケージが破損している場合に発生することがあります。

解決方法

  1. 現在のカーネルの確認まず、現在使用しているカーネルのバージョンを確認します。bashコードをコピーするuname -r このコマンドにより、現在のカーネルのバージョンが表示されます。
  2. カーネルパッケージの確認次に、rpm コマンドを使用して、現在のカーネルバージョンに対応するパッケージがインストールされているか確認します。bashコードをコピーするrpm -q kernel このコマンドにより、システムにインストールされているすべてのカーネルパッケージのリストが表示されます。現在使用しているカーネルバージョン(uname -rで確認したもの)がリストに含まれていない場合、カーネルパッケージが適切にインストールされていない可能性があります。
  3. カーネルパッケージの再インストール現在のカーネルに対応するパッケージが見つからない場合、または壊れている可能性がある場合は、カーネルパッケージを再インストールする必要があります。bashコードをコピーするsudo dnf reinstall kernel-$(uname -r) このコマンドは、現在使用しているカーネルバージョンに対応するカーネルパッケージを再インストールします。
  4. システムの再起動カーネルパッケージを再インストールした後、システムを再起動して、新しいカーネルが正しくロードされるようにします。bashコードをコピーするsudo reboot
  5. leapp preupgrade の再実行システムが再起動したら、再度 leapp preupgrade を実行して、問題が解決したかどうかを確認します。bashコードをコピーするsudo leapp preupgrade

これらの手順で問題が解決し、アップグレードの準備が正常に進むはずです。もし再インストール後も同じエラーが発生する場合は、カーネル関連のさらに深い問題があるかもしれません。その場合、システムのログを詳しく調査するか、サポートに問い合わせることを検討してください。

# uname -r
4.18.0
# rpm -q kernel
package kernel is not installed
# dnf reinstall kernel-$(uname -r)
Last metadata expiration check: 0:09:55 ago on Fri Aug 23 17:51:56 2024.
Package kernel available, but not installed.
No match for argument: kernel-4.18.0
Error: No packages marked for reinstall.  

カーネルが無いそうだ。

# dnf install kernel 
# reboot

それでもやはり変わらない。

分かった結果はこうだ。”サーバーの契約がコンテナだったから。”

KVMじゃないと、そもそもダメってこと。何という無駄な時間だったことだろう。

Add comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください