Назад | Перейти на главную страницу

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

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

Например, я начинаю на новом сервере 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;

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

Каждый пакет имеет список собственных зависимостей. Для дебс, который использует 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, который проходит через некоторые кишки деб.

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

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