Apt fix broken install что это
Перейти к содержимому

Apt fix broken install что это

  • автор:

Как сделать, чтобы 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. 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *