14

Допустим, есть программное обеспечение, которое я не хочу устанавливать через apt , но вручную. (TeXLive, потому что я хочу использовать выпуск 2011 года, и у apt есть только версия 2009 года.)

Допустим, есть еще одна программа, которую я хотел бы установить через apt , которая, однако, зависит от первой программы. (Vim LaTeXSuite, так как неудобно устанавливать вручную для общесистемного использования.)

По умолчанию apt не "видит" первое программное обеспечение и приступает к установке множества ненужных и нежелательных программ (например, TeXLive 2009) только для удовлетворения метаданных зависимостей.

Как я могу либо:

  • Скажите apt , что данный пакет (например , texlive устанавливаются для всех практических целей, и что она не должно быть установлена в зависимости от какого - то другого пакета?

  • Скажите apt установить данный пакет (например, vim-latexsuite), не заботясь о его зависимостях?

Я перебрал различные apt man-страницы и вышел пустым, а также нашел этот вопрос на этом сайте, но чувствую, что должен быть менее хакерский способ сделать это, нет?

(Из моих времен Gentoo я помню, как emerge --inject и /etc/portage/package.provides , и я в основном ищу apt эквиваленты.)

3 ответа3

12

Для создания метапакетов , предоставляющих эти зависимости, вы должны использовать пакет equivs , а затем использовать dpkg для установки этих пакетов.

equivs и прочитать их документацию, но это руководство для Ubuntu довольно обширное и должно распространяться и на другие системы APT.


Также, если вы чувствуете, что пакет должен быть в состоянии установить без указанной зависимости, вы должны сообщить об ошибке в пакет, объяснив случай, когда зависимость не нужна.

В этом случае texlive-base-bin видимому, только "Рекомендуется", а не "Зависимость", по крайней мере, в базовом дистрибутиве Debian (возможно, отчасти, поскольку texlive - такой огромный пакет), а потому, что он распространен для установки апстрима. TeX Live на Debian, поскольку дистрибутивная версия часто сильно отстает (по той причине, что пакет является настолько чудовищным, что его часто невозможно упаковать без существенной работы, которая в основном выполняется одним или несколькими лицами, которые утверждают, что имеют живет рядом с Debian), трюк с equivs часто используется с TeX Live (вау, это предложение вышло из-под контроля :-)).


Дополнение: Для получения более подробных инструкций для тех, кто хочет установить TeXLive вне системы пакета, эти инструкции для TeX.SX являются более обширными и, скорее всего, будут продолжать обновляться. Они также включают в себя более четкие инструкции, касающиеся шага equivs .

1

Вы можете использовать флаг --nodeps в dpkg, который должен установить пакет без каких-либо зависимостей.

   --ignore-depends=package,...
          Ignore  dependency-checking for specified packages (actu-
          ally, checking is performed, but only warnings about con-
          flicts are given, nothing else)

Есть очень похожий вопрос о Serverfault, на который стоит обратить внимание.

0

Следующее удалит зависимость из файла .deb, в этом случае удалит зависимость libperl5.20 от freeradius:

dpkg-deb -x freeradius_2.2.5+dfsg-0.2+deb8u1_amd64.deb freeradius
dpkg-deb -e freeradius_2.2.5+dfsg-0.2+deb8u1_amd64.deb freeradius/DEBIAN
sed -i  -e 's/, libperl5.20 (>= 5.20.2)//g' freeradius/DEBIAN/control
dpkg-deb -b freeradius freeradius_2.2.5+dfsg-0.2+deb8u1_amd64.deb

Это позволяет вам установить пакет, не зная, что зависимость существует.

Если вы устанавливаете определенные версии пакетов вручную, вы также можете остановить обновление пакета apt-get upgrade в будущем:

apt-mark hold freeradius

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .