Как вы находите зависимости при установке программного обеспечения?
В руководствах по установке программного обеспечения у них всегда есть длинный список зависимостей. Как они находят эти зависимости?
Например, я начинаю на новом сервере 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.