Перейти к содержанию

8.2 Установка программ из исходного кода (Installing Software from Source Code)

Помимо установки программ с помощью менеджера пакетов, в Linux можно устанавливать программное обеспечение из исходного кода (source code). Многие приложения и службы, которые вам предстоит устанавливать на Linux-системе, поставляются именно в виде исходного кода, а не готового исполняемого файла. При установке на локальной системе вы фактически компилируете исходный код из инсталляционных файлов в двоичный исполняемый файл, который затем можно запустить.

Предположим, например, что вы хотите установить и настроить FTP-службу на локальной Linux-системе. Вы изучили варианты и решили использовать службу Pure-FTPd для организации FTP-сервера. После загрузки и извлечения инсталляционных файлов вы заметите, что создаётся каталог с именем src. В этом каталоге находится ряд текстовых файлов, содержащих исходный код службы Pure-FTPd. Пример одного из файлов исходного кода этой службы:

openSUSE:/home/rtracy/Downloads/pure-ftpd-1.0.29/src # cat main.c
#include <config.h>
#include "ftpd.h"

int main(int argc, char *argv[])
{
    return pureftpd_start(argc, argv, NULL);
}

Распространение программного обеспечения в таком виде имеет ряд существенных преимуществ. Главное из них — отсутствие необходимости создавать отдельные исполняемые файлы и инсталляционные пакеты для каждой целевой архитектуры и платформы. Процесс установки может автоматически определить тип системы и скомпилировать программу соответствующим образом. Основной недостаток такого подхода — значительное усложнение процесса установки. На системе пользователя должен быть установлен компилятор; без него скомпилировать исходный код в двоичный исполняемый файл не получится. Кроме того, пользователь должен знать правильную процедуру компиляции исходного кода и установки полученного исполняемого файла.

К счастью, большинство разработчиков придерживается стандартного процесса, включающего следующие этапы:

  • Подготовка инсталляционных файлов
  • Компиляция исполняемого файла
  • Установка исполняемого файла
  • Удаление программ, скомпилированных из исходного кода

Начнём с рассмотрения подготовки инсталляционных файлов.

Подготовка инсталляционных файлов

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

Характерная особенность инсталляционных файлов для установки из исходного кода — их распространение в виде tarball-архива (tarball) — файла, упакованного с помощью tar и сжатого gzip. Такие файлы обычно имеют расширение .tar.gz. Поскольку приложения распространяются в виде tarball-архивов, их необходимо сначала распаковать и разархивировать после загрузки из интернета, прежде чем выполнять какие-либо дальнейшие действия. Для этого используется команда tar. Команда tar предназначена для создания архивных файлов, а также для извлечения файлов из архивов, таких как tarball.

Для этого переключитесь в каталог, куда был загружен tarball-архив, с помощью команды cd в командной строке оболочки. Затем введите tar -zxvf имя_файла. Параметр -z указывает tar сначала выполнить распаковку с помощью gzip. Параметр -x указывает tar извлечь файлы из распакованного архивного файла. Параметр -v включает подробный режим, при котором каждый обрабатываемый файл отображается на экране. Параметр -f указывает имя файла для извлечения.

Например, предположим, что вы загрузили файл pure-ftpd-1.0.29.tar.gz. Для его извлечения нужно ввести tar -zxvf pure-ftpd-1.0.29.tar.gz в командной строке оболочки. Файлы извлекаются в каталог pure-ftpd-1.0.29 в текущем каталоге. Этот каталог содержит файлы исходного кода, которые будут использованы для создания исполняемой программы, а также различные утилиты, необходимые для её сборки:

openSUSE:/home/rtracy/Downloads/pure-ftpd-1.0.29 # ls
AUTHORS                        README.Donations       depcomp
CONTACT                        README.LDAP            gui
COPYING                        README.MacOS-X         install-sh
ChangeLog                      README.MySQL           m4
FAQ                            README.PGSQL           man
HISTORY                        README.TLS             missing
INSTALL                        README.Virtual-Users   pam
Makefile.am                    README.Windows         pure-ftpd.png
Makefile.gui                   THANKS                 pure-ftpd.spec
Makefile.in                    aclocal.m4             pure-ftpd.spec.in
NEWS                           compile                puredb
README                         config.h.in            pureftpd-ldap.conf
README.Authentication-Modules  configuration-file     pureftpd-mysql.conf
README.Configuration-File      configure              pureftpd-pgsql.conf
README.Contrib                 configure.ac           pureftpd.schema
README.Debian                  contrib                src

После извлечения файлов необходимо подготовить инсталляционные файлы к компиляции. Для этого используется команда configure, упомянутая в предыдущем примере. Чтобы выполнить эту команду, убедитесь, что вы находитесь в каталоге, созданном при извлечении tarball-архива, затем введите ./configure в командной строке оболочки:

openSUSE:/home/rtracy/Downloads/pure-ftpd-1.0.29 # ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for ranlib... ranlib
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
...

Файл configure — это сценарий, который при запуске выполняет два действия. Во-первых, он проверяет вашу систему, убеждаясь в наличии всех компонентов, необходимых для компиляции программы. Одна из важнейших проверок — наличие компилятора, совместимого с языком программирования C. Если у вас нет C-компилятора, такого как GNU C Compiler (gcc) или GNU C++ Compiler (gcc-c++), команда configure выведет на экран сообщение об ошибке с предложением установить компилятор и повторно запустить configure. Кроме того, configure проверяет совместимость общей среды вашей системы с устанавливаемой программой.

Во-вторых, configure создаёт важный файл Makefile. Поскольку большинство приложений из исходного кода разработано для развёртывания на различных дистрибутивах и архитектурах, программа установки должна знать, как настроить файлы исходного кода таким образом, чтобы полученный исполняемый файл работал на вашей конкретной системе. Одно из последних действий сценария configure — создание набора файлов Makefile. Файл Makefile содержит подробные инструкции о том, как должен быть скомпилирован исполняемый файл для вашей платформы.

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

После выполнения configure и готовности файла Makefile следующий шаг — непосредственная компиляция исполняемого файла.

Компиляция исполняемого файла

На данном этапе программа, которую вы хотите установить, существует в файловой системе только в виде исходного кода. Прежде чем запустить её, необходимо преобразовать текстовый исходный код в двоичный исполняемый файл. Для этого используется команда make. Команда make вызывает C-компилятор системы (например, gcc) и направляет его на чтение файлов исходного кода с использованием спецификаций и параметров из файла Makefile, после чего генерирует скомпилированный исполняемый файл. Для этого введите make в командной строке оболочки без каких-либо параметров, находясь в каталоге, созданном при извлечении tarball-архива. Пример:

openSUSE:/home/rtracy/Downloads/pure-ftpd-1.0.29 # make
make all-recursive
make[1]: Entering directory '/home/tux/Downloads/pure-ftpd-1.0.29'
Making all in puredb
make[2]: Entering directory '/home/tux/Downloads/pure-ftpd-1.0.29/puredb'
Making all in src
make[3]: Entering directory '/home/tux/Downloads/pure-ftpd-1.0.29/puredb/src'
gcc -DHAVE_CONFIG_H -I. -I../..   -I/usr/local/include -DCONFDIR=\"/etc\" -
DSTATEDIR=\"/var\" -g -O2 -MT puredb_read.o -MD -MP -MF .deps/puredb_read.
Tpo -c
-o puredb_read.o puredb_read.c
mv -f .deps/puredb_read.Tpo .deps/puredb_read.Po
rm -f libpuredb_read.a
ar cru libpuredb_read.a puredb_read.o
...

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

Установка исполняемого файла

Для фактической установки программы в системе команда make используется второй раз. На этот раз указывается цель make install. Это предписывает make установить программу, следуя инструкциям из раздела INSTALL файла Makefile.

Убедитесь, что вы по-прежнему находитесь в каталоге, созданном при извлечении tarball-архива. Затем введите make install в командной строке оболочки. Утилита make выполнит инструкции из файла Makefile для установки приложения:

openSUSE:/home/rtracy/Downloads/pure-ftpd-1.0.29 # make install
Making install in puredb
make[1]: Entering directory '/home/tux/Downloads/pure-ftpd-1.0.29/puredb'
Making install in src
make[2]: Entering directory '/home/tux/Downloads/pure-ftpd-1.0.29/puredb/src'
make[3]: Entering directory '/home/tux/Downloads/pure-ftpd-1.0.29/puredb/src'
make[3]: Nothing to be done for 'install-exec-am'.
make[3]: Nothing to be done for 'install-data-am'.
...

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

Давайте попрактикуемся в установке программ из исходного кода в следующем упражнении.

Упражнение 8-5. Сборка программы из исходного кода

В этом упражнении вы попрактикуетесь в установке программы Pure-FTPd из tarball-архива. Упражнение можно выполнить с помощью виртуальной машины, поставляемой вместе с книгой. Запустите снимок состояния 8-3 для правильно настроенной среды.

Видео

Посмотрите видео к упражнению 8-5 с демонстрацией выполнения задания.

Выполните следующее:

  1. После запуска системы откройте терминал.
  2. Переключитесь на учётную запись суперпользователя root, введя su - и пароль student.
  3. С помощью команды cd перейдите в домашний каталог. Именно там сохранён tarball-файл Pure-FTPd. С помощью команды ls просмотрите имя файла.
  4. В командной строке введите tar -zxvf ./pure-ftpd-version.tar.gz. Замените version на текущий номер версии загруженного tarball-архива.

Совет

Для упрощения ввода команд можно использовать функцию автодополнения команд Linux. Для этого введите tar -zxvf ./pure- и нажмите Tab. Остальная часть имени файла будет подставлена автоматически.

  1. С помощью команды cd перейдите в каталог, созданный командой tar. Он должен называться pure-ftpd-version.
  2. Введите ls для просмотра файлов, извлечённых из tarball-архива.
  3. В командной строке введите ./configure. Сценарий configure проверит вашу систему и убедится, что программное обеспечение может быть установлено. На вашей системе должен быть установлен C-компилятор. Если configure сообщит об отсутствии компилятора, найдите RPM-пакет gcc на установочном диске вашего дистрибутива и установите его командой rpm -i. Однако имейте в виду, что gcc имеет множество зависимостей, поэтому для ускорения установки лучше воспользоваться yum или графической утилитой установки программ.
  4. После завершения работы сценария configure скомпилируйте исполняемый файл, введя make в командной строке оболочки.
  5. После завершения компиляции установите исполняемый файл, введя make install в командной строке оболочки.
  6. Запустите службу, введя /usr/local/sbin/pure-ftpd & в командной строке оболочки.
  7. Проверьте работу системы, введя ftp localhost в командной строке оболочки.
  8. При появлении запроса введите имя пользователя anonymous. После этого вы должны войти на FTP-сервер.
  9. Закройте соединение, введя quit.

На этом этапе на вашей Linux-системе функционирует FTP-сервер!

Примечание

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

Удаление программ, скомпилированных из исходного кода

Процедура удаления программ этой категории очень похожа на процедуру установки.

Для большинства приложений и служб, установленных с использованием описанного выше стандартного процесса сборки, для их удаления необходим доступ к инсталляционным файлам. Проблема в том, что многие Linux-администраторы удаляют инсталляционные файлы исходного кода после завершения установки, чтобы освободить место на диске. Поступая так, вы уничтожаете именно те файлы, которые могут понадобиться при необходимости удалить программу. Рекомендуется создать защищённый каталог в файловой системе, доступный только суперпользователю root, и хранить в нём инсталляционные файлы исходного кода. Да, это займёт немного места на диске, но вы будете располагать нужными файлами, если удаление когда-либо потребуется.

Процедура удаления может незначительно варьироваться от продукта к продукту. Некоторые приложения или службы включают в состав извлечённых из tarball-архива файлов сценарий удаления. В этом случае можно выполнить этот сценарий для удаления приложения из системы.

Другие продукты могут включать в файл Makefile цель UNINSTALL. В таком случае нужно сначала выполнить configure из каталога, созданного при первоначальном извлечении загруженного tarball-файла, — точно так же, как при первой установке программы. Затем вместо make install нужно выполнить make uninstall. Это заставит утилиту make следовать инструкциям в разделе удаления файла Makefile для удаления программы из системы. Например, командой make uninstall можно удалить службу Pure-FTPd из системы.

Как определить, какой метод использовать? В загруженном tarball-архиве должен быть файл README, документирующий как процедуру установки, так и процедуру удаления конкретной программы. Проверьте этот файл в первую очередь. Если информации там нет, обратитесь к разделу FAQ или базе знаний на сайте организации, выпустившей программу. Один из этих ресурсов должен предоставить вам необходимые инструкции по удалению.