Як зрабіць падтрымку 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 рэгулярныя выразы, адным з такіх з'яўляецца Module rewrite.

У зняволенні, дадзены спосаб дае магчымасць выкарыстоўваць PCRE2 да оф рэлізу ад Apache Software Foundation, спадзяюся што ўжо хутка выйдзе версія з падтрымкай PCRE2.

Таксама падчас тэставання стандартных .htaccess, памылак не ўзнікала, калі ў каго будуць памылкі пішыце ў каментах.

PS

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

Крыніца: habr.com

Дадаць каментар