LINUX.ORG.RU

Как сделать, чтобы apt система не ругалась на битые зависимости у пакета

 ,


0

1

В дебиане.

Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:

Есть древний проприетарный пакет (т.е. пересобрать не вариант), установленный с нарушением зависимостей (не хватает кое-каких) на современной системе. Но он приемлемо для меня работает и без этих зависимостей.

fix broken install его просто удаляет. Вот как тут штатно отключить ругань на это?

★★★★★

Если у тебя был deb этого пакета (или он есть еще), то ты просто распакуй его, подправь debian/control на новые зависимости (раз он с ними еще работает, то хуже ему не будет) и запакуй назад. Проблем быть не должно.

Zubok ★★★★★
()

Я как-то делал один раз такое, поэтому у меня только один рецепт из практики:

При помощи dpkg-deb -e packagename.deb извлекаем спек. Автоматически создается каталог /DEBIAN со скриптами и упаковочной информацией. Затем извлекаем все дерево каталогов пакета при помощи dpkg-deb -x packagename.deb. И /DEBIAN, и дерево каталогов кладем во временную директорию /tmp. Затем подправляем спецификацию /DEBIAN/control на предмет зависимостей. Последний этап - перепаковка при помощи dpkg-deb -b /tmp new_package.deb.

Zubok ★★★★★
()

И еще. Может быть, если нет пакета deb, можно подправить напрямую в базе данных пакетов. Вот только я сейчас не соображу где именно. Я думаю, что в /var/lib/dpkg/status и в /var/lib/dpkg/available может быть. Ты же не через apt этот пакет ставил наверняка, поэтому apt в списках пакетов его не имеет (кроме случая, если ты локальный репозиторий apt держишь). Ну, попробуй. Если не получится, то еще посмотрим, где может быть. Да, и кэш apt после этого на всякий случай потри и сгенери новый через apt-get update или aptitude update.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)

Посмотри на /var/lib/dpkg/status и заставь его думать, что у пакета нет тех зависимосией.
А можешь ещё скачать либы зависимостей и в .desktop прописать LD_PRELOAD. Вот тебе вектор.

anonymous
()
Ответ на: комментарий от Zubok

Как вариант также можно распаковать куда-нибудь в /opt/packagename и перелинковать вручную, если это необходимо. По костыльности примерно одинаково. Впрочем решение с пакетом красивей, но проблема в том что если ТС это сделает не грубо, то ему придется потом так с каждой сменой релиза делать. Так что пожалуй самый красивый вариант, это создать свой пакет, который просто будет распаковывать архив. Вот пример debian/rules, например:

#!/usr/bin/make -f

%:
	dh $@

override_dh_auto_install:
		mkdir -p $(CURDIR)/debian/packagename
		tar xfz $(CURDIR)/debian/packagename.tar.gz -C $(CURDIR)/debian/packagename --strip-components=1
override_dh_auto_test:

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)

да просто игнорировать же

targitaj ★★★★★
()
Ответ на: комментарий от Zubok

При помощи dpkg-deb -e packagename.deb извлекаем спек. Автоматически создается каталог /DEBIAN со скриптами и упаковочной информацией. Затем извлекаем все дерево каталогов пакета при помощи dpkg-deb -x packagename.deb. И /DEBIAN, и дерево каталогов кладем во временную директорию /tmp. Затем подправляем спецификацию /DEBIAN/control на предмет зависимостей. Последний этап - перепаковка при помощи dpkg-deb -b /tmp new_package.deb

Спасибо! Так и сделал и все получилось.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от anonymous_sama

но проблема в том что если ТС это сделает не грубо, то ему придется потом так с каждой сменой релиза делать.

Вряд ли там будет новый релиз, а если вдруг и будет, то будет все совсем иначе.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Так и сделал и все получилось.

Можно было dpkg-deb -R вместо этих двух dpkg-deb в начале. Я до этого ключа в свое время просто не дошел тогда. Он все полностью распаковывает в нужную директорию.

Zubok ★★★★★
()
Ответ на: комментарий от anonymous_sama

Ну можно и свой пакет сделать, но мне кажется, что проще просто спек подправить, повысить версии пакетов (можно же неравенствами задать типа >=2.2.1), заменить другие зависимости, если пакеты поменяли название. Это все чтобы они подтянулись автоматом при установке и все было в порядке.

А смена релиза - это весьма редкое событие. Главное, чтобы в релизе вообще нужные библиотеки были, а то внезапно qt3 уже не найти и тут уже вопрос правки отходит на второй план. На первый приходит вопрос, где взять qt3 (это просто пример).

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Хорошо, хотя получилось и так.

Правда я создавая тему думал, что должен быть какой-то штатный способ принудительно отключить проверку зависимостей, но --force-all позволяет ставить «невзирая на», а вот в базе dpkg все-равно битая зависимость оставалась.

В принципе пересборка деба даже красивое решение.

praseodim ★★★★★
() автор топика

Рад, что у вас всё получилось. На будущее: в такой ситуации самый простой метод решения - использовать equivs.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.