QtWebEngine-6.7.2

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 parecem bifurcar uma versão mais recente para versões secundárias do Qt, porém como o chromium muda para versões mais recentes muito frequentemente, no momento em que os(as) desenvolvedores(as) do Qt obtém uma versão bifurcada para passar em nos testes estendidos deles(as), ela é sempre uma versão antiga e correções de segurança provenientes do chromium (algumas das quais tem um número CVE) podem levar vários meses para aparecer em um lançamento do QtWebengine, mesmo se a gravidade tenha sido classificada como Crítica.

Portanto, você deveria ter cuidado ao usar o QtWebEngine em um contexto sensível e deveria sempre atualizar para o próximo lançamento assim que ela aparecer neste livro, mesmo que não esteja sinalizada como uma Atualização de Segurança. Identificar quais vulnerabilidades tenham sido corrigidas em um lançamento específico exige puxar a ramificação 'based-NNN' apropriada, pouco antes dos lançamentos anteriores e atuais e frequentemente é impraticável. Informes de itens de QTBUG corrigidos não parecem estar disponíveis e não existe nenhuma documentação no tarball para mudanças depois das versões qt-5.

Esse pacote é conhecido por construir e funcionar corretamente usando uma plataforma LFS 12.2.

[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) elementos de processamento e trinta e dois (32) GB de memória.

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

Informação do Pacote

Transferências Adicionais

Dependências do "qtwebengine"

Exigidas

Cups-2.4.10, html5lib-1.1, nodejs-20.16.0, nss-3.103, pciutils-3.13.0 e Qt-6.7.2

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.21.3, pipewire-1.2.3, Poppler-24.08.0, jsoncpp, libsrtp, snappy

Instalação do qtwebengine

Primeiro, adapte a cópia incluída do Chromium para a versão mais recente do ffmpeg:

patch -Np1 -d src/3rdparty/chromium < ../qtwebengine-6.7.2-ffmpeg7_fixes-1.patch

Em seguida, corrija uma falha de construção que ocorre porque a construção do BLFS do ffmpeg não usa OpenH264:

sed -e '189 s/=/& false/' \
    -e '190 d'            \
    -i.orig src/3rdparty/chromium/third_party/webrtc/webrtc.gni

Instale o "qtwebengine" executando os seguintes comandos:

mkdir build &&
cd    build &&

cmake -D CMAKE_MESSAGE_LOG_LEVEL=STATUS             \
      -D QT_FEATURE_webengine_system_ffmpeg=ON      \
      -D QT_FEATURE_webengine_system_icu=ON         \
      -D QT_FEATURE_webengine_system_libevent=ON    \
      -D QT_FEATURE_webengine_proprietary_codecs=ON \
      -D QT_FEATURE_webengine_webrtc_pipewire=ON    \
      -D QT_BUILD_EXAMPLES_BY_DEFAULT=OFF           \
      -G Ninja .. &&

ninja

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

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

ninja install

Explicações do Comando

CMAKE_MESSAGE_LOG_LEVEL=STATUS: Produz mensagens interessantes nas quais usuários(as) do projeto possam estar interessados(as). Idealmente, deveriam ser concisas, não mais que uma linha, porém ainda informativas.

QT_FEATURE_webengine_system_*: Especifique quais pacotes externos o sistema deveria usar.

QT_BUILD_EXAMPLES_BY_DEFAULT=OFF: Não construa exemplos por padrão.

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 , (como acontece em alguns arquivos de unidade, para proteção), [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 --->                                       [NAMESPACES]
    # Enable or disable *both* of them:
    [ /*] User namespace                                               [USER_NS]
    [ /*] PID Namespaces                                                [PID_NS]

Conteúdo

Aplicativos Instalados: qtwebengine_convert_dict e QtWebEngineProcess (ambos em $QT6DIR/libexec)
Bibliotecas Instaladas: libQt6Pdf.so, libQt6PdfQuick.so, libQt6PdfWidgets.so, libQt6WebEngineCore.so, libQt6WebEngineiQuick.so, libQt6WebEngineQuickDelegatesQml.so e libQt6WebEngineWidgets.so
Diretórios Instalados: $QT6DIR/include/QtPdf, $QT6DIR/include/QtPdfQuick, $QT6DIR/include/QtPdfWidgets, $QT6DIR/include/QtWebEngineCore, $QT6DIR/include/QtWebEngineQuick, $QT6DIR/include/QtWebEngineWidgets, $QT6DIR/qml/QtWebEngine e $QT6DIR/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)