Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Резюме

  • Большинство программных продуктов собираются из исходного кода в три этапа: ./configure && make && make install.
  • Скрипт configure проверяет зависимости, а make генерирует исполняемый файл; autoconf/automake помогают автоматизировать этот процесс.
  • Установка обычно необязательна и в основном предназначена для удобства, позволяя запускать команды, скопированные в каталог PATH.

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

Что такое «сборка из исходного кода»?

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

Скомпилированные исполняемые файлы очень распространены, особенно для больших программ. При сборке из исходного кода вы используете компилятор, например gcc, для генерации исполняемого файла из исходного кода приложения, который может быть распределен по многим отдельным файлам.

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Поскольку сборка из исходников может быть сложным и длительным процессом, она обычно автоматизируется с помощью другой программы, чаще всего Make. Вы можете написать makefiles, чтобы контролировать, как проект собирает свою финальную исполняемую программу.

В более сложных проектах сами makefiles становятся большими и громоздкими. Это особенно актуально для портативных приложений, которым нужно работать в разных архитектурах и средах. Чтобы удовлетворить эти ситуации, многие проекты автоматически генерируют свои makefiles с помощью инструмента под названием autoconf/automake.

Трехэтапный процесс сборки: настройка, изготовление, установка

Результатом всего этого является общая схема, которую использует большая часть программного обеспечения для сборки из исходного кода:

./configure && make && make install

Многие популярные программы используют этот шаблон (или его вариант), включая Apache, который объясняет этот процесс в своем файле INSTALL:

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Node.js — еще один пример программного обеспечения, использующего этот шаблон. Его файл BUILDING.md содержит соответствующие инструкции:

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

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

./configure && make && make install

В качестве альтернативы вы можете запустить каждую команду отдельно, но по-прежнему использовать только одну строку с точками с запятой:

./configure; make; make install

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

. / Настроить
сделать
сделать установку

Вы можете не захотеть полностью устанавливать программное обеспечение, предпочитая запускать его прямо из его собственного каталога. Это совершенно нормально; вам просто нужно будет сбросить сделать установку команда.

Некоторые репозитории содержат скрипт конфигурации, другие (например, grep) ожидают, что вы сначала запустите другой скрипт, который сгенерирует этот файл конфигурации. Если вы ищете самый простой вариант, всегда обращайтесь к файлу INSTALL или BUILD или README и следуйте рекомендациям проекта.

Как ./configure начинает работу

Скрипт оболочки конфигурации обычно является отправной точкой процесса сборки. Он настраивает остальную часть процесса для вашей конкретной среды.

Скрипт проверяет различные зависимости, которые требуются проекту. Он обеспечивает наличие и правильность всех требуемых элементов в соответствующих версиях. Запустить . / Настроить и в результате у вас должен получиться файл с именем Makefile, который будет использоваться на следующем этапе.

Сам скрипт конфигурации можно легко настроить с помощью параметров командной строки. Запустить ./configure —помощь для их всестороннего описания.

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

Если скрипта конфигурации нет, проект может предоставить средства для его генерации. Например, репозиторий htop включает скрипт autogen.sh. Запуск этого приведет к генерации скрипта конфигурации:

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Очень простые проекты, и те, которые не написаны на языке C, могут вообще не иметь скрипта конфигурации. В этом случае трехшаговый процесс становится двухшаговым: просто запустите сделать && сделать установку.

Скрипт конфигурации часто управляет тем, что происходит позже во время установки. В частности, часто используется опция —prefix. Она определяет корневой каталог, в который будет установлено программное обеспечение. По умолчанию это /usr/local, но вы можете указать альтернативу, если хотите организовать свои файлы по-другому.

make делает большую часть работы

После того, как configure сгенерировал makefile, вы можете начать реальный процесс сборки программного обеспечения. Программа make считывает makefile и проверяет ряд правил, чтобы решить, что именно строить.

Makefile, написанные вручную, обычно легко читать, если вы знакомы с их синтаксисом. В простейшем случае makefile описывает, как сгенерировать один файл из другого, если последний более старый. Например, этот makefile описывает процесс сборки очень простой программы:

программа: program.c
    gcc -o программа программа.c

Здесь исполняемый файл program зависит от исходного файла program.c. При запуске make он проверит файл на предмет его зависимостей. Если с момента последней сборки ничего не изменилось, т. е. program новее program.c, make просто выйдет, будучи уверенным, что ничего делать не нужно. Однако если program.c изменился, он запустит gcc и скомпилирует программу.

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

За пределами этого простейшего случая можно сделать гораздо больше, а сгенерированные makefile, как правило, гораздо сложнее. Например, этот сгенерированный makefile для программы htop имеет длину 2,440 строк:

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Но вам не нужно беспокоиться об этом. Если вы не взламываете исходный код — или не пишете свой собственный — вы можете запустить make, не особо беспокоясь о том, что происходит под капотом.

Выполнение этапа make может занять много времени, особенно для сложного программного обеспечения, включающего несколько компонентов. Будьте терпеливы и не беспокойтесь, если make не удастся. Причиной обычно является отсутствие зависимости, и одним из преимуществ make является то, что он возобновит процесс сборки, не теряя уже выполненную работу.

Заключение с make install

Типичная сборка генерирует скомпилированный исполняемый файл, либо в корне проекта, либо часто в подкаталоге с именем bin. Обычно это отдельная программа, которую можно запустить через ее полный путь:

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Этого вполне достаточно для тестирования или работы над собственным программным обеспечением, но в конечном итоге вы захотите установить его в более удобном месте.

Большинство makefiles имеют цель установки, которую make проверит при запуске make install. Это часто будет использовать команду install для копирования отдельных файлов и установки соответствующих разрешений и владельца.

Место установки будет зависеть от того, как вы запустили configure. Помните, что место по умолчанию для исполняемых файлов — /usr/local/bin, на запись в который у вас может не быть разрешения. Если ваш пользователь не может записывать в место установки, вам нужно будет запустить sudo make install и указать пароль root для продолжения.

Независимо от места установки, оно должно быть указано в переменной PATH, чтобы вы могли запустить программу, просто введя ее имя в командной строке, а не полный путь.

Сборка программного обеспечения Linux из исходного кода за 3 простых шага

Валентин Павлов/ автор статьи
Страсть Влентина к играм началась с Resident Evil, и с тех пор он не переставал играть в хоррор-игры. Пишет экспертные руководства для самых сложных игр и обзоры для самых громких релизов. Является магистром журналистики и имеет степень бакалавра лингвистики. Любимые игры: GTA 5, Silent Hill 2, Call of Duty: Modern Warfare 2, Heavy Rain, Metro 2033 и другие.
Понравилась статья? Поделиться с друзьями:
Добавить комментарий