Скажите способность игнорировать сломанный пакет

8

Я установил Amsynth от Lucid в Karmic, используя:

dpkg --force-depends-version -i amsynth_1.2.2-1_i386.deb

Причина установки версии Lucid заключается в том, что версии Karmic исполнилось 3 года, и она зависает на моей машине. Пакет Lucid Amsynth зависит от более новых версий libatk1 и libjack0, чем Karmic, но я подумал, что рискну, и оказалось, что Amsynth работает нормально.

Однако aptitude пытается удалить Amsynth каждый раз, когда я делаю обновление. Я думаю, что мне удалось отложить это, но теперь способность отменяется. Как я могу сказать aptitude игнорировать сломанный пакет и продолжать.


источник
На данный момент я просто удалил его. Я буду просто переустанавливать каждый раз, когда мне это понадобится снова, это не займет много времени, до тех пор, пока не будет достаточно ошибок, чтобы попытаться скомпилировать его снова.
Если вам нужно что-то из более новой версии и нужны более новые библиотеки, вы можете либо просто взять их с собой, либо загрузить исходный пакет и пересобрать его в своей системе. Однако я сталкивался с этим, пытаясь использовать сторонний пакет, и тогда нужны взломы.
Jan Hudec

Ответы:

7

Если вы установили программу через deb-файл и dpkg, вы также можете вручную изменить зависимости установленного файла .deb. Я был доведен до такой крайности однажды ...

ar x foo.deb
vim control.tar.xz  # see below
ar r foo.deb control.tar.xz
dpkg -i foo.deb

и dpkg больше не знает о зависимостях foo. В vim вы должны выбрать ./control (я использую vim для чтения упакованных файлов - распакуйте и используйте другой редактор и перепакуйте, если хотите) и удалите нежелательные зависимости из строки

Depends: foo bar
skunk_michi
источник
1
Вам лучше использовать dpkg-deb скорее, чем ar, ar это деталь реализации dpkg, которая может измениться в будущем.
jmtd
Спасибо, это решение сработало для меня, но когда я делаю обновление apt-get, я получаю сообщение «Следующие пакеты были сохранены: numptyphysics: i386» (apt-get dist-upgrade ничего не говорит). Это сообщение нормально, и мы не можем от него избавиться?
baptx
4

Есть взломанное решение на Ubuntuforums , Решение кряка лучше, но больше работы.

Я не могу найти что-нибудь об этом в Google, кроме компиляции вашего   «Пустой пакет» (невозможно без удаления сломанного   пакет (ы). если вам не повезло уже иметь инструменты),   но поиск моего собственного жесткого диска дал мне ответ в конце концов!

Для тех, кто хотел бы знать, вот как «разорвать» пакет в   synaptic / aptitude / apt-get, не удаляя его.

Прежде всего, запишите установленный вами пакет и   пакет (ы), это зависит от того, что придать ему нарушенный статус. Скажи я вынужден   установка яблок, которая зависит от устаревшей упаковки, которая   не в хранилище:

В терминале введите код:

sudo gedit /var/lib/dpkg/status

ищите в файле яблоки, пока не найдете что-то вроде:

Код:

Package: apples
Status: install ok installed
Priority: optional
Section: libs
Installed-Size: 316
Maintainer:
Architecture: i386
Source: applesauce
Version: 1.0.10-1
Depends: packageA, packageB, obsolete
Description: Apples on your desktop!

Удалите устаревшие из строки Зависит: сохраните файл, и все готово.   Надеюсь, это поможет некоторым людям.

Iain
источник
Ик. хорошая находка, но я не фанат лжи менеджеру пакетов (что, по сути, делает этот хак). Лучше вообще не использовать APT, чем бегать, ломая его волей-неволей. Вот почему компиляция ваших собственных пакетов - это хорошая вещь - никаких сломанных зависимостей и никакой лжи вашему менеджеру пакетов.
quack quixote
У меня нет проблем с обманом менеджера пакетов, тем более что через несколько месяцев я переустановлю ОС, но не смог найти файл, на который есть ссылки в ветке.
Weird. Это должно быть там. Попробуйте выполнить «cd / var / lib / dpkg», а затем «sudo nano status».
Iain
1
Ссылка больше не работает. Какова точная причина, почему ответы только для ссылок здесь не одобряются? Если бы вы объяснили здесь, это был бы правильный ответ.
Jan Hudec
Не знаю, является ли это постоянным или нет, но пока что это кажется неплохим решением для установки пакетов, которые имеют жесткие зависимости от более недоступных версий Java.
krispy
2

В разделе «Настройки» aptitude (Ctrl-T, чтобы войти в меню; в разделе «Опции») снимите флажок с опции в «Обработка зависимостей» раздел, который говорит «Автоматически исправлять поврежденные пакеты перед установкой или удалением» , Это должно заставить aptitude перестать пытаться исправить пакет каждый раз, когда вы меняете другие пакеты.

В качестве более постоянного исправления вы должны взять пакеты с исходным кодом для Lucid. Amsynth пакет, который вы установили, а также исходные пакеты для libatk1 а также libjack0 и создайте свой собственный обновленный пакет. В зависимости от того, что еще использует эти библиотеки, вам может потребоваться обновить и другие пакеты, но вы, вероятно, можете обойтись без них. (Это по сути Бэкпорт эти пакеты от Lucid до Karmic - вы должны проверить репозиторий Karmic-backports или PPA, чтобы увидеть, сделал ли кто-нибудь это уже. Если ваши новые пакеты работают, рассмотрите возможность отправки их в Karmic-backports для использования другими пользователями.)

quack quixote
источник
Спасибо, я попробовал ваше первое предложение, но, похоже, это не имело значения. Обновления просто прервутся. Я также попытался скомпилировать его до того, как попытался установить пакет Lucid, но безуспешно. Я мог бы попробовать еще раз в будущем.