#Что означает ошибка
error: rpmdb: BDB0113 Thread/process failed error: cannot open Packages database
error: cannot open Packages database in /var/lib/rpm / error: db5 error(11) from dbenv->open: Resource temporarily unavailable — rpm не может открыть свою базу. Причины: другой процесс удерживает блокировку (yum/dnf в фоне, PackageKit, автообновления), остались файлы блокировок после сбоя, нет прав, повреждение или нехватка места.
Сначала проверьте активные процессы.
Затем уберите блокировки и пересоберите базу.
База данных RPM может быть повреждена после аварийного завершения установки. Её можно перестроить командой rpm --rebuilddb — предварительно закрыв другие процессы пакетного менеджера.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Прерванная установка | Сбой питания или kill. | Перестройте базу. |
| Висящий процесс rpm/dnf | Блокировка. | Завершите процесс. |
| Нет места | Диск заполнен. | Освободите место. |
| Ошибки файловой системы | Диск с ошибками. | Проверьте диск. |
#Пошаговое решение
- Проверьте процессы пакетных менеджеровОшибка
rpmdb open failedотносится к базе установленных RPM-пакетов, а не к службе произвольного имени. Откройте терминал Fedora/RHEL/совместимого дистрибутива и выполнитеps -ef | grep -E "[r]pm|[d]nf|[y]um|[p]ackagekit". Если пакетный менеджер сейчас обновляет систему, дождитесь завершения. Затем проверьте свободное местоdf -h / /varи inodedf -i /var, запишите полную ошибкуrpm -qa. Не удаляйте файлы базы при активной установке. - Остановите packagekitЕсли
packagekitзанял менеджер пакетов, закройте графическую программу обновления и дождитесь окончания операции. Проверьтеsystemctl status packagekit --no-pagerи наличие процессовps -ef | grep -E "[p]ackagekitd|[d]nf|[r]pm". Только после проверки и при необходимости администратор может временно остановитьsudo systemctl stop packagekit; не останавливайте работающую транзакцию. Затем повторите диагностику базы и после ремонта верните штатную работу обновлений. - Сделайте копию /var/lib/rpmПрежде чем применять восстановление, создайте копию фактической базы RPM. Её расположение зависит от версии дистрибутива: проверьте
rpm --eval "%{_dbpath}". На современных Fedora/RHEL это может быть/usr/lib/sysimage/rpm, а не/var/lib/rpm. Убедитесь, что пакетные менеджеры не работают и хватает места, затем скопируйте весь каталог в отдельную директорию с сохранением владельца и разрешений штатной утилитойcp -a. Не заменяйте базу копией от другого компьютера. - Удалите __db.* и пересоберите базуНе удаляйте
__db.*: это приём для старых Berkeley DB, который неприменим к ряду современных RPM с SQLite или другим форматом. Сначала определите выпуск (cat /etc/os-release) и реальный путьrpm --eval "%{_dbpath}", проверьте целостность резервной копии и отсутствие работающих транзакций. Только затем следуйте официальной для конкретной версии процедуреrpm --rebuilddb; на неисправном диске или без копии попытки ремонта могут усугубить потерю данных. - Проверьте rpm -qa и место на дискеПосле подтверждённого восстановления выполните
rpm -qa | head -n 20иrpm -q rpm, убедитесь, что чтение базы не выдаётrpmdb open failed. Дополнительно проверьтеdf -h / /varиdf -i /var, чтобы исключить повторную нехватку места. Затем выполните безопасный просмотрsudo dnf check(если dnf установлен) и изучите предупреждения. Если ошибок базы нет, но пакеты не совпадают, не продолжайте массовое обновление до проверки резервной копии. - Дополнительная команда по темеLinux · Терминал (Bash)КомандаУдалена безусловная пересборка базы RPM, пока не проверен её формат и не сохранена резервная копия.
rpm --eval "%{_dbpath}"rpm -q rpm
#Блокировки
Выполните ps aux | grep -E "yum|dnf|rpm|packagekit|apt" и дождитесь завершения. Остановите PackageKit: sudo systemctl stop packagekit. Не убивайте процессы в середине установки. Если процессов нет, удалите файлы блокировок: sudo rm -f /var/lib/rpm/__db.00*. Проверьте права: ls -ld /var/lib/rpm (владелец root, drwxr-xr-x). Запускайте rpm от root. Место: df -h /var, df -i /var.
#Перестроение базы
Резервная копия: sudo cp -a /var/lib/rpm /var/lib/rpm.bak. Затем sudo rpm --rebuilddb. Проверка: rpm -qa | head. Для Fedora/RHEL 9+ база может быть в /usr/lib/sysimage/rpm; тот же порядок действий с этим путём (rpm --rebuilddb --dbpath не нужен — rpm знает путь по умолчанию). После этого sudo dnf clean all.
#Особые ситуации
В контейнерах и chroot укажите --root: rpm --root /mnt/sysroot -qa. Если база повреждена (BDB0060, PANIC: fatal region error detected), после __db.* и --rebuilddb помогает db_recover -h /var/lib/rpm (пакет libdb-utils) и повторная пересборка. Незавершённые транзакции: sudo dnf history list, sudo dnf history redo и yum-complete-transaction. После сбоя питания проверьте файловую систему fsck на отмонтированном разделе.
rpm -qa >/dev/null