8.1.3 Воспроизводимая сборка ПО

RPM может автоматизировать только успешные шаги, которые были осуществлены при сборке в процессе выполнения целей сборки, как они указаны в Makefile. Если проект не собрался при помощи make, rpm-пакет также не может быть собран. К сожалению, процессы конфигурирования сборки и последующей компиляции не всегда просты. Тем не менее, если проект успешно собран единожды, можно добиться воспроизводимой сборки. Для сборки используется ряд Linux-утилит. Конкретный набор утилит зависит от того, откуда произошел комплект ПО.

8.1.3.1 Распаковка ПО

Множество приложений и библиотек поставляются с сайтов производителей в виде компрессированных tar-архивов, часто называемых тарболами. Тарбол - это tar-архив, сжатый, как правило, утилитой gzip. Для распаковки используют последовательно команды:

$ gunzip filename.tgz

$ tar xf filename.tar

Можно обойтись и одной командой:

$ tar xvfz filename.tgz

Если для компрессии использовался компрессор bzip2, тогда вместо ключа z следует указать ключ j:

$ tar xvfj filename.tar.bz2

8.1.3.2 Читаем README

Чаще всего ПО поставляется с инструкциями по сборке, обычно содержащимися в файле README в корневом каталоге распакованного проекта. Текст в этом файле отвечает на большинство вопросов, могущих возникнуть в процессе конфигурирования и компиляции проекта.

8.1.3.3 Собираем программное обеспечение с помощью Linux-утилит сборки

Большинство проектов составлены в предположении, что из исходного кода будут собираться приложения или компилироваться библиотеки. Эти операции производятся как правило под управлением утилиты make. Make имеет конфигурационный файл, который называется Makefile. Он содержит правила сборки. Обычно Makefile находится в каждой корневой директории каждой части проекта.

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

В простейшем случае для сборки проекта требуется сказать:

$ make

а для установки

# make install

Когда make указывается без задания цели, собирается цель по умолчанию, так называемая цель all. Обычно all собирает приложение или библиотеку. Цель install командует утилите make скопировать собранные файлы в систему. Еще одной общей целью является цель clean. Clean очищает директорию сборки от прежде собранных файлов.

Команды в Makefile могут быть специфичны для конкретной системы. Например, традиционной командой для сборки кода C является cc (сокращение от C compiler). Вместо этого ваш Linux может иметь gcc (GNU C Compiler). Опции компилятора также могут быть аппаратно и системно зависимыми. Другие необходимые команды могут располагаться в директориях, отличных от тех, которые предполагаются в Makefile.

Поскольку Makefile - ы системно зависимы, ряд утилит были разработаны для создания соответствующих Makefile - ов. При сборке должен быть взят файл для нужной платформы. Одна из таких "утилит" - ручной выбор из коллекции Makefile - ов. Например, получен проект, в котором имеются следующие файлы: Makefile.amiga, Makefile.solaris, и Makefile.linux. Для использования конкретного файла его надо скопировать в файл Makefille.

Утилиты для создания Makefile.

8.1.3.3.1. imake

Программа imake довольно часто используется для генерации приложений X Window system (в основном старых версий). Эта утилита использует входной файл по имени Imakefile. Он содержит инструкции по созданию платформно-зависимых Makefile - ов, что позволяет выполнять графические приложения на многих платформах. Если в проекте имеется Imakefile, последовательность действий будет следующая:

$ xmkmf

$ make

# make install

Команда xmkmf - это скрипт, запускающий, в общем ряду, и команду imake для создания Makefile. Если xmkmf выполнить невозможно, следует сказать:

make Makefile

Или, если имеется много директорий с исходным кодом, может сработать

make Makefiles

Большинство приложений Linux, особенно серверных и утилит командной строки, имеют в дереве проекта специальный скрипт, который на выходе дает платформно-зависимый Makefile. Если в корне проекта имеется скрипт configure, последовательность действий такая:

$ ./configure

$ make

# make install

Скрипт configure в свою очередь генерируется стеком утилит, включая automake и autoconf, использующих на входе файлы-заготовки configure.in и makefile.am. В большом количестве случаев скрипту configure передаются параметры сборки. Один из наиболее употребимых параметров --prefix, он указывает вершину дерева директорий, от которой откладываются все остальные пути при сборке и установке. Это позволяет задать нестандартный путь установки или временный/тестовый каталог сборки.

8.1.3.3.3. Построение модулей Perl

Perl - скриптовый язык, использующийся всеми Linux-системами, особенно любимый администраторами. Большинство модулей языка и программные комплексы на Perl собираются с помощью такой последовательности команд:

$ perl Makefile.PL

$ make

$ make test

# make install

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

Далее - Планирование обновлений
Назад - Консолидация ПО
Содержание