Если упала база RPM — различия между версиями
Noname (обсуждение | вклад) (→6 способ) |
Noname (обсуждение | вклад) (→6 способ. Добавлен комментарий) |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 69: | Строка 69: | ||
== 6 способ == | == 6 способ == | ||
+ | '''Этот способ не работает. urpmi не переваривает список пакетов из файла rpmpkgs.'''<br /> | ||
+ | '''Ему нужен список без версий и архитектуры''' | ||
+ | |||
+ | <!-- | ||
+ | Вероятно список пакетов можно создать самостоятельно командой rpm -qa --queryformat '%{name}\n' >/tmp/pkgs.txt, | ||
+ | но я не знаю откуда rpm берет информацию. Может статься, что в созданный список из-за сломанной базы попадут | ||
+ | не все пакеты, что присутствуют в rpmpkgs. Нужно сравнить списки rpmpkgs и pkgs.txt, но сделать | ||
+ | этого не могу т.к. в данный момент не имею упавшей базы. | ||
+ | Или, если кто-то знает иной выход из сложившейся ситуации, просьба внести соответствующие изменения. | ||
+ | --> | ||
+ | |||
Когда полный финиш копируем из /var/log последний здоровый rpmpkgs в удобное место.<br /> | Когда полный финиш копируем из /var/log последний здоровый rpmpkgs в удобное место.<br /> | ||
Например, в ваш домашний каталог | Например, в ваш домашний каталог | ||
Строка 89: | Строка 100: | ||
Теперь вспомним, где rpmpkgs и скачаем все пакеты, т.к. в них находятся заголовки и прочая инфа для базы | Теперь вспомним, где rpmpkgs и скачаем все пакеты, т.к. в них находятся заголовки и прочая инфа для базы | ||
− | cat /home/username/rpmpkgs | xargs urpmi --no-install | + | cat /home/username/rpmpkgs | xargs urpmi --no-install |
Последнее что остаётся, собственно всё поставить, но без установки | Последнее что остаётся, собственно всё поставить, но без установки | ||
− | cat /home/username/rpmpkgs | xargs urpmi --justdb | + | cat /home/username/rpmpkgs | xargs urpmi --justdb |
или | или | ||
cat /home/username/rpmpkgs | xargs rpm -i -v --nodeps --noscripts --notriggers --justdb --excludepath / | cat /home/username/rpmpkgs | xargs rpm -i -v --nodeps --noscripts --notriggers --justdb --excludepath / |
Текущая версия на 16:49, 26 августа 2020
Иногда, в силу каких-то магических причин база RPM падает. Ничего не установить, не обновиться, не удалить. Обычно признаки падения базы RPM примерно такие:
rpmdb: BDB0113 Thread/process 31581/140478801409856 failed: BDB1507 Thread died in Berkeley DB library error: db_init:db3.c:1098: dbenv->failchk(-30973): BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery Re-opening dbenv with DB_RECOVER ... BDB2526 Finding last valid log LSN: file: 25 offset 4260 recovery 13% completeBDB1514 Recovery starting from [25][28] recovery 80% completeBDB1518 Recovery complete at Sun Feb 2 17:30:34 2014 BDB1519 Maximum transaction ID 8000830c recovery checkpoint [25][4260] . recovery succeeded. rpmdb: BDB2506 file /var/lib/rpm/Packages has LSN 25/7320425, past end of log at 25/4352 rpmdb: BDB2507 Commonly caused by moving a database from one database environment rpmdb: BDB2508 to another without clearing the database LSNs, or by removing all of rpmdb: BDB2509 the log files from a database environment rpmdb: BDB0641 __db_meta_setup: /var/lib/rpm/Packages: unexpected file type or format error: cannot open Packages(0) index: Недопустимый аргумент(22) DB: Berkeley DB 5.2.42: (February 29, 2012) error: не могу открыть базу данных Packages в не удаётся открыть базу данных RPM
Если это ваш случай, тогда есть несколько вариантов восстановления:
Содержание
1 способ
Удаляем __db.*
rm -f /var/lib/rpm/__db.*
Запускаем rpmdbchk:
/usr/lib/rpm/bin/rpmdbchk
Если не поможет, то:
2 способ
С помощью db52_recover
db52_recover -vh /var/lib/rpm
Если не поможет, что:
3 способ
С помощью perl
perl -MURPM -e 'URPM::DB::convert("/", "btree", 1, 1)'
4 способ
Если совсем ничего не помогло
rm -f /var/lib/rpm/__db* rpm -vv --rebuilddb
5 способ
Можно попробовать откатить транзакции, если база их выдаёт
urpmi.recover --list-safe
(найти стабильное состояние и откатить на нужное количество транзакций, обозначенных датами)
urpmi.recover --transactions --rollback 3
6 способ
Этот способ не работает. urpmi не переваривает список пакетов из файла rpmpkgs.
Ему нужен список без версий и архитектуры
Когда полный финиш копируем из /var/log последний здоровый rpmpkgs в удобное место.
Например, в ваш домашний каталог
cp /var/log/rpmpkgs /home/username
На всякий случай копируем всё из папки /var/lib/rpm
cp /var/lib/rpm/ /var/lib/rpm-stored
Удаляем файлы __db, Packages из /var/lib/rpm и логи из папки ./log
rm -f /var/lib/rpm/__db* rm -f /var/lib/rpm/Packages rm -f /var/lib/rpm/log/log*
Теперь заново создадим базу
rpm -vv --rebuilddb
Проверим, что работает
urpmi wget,urpmi
Теперь вспомним, где rpmpkgs и скачаем все пакеты, т.к. в них находятся заголовки и прочая инфа для базы
cat /home/username/rpmpkgs | xargs urpmi --no-install
Последнее что остаётся, собственно всё поставить, но без установки
cat /home/username/rpmpkgs | xargs urpmi --justdb
или
cat /home/username/rpmpkgs | xargs rpm -i -v --nodeps --noscripts --notriggers --justdb --excludepath /