Установка из источника. Как разрешить зависимости, не разрушая менеджер пакетов

19

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

Многие научные программы, которые мне нужны, не распространяются в виде пакетов. Я понимаю, что "./configure" устанавливает переменные компиляции, а проверка на наличие зависимостей "make" выполняет компиляцию "sudo make install", которая помещает все библиотеки и бины на свои места. Однако это никогда не работает. Я редко выхожу из стадии а) "./configure", не попадая в ад зависимости, и если я это сделаю, б) "sudo make install", вероятно, уничтожит мою коробку.

а) ад зависимости очень расстраивает. Иногда у меня есть библиотека, но она мне не нравится. Или библиотека не хочет устанавливать. Или «настроить» не может найти его. Или мой дистрибутив разместил его где-то не должно быть. Или есть две версии в моей системе. Проблема в том, что я не могу понять, как диагностировать и, следовательно, исправить эти проблемы. Какие полезные ссылки выучить кому-то, кому не нужно становиться программистом?

б) Насколько я понимаю, «make install» заменит некоторые библиотеки и изменит настройки без того, чтобы мой менеджер пакетов знал об этом. Поэтому некоторые программы не запускаются, другие не могут быть обновлены. Итак, если я не использую «make install» и просто храню скомпилированный двоичный файл в своем пользовательском каталоге с символической ссылкой, добавленной в PATH, я буду в чистом виде?

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

Ленц
источник
3
Вы не говорите, какой дистрибутив вы используете, это было бы интересной информацией. Если вы используете производную Debian, вы можете использовать ее apt-get build-dep <package>для автоматической установки необходимых зависимостей.
Марко
Я использую CentOS 6 (чтобы иметь то, что использует супер-гуру в нашей лаборатории), но я использовал Ubuntu.
Ленц
Добро пожаловать в жизнь дистрибутора. Делать все это отслеживание зависимостей не особенно сложно, но это тяжелая работа.
Жиль "ТАК - перестань быть злым"
См. Менеджеры пакетов без рута и, возможно, другие вопросы с пометкой « не пользователь root» , касающиеся установки программного обеспечения и управления пакетами.
Жиль "ТАК - перестань быть злым"

Ответы:

16

Большинство пакетов будут иметь <package>-dev(для Debian) или <package>-devel(для Red Hat) библиотеки, с которыми нужно ссылаться для сборки.

Так, например, если источник говорит, что это требуется libxml, в системах на основе Debian вы найдете libxml2и libxml2-dev(используйте apt-cache search <dependancy>для их поиска).

Вам понадобится libxml2-devпостроить его и libxml2запустить.

./configureШаг обычно поддерживает флаги любят --with-libxml=/usr/lib/указывать его на правильные библиотеки ( ./configure --helpдолжны перечислить все варианты). Он также обычно поддерживает изменение места установки с помощью --prefix=$HOME/sw. Использование префикса вне того, что контролируется вашим менеджером пакетов, - лучший способ избежать конфликтов с установленным менеджером пакетов.

О Debian и производных с использованием --prefixв /usr/local/или /opt/local/должны быть безопасными.

Если нужная вам библиотека (или версия) недоступна в менеджере пакетов, просто скачайте исходный код и скомпилируйте его, используя аналогичные параметры. Наиболее важно использовать --prefixвнешний вид вашего менеджера пакетов и при компиляции программного обеспечения, которое вы действительно хотите использовать --with-<library>=/<path/to/installed/library>.

bahamat
источник
5

Есть инструмент, auto-aptкоторый можно использовать для этого.

От человека авто-кв :

auto-apt - это программа, которая проверяет доступ к файлам программ, работающих в среде auto-apt. Если программа получит доступ к файлу неустановленного пакета, auto-apt установит пакет, содержащий файл, используя apt-get.

Он используется следующим образом:

auto-apt run ./configure

Другой способ - использовать apt-get build-dep <package>дистрибутивы на основе Debian.

Marco
источник
apt-get build-dep <package>работал на меня. Было неприятно бегать ./configureснова и снова, чтобы выучить еще один необходимый пакет!
HeatfanJohn
2

Для распределений на основе RPM, вы можете попробовать свои силы в создании собственных пакетов (это не что трудно ...).

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

vonbrand
источник