Chciałbym podzielić się swoim doświadczeniem w tłumaczeniu Apache 2.4 na PCRE2, ponieważ nawet PHP 7 obsługuje bibliotekę PCRE2 przez długi czas, ale Apache Software Foundation o otwartym kodzie źródłowym nadal tego nie robi.
Oczywiście jestem teraz prawdopodobnie przed wersją Apache z obsługą PCRE2, ponieważ korzystam ze źródeł z gita Apache, który mówi nam, że obsługa PCRE2 jest już możliwa w następnej wersji, ale dla tych, którzy już chcą obsługi PCRE2 w Apache 2.4, a którzy nie chcą czekać na wydanie, udostępniam jeden ze sposobów.
W artykule zakłada się, że zbierasz całe niezbędne oprogramowanie z kodu źródłowego, listy oprogramowania i wersji w momencie pisania:
PCRE2-10.33
APR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41
Krok pierwszy: zbuduj i skompiluj PCRE2
Pomińmy moment pobierania źródeł z oficjalnych źródeł, gdyż jest to zbyt oczywiste, więc rozpakowałeś archiwum, przejdź do folderu ze źródłami PCRE2 i uruchom następującą komendę w celu obsługi UTF:
./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode
Określ swoją ścieżkę w prefiksie, jeśli nie chcesz używać standardowej lokalizacji do instalacji biblioteki:
--prefix=/ваш/путь/до библиотеки
W przeciwnym razie zbierasz bez prefiksu.
Pozostałe polecenia wskazują na włączenie obsługi 8-bitowych, 16-bitowych i 32-bitowych bloków kodu PCRE, w tej wersji przeprowadzono z nimi montaż.
I oczywiście kompilujemy to za pomocą sekwencyjnego wykonywania poleceń:
make
make install
Jeżeli wszystko jest w porządku i kompilacja przebiegła bez błędów, przejdź do kolejnego kroku.
Krok drugi: podłącz bibliotekę PCRE2 do APR
Ponieważ Apache kompiluje źródła przy użyciu APR, musimy włączyć bibliotekę do samego APR, w przeciwnym razie mogą pojawić się błędy dotyczące nieznanych funkcji w źródłach Apache, ponieważ będziemy używać nowych funkcji PCRE2.
Pomińmy moment pobierania źródeł z oficjalnych źródeł, bo jest to zbyt oczywiste, więc rozpakowałeś archiwum i wykonałeś konfigurację APR:
./configure --prefix=/etc/webserver/apr-170
Naturalnie, wskazujesz swoją ścieżkę w prefiksie, jeśli nie chcesz używać standardowej lokalizacji do instalacji biblioteki lub jeśli nie określisz:
--prefix=/ваш/путь/до библиотеки
Po zakończeniu konfiguracji przejdź do katalogu: /etc/webserver/srcsrv/apr-1.7.0/build
Lub: /twoja/ścieżka/do biblioteki/build
Znajdź plik apr_rules.mk w tym katalogu i dodaj na końcu wiersze, gdzie:
EXTRA_LIBS=-lrt -lcrypt -lpthread -ldl
Podłączenie biblioteki:
-lpcre2-8 -L/ваш/путь/до библиотеки pcre2/lib
Zapisz i przejdź do katalogu głównego źródeł APR: /twoja/ścieżka/do biblioteki.
Skompilujmy nasz zmodyfikowany RRSO:
make
make install
Jeżeli wszystko jest w porządku i kompilacja przebiegła bez błędów, przejdź do kolejnego kroku.
Krok trzeci: zbuduj narzędzie APR dla Apache ze źródeł
Pobrałeś tę bibliotekę ze źródła, przejdź do folderu głównego rozpakowanego archiwum za pomocą APR-util i wprowadź kolejno następujące polecenia:
./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/ваш/путь/до библиотеки apr
make
make install
Naturalnie, wskazujesz swoją ścieżkę w prefiksie, jeśli nie chcesz używać standardowej lokalizacji do instalacji biblioteki lub jeśli nie określisz:
--prefix=/ваш/путь/до библиотеки
Łączymy również nasz APR tutaj:
--with-apr=/ваш/путь/до библиотеки apr
Krok czwarty: pobierz źródła z Apache git, aby obsługiwać PCRE2
Ważne: Pobieramy źródła z najnowszej edycji gita.
Musimy pobrać dwa źródła takie jak ap_regex.h i util_pcre.c, linki poniżej:
Teraz przejdź do katalogu źródłowego httpd Apache i zbuduj Apache za pomocą następujących poleceń:
./configure --prefix=/etc/webserver/apache-2441 --with-apr=/ваш/путь/до библиотеки apr --with-apr-util=/ваш/путь/до библиотеки apr-util --with-pcre=/ваш/путь/до библиотеки pcre2/bin/pcre2-config
Naturalnie, wskazujesz swoją ścieżkę w prefiksie, jeśli nie chcesz używać standardowej lokalizacji do instalacji biblioteki lub jeśli nie określisz:
--prefix=/ваш/путь/до Apache httpd
Możesz także określić dodatkowe polecenia do budowania Apache według własnego uznania, mam na myśli polecenia włączania lub wyłączania modułów i bibliotek.
Następnie przechodzimy do naszego katalogu źródłowego httpd Apache, mam to:
/etc/webserver/srcsrv/httpd-2.4.41
Naturalnie przechodzisz do swojego katalogu, zamień w katalogu:
/etc/webserver/srcsrv/httpd-2.4.41/include
Plik ap_regex.h, który pobraliśmy z gita Apache.
Wchodzimy także do katalogu:
/etc/webserver/srcsrv/httpd-2.4.41/server
Zastępujemy plik util_pcre.c tym, który pobraliśmy z gita Apache
Teraz pozostaje tylko dodać połączenie PCRE2 w samym Apache, musisz znaleźć plik ap_config_auto.h, znajduje się on w katalogu:
/etc/webserver/srcsrv/httpd-2.4.41/include
Na samym początku tego pliku wstaw następujące linie:
/* Load PCRE2 */
#define HAVE_PCRE2 1
Cóż, teraz jesteśmy gotowi na prawdziwy moment kompilacji Apache httpd z obsługą PCRE2.
Przejdźmy do naszego katalogu źródłowego httpd Apache i skompilujmy go, wykonując kolejno polecenia:
make
make install
Teraz, jeśli wszystko poszło dobrze i bez błędów, złożysz i skompilujesz httpd Apache z obsługą PCRE2, co oznacza pozytywne zmiany w modułach Apache, które używają wyrażeń regularnych PCRE, jednym z nich jest przepisywanie modułów.
Podsumowując, metoda ta umożliwia wykorzystanie PCRE2 przed wydaniem przez Apache Software Foundation, mam nadzieję, że wkrótce ukaże się wersja z obsługą PCRE2.
Również podczas testowania standardowego .htaccess nie wystąpiły żadne błędy, jeśli ktoś ma jakieś błędy to proszę pisać w komentarzach.
PS
Byłem trochę zdezorientowany sytuacją używania dwóch różnych wersji PCRE dla mojego stosu i postanowiłem to naprawić.
Źródło: www.habr.com