Как скомпилировать и установить программы из исходного кода

39

Это проблема, которая действительно ограничивает мое удовольствие от Linux. Если приложение не находится в репозитории или если у него нет сценария установки, тогда я действительно борюсь, где и как установить приложение из исходного кода.

По сравнению с Windows это просто. Вы (в значительной степени) обязаны использовать приложение-установщик, которое выполняет всю работу в мастере. С Linux ... не так много.

Итак, есть ли у вас какие-либо советы или инструкции по этому поводу или есть какие-либо веб-сайты, которые явно объясняют, как, почему и где устанавливать программы Linux из исходных текстов?

Nitrodist
источник
7
«По сравнению с Windows это просто. Вы (в значительной степени) обязаны использовать приложение-установщик, которое выполняет всю работу в мастере. С Linux ... не так уж и много». В этом вопросе есть слабое место. В Windows вы редко получаете исходный код, поэтому вы зависите от того, кто сделал пакет. Если подумать, это не сильно отличается от того, что «не было пакета Linux, поэтому я должен собрать из исходного кода», т.е. не было способа получить это для начала. Сборка из исходного кода обычно является последним средством в * nix-land, но редко используется в Windows-ville.
Эйвери Пейн
2
Это сказанное ... +1 удар за общий вопрос, на который должны ответить все новички в * nix системах. :) Сборка из исходного кода иногда означает разницу между исправлением неприятной ошибки и просто страданием до следующего выпуска программного обеспечения. Это действительно не так уж и плохо, и, как многие здесь отметили, когда вы знаете, что искать и как это сделать, довольно безболезненно.
Эйвери Пейн

Ответы:

22

Обычно у проекта будет веб-сайт с инструкциями по его сборке и установке. Google для этого в первую очередь.

По большей части вы будете делать либо:

  1. Загрузите tarball (файл tar.gz или tar.bz2), который является выпуском определенной версии исходного кода.
  2. Распакуйте архив с помощью команды, подобной tar zxvf myapp.tar.gzархиву в сжатом виде или tar jxvf myapp.tar.bz2в архиве с архивом
  3. перейдите в каталог, созданный выше
  4. бег ./configure && make && sudo make install

Или:

  1. Используйте git или svn или что-то еще, чтобы получить последний исходный код из их официального исходного репозитория
  2. перейдите в каталог, созданный выше
  3. бег ./autogen.sh && make && sudo make install

Как configure, так и autogen.sh примут аргумент --prefix, чтобы указать, где установлено программное обеспечение. Я рекомендую проверить Где я должен поставить программное обеспечение, которое я сам собираю? за советом по поводу лучшего места для установки программного обеспечения на заказ.

Сэнди
источник
Почему autogen.sh используется для получения последней версии, а configure / make используется для официального выпуска?
Луи Салин
1
Как правило, люди, которым нужно «передовое» программное обеспечение, извлекают релиз из программного обеспечения для управления версиями (например, git, subversion или CVS). Это «крайний край», потому что он, вероятно, не проверен, в отличие от выпущенного архива, который (вероятно) был признан работоспособным (по крайней мере, в основном). Есть смысл?
Мэтт Симмонс
2
@Matt, конечно, это имеет смысл, но я думаю, что комментарий был больше направлен на тот факт, что Сэнди теперь заставляет его выглядеть так, как будто есть autogen.sh в каждом стволе git'd / svn'd.
Райх
1
И курица в каждом горшке ... или что-то в этом роде. Черт, время от времени я тоже сталкиваюсь с программным обеспечением без скрипта настройки. Если бы существовал простой, унифицированный способ сделать это, нам бы не понадобились пакеты ;-)
Мэтт Симмонс
Мэтт абсолютно прав, поэтому я сказал «по большей части» и сначала выступил за поиск веб-сайта проекта. Совет autogen.sh/configure будет полезен практически для каждого модуля GNOME, а также для множества других проектов. Некоторые проекты не используют automake, и будут иметь только Makefile, и вы просто запустите make && sudo make install. Некоторые проекты Python будут иметь только setup.py, который вы будете вызывать для установки (так как нет реальной настройки компиляции). Есть также много других систем сборки / установки. Надеемся, что файлы README или INSTALL точно объяснят, что делать.
Сэнди
3

Я просто хочу добавить, что есть менеджеры пакетов, которые компилируют пакеты из исходного кода и обрабатывают все зависимости пакетов, флаги и т. Д.

В системах BSD это ports: Использование Коллекции Портов

В Debian apt-getменеджер пакетов также может быть установлен из исходного кода: APT HOWTO: Работа с исходными пакетами (То же самое касается Ubuntu, Linux-mint и всего остального, основанного на Debian)

В дистрибутиве Gentoo используется portageменеджер пакетов, который компилирует всю систему только из исходного кода: Введение в Portage .

Slackware может компилировать пакеты, но я не знаю, есть ли там менеджер пакетов для этого .. =)

В любом случае вы всегда можете скомпилировать пакеты вручную, как Сэнди упоминал выше =) Также должна быть возможность использовать apt-getили portageменеджеры пакетов в любом другом дистрибутиве

Holms
источник
1
Сказать «менеджер пакетов apt-get может установить из исходного кода» неверно. В цитируемом разделе описывается, как можно создать пакет Debian из источников Debian . Не произвольные источники вверх по течению.
Фахим Митха
2

Я думаю, что лучше всего прочитать документацию, прилагаемую к той конкретной программе или приложению, которое вы хотите установить. Обычно внутри tarballs находятся файлы readmes / README (исходный архив приложения, который вы обычно можете загрузить) или, возможно, даже файлы INSTALL, чтобы прочитать и узнать, какой способ установки приложения является предпочтительным. Короче: RTFM;)

Райхе
источник
Я пришел сюда, потому что README дал все требования для сборки под Linux, но содержит только инструкции по установке Windows. Принятый ответ сработал для меня и, вероятно, работает большую часть времени. Я думаю, что это почти лучший совет попробовать маршрут ./configure и перейти к README, если он не работает (т.е. отсутствует зависимость, и вы не можете прочитать выходные данные компилятора).
Стивен С.
1

Сводка по использованию Коллекции Портов во FreeBSD:

Найти порт

Порты упорядочены по категориям, поэтому, если вы не знаете, к какой категории относится порт, вы должны сначала найти его:

cd /usr/ports
make search name=myport

Иногда таких записей слишком много. Я лично предпочитаю:

find /usr/ports -name myport* -print -depth 2

Используйте *при поиске, поскольку часто доступно несколько версий порта. Аргумент глубины гарантирует, что ваши возвращаемые результаты не будут излишне загромождены совпадениями, которые вы вряд ли захотите.

конфигурация

Часто вам захочется выполнить некоторые настройки; Программное обеспечение, такое как Apache и Postgres, практически требует его. Существует три основных варианта: командная строка, окружение и файлы конфигурации make. Чтобы начать с командной строки:

make showconfig

это перечислит параметры конфигурации по умолчанию. Если вам нравятся настройки по умолчанию, вы готовы к компиляции и установке. Если не,

make config

вызовет диалоговое окно, где вы можете выбрать, какие параметры вы хотите. (Не путайтесь с этим, и make configureэто настраивает ваш порт с выбранными вами опциями!) Этого часто достаточно, но для некоторых программ, таких как Apache, часто существует сложная конфигурация, которую простой диалог не может обработать. Для этого вы также должны взглянуть на Makefile (ы), которые иногда дают вам некоторые дополнительные цели для make, которые дают вам больше информации. Продолжить пример Apache

make show-modules
make show-options
make show-categories

предоставит вам информацию о настройке выбранных вами модулей, опциях потоков и т.п. Если значения по умолчанию вашего порта в основном хороши, и вы просто хотите изменить несколько вещей, вы также можете просто передать пары ключ = значение, такие как переменные среды:

make MYVBL1=MYVAL1 ... install clean

Кроме того, вы можете установить параметры переключателя с помощью -Dопции:

make -D MYVAR -D MYOTHERVAR ... install clean

Однако для сложной конфигурации командная строка не будет работать хорошо, и вы лучше, ни один из первых двух методов не будет эффективным. В этом случае вы можете создать файл конфигурации и передать его makeс помощью переменной __MAKE_CONF. FreeBSD имеет файл конфигурации по умолчанию, /etc/make.confкоторый обычно содержит информацию о ранее установленных портах и ​​других системных настройках. Для начала создайте файл с параметрами вашего порта, вызовите его ~/myport.mkи затем объедините этот файл с /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

Затем вы можете дважды проверить свою конфигурацию:

make showconfig __MAKE_CONF=~/make.port.conf

и если все выглядит хорошо

make install clean __MAKE_CONF=~/make.myport.conf

BEWARE! Если вам необходимо настроить параметры конфигурации после make configureили после установки полностью или частично, вам необходимо сначала очистить конфигурацию :

make rmconfig

Невыполнение этого требования приведет к неожиданному взаимодействию между подсистемой портов, makeнастройками по умолчанию для вашего порта и желаемой конфигурацией.

Это довольно много для краткого изложения, но сложность конфигурации в основном связана с приложением, а не с портом. Bash, например, на самом деле не имеет никаких вариантов.

Установка

Это легкая часть:

make install clean

или вы можете

make build
make install
make clean

который просто больше печатать.

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

gvkv
источник
0

Недавно я начал использовать «Checkinstall» при установке из источника вне моего менеджера пакетов. Он создает «пакет» из стороннего архива, который затем можно установить (и удалить) с помощью инструментов менеджера пакетов.

Проверьте эту статью - http://www.linuxjournal.com/content/using-checkinstall-build-packages-source

Арье
источник