Как сделать, чтобы apt система не ругалась на битые зависимости у пакета
Есть древний проприетарный пакет (т.е. пересобрать не вариант), установленный с нарушением зависимостей (не хватает кое-каких) на современной системе. Но он приемлемо для меня работает и без этих зависимостей.
fix broken install его просто удаляет. Вот как тут штатно отключить ругань на это?
praseodim ★★★★★
01.11.17 15:18:54 MSK
Если у тебя был deb этого пакета (или он есть еще), то ты просто распакуй его, подправь debian/control на новые зависимости (раз он с ними еще работает, то хуже ему не будет) и запакуй назад. Проблем быть не должно.
Zubok ★★★★★
( 01.11.17 15:27:25 MSK )
Я как-то делал один раз такое, поэтому у меня только один рецепт из практики:
При помощи dpkg-deb -e packagename.deb извлекаем спек. Автоматически создается каталог /DEBIAN со скриптами и упаковочной информацией. Затем извлекаем все дерево каталогов пакета при помощи dpkg-deb -x packagename.deb . И /DEBIAN, и дерево каталогов кладем во временную директорию /tmp. Затем подправляем спецификацию /DEBIAN/control на предмет зависимостей. Последний этап — перепаковка при помощи dpkg-deb -b /tmp new_package.deb .
Zubok ★★★★★
( 01.11.17 15:31:48 MSK )
И еще. Может быть, если нет пакета deb, можно подправить напрямую в базе данных пакетов. Вот только я сейчас не соображу где именно. Я думаю, что в /var/lib/dpkg/status и в /var/lib/dpkg/available может быть. Ты же не через apt этот пакет ставил наверняка, поэтому apt в списках пакетов его не имеет (кроме случая, если ты локальный репозиторий apt держишь). Ну, попробуй. Если не получится, то еще посмотрим, где может быть. Да, и кэш apt после этого на всякий случай потри и сгенери новый через apt-get update или aptitude update.
Zubok ★★★★★
( 01.11.17 15:49:28 MSK )
Последнее исправление: Zubok 01.11.17 15:52:24 MSK (всего исправлений: 2)
Посмотри на /var/lib/dpkg/status и заставь его думать, что у пакета нет тех зависимосией.
А можешь ещё скачать либы зависимостей и в .desktop прописать LD_PRELOAD. Вот тебе вектор.
anonymous
( 01.11.17 17:59:29 MSK )
Ответ на: комментарий от Zubok 01.11.17 15:31:48 MSK
Как вариант также можно распаковать куда-нибудь в /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 ★★★★★
( 01.11.17 18:51:17 MSK )
Последнее исправление: anonymous_sama 01.11.17 18:51:39 MSK (всего исправлений: 1)
да просто игнорировать же
targitaj ★★★★★
( 01.11.17 18:58:48 MSK )
Ответ на: комментарий от Zubok 01.11.17 15:31:48 MSK
При помощи dpkg-deb -e packagename.deb извлекаем спек. Автоматически создается каталог /DEBIAN со скриптами и упаковочной информацией. Затем извлекаем все дерево каталогов пакета при помощи dpkg-deb -x packagename.deb. И /DEBIAN, и дерево каталогов кладем во временную директорию /tmp. Затем подправляем спецификацию /DEBIAN/control на предмет зависимостей. Последний этап — перепаковка при помощи dpkg-deb -b /tmp new_package.deb
Спасибо! Так и сделал и все получилось.
praseodim ★★★★★
( 01.11.17 19:07:25 MSK ) автор топика
Ответ на: комментарий от anonymous_sama 01.11.17 18:51:17 MSK
но проблема в том что если ТС это сделает не грубо, то ему придется потом так с каждой сменой релиза делать.
Вряд ли там будет новый релиз, а если вдруг и будет, то будет все совсем иначе.
praseodim ★★★★★
( 01.11.17 19:12:22 MSK ) автор топика
Ответ на: комментарий от praseodim 01.11.17 19:07:25 MSK
Можно было dpkg-deb -R вместо этих двух dpkg-deb в начале. Я до этого ключа в свое время просто не дошел тогда. Он все полностью распаковывает в нужную директорию.
Zubok ★★★★★
( 01.11.17 19:13:42 MSK )
Ответ на: комментарий от anonymous_sama 01.11.17 18:51:17 MSK
Ну можно и свой пакет сделать, но мне кажется, что проще просто спек подправить, повысить версии пакетов (можно же неравенствами задать типа >=2.2.1), заменить другие зависимости, если пакеты поменяли название. Это все чтобы они подтянулись автоматом при установке и все было в порядке.
А смена релиза — это весьма редкое событие. Главное, чтобы в релизе вообще нужные библиотеки были, а то внезапно qt3 уже не найти и тут уже вопрос правки отходит на второй план. На первый приходит вопрос, где взять qt3 (это просто пример).
Zubok ★★★★★
( 01.11.17 19:19:20 MSK )
Последнее исправление: Zubok 01.11.17 19:19:30 MSK (всего исправлений: 1)
Ответ на: комментарий от Zubok 01.11.17 19:13:42 MSK
Хорошо, хотя получилось и так.
Правда я создавая тему думал, что должен быть какой-то штатный способ принудительно отключить проверку зависимостей, но —force-all позволяет ставить «невзирая на», а вот в базе dpkg все-равно битая зависимость оставалась.
В принципе пересборка деба даже красивое решение.
praseodim ★★★★★
( 01.11.17 19:27:32 MSK ) автор топика
Рад, что у вас всё получилось. На будущее: в такой ситуации самый простой метод решения — использовать equivs.
Решение проблем при установке программ
Иногда, при работе с пакетными менеджерами, возникает проблема с неразрешенными зависимостями пакетов. В данной статье будут рассмотрены варианты решения этой проблемы.
Все операции выполняются в терминале.
Убедитесь что ни один пакетный менеджер не запущен. Это может быть: apt-get, aptitude, Synaptic, KPackageKit, Центр Приложений Ubuntu и тд.
Используя APT-GET
Обычно ошибка выглядит так:
E: Неудовлетворённые зависимости. Попытайтесь выполнить 'apt-get -f install', не указывая имени пакета, (или найдите другое решение).
Удалите кеш пакетов:
sudo apt-get clean
Удалите осиротевшие пакеты:
sudo apt-get autoremove
Обновите список пакетов:
sudo apt-get update
sudo apt-get -f install
Обычно этого достаточно.
Если вы запутались с зависимостями, поможет интеллектуальное обновление системы:
sudo apt-get dist-upgrade
Если установка была прервана, то следует переустановить пакет
sudo apt-get install --reinstall имя_пакета
Если репозиторий недоступен, исправить:
/etc/apt/sources.list — главный список репозиториев
/etc/apt/sources.list.d — каталог для сторонних репозиториев
Если невозможно удалить/переустановить пакет, исправить:
Как пофиксить ошибку?
E: Unmet dependencies. Try ‘apt —fix-broken install’ with no packages (or specify a solution).
пытаюсь фиксить её, пишет
E: Sub-process /usr/bin/dpkg returned an error code (1)
пытаюсь фиксить эту ошибку и опять
E: Unmet dependencies. Try ‘apt —fix-broken install’ with no packages (or specify a solution).
Как исправить? вот полный лог
apt-get install ftp
Reading package lists. Done
Building dependency tree
Reading state information. Done
You might want to run ‘apt —fix-broken install’ to correct these.
The following packages have unmet dependencies:
bsdmainutils : Depends: calendar but it is not going to be installed
Depends: ncal but it is not going to be installed
libc-bin : Depends: libc6 ( < 2.31) but 2.31-2 is to be installed
Recommends: manpages but it is not going to be installed
E: Unmet dependencies. Try ‘apt —fix-broken install’ with no packages (or specify a solution).
apt --fix-broken install
Reading package lists. Done
Building dependency tree
Reading state information. Done
Correcting dependencies. Done
The following additional packages will be installed:
calendar cpp cpp-10 gcc-10-base libc-bin libgcc-s1 libisl22 libmpc3 libmpfr6 libstdc++6 ncal
Suggested packages:
cpp-doc gcc-10-locales
Recommended packages:
manpages
The following NEW packages will be installed:
calendar cpp cpp-10 libisl22 libmpc3 libmpfr6 ncal
The following packages will be upgraded:
gcc-10-base libc-bin libgcc-s1 libstdc++6
4 upgraded, 7 newly installed, 0 to remove and 74 not upgraded.
3 not fully installed or removed.
Need to get 0 B/12.4 MB of archives.
After this operation, 35.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up libc6:amd64 (2.31-2) .
Checking for services that may need to be restarted.
Checking init scripts.
Nothing to restart.
sleep: cannot read realtime clock: Invalid argument
dpkg: error processing package libc6:amd64 (—configure):
installed libc6:amd64 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@MSI:~#
Метки темы
Участник Admin
Присоединился: 5 лет назад
Записи: 267
10/09/2020 3:57 пп
Приветствую! Видно, что ошибки меняются, например, последняя ошибка из-за того, что обновление пакета не завершено.
Поэтому выполните один раз команду
sudo apt update
А затем несколько раз команду
sudo apt --fix-broken install
пока сообщения об ошибках не станут одинаковыми — или пока проблема не решится. Затем напишите, на какой ошибке застряли.
Ответить Цитата
(@ilovecactus111)
New Member
Присоединился: 3 года назад
Создатель темы 10/09/2020 7:39 пп
root@MSI:~# sudo apt —fix-broken install
Reading package lists. Done
Building dependency tree
Reading state information. Done
Correcting dependencies. Done
The following additional packages will be installed:
calendar cpp cpp-10 gcc-10-base libc-bin libgcc-s1 libisl22 libmpc3 libmpfr6 libstdc++6 ncal
Suggested packages:
cpp-doc gcc-10-locales
Recommended packages:
manpages
The following NEW packages will be installed:
calendar cpp cpp-10 libisl22 libmpc3 libmpfr6 ncal
The following packages will be upgraded:
gcc-10-base libc-bin libgcc-s1 libstdc++6
4 upgraded, 7 newly installed, 0 to remove and 74 not upgraded.
3 not fully installed or removed.
Need to get 0 B/12.4 MB of archives.
After this operation, 35.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up libc6:amd64 (2.31-2) .
Checking for services that may need to be restarted.
Checking init scripts.
Nothing to restart.
sleep: cannot read realtime clock: Invalid argument
dpkg: error processing package libc6:amd64 (—configure):
installed libc6:amd64 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@MSI:~# sudo apt —fix-broken install
Reading package lists. Done
Building dependency tree
Reading state information. Done
Correcting dependencies. Done
The following additional packages will be installed:
calendar cpp cpp-10 gcc-10-base libc-bin libgcc-s1 libisl22 libmpc3 libmpfr6 libstdc++6 ncal
Suggested packages:
cpp-doc gcc-10-locales
Recommended packages:
manpages
The following NEW packages will be installed:
calendar cpp cpp-10 libisl22 libmpc3 libmpfr6 ncal
The following packages will be upgraded:
gcc-10-base libc-bin libgcc-s1 libstdc++6
4 upgraded, 7 newly installed, 0 to remove and 74 not upgraded.
3 not fully installed or removed.
Need to get 0 B/12.4 MB of archives.
After this operation, 35.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up libc6:amd64 (2.31-2) .
Checking for services that may need to be restarted.
Checking init scripts.
Nothing to restart.
sleep: cannot read realtime clock: Invalid argument
dpkg: error processing package libc6:amd64 (—configure):
installed libc6:amd64 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
Ответить Цитата
Участник Admin
Присоединился: 5 лет назад
Записи: 267
11/09/2020 8:44 дп
Эта «красота» происходит в WSL? Если да, то нужно обязательно это указывать.
Попробуйте для исправления ошибки выполнить:
sudo -i
sudo mv /bin/sleep /bin/sleep~ ; touch /bin/sleep ; chmod +x /bin/sleep
Почему нужно указывать, что это WSL? Возможно вы не понимаете, что такое WSL, а ведь это вообще не Linux. Это я объясняю в самом начале статьи « Как установить Kali Linux с Win-KeX (графический интерфейс) в WSL2 (подсистему Windows для Linux) ».
Там же я говорю, что вы столкнётесь с самыми необычными ошибками. Самое правильное, что можно сделать, забыть про WSL и пользоваться полноценной виртуальной машиной, например, VirtualBox . Иначе так и будете решать бессмысленные проблемы. «Сам себе злобный Буратино».
Where is the meaning of «—fix-broken» of «apt install —fix-broken» documented
The guide for installing Chrome on WSLg suggests to execute sudo apt install —fix-broken . I don’t find the —fix-broken option documented in man apt . Is this option documented somewhere and/or what does it do?
- apt
- windows-subsystem-for-linux
asked May 26 at 7:04
René Nyffenegger René Nyffenegger
179 1 1 gold badge 2 2 silver badges 11 11 bronze badges
You’ve not provided release details; but you can see the options with man apt-get as the apt reference manual doesn’t still list everything.
May 26 at 7:17
It’s worth clarifying for future readers that apt’s definition of «broken» in this command does NOT mean «corrupt» or «incomplete» or «malfunctioning». In apt’s view «broken» simply means a package version conflict. The logic of the package dependencies is broken. Example: Package A requires X>N, but Package B requires X
May 26 at 11:36
1 Answer 1
apt is a front-end/handler/alternative for apt-get as stated in man apt :
apt provides a high-level commandline interface for the package management system. It is intended as an end user interface and enables some options better suited for interactive usage by default compared to more specialized APT tools like apt-get(8) and apt-cache(8).
Which also has this stated as well:
Much like apt itself, its manpage is intended as an end user interface and as such only mentions the most used commands and options partly to not duplicate information in multiple places and partly to avoid overwhelming readers with a cornucopia of options and details.
Therefore, man apt-get should be the resource for extended/specialized features . And it has:
-f, --fix-broken Fix; attempt to correct a system with broken dependencies in place. This option, when used with install/remove, can omit any packages to permit APT to deduce a likely solution. If packages are specified, these have to completely correct the problem. The option is sometimes necessary when running APT for the first time; APT itself does not allow broken package dependencies to exist on a system. It is possible that a system's dependency structure can be so corrupt as to require manual intervention (which usually means using dpkg --remove to eliminate some of the offending packages). Use of this option together with -m may produce an error in some situations. Configuration Item: APT::Get::Fix-Broken.