Gostaria de compartilhar minha experiência de tradução do Apache 2.4 para PCRE2, já que até o PHP 7 suporta a biblioteca PCRE2 há muito tempo, mas a Apache Software Foundation de código aberto ainda não.
Claro, agora provavelmente estou à frente do lançamento do Apache com suporte PCRE2, pois estou usando as fontes do Apache git, o que nos diz que o suporte PCRE2 já é possível na próxima versão, mas para aqueles que já desejam suporte PCRE2 em Apache 2.4, e para quem não quer esperar o lançamento compartilho uma das formas.
O artigo pressupõe que você está coletando todo o software necessário do código-fonte, uma lista de software e versões no momento da redação:
PCRE2-10.33
ABR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41
Etapa um: construir e compilar PCRE2
Vamos pular o momento de baixar as fontes das fontes oficiais, pois isso é muito óbvio, então você descompactou o arquivo, vá para a pasta com as fontes PCRE2 e execute o seguinte comando para suportar UTF:
./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode
Especifique seu caminho no prefixo se não quiser usar o local padrão para instalar a biblioteca:
--prefix=/ваш/путь/до библиотеки
Caso contrário, você coleta sem prefixo.
Os demais comandos indicam a inclusão de suportes para blocos de código PCRE de 8 bits, 16 bits e 32 bits, nesta versão a montagem foi realizada com eles.
E, claro, compilamos isso usando a execução sequencial de comandos:
make
make install
Se tudo estiver bem e a compilação ocorrer sem erros, passe para a próxima etapa.
Etapa dois: conectar a biblioteca PCRE2 ao APR
Como o Apache compila fontes usando APR, precisamos incluir a biblioteca no próprio APR, caso contrário pode haver erros sobre funções desconhecidas nas fontes do Apache, pois usaremos novas funções PCRE2.
Vamos omitir o momento de baixar fontes de fontes oficiais, pois isso é muito óbvio, então você descompactou o arquivo e realizou a configuração do APR:
./configure --prefix=/etc/webserver/apr-170
Naturalmente, você indica seu caminho no prefixo se não quiser usar o local padrão para instalação da biblioteca ou se não especificar:
--prefix=/ваш/путь/до библиотеки
Após concluir a configuração, acesse o diretório: /etc/webserver/srcsrv/apr-1.7.0/build
Ou: /seu/caminho/para a biblioteca/compilação
Encontre o arquivo apr_rules.mk neste diretório e adicione as linhas no final onde:
EXTRA_LIBS=-lrt -lcrypt -lpthread -ldl
Conectando a biblioteca:
-lpcre2-8 -L/ваш/путь/до библиотеки pcre2/lib
Salve e vá para o diretório raiz das fontes APR: /seu/caminho/para a biblioteca.
Vamos compilar nosso APR modificado:
make
make install
Se tudo estiver bem e a compilação ocorrer sem erros, passe para a próxima etapa.
Etapa três: construir APR-util para Apache a partir de fontes
Você baixou esta biblioteca da fonte, vá para a pasta raiz do arquivo descompactado com APR-util e digite os seguintes comandos sequencialmente:
./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/ваш/путь/до библиотеки apr
make
make install
Naturalmente, você indica seu caminho no prefixo se não quiser usar o local padrão para instalação da biblioteca ou se não especificar:
--prefix=/ваш/путь/до библиотеки
Também conectamos nosso APR aqui:
--with-apr=/ваш/путь/до библиотеки apr
Etapa quatro: baixe fontes do Apache git para suportar PCRE2
Importante: baixamos os fontes da última edição do git.
Precisamos baixar duas fontes como ap_regex.h e util_pcre.c, links abaixo:
Agora vá para o diretório de origem httpd do Apache e construa o Apache com os seguintes comandos:
./configure --prefix=/etc/webserver/apache-2441 --with-apr=/ваш/путь/до библиотеки apr --with-apr-util=/ваш/путь/до библиотеки apr-util --with-pcre=/ваш/путь/до библиотеки pcre2/bin/pcre2-config
Naturalmente, você indica seu caminho no prefixo se não quiser usar o local padrão para instalação da biblioteca ou se não especificar:
--prefix=/ваш/путь/до Apache httpd
Você também pode especificar comandos adicionais para construir o Apache a seu critério, ou seja, comandos para ativar ou desativar módulos e bibliotecas.
Em seguida, vamos para nosso diretório de origem Apache httpd, eu tenho isto:
/etc/webserver/srcsrv/httpd-2.4.41
Você naturalmente vai para o seu diretório e substitui no diretório:
/etc/webserver/srcsrv/httpd-2.4.41/include
O arquivo ap_regex.h, que baixamos do Apache git.
Também vamos ao diretório:
/etc/webserver/srcsrv/httpd-2.4.41/server
Substituímos o arquivo util_pcre.c por aquele que baixamos do Apache git
Agora só falta adicionar a conexão PCRE2 no próprio Apache, você precisa encontrar o arquivo ap_config_auto.h, ele está localizado no diretório:
/etc/webserver/srcsrv/httpd-2.4.41/include
No início deste arquivo, insira as seguintes linhas:
/* Load PCRE2 */
#define HAVE_PCRE2 1
Bem, agora estamos prontos para o verdadeiro momento de compilar o Apache httpd com suporte PCRE2.
Vamos ao nosso diretório de origem Apache httpd e compilar isso executando sequencialmente os comandos:
make
make install
Agora, se tudo correu bem e sem erros, então você terá montado e compilado o Apache httpd com suporte PCRE2, o que significa mudanças positivas nos módulos Apache que usam expressões regulares PCRE, uma delas é a reescrita do módulo.
Concluindo, este método possibilita a utilização do PCRE2 antes do lançamento oficial da Apache Software Foundation, espero que uma versão com suporte ao PCRE2 seja lançada em breve.
Além disso, durante o teste do .htaccess padrão, nenhum erro ocorreu, se alguém tiver algum erro, escreva nos comentários.
PS
Fiquei um pouco confuso com a situação de usar duas versões diferentes do PCRE para minha pilha e resolvi consertar.
Fonte: habr.com