Як підтримати PCRE2 для Apache 2.4

Хочу поділитись своїм досвідом перекладу Apache 2.4 на PCRE2, оскільки навіть PHP 7 вже давно підтримує бібліотеку PCRE2, а open source Apache Software Foundation досі немає.
Звичайно я зараз напевно випереджаю реліз Apache з підтримкою PCRE2, тому що я використовую вихідники з гіта Apache, що говорить нам про підтримку PCRE2 вже можливо в наступному релізі, але для тих, хто вже зараз хоче підтримку PCRE2 в Apache 2.4, і хто не хоче чекати релізу ділюся одним із способів.

Стаття передбачає, що ви збираєте весь необхідний софт із вихідних джерел, список софту та версій на момент написання статті:

PCRE2-10.33
КВІТНЯ 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41

Крок перший: збираємо та компілюємо PCRE2

Опустимо момент скачування вихідних джерел з оф джерел оскільки це дуже очевидно, тож ви розпакували архів, переходимо в папку з вихідними джерелами PCRE2, і виконуємо наступну команду для підтримки UTF:

./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode

У префіксі вказуєте свій шлях, якщо не хочете використовувати стандартне розташування для встановлення бібліотеки:

--prefix=/ваш/путь/до библиотеки

Інакше збираєте без префіксу.

Інші команди вказують на включення підтримують 8-бітний, 16-бітний і 32-бітний кодові блоки PCRE, в даному варіанті збірка була виконана з ними.

Ну і звичайно компілюємо цю справу за допомогою послідовного виконання команд:

make
make install

Якщо всі норми та компіляція пройшла без помилок, переходимо до наступного кроку.

Крок другий: підключаємо до APR бібліотеку PCRE2

Так як Apache компілює вихідні коди за допомогою APR, нам потрібно підключити бібліотеку в самому APR, інакше можливі помилки про невідомі функції у вихідниках Apache, тому що ми будемо використовувати нові функції PCRE2.

Опустимо момент скачування вихідних джерел з оф джерел так як це дуже очевидно, так що ви розпакували архів виконали конфігурацію APR:

./configure --prefix=/etc/webserver/apr-170

Природно у префіксі вказуєте свій шлях, якщо не хочете використовувати стандартне розташування для встановлення бібліотеки, або не вказуєте:

--prefix=/ваш/путь/до библиотеки

Після виконання конфігурації йдете до каталогу: /etc/webserver/srcsrv/apr-1.7.0/build

Ну або: /ваш/шлях/до бібліотеки/build

Знаходьте файл apr_rules.mk у цьому каталозі, і додаєте до кінця рядки де:

EXTRA_LIBS=-lrt -lcrypt  -lpthread -ldl

Підключення бібліотеки:

-lpcre2-8 -L/ваш/путь/до библиотеки pcre2/lib

Зберігаємо йдемо в кореневий каталог вихідників APR: /ваш/шлях/до бібліотеки.

Компілюємо наш змінений APR:

make
make install

Якщо всі норми та компіляція пройшла без помилок, переходимо до наступного кроку.

Крок третій: збираємо з вихідних APR-util для Apache

Ви завантажили цю бібліотеку з оф джерела, переходимо в кореневу папку розпакованого архіву з APR-util, і послідовно вводимо наступні команди:

./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/ваш/путь/до библиотеки apr
make
make install

Природно у префіксі вказуєте свій шлях, якщо не хочете використовувати стандартне розташування для встановлення бібліотеки, або не вказуєте:

--prefix=/ваш/путь/до библиотеки

Також тут ми підключаємо наш APR:

--with-apr=/ваш/путь/до библиотеки apr

Крок четвертий: завантажуємо вихідники з гіта Apache для підтримки PCRE2

Важливо: Вихідники качаємо з гіта останньої редакції.

Нам необхідно завантажити два вихідні джерела такі як ap_regex.h і util_pcre.c, посилання нижче:
ap_regex.h
util_pcre.c

Тепер йдемо до своєї директорії вихідників Apache httpd, і збираємо Apache з наступними командами:

./configure --prefix=/etc/webserver/apache-2441 --with-apr=/ваш/путь/до библиотеки apr --with-apr-util=/ваш/путь/до библиотеки apr-util --with-pcre=/ваш/путь/до библиотеки pcre2/bin/pcre2-config

Природно у префіксі вказуєте свій шлях, якщо не хочете використовувати стандартне розташування для встановлення бібліотеки, або не вказуєте:

--prefix=/ваш/путь/до Apache httpd

Також додаткові команди для складання Apache вказуєте на свій розсуд, я маю на увазі команди включення відключення модулів та бібліотек.

Далі йдемо до своєї директорії вихідників Apache httpd, у мене це:

/etc/webserver/srcsrv/httpd-2.4.41

Ви природно переходите у свій каталог, замінюємо у каталозі:

/etc/webserver/srcsrv/httpd-2.4.41/include

Файл ap_regex.h на скачуваний нами з гіта Apache.

Так само йдемо в каталог:

/etc/webserver/srcsrv/httpd-2.4.41/server

Замінюємо файл util_pcre.c, на завантажений нами з гіта Apache

Тепер залишилося додати підключення PCRE2 у самому Apache, необхідно знайти файл ap_config_auto.h, він знаходиться в каталозі:

/etc/webserver/srcsrv/httpd-2.4.41/include

На самому початку файлу вставити наступні рядки:

/* Load PCRE2 */
#define HAVE_PCRE2 1

Тепер ми готові до справжнього моменту компіляції Apache httpd з підтримкою PCRE2.
Переходимо в свою директорію вихідників Apache httpd, компілюємо цю справу за допомогою послідовного виконання команд:

make
make install

Ось тепер якщо все пройшло добре і без помилок, то у вас буде зібраний і скомпільований Apache httpd з підтримкою PCRE2, що означає позитивні зміни в модулях Apache, що використовують регулярні PCRE PCRE, одним з таких є Module rewrite.

У висновку, цей спосіб дає можливість використовувати PCRE2 до оф релізу від Apache Software Foundation, сподіваюся, що вже скоро вийде версія з підтримкою PCRE2.

Так само під час тестування стандартних .htaccess помилок не виникало, якщо у кого будуть помилки пишіть у коментах.

PS

Мене трохи напружувало ситуацію використання двох різних версій PCRE для мого стека, і я вирішив виправити це.

Джерело: habr.com

Додати коментар або відгук