QtWebEngine-5.15.12

Introdução ao QtWebEngine

"QtWebEngine" integra os recursos "web" do "chromium" no "Qt". Ele vem com a própria cópia dele do "ninja", a qual usa para a construção se não conseguir encontrar uma cópia de sistema, e várias cópias de bibliotecas originárias do "ffmpeg", "icu", "libvpx" e "zlib" (incluindo "libminizip"), as quais foram bifurcadas pelos(as) desenvolvedores(as) do "chromium".

Esse pacote, e os navegadores que o usam, possivelmente seja útil se você precisar usar um sítio da "web" projetado para navegadores "Chrome" ou "Chromium" da "Google".

[Atenção]

Atenção

"QtWebEngine" usa uma cópia bifurcada do "Chromium" e, portanto, é vulnerável a muitos problemas encontrados lá. Os(As) desenvolvedores(as) do "Qt" sempre tem preferido fazer lançamentos ao mesmo tempo que o resto do "Qt" (em vez de adicionar correções de emergência), mas com versões estáveis sendo lançadas depois da versão atual de desenvolvimento. Agora que eles(as) desejam migrar para o "Qt6", os lançamentos 5.15.3 e posteriores do "Qt-5.15" estão inicialmente disponíveis somente para clientes pagantes. "QtWebEngine" é uma exceção por causa da licença "LGPL" dele, mas levar os fontes "git" (com o submódulo bifurcado do "Chromium") para uma posição onde eles sejam construídos com sucesso em um sistema atual do BLFS pode exigir muito esforço e, portanto, atualizações para o livro possivelmente sejam atrasadas.

Parece provável que as futuras versões da série 5.15 também serão lançadas muito depois das vulnerabilidades do "Chromium" serem conhecidas, mas correções para o "QtWebEngine" podem ser encontradas no "git" e os(as) editores(as) consideram que as vulnerabilidades conhecidas nos navegadores deveriam ser corrigidas.

O "tarball" vinculado abaixo foi criado a partir da ramificação 5.15 do "git" e da "87-branch" do submódulo "chromium" (que é bifurcada a partir do "Chromium"). Veja-se o arquivo "GIT-VERSIONS" no "tarball" para detalhes dos "commits" mais recentes.

Esse pacote é conhecido por construir e funcionar adequadamente usando uma plataforma LFS 11.3.

[Atenção]

Atenção

Por padrão, o "ninja" usará todas as "CPUs" online mais duas (se existirem pelo menos quatro), mesmo que elas não estejam disponíveis para a tarefa atual porque o terminal de construção tenha sido restringido com o "taskset". No BLFS, esse pacote leva mais tempo para construir que qualquer outro. Em um exemplo, a construção desse pacote travou no ponto de cerca de noventa por cento (90%) devido a um problema de falta de memória em um sistema com vinte e quatro (24) núcleos e trinta e dois (32) GB de memória.

Para contornar isso, vejam-se as Explicações do Comando abaixo.

[Nota]

Nota

Se estiver atualizando e tiver instalado uma versão mais recente do "ICU-72.1" desde a última instalação do "Qt-5.15.8", [então] você precisará reinstalar o "Qt5" antes de atualizar, caso contrário, o link final desse pacote falhará com um aviso de que a versão das bibliotecas "icu" necessárias para "libQt5Core.so" possivelmente conflitem com a versão usada para esse pacote.

Excepcionalmente, o sistema de construção "GN" fornecido (usado para criar os arquivos "Ninja") exige uma "libstdc++.a" estática, embora as bibliotecas instaladas usem corretamente a versão compartilhada. Se essa biblioteca estática não estiver presente, [então] a construção falhará muito rapidamente. Por favor, observe que se você tentar construir o "webengine" como parte do "Qt" e a biblioteca estática não estiver disponível, [então] essa construção será, ou concluída sem instalar o "webengine" ou, do contrário, falhará durante a instalação (ambas as variantes foram observadas em 5.12 .0).

Informação do Pacote

Transferências Adicionais

Dependências do "qtwebengine"

Exigidas

nodejs-18.14.1, nss-3.88.1, pciutils-3.9.0 e Qt-5.15.8

Recomendadas

[Nota]

Nota

Se esses pacotes não estiverem instalados, [então] o processo de construção compilará e instalará a própria versão dele (talvez mais antiga), com o efeito colateral de aumentar a construção e espaço instalado em disco e o tempo de construção.

Opcionais

libevent-2.1.12, MIT Kerberos V5-1.20.1, pipewire-0.3.66, Poppler-23.02.0, jsoncpp, libsrtp, snappy

Observações de Usuário(a): https://wiki.linuxfromscratch.org/blfs/wiki/qtwebengine

Instalação do qtwebengine

Aplique um remendo para corrigir vários problemas que podem impedir a construção de completar e para forçá-la a usar o "python3":

patch -Np1 -i ../qtwebengine-5.15.12-build_fixes-1.patch

Aplique um remendo que resolva problemas ao construir com o "ffmpeg-5":

patch -Np1 -i ../qtwebengine-5.15.12-ffmpeg5_fixes-1.patch

Embora o remendo "build_fixes" tenha garantido que o "git" não seja invocado durante a construção, o sistema de construção tem regras labirínticas de complexidade bizantina e, em particular, tentar construir sem dois diretórios ".git" o levará a eventualmente cair em código inesperado e não construível que referencia um cabeçalho privado que não foi criado. Evite isso criando os diretórios exigidos:

mkdir -pv .git src/3rdparty/chromium/.git

Como essa versão do "qtwebengine" se destina a um lançamento posterior aos lançamentos públicos atuais, mude-a para construir para "qt-5.15.8" usando um "sed":

sed -e '/^MODULE_VERSION/s/5.*/5.15.8/' -i .qmake.conf

Agora, certifique-se de que os cabeçalhos locais estejam disponíveis quando não construir como parte do "Qt-5.15.8" completo:

find -type f -name "*.pr[io]" |
   xargs sed -i -e 's|INCLUDEPATH += |&$$QTWEBENGINE_ROOT/include |'

Em seguida, permita que a biblioteca "pulseaudio" seja vinculada em tempo de construção, em vez de em tempo de execução. Isso também evita um problema com o "pulseaudio" mais recente:

sed -e '/link_pulseaudio/s/false/true/' \
     -i src/3rdparty/chromium/media/media_options.gni

A seguir, corrija as ferramentas de construção, de forma que elas possam ser executadas com "Python-3.11+":

sed -e 's/\^(?i)/(?i)^/' \
     -i src/3rdparty/chromium/tools/metrics/ukm/ukm_model.py &&
sed -e "s/'rU'/'r'/" \
     -i src/3rdparty/chromium/tools/grit/grit/util.py

Finalmente, corrija uma mudança no sistema de construção que permite que os(as) desenvolvedores(as) dele passem, por exemplo, "-j20" para o "make" (para testes rápidos de algumas áreas), mas quebra a construção com o uso do LFS da variável de ambiente "NINJAJOBS":

sed -i 's/NINJAJOBS/NINJA_JOBS/' src/core/gn_run.pro

Instale o "qtwebengine" executando os seguintes comandos:

mkdir build &&
cd     build &&
qmake .. -- -system-ffmpeg -proprietary-codecs -webengine-icu &&
make

Esse pacote não vem com uma suíte de teste.

Agora, como o(a) usuário(a) "root":

make install

Remova referências ao diretório de construção dos arquivos instalados de dependência de biblioteca ("prl") executando os seguintes comandos como o(a) usuário(a) "root":

find $QT5DIR/ -name \*.prl \
    -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;

Explicações do Comando

qmake: Isso construirá a cópia incluída do "ninja" se ele já não estiver instalado e a usará para configurar a construção.

-- -system-ffmpeg -proprietary-codecs -webengine-icu: Se quaisquer opções forem passadas para o "qmake", [então] elas precisam vir depois de "--" que precisa seguir ".." que aponta para o diretório principal. As opções aqui fazem com que ele use o "ffmpeg" do sistema e o "icu" do sistema. A opção "-proprietary-codecs" permite que o "ffmpeg" decodifique os codificadores "H264" e "H265". Se construído como parte do "Qt5" completo, [então] o "icu" do sistema será usado automaticamente (somente) pelo "Qt5Core" se ele estiver disponível, mas, a menos que essa opção seja usada, o "webengine" sempre usará a cópia dele enviada do "icu", adicionando tempo e espaço à construção.

-webengine-jumbo-build 0: Se isso for adicionado ao comando "qmake", [então] fará com que o "Jumbo Build Merge Limit" seja informado como "no" em vez de oito (08). Isso desliga a construção "jumbo". Algumas distribuições fazem isso para obter uma construção menor em algumas arquiteturas como "MIPS". No "x86_64" pode economizar um pouco de espaço na construção, mas o tempo de construção aumentará muito.

-webengine-kerberos: Adicione isso se tiver instalado o "MIT Kerberos V5-1.20.1" e desejar se conectar a partir de um navegador usando o "QtWebEngine" a um servidor "web" que exija que você se conecte via "kerberos".

NINJAJOBS=4 make: Se você remendou o "ninja" do sistema no LFS para reconhecer a variável de ambiente "NINJAJOBS," [então] esse comando executará o "ninja" do sistema com o número especificado de tarefas (ou seja, quatro). Existem várias razões pelas quais você poderia querer usar opções como essa:

  • Construir em um subconjunto de "CPUs" permite medir o tempo de construção para um número menor de processadores e (ou) executar outras tarefas com uso intensivo da "CPU" ao mesmo tempo. Para um(a) editor(a) em uma máquina com muitas "CPUs", tentando medir o tempo de construção para uma máquina com quatro "CPUs", "NINJAJOBS=4 make" fornecerá uma aproximação razoável (existe um curto período onde N+2 tarefas "python" e "node" executam).

  • Em uma máquina com somente quatro "CPUs" "online", o padrão de agendamento de tarefas N+2 para o "qtwebengine" é mais lento entre três por cento (3%) e sete por cento (7%), provavelmente devido ao tamanho dos arquivos" C++" e às muitas inclusões e modelos deles. Portanto, se em dúvida, [então] configure "NINJAJOBS" para o número de "CPUs".

  • Reduzindo o número de núcleos sendo usados em execução prolongada, os pacotes com uso intensivo de "CPU" possivelmente aliviem os problemas de aquecimento.

  • Reduzir o número de núcleos evitará potenciais problemas de falta de memória em sistemas que não tenham memória suficiente (ou troca) quando todos os núcleos estiverem ativos. Uma abordagem sugerida é a de limitar o número de núcleos a cerca de um núcleo para cada 1,5 GB de "RAM" e espaço de troca combinados.

Configurando o QtWebEngine

Informação de Configuração

Se estiver atualizando a partir de uma versão secundária mais antiga desse aplicativo, [então] para algumas páginas da "Web" carregarem, você possivelmente precise limpar os "caches" do navegador; por exemplo. para o "falkon" eles serão encontrados em "~/.cache/falkon/". Você precisará fazer isso se o navegador começar a renderizar a página e então mudar para uma guia em branco com uma mensagem de que algo deu errado e um botão para Tentar novamente. Mesmo depois de remover os "caches" antigos, você possivelmente precise tentar novamente algumas vezes para cada guia afetada.

Se um navegador usando esse pacote falhar ao executar e quando executado a partir de um terminal ele informar "Trace/breakpoint trap", isso provavelmente é um problema de configuração do núcleo - não existe necessidade de reconstruir o "QtWebEngine"; veja-se a próxima seção, recompile o núcleo e reinicie para o novo núcleo.

Configuração do Núcleo

Esse pacote não exige nenhum dos itens opcionais de espaço de nome do núcleo, mas se o espaço de nome de Usuário(a) estiver habilitado , [então] o espaço de nome de "PID" também precisa ser habilitado. Nesse caso, habilite as seguintes opções na configuração do núcleo e recompile o núcleo se necessário:

General setup --->
   -*- Namespaces support --->
     [ ]     User namespace                    [CONFIG_USER_NS]
     [*]     PID namespace                     [CONFIG_PID_NS]

Conteúdo

Aplicativos Instalados: qtwebengine_convert_dict e QtWebEngineProcess (em $QT5DIR/libexec)
Bibliotecas Instaladas: libQt5Pdf.so, libQt5PdfWidgets.so, libQt5WebEngineCore.so, libQt5WebEngine.so e libQt5WebEngineWidgets.so
Diretórios Instalados: $QT5DIR/include/QtPdf, $QT5DIR/include/QtPdfWidgets, $QT5DIR/include/QtWebEngine, $QT5DIR/include/QtWebEngineCore, $QT5DIR/include/QtWebEngineWidgets, $QT5DIR/qml/QtWebEngine e $QT5DIR/translations/qtwebengine_locales

Descrições Curtas

qtwebengine_convert_dict

converte dicionários do "hunspell" (".dic") para o formato do "chromium" (".bdic")

QtWebEngineProcess

é um aplicativo "libexec" que executa um processo zigoto (aquele que escuta solicitações de gerar a partir de um processo mestre e se bifurca em resposta)

libQtWebEngine.so

fornece tipos "QML" para renderizar conteúdo da web dentro de um aplicativo "QML"

libQtWebEngineCore.so

fornece "API" pública compartilhada por "QtWebEngine" e "QtWebEngineWidgets"

libQtWebEngineWidgets.so

fornece um mecanismo de navegador da "web", bem como classes "C++" para renderizar e interagir com o conteúdo da "web"