久しぶりのサーバー移行案件が発生。
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データベースを再構築する必要があります。以下の手順で進めてください。
手順
- RPMデータベースのバックアップを作成
念のため、RPMデータベースのバックアップを作成します。bashコードをコピーするcp -a /var/lib/rpm /var/lib/rpm.bak
- RPMデータベースの再構築
次に、RPMデータベースを再構築します。bashコードをコピーするrm -f /var/lib/rpm/__db*
rpm --rebuilddb
- DNFキャッシュのクリア
DNFキャッシュをクリアしてから再度試みます。bashコードをコピーするdnf clean all
dnf upgrade -y
- 問題のコマンドを再実行
上記の手順を完了した後、もう一度元のコマンドを実行します。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
が実行された際に、現在のカーネルに関連するパッケージ情報を取得できなかったために発生しています。この問題は、現在のカーネルがインストールされているパッケージから提供されていない場合や、カーネル関連のパッケージが破損している場合に発生することがあります。解決方法
- 現在のカーネルの確認まず、現在使用しているカーネルのバージョンを確認します。bashコードをコピーする
uname -r
このコマンドにより、現在のカーネルのバージョンが表示されます。- カーネルパッケージの確認次に、
rpm
コマンドを使用して、現在のカーネルバージョンに対応するパッケージがインストールされているか確認します。bashコードをコピーするrpm -q kernel
このコマンドにより、システムにインストールされているすべてのカーネルパッケージのリストが表示されます。現在使用しているカーネルバージョン(uname -r
で確認したもの)がリストに含まれていない場合、カーネルパッケージが適切にインストールされていない可能性があります。- カーネルパッケージの再インストール現在のカーネルに対応するパッケージが見つからない場合、または壊れている可能性がある場合は、カーネルパッケージを再インストールする必要があります。bashコードをコピーする
sudo dnf reinstall kernel-$(uname -r)
このコマンドは、現在使用しているカーネルバージョンに対応するカーネルパッケージを再インストールします。- システムの再起動カーネルパッケージを再インストールした後、システムを再起動して、新しいカーネルが正しくロードされるようにします。bashコードをコピーする
sudo reboot
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