# Компилирование и установка

Этот документ освещает вопросы компилирования и установки сервера Apache только на UNIX и UNIX-подобных системах. Если вы хотите установить сервер под Windows, то вам необходимо прочесть документ "Использование Apache под Microsoft Windows". Информация, касающаяся остальных платформ, содержится в документе "Платформы".

Среда конфигурирования и установки сервера полностью отличается от той, которая была в Apache 1.3. Apache 1.3 использовал обычный набор скриптов, позволявший упростить процесс установки. Apache 2.0 теперь использует системы `libtool` и `autoconf`, что делает сервер похожим на другие программные продукты с открытым исходным кодом (Open Source projects).

Запуск сервера
Остановка и перезапуск

# Краткий обзор "для нетерпеливых"

Загрузка | `$ lynx http://www.apache.org/dist/httpd/httpd-2_0_NN.tar.gz`
Распаковка | `$ gzip -d httpd-2_0_NN.tar.gz $ tar xvf httpd-2_0_NN.tar`
Конфигурирование | `$ ./configure --prefix=PREFIX`
Компилирование | `$ make`
Установка | `$ make install`
Настройка | `$ vi PREFIX/conf/httpd.conf`
Пробный запуск | `$ PREFIX/bin/apachectl start`

NN необходимо заменить на текущий младший номер версии, а вместо PREFIX надо указать путь, по которому должен быть установлен сервер. Если PREFIX не указан, то установка по умолчанию производится в каталог `/usr/local/apache2`.

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

# Требования

Требования, необходимые для успешной сборки сервера:

Дисковое пространство
  Убедитесь, что на диске есть как мининимум 50 MB свободного места для временных файлов. После установки Apache занимает приблизительно 10 MB. Точный размер занимаемого места будет зависеть в основном от выбранной конфигурации и дополнительно устанавливаемых модулей, не входящих в дистрибутив Apache.
ANSI-C компилятор и необходимая среда сборки
  Убедитесь, что на вашей системе установлен ANSI-C компилятор. Рекомендуется использовать GNU C компилятор (GCC) от Free Software Foundation (FSF) (версии 2.7.2 вполне достаточно). Если у вас другой компилятор, то выясните, поддерживает ли он стандарт ANSI. Проверьте также, чтобы в переменной окружения `PATH` был указан каталог, содержащий основные утилиты, необходимые для сборки (`make` и другие).
Синхронизация времени
  В некоторых заголовках HTTP протокола указывается время. Поэтому вам необходимо выяснить, как можно установить в вашей системе средство синхронизации времени. Обычно для этих целей используются программы `ntpdate` или `xntpd`, основанные на сетевом протоколе синхронизации времени (Network Time Protocol - NTP). Для получения более подробной информации об NTP и серверах синхронизации времени, обратитесь в группу новостей Usenet comp.protocols.time.ntp, а также посетите домашнюю страницу NTP
Perl 5 [НЕОБЯЗАТЕЛЬНО]
  Для выполнения некоторых вспомогательных скриптов, таких как apxs или dbmmanage (которые написаны на Perl), необходим интерпретатор с языка Perl (версии 5.003 или выше достаточно). Если конфигурационный скрипт ``configure`' не найдет его в вашей системе, то вы все равно сможете собрать и установить Apache 2.0 - в этом случае не будут работать только перечисленные выше вспомогательные скрипты. Если в вашей системе установлено несколько интерпретаторов с языка Perl (например Perl 4 и Perl 5), то для того чтобы скрипт `./configure` выбрал нужный, выполните его с опцией `--with-perl` (описание смотрите ниже).

# Загрузка

Apache можно загрузить со страницы загрузки Apache HTTP Software Foundation, на которой также приводится список некоторых зеркальных серверов. Здесь вы найдете самую последнюю стабильную версию сервера.

После загрузки, особенно если она происходила с зеркального сервера, необходимо убедиться, что у вас в руках полная, неизмененная версия HTTP сервера Apache. Это выполняется тестированием архива (tarball) на соответствие PGP подписи, что является, в свою очередь, двушаговой процедурой. Во-первых, вы должны загрузить файл `KEYS` со страницы загрузки Apache Software Foundation. (Для того чтобы быть уверенным в том, что сам файл `KEYS` не был изменен, его лучше взять из предыдущего дистрибутива Apache или взять с сервера открытых ключей.) Затем ключи можно импортировать в вашу личную базу данных ключей посредством следующих команд (в зависимости от версии pgp):

$ pgp < KEYS

или

$ gpg --import KEYS

Следующий шаг заключается в непосредственной проверке архива (tarball) с использованием PGP подписи, которую всегда надо брать на основном веб-сервере Apache. Файл с PGP подписью имеет то же имя, что и архив дистрибутива плюс окончание `.asc`. Проверить дистрибутив можно, набрав следующие команды (опять же, это зависит от версии pgp, установленного в вашей системе):

$ pgp httpd-2_0_NN.tar.gz.asc

или

$ gpg --verify httpd-2_0_NN.tar.gz.asc

Вы должны увидеть что-то вроде:

Good signature from user "Martin Kraemer <martin@apache.org>".

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

# Распаковка

Распаковка архива исходных кодов Apache HTTP сервера заключается в его непосредственной распаковке и разархивировании (untarring):

$ gzip -d httpd-2_0_NN.tar.gz
$ tar xvf httpd-2_0_NN.tar

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

# Конфигурирование дерева исходных кодов

Следующий шаг заключается в конфигурировании дерева исходных кодов в соответствии с той системой, на которую вы устанавливаете сервер, и вашими собственными нуждами. Это делается при помощи скрипта `configure`, расположенного в корневом каталоге дистрибутива. Разработчики, загружающие дерево исходных кодов посредством CVS, должны установить в своей системе утилиты `autoconf` и `libtool` и выполнить программу `buildconf`, прежде чем они смогут продолжнить установку. В официальных выпусках сервера этого делать не требуется.

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

Для того чтобы получить представление о гибкости процесса конфигурирования Apache, рассмотрите приведенный ниже типичный пример запуска скрипта `./configure`. Такая конфигурация позволяет компилировать сервер в каталог `/sw/pkg/apache`, используя указанный компилятор с несколькими предназначенными для него опциями командной строки, и установить еще два добавочных модуля mod_rewrite и mod_speling, которые можно будет потом использовать посредством механизма DSO.

$ CC="pgcc" CFLAGS="-O2" \
./configure --prefix=/sw/pkg/apache \
--enable-rewrite=shared \
--enable-speling=shared

При выполнении, скрипт `configure` проверяет, установлено ли в вашей системе все необходимое, а затем создает Make-файлы (Makefiles), которые будут затем использованы при компилировании сервера.

Наиболее простой способ узнать обо всех доступных конфигурационных опциях - это выполнить команду `./configure --help`. На экран будет выведено краткое описание практически всех доступных опций и переменных окружения.

## Переменные окружения

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

`CC=...`
  Команда вызова компилятора с языка C
`CPPFLAGS=...`
  Дополнительные опции препроцессора и компилятора с языка C.
`CFLAGS=...`
  Опции отладки и оптимизации компилятора с языка C.
`LDFLAGS=...`
  Дополнительные опции для компоновщика.
`LIBS=...`
  Информация о расположении библиотек (опции "`-L`" и "`-l`"), передаваемая компоновщику.
`INCLUDES=...`
  Пути, по которым ищутся заголовочные файлы. ("`-Idir`").
`TARGET=...` [По умолчанию: `apache`]
  Имя исполняемого файла после сборки сервера
`NOTEST_CPPFLAGS=...`
`NOTEST_CFLAGS=...`
`NOTEST_LDFLAGS=...`
`NOTEST_LIBS=...`
  Эти переменные окружения выполняют ту же роль, что и те же самые переменные, но без приставки `NOTEST`. Разница заключается в том, что они добавляются в среду после того, как autoconf выполнил тестирование возможностей операционной среды. Это позволяет использовать те опции, которые бы вызвали ошибку при подобном тестировании, но включение которых обязательно для окончательной сборки сервера.
`SHLIB_PATH=...`
  Опции компилятора и компоновщика, определяющие путь к разделяемым библиотекам.

## Опции, конфигурирующие выходной поток программы autoconf

`--help`
  Выдает инструкцию по использованию программы, включая все возможные опции, после чего сразу же завершает работу.
`--quiet`
  Предотвращает вывод сообщений, начинающихся с "`checking...`"
`--verbose`
  Выдает полную информацию в процессе конфигурирования, включая имена проверяемых файлов.

## Пути

В настоящее время существуют два способа задания путей, по которым Apache установит свои файлы. Первый способ - это явно указать Apache каталог, по которому он установится.

`--prefix=PREFIX` [По умолчанию: `/usr/local/apache2`]
  Определяет путь, по которому будет произведена установка Apache.

Более того, существует возможность установить архитектурно - зависимые файлы в другой специально заданный каталог.

`--exec-prefix=EPREFIX` [Default: `PREFIX`]
  Определяет путь, по которому будут установлены архитектурно - зависимые файлы.

Второй способ является более гибким. Он заключается в использовании файлов `config.layout`. Используя этот метод, можно указать каталог установки для любого типа файлов Apache. Файл `config.layout` содержит несколько примеров конфигурирования. Используя эти примеры, вы можете сами создавать собственные конфигурации установки. Различные макеты установок группируются в раздельных секциях `<Layout FOO>...</Layout>`, после чего к ним можно обращаться посредством имени `FOO`.

`--enable-layout=LAYOUT`
  Использует именованный макет, описанный в файле `config.layout`, в котором прописаны все установочные пути.

## Модули

Apache - это модульный сервер. Только самые основные функции включены в ядро сервера. Дополнительная функциональность доступна посредством модулей. Во время процесса конфигурации вы должны выбрать те модули, которые будут компилироваться вместе с сервером. Обо всех доступных модулях вы можете прочитать в соответствующем списке модулей. Модули, статус которых обозначен как "Базовый", компилируются вместе с сервером по умолчанию; если вам не нужны некоторые базовые модули, вы должны специально это указать при конфигурации (базовым модулем, например, является mod_userdir). Модули с другим статусом не компилируются вместе с сервером по умолчанию, и (в случае необходимости) должны быть прописаны при конфигурировании отдельно (примером такого модуля может послужить mod_expires).

Есть два способа указать Apache использовать какой - либо модуль. Модули могут быть скомпилированы как статические, при этом их код включается непосредственно в исполняемый код сервера Apache. Или же, если ваша операционная система поддерживает динамически разделяемые объекты (Dynamic Shared Objects) и и `autoconf` может определить, что это так, то модули могут быть скомпилированы как динамические. DSO модули хранятся отдельно от ядра сервера, и могут использоваться сервером в зависимости от конфигурационных директив времени выполнения (то есть отвечающих за работу уже собранного сервера), предоставляемых модулем mod_so. Модуль mod_so автоматически включается в ядро сервера, если хотя бы один модуль компилируется как динамический. Если же вы не компилируете никакие динамические модули, но хотите, чтобы ваш сервер все же был способен работать с DSO модулями, то при конфигурировании укажите следующую опцию: `--enable-so`.

`--enable-MODULE[=shared]`
  Компилировать и включить в ядро сервера модуль MODULE. MODULE - это идентификатор модуля, который можно получить, отбросив от имени модуля, указанного в документации, строку "_string". Чтобы компилировать модуль как DSO, добавьте опцию `=shared`.
`--disable-MODULE`
  Убрать MODULE из списка компилируемых модулей (если он есть в этом списке).
`--enable-modules=MODULE-LIST`
  Компилировать и включить в ядро сервера модули, идентификаторы которых приведены в списке MODULE-LIST. Элементы списка отделяются друг от друга пробелами.
`--enable-mods-shared=MODULE-LIST`
  Компилировать модули, идентификаторы которых приведены в списке MODULE-LIST, как динамические.

Например, чтобы включить в сервер модули mod_dav и mod_info, вы можете использовать либо

./configure --enable-dav --enable-info

либо эквивалентную предыдущей команду

./configure --enable-modules="dav info"

В дополнение к этому существуют специальные ключевые слова `all` или `most`, которые могут быть использованы для компилирования всех или большинства модулей сразу. Вы можете исключить из этого списка нежелательные модули, применяя соответствующие опции `--disable-MODULE`. Например, для того чтобы включить в работу сервера все модули как DSO за исключением mod_info, вы можете написать следующее

./configure --enable-mods-shared=all --disable-info

В добавление к стандартному набору модулей, Apache 2.0 компилируется вместе с некоторым мульти - процессным модулем (MPMs). Один и только один МП - модуль может быть скомпилирован вместе с сервером. Список МП - модулей, компилируемых по умолчанию для каждой платформы, можно найти в соответствующем разделе документации; МП - модуль по умолчанию можно изменить следующей опцией командной строки `configure`

`--with-mpm=NAME`
  Компилироваться вместе с сервером будет МП - модуль с именем NAME.

## DBM

Некоторые модули Apache, как например mod_auth_dbm и mod_rewrite (директива RewriteMap), используют в своей работе простые базы данных, организованные по принципу ключ/значение, что увеличивает скорость доступа к информации. Поддержка SDBM баз данных включена в ядро сервера, так что использование баз данных подобного типа возможно всегда. Если вам нужны базы данных другого типа, то можете использовать следующие опции:

`--with-gdbm[=path]`
`--with-ndbm[=path]`
`--with-berkeley-db[=path]`
  Если не указано значение path, Apache будет искать заголовочные файлы и библиотеки в стандартных каталогах. Явное указание path заставит Apache производить поиск соответсвующих файлов в каталогах path`/lib` и path`/include`. Можно также указать специфические пути для заголовочных файлов и библиотек, написав их через точку с запятой.

## Suexec

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

# Сборка

Теперь вы можете скомпилировать и собрать сервер Apache, выполнив следующую команду:

$ make

Наберитесь терпения - компилирование сервера с базовой конфигурацией (конфигурацией по умолчанию) занимает приблизительно три минуты на такой системе, как Pentium III/Linux 2.2. Реальное время сборки будет зависеть от вашего аппаратного обеспечения и от количества модулей, которые вы решили компилировать вместе с сервером.

# Установка

Теперь настало время для установки сервера в каталог PREFIX, который был указан при конфигурирования Apache (смотрите выше опцию `--prefix`), выполнив:

$ make install

Если устанавливать Apache поверх предыдущей версии сервера, то старые конфигурационные файлы и документы будут оставлены без изменений.

# Настройка

Далее вы можете настроить ваш HTTP сервер Apache посредством редактирования конфигурационных файлов в каталоге `PREFIX/conf/`.

$ vi PREFIX/conf/httpd.conf

Руководство по использованию Apache вы можете найти либо по локальному адресу у себя на сервере docs/manual/, либо на официальном сайте Apache http://httpd.apache.org/docs-2.0/, где опубликована самая последняя версия документации и вся необходимая справочная информация по всем возможным конфигурационным директивам.

# Тестирование

Теперь вы можете запустить свой HTTP сервер Apache, выполнив следующую команду:

$ PREFIX/bin/apachectl start

и если все прошло успешно, то вы сможете запросить свой первый документ по адресу `http://localhost/`. Веб - страница, которую вы увидете, находится в каталоге DocumentRoot - по умолчанию, это `PREFIX/htdocs/`. Затем остановите сервер следующей командой:

$ PREFIX/bin/apachectl stop