Link Search Menu Expand Document
04 Января 2021 г.

Сборка Apache 2 из исходников на Debian 10

Содержание
  1. Вступление
  2. Подготовка
  3. Загрузка и распаковка
  4. Конфигурирование
  5. Сборка и установка
  6. Запуск и остановка
  7. Автозагрузка при старте системы
  8. Пересборка сервера
  9. Итог
  10. Update

Вступление

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

Для дистрибутивов на основе debian сделан собственный пакет веб сервера apache2.

apt-cache show apache2 | grep Version
Version: 2.4.38-3+deb10u4

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

Нам это не подходит, поэтому установим последнюю версию веб-сервера из исходников.

В последующих статьях именно так мы сможем разобраться как работает и устроен веб-сервер.

Подготовка

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

build-essential Компиляторы и программы для сборки в debian (libc6-dev libc-dev, gcc , g++ , make, dpkg-dev).
automake Пакет для работы с make файлами.
autoconf Пакет для работы с make файлами.
make Программа для управления генерацией исполняемых файлов и других файлов из исходного кода. 
bzip2 Cвободно доступный архиватор данных.
libapr1-dev Apache Portable Runtime Library.
libaprutil1-dev Apache Portable Runtime Utility Library.
libbrotli-dev Библиотека реализующая алгоритм brotli.
libcurl4-openssl-dev инструменты разработчика и документация для библиотеки libcurl (OpenSSL flavour).
libjansson-dev Библиотека для работы с json данными.
liblua5.2-dev Файлы для разработки для языка lua версия 5.2.
libnghttp2-dev Библиотека реализующая HTTP/2 протокол.
libpcre3-dev Библиотека для работы с регулярными выражениями.
libssl-dev Secure Sockets Layer toolkit - окружение для разработки.
libxml2-dev Файлы для работки библиотеки GNOME XML.
wget Утилита для получения файлов из сети.
zlib1g-dev Библиотека, реализующая метод сжатия deflate.

Здесь не будем заморачиваться с установкой из исходных кодов ставим все для сборки любых пакетов менеджером зависимостей apt-get.

sudo apt-get install build-essential automake autoconf make bzip2 libapr1-dev libaprutil1-dev libbrotli-dev libcurl4-openssl-dev libjansson-dev liblua5.2-dev libnghttp2-dev libpcre3-dev libssl-dev libxml2-dev wget zlib1g-dev

Проверить наличие того или иного пакета в системе можно командой:

dpkg --get-selections | grep ^wget

Загрузка и распаковка

Скачаем исходники с официального сайта в любую директорию на сервере. Например, в домашнюю папку.

Сейчас январь 2021 года, последняя версия на данный момент 2.4.46, ее и будем ставить.

wget https://apache-mirror.rbc.ru/pub/apache//httpd/httpd-2.4.46.tar.gz

Распакуем и перейдем в эту директорию.

tar xvf httpd-2.4.46.tar.gz
cd httpd-2.4.46

Конфигурирование

Теперь нужно сконфигурировать параметры учитывающие наше железо и другие опции. Это делается скриптом ./configure. Впоследствии он создает Makefile.

У скрипта configure множество опций настройки.

Мы ставим все по умолчанию, за исключением места установки. По умолчанию указан путь установки /usr/local/apache2, но так как это тестовый сервер укажем домашний каталог /home/alex/apache2. На самом деле разницы тут нет.

./configure --prefix=/home/alex/apache2

После выполнения данной команды будет длинный вывод технической информации в завершении которого будет такой вывод:

Server Version: 2.4.46
    Install prefix: /home/alex/apache2
    C compiler:     x86_64-linux-gnu-gcc
    CFLAGS:           -pthread  
    CPPFLAGS:         -DLINUX -D_REENTRANT -D_GNU_SOURCE  
    LDFLAGS:           
    LIBS:             
    C preprocessor: x86_64-linux-gnu-gcc -E

Это означает, что все в порядке, конфигурирование прошло успешно.

Сборка и установка

Переходим к сборке.

Нужно собрать модули, бинарные файлы, документацию и прочие файлы в текущую директорию.

make

Процесс компиляции может длиться продолжительное время.

Осталось только установить, то есть перенести файлы в наш корневой каталог указанный при конфигурировании /home/alex/apache2 и убрать за собой.

make install clean

Сервер установлен, проверим его версию.

/home/alex/apache2/bin/apachectl -v
Server version: Apache/2.4.46 (Unix)
Server built:   Jan  5 2021 01:27:10

Запуск и остановка

Запустить сервер можно командой:

sudo /home/alex/apache2/bin/apachectl -k start

Проверить что сервер запущен можно командами:

netstat -tunla | grep LISTEN | grep 80
ps aux | grep httpd

Так же увидеть заветное it works! набрав ip адрес сервера в браузере на любом компьютере в вашей сети.

Остановить сервер можно командой stop

sudo /home/alex/apache2/bin/apachectl -k stop

Автозагрузка при старте системы

В последних версиях Debian выпилили файл rc.local, который позволяет выполнять произвольные скрипты при запуске системы. Добавим его обратно и научим его запускать apache.

Добавим файл rc-local.service

sudo vim /etc/systemd/system/rc-local.service

Добавим туда директивы

[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
 
[Install]
WantedBy=multi-user.target

Теперь создадим скрипт rc.local

sudo vim /etc/rc.local

Со следующим содержимым, где укажем команду на запуск сервера:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
 /home/alex/apache2/bin/apachectl -k start
exit 0

Выполняем команды на права, регистрацию и запуск сервиса

sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local
sudo systemctl start rc-local

Перезагрузим систему, и проверим статус состояния сервиса.

sudo reboot
sudo systemctl status rc-local

rc-local.service - /etc/rc.local
   Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: enabled)
  Drop-In: /usr/lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Tue 2021-01-05 13:53:23 MSK; 58s ago
  Process: 418 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 429 (httpd)
    Tasks: 82 (limit: 2330)
   Memory: 14.8M
   CGroup: /system.slice/rc-local.service
           ├─429 /home/alex/apache2/bin/httpd -k start
           ├─432 /home/alex/apache2/bin/httpd -k start

Пересборка сервера

Посмотрим текущие подключенные модули.

sudo /home/alex/apache2/bin/apachectl -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_event_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 proxy_module (shared)
 proxy_fcgi_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
 php_module (shared)

Если необходимы другие модули, то сервер нужно пересобрать с ключом --enable-mods-shared=reallyall.

./configure --prefix=/home/alex/apache2 --enable-mods-shared=reallyall
make
make install
make clean

Раскоментировать строку подключения модуля в файле конфигуриации /conf/httpd.conf

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

Перезагрузить сервер

sudo /home/alex/apache2/bin/apachectl -k restart

Подробнее https://gist.github.com/thuannvn/07b376a7ad5d12ac4456

Итог

Мы показали как можно собрать и запустить последнюю версию веб сервера apache2 на debian 10.

Процедура не сложная, но требует некоторого кол-ва времени.

Update

16.01.2021

  • Добавлен раздел “Пересборка сервера”

Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 04 Января 2021 г.