Как вы находите зависимости при установке программного обеспечения?

В руководствах по установке программного обеспечения у них всегда есть длинный список зависимостей. Как они находят эти зависимости?

Например, я начинаю на новом сервере Ubuntu, следуя инструкциям по установке rvm. Они предоставляют что-то вроде:

sudo apt-get install git-core libreadline5 libncurses5-dev libreadline5-dev build-essential zlib1g-dev libssl-dev libpcre3-dev libxml2-dev libxslt-dev;

Я просто хочу понять, как они находят все эти зависимости. Копирование и вставка работ, но я думаю, что это важнее понять.

2 ответа

Решение

Обычно apt сделает это за вас. Если вы попытаетесь установить бинарный пакет с неудовлетворенными зависимостями, apt сообщит вам, какие из них отсутствуют, и попросит разрешения на их установку.

большинство исходных текстов сообщают вам в файле README, что такое зависимости -dev.

Каждый пакет поставляется со списком своих зависимостей. Для дебов, которые использует Ubuntu, вы можете сделать:-

[andys@daedalus ~]$ apt-cache depends git-core
git-core
  Depends: git

Зависимости для пакета указываются при сборке пакета. Некоторые из них указываются вручную сопровождающим пакета (лицом, ответственным за сборку пакета), а некоторые определяются автоматически при сборке пакета. Если вы скачаете исходный пакет Debian и посмотрите в debian/control файл, вы увидите несколько строк, таких как Depends:, Conflicts:, Replaces:, так далее.

Итак, вернемся к примеру - git-core зависит только от одного пакета, который git, git это, вероятно, метапакет какого-то рода, который, в свою очередь, имеет целый ряд зависимостей, чтобы убедиться, что установлены все пакеты, необходимые для запуска git, а не только для удовлетворения зависимостей одного пакета. Если мы посмотрим на git пакет:-

[andys@daedalus ~]$ apt-cache depends git
git
  Depends: libc6
  Depends: libcurl3-gnutls
  <...snip...>
  Suggests: git-cvs
  Suggests: git-svn
  Suggests: git-email
  <...snip...>
  Recommends: rsync
  <...snip...>
  Conflicts: git-core
  <...snip...>
  Breaks: stgit
  Breaks: stgit-contrib
  Replaces: <cogito>
  Replaces: git-core

... вы увидите, что git Сам имеет дополнительные зависимости. Чтобы еще больше усложнить ситуацию, существуют разные виды зависимостей, помимо того, что требуется просто установить другой пакет...

  • Конфликты - этот пакет конфликтует с другим пакетом, и вы, вероятно, не сможете установить конфликтующий пакет, не удалив его, и наоборот. В этом случае, git конфликтует с git-core, На моей коробке здесь git-core Пакет помечен как устаревший, поэтому, вероятно, это указано здесь.
  • Разрывы - этот пакет разбивает другой пакет, и его установка - хотя, возможно, не требующая удаления пакета, который будет поврежден - вызовет проблемы с программным обеспечением, установленным этим пакетом. Опять же, глядя на наш пример, stgit а также stgit-contrib пакеты будут считаться сломанными один раз git установлено.
  • Заменяет - этот пакет заменяет другой пакет, что означает, что другой пакет устарел и, вероятно, может быть удален. git-core пакет снова появляется здесь.

Существуют также "мягкие" типы зависимостей, такие как " Рекомендует" и " Предложения", которые не требуются для устанавливаемого пакета, но рекомендуются или предлагаются, как следует из названия. Еще раз, глядя на пример, предлагаемые и рекомендуемые пакеты являются дополнениями к git или инструментами, не имеющими прямого отношения, которые облегчат его использование.

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

У разных менеджеров пакетов есть разные способы сделать это разрешение зависимостей. apt-get, aptitude а также dselectНапример, все, по сути, делают одно и то же, но способ их решения отличается. Вы можете найти это aptitude а также dselect с радостью предоставит вам способ установки пакета, тогда как apt-get не может.

Если вам интересно узнать больше о пакетах Debian, ознакомьтесь с Руководством для новых сопровождающих Debian, в котором рассказывается о некоторых особенностях debs.

Другие вопросы по тегам