Причина смерти в черном ящике: о crash dump, панике и продолжение следует
Уже давно при интерактивной инсталляции RHEL/CentOS/Rocky и других дистрибутивов сразу после завершения процесса нам предлагают сконфигурировать Kdump. Некоторые инженеры от предложения отказываются — и зря. Участок резервируемой памяти не такой уж и большой, а при паниках системы или же зависаниях возможность создать дамп критически важна. Возникают неприятные ситуации, когда этот файл просто необходим. Случилась такая и у нас. Поэтому мы решили написать эту статью — о сrashdump«е и о том, для чего Kdump в Linux, как его правильно готовить и как с минимальными затратами подготовить стенд для последующего анализа дампов.
Что такое дамп и зачем он нужен?
Crash dump, kernel dump, kernel core dump, core dump, dump — это всё разные названия одного и того же файла, который создается, когда ОС приходит в состояние паники. Файл включает в себя необходимую для исследования проблемы информацию: заголовки программ, содержимое памяти, содержимое регистров CPU и т. д. Примерно в 99% случаев дампы имеют формат ELF (Executable and Linkable Format) — поэтому остановимся только на нем.
Операционные системы (ОС) тоже паникуют
Причин для паники не очень много:
1. ОС столкнулась с программной проблемой, которую не может решить. Чтобы не повредить данные, она уходит в панику.
2. ОС столкнулась с аппаратной проблемой.
3. ОС умышленно «спаниковали», чтобы получить дамп.
4. ОС зависла и watchdog «спаниковал» ее.
При каждом таком событии нам нужно сохранить состояние системы для последующего ее анализа.
Как ОС записывают дамп
Методов у операционки для создания дампов несколько:
1. Ядро ОС входит в состояние паники и самостоятельно записывает дамп.
2. Ядро ОС переключается в специальное диагностическое ядро, и уже оно записывает дамп.
3. Некая прошивка или гипервизор сохраняет содержимое памяти без участия ОС.
Например, в RHEL/CentOS/Rocky используется второй метод, что позволяет сохранять дамп, даже если проблема произошла в «основном» ядре.
А теперь к механике
Теперь отдельно стоит остановиться на механизме работы Kdump. После его активации наша система работает с двумя ядрами. Одно (first kernel) используется для работы, а под другое (dump-capture kernel) мы резервируем участок памяти. Это нужно для того, чтобы при аварии (естественной или искусственно вызванной пользователем) выполнить системный вызов kexec () и переключиться в него для последующего сохранения содержимого памяти. Для наглядности приводим симпатичную схему:
Про то, как установить и настроить Kdump, написано много статей и заметок, поэтому хочется только напомнить, что дамп может быть сохранен не только локально. В конфигурационном файле /etc/kdump.conf есть большая секция настроек:
[root@server-centos ~]# tail -20 /etc/kdump.conf
#raw /dev/vg/lv_kdump
#ext4 /dev/vg/lv_kdump
#ext4 LABEL=/boot
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
#nfs my.server.com:/export/tmp
#ssh user@my.server.com
#sshkey /root/.ssh/kdump_id_rsa
path /var/crash
core_collector makedumpfile -l --message-level 1 -d 31
#core_collector scp
#kdump_post /var/crash/scripts/kdump-post.sh
#kdump_pre /var/crash/scripts/kdump-pre.sh
#extra_bins /usr/bin/lftp
#extra_modules gfs2
#default shell
#force_rebuild 1
#force_no_rebuild 1
#dracut_args --omit-drivers "cfg80211 snd" --add-drivers "ext2 ext3"
#fence_kdump_args -p 7410 -f auto -c 0 -i 10
#fence_kdump_nodes node1 node2
По умолчанию благодаря настройкам нас балуют только «path» с указанием локальной папки и коллектором, позволяющим отфильтровать ненужные страницы памяти. Однако существуют ситуации, когда записать данные на локальную файловую систему не получится по нескольким причинам:
— проблема с дисковой подсистемой;
— проблема с файловой системой;
— нехватка места в /var/crash.
В таких случаях правильным enterprise-решением будет централизованное хранение дампов с сохранением их по сети. Для этого у нас есть два параметра на выбор — nfs и ssh.
Вот мы и получили dump. Что дальше?
В былые времена у нас был выбор: исследовать его самостоятельно или понести дамп вендору, чтобы он в нем сам покопался и предложил какое-то решение (или не предложил, тут уже как повезет). Сейчас приходится рассчитывать только на себя. Анализ дампа — это отдельная история, требующая много времени, кофе, слез и пушистого котика.
Но конечно же, без практической части мы вас не отпустим и рассмотрим создание стенда для анализа таких дампов для популярных клонов RHEL. Его можно делать на чём угодно: VMware, VirtualBox, KVM, Hyper-V — на самом деле, это не имеет значения. Если у вас есть дамп, то его можно проанализировать в спокойной обстановке у себя в стенде.
Общий алгоритм прост:
1. Устанавливаем нужную ОС в виртуальную машину.
2. Устанавливаем все обновления.
3. Устанавливаем утилиту «crash».
4. Устанавливаем «kernel-debuginfo» той же версии, что и на «спаниковавшем» сервере.
5. Загружаем в виртуальную машину дамп и анализируем. Тут очень подходит мем про рисование совы:
1. Если понадобится проанализировать дамп другого сервера с более поздним ядром, то обновляем «kernel-debuginfo». Если с более ранним, то «yum remove kernel-debuginfo*», и ставим нужную нам версию (помните: одновременно может быть установлена только одна версия).
В основном мы ориентировались на документацию от Red Hat, статья же о клонах:
· Какие версии с какими ядрами выходили https://access.redhat.com/articles/3078
· RHEL 6 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-kdump-crash
· RHEL 7 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/kernel_administration_guide/kernel_crash_dump_guide#chap-analyzing-a-core-dump
· RHEL 8 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/analyzing-a-core-dump_managing-monitoring-and-updating-the-kernel#doc-wrapper
· RHEL 9 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_kernel/analyzing-a-core-dump_managing-monitoring-and-updating-the-kernel#doc-wrapper
Теперь разберем на примерах (для архитектуры x86_64).
**CentOS 6**
Да, он уже EOL, но в корпоративных дата-центрах не редкость (там и не такое попадается). Скачиваем нужные образ и контрольную сумму, проверяем:
· https://vault.centos.org/6.10/isos/x86_64/CentOS-6.10-x86_64-minimal.iso
· https://vault.centos.org/6.10/isos/x86_64/sha256sum.txt
Установку можно проводить с параметрами по умолчанию. Советую делать это на странице, где будут спрашивать имя сервера: нажать Configure Network и настроить сеть. В противном случае вам придется делать это после установки и вручную править файлы в »/etc/sysconfig/network-scripts/». В более поздних версиях мы имеем NetworkManager из коробки даже в минимальных комплектациях, так что через `nmtui` можно будет легко настроить сеть.
Теперь нам понадобятся рабочие репозитории. Они настраиваются неочевидно из-за того, что версия ОС стала EOL (от root):
```
cd /etc/yum.repos.d/
mkdir old
mv *.repo old/
mv old/CentOS-Debuginfo.repo .
sed -i 's/enabled=0/enabled=1/' CentOS-Debuginfo.repo
vi c610.repo
```
Прописываем вот такие репозитории:
```
[CentOS_6.10_base]
name=CentOS 6.10 Base
baseurl=http://vault.epel.cloud/6.10/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
metadata_expire=never
[CentOS_6.10_updates]
name=CentOS 6.10 Updates
baseurl=http://vault.epel.cloud/6.10/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
metadata_expire=never
[CentOS_6.10_extras]
name=CentOS 6.10 Extras
baseurl=http://vault.epel.cloud/6.10/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
metadata_expire=never
[CentOS_6.10_contrib]
name=CentOS 6.10 Contrib
baseurl=http://vault.epel.cloud/6.10/contrib/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=0
metadata_expire=never
[CentOS_6.10_centosplus]
name=CentOS 6.10 CentOSPlus
baseurl=http://vault.epel.cloud/6.10/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=0
metadata_expire=never
```
Это включит архивные репозитории из CentOS Vault. Ранее мы включили до сих пор не убранный в архив репозиторий для дебага. Теперь осталось только «yum update -y && yum install -y crash && reboot», и у нас получится готовая заготовка для стенда. Будет нелишним сделать снэпшот получившейся виртуальной машины.
Теперь представим, что у нас спаниковал сервер с CentOS 6.2 и ядром `2.6.32–220`. Нам нужно проанализировать дамп. В этом случае берем `yum install kernel-debuginfo-2.6.32–220.el6.x86_64`, потом грузим на виртуальную машину файл `vmcore`, используем:
`
# crash /usr/lib/debug/lib/modules/2.6.32-220.el6.x86_64/vmlinux /путь/до/собранного/с/упавшего/сервера/vmcore
Файл дампа на спаниковавшем сервере будет в »/var/crash/timestamp/vmcore», если вы не меняли настройки. Если не получается определить точное название нужного пакета для анализа, смотрите, какие есть в http://debuginfo.centos.org/6/x86_64/.
**CentOS 7**
Тут проще, так как он еще поддерживается. Качаем и проверяем контрольную сумму (можно и с другого зеркала):
· https://mirror.yandex.ru/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
· https://mirror.yandex.ru/centos/7.9.2009/isos/x86_64/sha256sum.txt
Затем ставим от root:
# sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/CentOS-Debuginfo.repo && yum update -y && yum install -y crash && reboot
Что же касается установки `kernel-debuginfo` и дальнейшего анализа, всё по аналогии с CentOS 6. Имена пакетов можно посмотреть на http://debuginfo.centos.org/7/x86_64/
**CentOS 8.5**
Речь пойдет о EOL классической версии, что перестали поддерживать вопреки обещаниям не в 2028 году, а в 2021-м: https://blog.centos.org/2020/12/future-is-centos-stream/ . Тем не менее многие люди успели себе ее поставить. Начинаем как обычно, качаем и проверяем контрольную сумму:
· https://vault.centos.org/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-boot.iso
· https://vault.centos.org/8.5.2111/isos/x86_64/CHECKSUM
Так как это EOL, то с netinstall, что мы скачали, придется после настройки сети указать место для скачивания пакетов руками в Installation Source:
https://vault.centos.org/8.5.2111/BaseOS/x86_64/os/
и указать в Software Selection, что нам нужен Minimal Install.
После установки придется снова вручную настраивать архивные репозитории от root:
```
cd /etc/yum.repos.d/
mkdir old
mv *.repo old/
mv old/CentOS-Linux-Debuginfo.repo .
sed -i 's/enabled=0/enabled=1/' CentOS-Linux-Debuginfo.repo
vi c85.repo
```
Прописываем вот такие репозитории:
```
[baseos]
name=CentOS Linux 8.5 - BaseOS
baseurl=https://vault.centos.org/8.5.2111/BaseOS/x86_64/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
metadata_expire=never
[appstream]
name=CentOS Linux 8.5 - AppStream
baseurl=https://vault.centos.org/8.5.2111/AppStream/x86_64/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
metadata_expire=never
```
После этого достаточно выполнить:
# yum update -y && yum install -y crash
Установку `kernel-debuginfo` и дальнейший анализ делаем по аналогии с CentOS 6. Имя пакетов можно посмотреть на http://debuginfo.centos.org/8/x86_64/Packages/.
**Rocky Linux 8**
Качаем и проверяем сумму (можно и с другого зеркала):
· https://mirror.yandex.ru/rockylinux/8.9/isos/x86_64/Rocky-8.9-x86_64-minimal.iso
· https://mirror.yandex.ru/rockylinux/8.9/isos/x86_64/CHECKSUM
Ставим:
# yum update -y && yum install -y crash
А вот с репозиториями для `kernel-debuginfo` сложнее, так как в отличие от CentOS нет общего для всех подверсий каталога с отладочными файлами, он отдельный для каждой подверсии.
Если нужны отладочные заголовки для текущего ядра из 8.9, то достаточно включить текущий репозиторий отладки для BaseOS и вставить из него:
```
[root@localhost ~]# uname -r
4.18.0-513.5.1.el8_9.x86_64
[root@localhost ~]# head /etc/yum.repos.d/Rocky-Debuginfo.repo
# Rocky-Debuginfo.repo
#
[baseos-debug]
name=Rocky Linux $releasever - BaseOS - Source
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever-debug
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/debug/tree/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[root@localhost ~]# vi /etc/yum.repos.d/Rocky-Debuginfo.repo
[root@localhost ~]# head /etc/yum.repos.d/Rocky-Debuginfo.repo
# Rocky-Debuginfo.repo
#
[baseos-debug]
name=Rocky Linux $releasever - BaseOS - Source
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever-debug
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/debug/tree/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[root@localhost ~]# yum update
Rocky Linux 8 - BaseOS - Source 5.1 kB/s | 3.1 kB 00:00
Dependencies resolved.
Nothing to do.
Complete!
[root@localhost ~]# yum install kernel-debuginfo-4.18.0-513.5.1.el8_9.x86_64
Last metadata expiration check: 0:00:23 ago on Mon 27 Nov 2023 01:28:28 PM MSK.
Dependencies resolved.
==================================================================================================================================================================================================
Package Architecture Version Repository Size
==================================================================================================================================================================================================
Installing:
kernel-debuginfo x86_64 4.18.0-513.5.1.el8_9 baseos-debug 657 M
Installing dependencies:
kernel-debuginfo-common-x86_64 x86_64 4.18.0-513.5.1.el8_9 baseos-debug 75 M
Transaction Summary
==================================================================================================================================================================================================
Install 2 Packages
Total download size: 732 M
Installed size: 3.8 G
Is this ok [y/N]: n
Operation aborted.
[root@localhost ~]#
```
Имена доступных пакетов можно посмотреть тут: https://mirror.yandex.ru/rockylinux/8.9/BaseOS/x86_64/debug/tree/Packages/k/
А вот если нужны заголовки для более старой версии, то придется подключать уже архив. Вот пример для 8.7:
```
[root@localhost ~]# vi /etc/yum.repos.d/debug87.repo
[root@localhost ~]# yum update
Rocky Linux 8.7 - BaseOS - Source 1.2 MB/s | 3.3 MB 00:02
Last metadata expiration check: 0:00:01 ago on Mon 27 Nov 2023 01:34:51 PM MSK.
Dependencies resolved.
Nothing to do.
Complete!
[root@localhost ~]# cat /etc/yum.repos.d/debug87.repo
[baseos-8.7-debug]
name=Rocky Linux 8.7 - BaseOS - Source
baseurl=https://dl.rockylinux.org/vault/rocky/8.7/BaseOS/x86_64/debug/tree/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[root@localhost ~]# yum install kernel-debuginfo-4.18.0-425.13.1.el8_7.x86_64
Last metadata expiration check: 0:00:47 ago on Mon 27 Nov 2023 01:34:51 PM MSK.
Dependencies resolved.
==================================================================================================================================================================================================
Package Architecture Version Repository Size
==================================================================================================================================================================================================
Installing:
kernel-debuginfo x86_64 4.18.0-425.13.1.el8_7 baseos-8.7-debug 638 M
Installing dependencies:
kernel-debuginfo-common-x86_64 x86_64 4.18.0-425.13.1.el8_7 baseos-8.7-debug 72 M
Transaction Summary
==================================================================================================================================================================================================
Install 2 Packages
Total download size: 710 M
Installed size: 3.7 G
Is this ok [y/N]: n
Operation aborted.
[root@localhost ~]#
```
Посмотреть возможные версии kernel-debuginfo можно тут: https://dl.rockylinux.org/vault/rocky/8.7/BaseOS/x86_64/debug/tree/Packages/k/
Для 8.8, 8.6 и более старых делаем по аналогии.
**Rocky Linux 9**
Качаем и проверяем сумму (можно и с другого зеркала):
+ https://mirror.yandex.ru/rockylinux/9.3/isos/x86_64/Rocky-9.3-x86_64-minimal.iso
+ https://mirror.yandex.ru/rockylinux/9.3/isos/x86_64/CHECKSUM
Потом ставим dnf update -y && dnf install -y crash
. А вот с репозиториями для kernel-debuginfo
делаем
наподобие 8.9. Для текущей версии:
```
[root@localhost ~]# uname -r
5.14.0-362.8.1.el9_3.x86_64
[root@localhost ~]# grep -A8 baseos-debug /etc/yum.repos.d/rocky.repo
[baseos-debug]
name=Rocky Linux $releasever - BaseOS - Debug
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever-debug$rltype
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/debug/tree/
gpgcheck=1
enabled=0
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9
[root@localhost ~]# vi /etc/yum.repos.d/rocky.repo
[root@localhost ~]# grep -A8 baseos-debug /etc/yum.repos.d/rocky.repo
[baseos-debug]
name=Rocky Linux $releasever - BaseOS - Debug
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever-debug$rltype
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/debug/tree/
gpgcheck=1
enabled=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9
[root@localhost ~]# dnf update
Rocky Linux 9 - BaseOS 6.0 kB/s | 4.1 kB 00:00
Rocky Linux 9 - BaseOS - Debug 774 kB/s | 854 kB 00:01
Rocky Linux 9 - AppStream 8.6 kB/s | 4.5 kB 00:00
Dependencies resolved.
Nothing to do.
Complete!
[root@localhost ~]# dnf install kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64
Last metadata expiration check: 0:00:31 ago on Mon 27 Nov 2023 02:13:43 PM MSK.
Error:
Problem: conflicting requests
- nothing provides kernel-debuginfo-common-x86_64 = 5.14.0-362.8.1.el9_3 needed by kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64 from baseos-debug
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
[root@localhost ~]#
```
Здесь, как видите, нарываемся на ошибку, которая находится на стороне разработчиков Rock (забыли собрать нужный пакет). Пакета просто нет в https://mirror.yandex.ru/rockylinux/9.3/BaseOS/x86_64/debug/tree/Packages/k/.
К счастью, этот изъян можно поправить, скачав пакет и распаковав его:
```
[root@localhost ~]# dnf download kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64
Last metadata expiration check: 0:09:10 ago on Mon 27 Nov 2023 02:13:43 PM MSK.
kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64.rpm 3.7 MB/s | 611 MB 02:44
[root@localhost ~]# ls
anaconda-ks.cfg kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64.rpm
[root@localhost ~]# mkdir 5.14.0-362.8.1.el9_3
[root@localhost ~]# mv kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64.rpm 5.14.0-362.8.1.el9_3/
[root@localhost ~]# cd 5.14.0-362.8.1.el9_3/
[root@localhost ~]# rpm2cpio kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64.rpm | cpio -idmv
### тут был длинный вывод, что я удалил (можете без -v запускать, тогда не будет)
[root@localhost 5.14.0-362.8.1.el9_3]# ls -l
total 625776
-rw-r--r--. 1 root root 640792453 Nov 27 14:25 kernel-debuginfo-5.14.0-362.8.1.el9_3.x86_64.rpm
drwxr-xr-x. 3 root root 17 Nov 27 14:29 usr
[root@localhost 5.14.0-362.8.1.el9_3]# ls usr/lib/debug/lib/modules/5.14.0-362.8.1.el9_3.x86_64/
internal kernel partner vdso vmlinux
[root@localhost 5.14.0-362.8.1.el9_3]#
```
Как видим, у нас сейчас в `/root/5.14.0–362.8.1.el9_3/usr/lib/debug/lib/modules/5.14.0–362.8.1.el9_3.x86_64/` лежит искомый `vmlinux`. Можно будет `crash /root/5.14.0–362.8.1.el9_3/usr/lib/debug/lib/modules/5.14.0–362.8.1.el9_3.x86_64/ /путь/до/собранного/с/упавшего/сервера/vmcore`
Если же нужно проанализировать дамп более старого ядра из состава Rocky 9.0, то по аналогии с 8.7 выше настраиваем архивный репозиторий:
```
[root@localhost ~]# vi /etc/yum.repos.d/debug90.repo
[root@localhost ~]# cat /etc/yum.repos.d/debug90.repo
[baseos-debug-9.0]
name=Rocky Linux 9.0 - BaseOS - Debug
baseurl=https://dl.rockylinux.org/vault/rocky/9.0/BaseOS/x86_64/debug/tree/
gpgcheck=1
enabled=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9
[root@localhost ~]# dnf update
Rocky Linux 9.0 - BaseOS - Debug 632 kB/s | 863 kB 00:01
Dependencies resolved.
Nothing to do.
Complete!
[root@localhost ~]# dnf install kernel-debuginfo-5.14.0-70.30.1.el9_0.x86_64
Last metadata expiration check: 0:00:04 ago on Mon 27 Nov 2023 02:44:37 PM MSK.
Error:
Problem: conflicting requests
- nothing provides kernel-debuginfo-common-x86_64 = 5.14.0-70.30.1.el9_0 needed by kernel-debuginfo-5.14.0-70.30.1.el9_0.x86_64 from baseos-debug-9.0
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
[root@localhost ~]#
```
Как видим из https://dl.rockylinux.org/vault/rocky/9.0/BaseOS/x86_64/debug/tree/Packages/k/: тут тоже не собран нужный пакет. По аналогии скачиваемся и распаковываем.
В наших планах написать еще один материал о Kdump. Он будет посвящен анализу одного любопытного кейса из нашей практики.