QtWebEngine-5.15.6

Introduction à QtWebEngine

QtWebEngine intègre les composantes web de chromium dans Qt. Il contient sa propre copie de ninja qu'il utilise lors de la construction s'il ne peut pas trouver une copie sur le système, et diverses copies de bibliothèques de ffmpeg, icu, libvpx et zlib (dont libminizip) qui ont été forkées par les développeurs de chromium.

Ce paquet et les navigateurs qui l'utilisent peuvent être utiles si vous utilisez un site conçu pour google chrome, ou chromium.

[Avertissement]

Avertissement

QtWebEngine utilise une copie forkée de chromium, et est donc vulnérable à plusieurs problèmes qui y ont été trouvés. Les développeurs de Qt ont toujours préféré publier en même temps que le reste de Qt (plutôt que d'ajouter des corrections en urgence), mais les versions stables sont publiée après la version de développement actuelle. Maintenant qu'ils se préparent à passer à Qt6, les version 5.15.3 et les versions suivantes de Qt-5.15 ne sont initialement disponibles que pour leurs clients. QtWebEngine est un peu une exception avec sa licence LGPL, mais récupérer les sources git (avec le sous-module chromium forké) et l'amener à un point où il est possible de le compiler sur un système BLFS récent peut demander beaucoup d'effort et les mises à jour du livre peuvent être retardées.

Il semble que les futures versions de la série 5.15 seront aussi publiées bien après que les vulnérabilités de chromium ne soient connues, mais les corrections de QtWebEngine se trouvent dans le dépôt git et les rédacteurs pensent que les vulnérabilités connues des navigateurs devraient être corrigées.

L'archive proposée ci-dessous a été créée à partir de la branche git 5.15.6 et la branch 87 du sous-module chromium (qui est une version forkée de chromium). Voir le fichier GIT-VERSIONS dans l'archive (après avoir appliqué les correctifs) pour des détails sur les derniers commits.

This package is known to build and work properly using an LFS-11.0 platform.

[Avertissement]

Avertissement

Par défaut, ninja utilisera tous les CPU actifs + 2 (si au moins 4 existent), même s'ils ne sont pas disponibles pour la tâche actuelle parce que le terminal a été restreint avec « taskset ». Dans BLFS, ce paquet prend plus de temps à construire que n'importe quel autre. Une fois, la construction de ce paquet a échoué à environ 90 pourcent à cause d'un problème de mémoire sur un système à 24 cœurs et 32 Go de mémoire.

Pour contourner cela, voir les explications des commandes ci-dessous.

[Note]

Note

De manière inhabituelle, le système de construction GN intégré (utilisé pour créer les fichiers Ninja) a besoin d'une version statique de libstdc++.a bien que les bibliothèque installées utilisent bien la version partagée. Si cette bibliothèque statique n'est pas présente, la construction échouera rapidement. Remarquez que si vous essayez de construire webengine en tant que partie de Qt et que la bibliothèque statique n'est pas disponible, cette construction terminera sans installer webengine ou échouera pendant l'installation (les deux comportements ont été observés en 5.12.0).

Informations sur le paquet

  • Téléchargement (HTTP) : https://anduin.linuxfromscratch.org/BLFS/qtwebengine/qtwebengine-5.15.6.tar.xz

  • Téléchargement (FTP) :

  • Somme de contrôle MD5 du téléchargement : af799617842cca0b765102c312fbdd46

  • Taille du téléchargement : 306 Mo

  • Estimation de l'espace disque requis : 5,1 Go (154 Mo installés)

  • Estimation du temps de construction : 97 SBU (usuellement, avec parallélisme = 4)

Téléchargements supplémentaires

Dépendances de qtwebengine

Requises

nodejs-14.17.5, NSS-3.69, Python-2.7.18 et Qt-5.15.2

Recommandées

[Note]

Note

Si ces paquets ne sont pas installés, le processus de construction compilera et installera ses propres (sans doute plus vieilles) versions, avec pour effet d'augmenter l'espace disque utilisé et le temps pris par la construction et l'installation.

Facultatives

libevent-2.1.12, pipewire-0.3.34, Poppler-21.08.0, jsoncpp, libsrtp, snappy

Notes utilisateur : https://wiki.linuxfromscratch.org/blfs/wiki/qtwebengine

Installation de qtwebengine

[Note]

Note

Contrairement à la version 5.15.2, le système de construction dérivé de chromium a maintenant besoin de python et ce doit être python2. Dans BLFS-10.1 la création du lien symbolique de python a été supprimée avant de pouvoir enfin se débarrasser de python2 (d'autres anciens paquets qui ont besoin de python2 fonctionnent en général en invoquant python2). Si vous utilisez toujours une ancienne version de BLFS où /usr/bin/python existe, vous pouvez passer les commandes pour créer le lien symbolique, et plus tard pour le supprimer.

Tout d'abord, en tant qu'utilisateur root, créez le lien symbolique pour python :

ln -svf /usr/bin/python{2,}

Appliquez un correctif pour corriger plusieurs problèmes qui empêchent la construction :

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

Bien que le correctif s'assure que git n'est pas appelé pendant la construction, le système de construction a des règles labyrinthiques, et en particulier essayer de construire sans les deux répertoires .git le fera échouer à construire un code inattendu et inconstructible qui référence un en-tête privé qui n'a pas été généré. Évitez cela en créant les répertoires requis :

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

Comme cette version de qtwebengine est conçue pour une version plus récente que la version publique actuelle, changez-la pour construire pour qt-5.15.2 avec un sed :

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

Maintenant, assurez-vous que les en-têtes locaux sont disponibles lorsque vous ne construisez pas ce paquet en tant que partie de Qt-5.15.2 :

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

Ensuite, permettez à la bibliothèques pulseaudio de se lier à la construction, plutôt qu'à l'exécution. Cela évite un problème avec les nouvelles versions de pulseaudio :

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

Enfin, corrigez un changement dans le système de construction qui permet à ses développeurs de passer par exemple -j20 à make (pour des tests rapides de certains composants) mais casse la construction quand LFS utilise la variable d'environnement NINJAJOBS :

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

Installez qtwebengine en lançant les commandes suivantes :

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

Ce paquet n'est pas fourni avec une suite de tests.

Maintenant, en tant qu'utilisateur root :

make install

Supprimez les références au répertoire de construction dans les bibliothèques de dépendances (prl) installées en lançant les commandes suivantes en tant qu'utilisateur root :

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

Enfin, en tant qu'utilisateur root, supprimez le lien symbolique python :

rm -v /usr/bin/python

Explication des commandes

qmake : Ceci construira la copie embarquée de ninja si elle n'est pas déjà installée et l'utilisera pour configurer la construction.

-- -system-ffmpeg -webengine-icu : Si des options sont passées à qmake elles doivent apparaître après « -- » qui doit suivre les « .. » qui pointent vers le répertoire principal. Les options lui font utiliser les paquets ffmpeg et icu du système. Si vous le construisez en tant que partie de Qt5, le paquet icu du système est automatiquement utilisé (seulement) par Qt5Core s'il est disponible, mais à moins que vous utilisiez cette option webengine utilisera toujours la copie incluse de icu, ce qui demande plus de temps et d'espace pour la construction.

-webengine-jumbo-build 0 : si ajoutez cela à la commande qmake cela causera le rapport de « Jumbo Build Merge Limit » à « no » au lieu de 8. Cela désactive la construction lourde. Certaines distributions utilisent cela pour une construction plus légère sur certaines architectures comme MIPS. Sur x86_64 cela peut faire gagner un peu de place pendant la construction, mais le temps de construction augmentera énormément.

NINJAJOBS=4 make : Si vous avez corrigé le ninja du système dans LFS pour qu'il reconnaisse la variable d'environnement NINJAJOBS, cette commande lancera le ninja du système avec le nombre de travaux spécifiées (c.-à-d. 4). Il y a plusieurs raisons pour lesquelles vous pourriez vouloir faire cela :

  • Construire sur un sous-ensemble des CPU permet de mesurer le temps de construction pour un plus petit nombre de processeurs, et de lancer d'autres tache gourmandes en CPU en même temps. Pour les rédacteurs sur une machine avec de nombreux CPU, qui essaye de mesure le temps pour une machine à 4 cœurs, NINJAJOBS=4 make donnera une approximation raisonnable (il y a une petite période où N+2 travaux python2 et node tournent en même temps).

  • Sur une machine avec seulement 4 CPU en ligne, l'ordonnancement de N+2 taches pour qtwebengine est plus lent d'environ 3 à 7 %, sans doute à cause de la taille des fichiers C++ et de leurs nombreux fichiers inclus et modèles. Donc, dans le doute paramétrez NINJAJOBS aux nombre de CPU.

  • Réduire le nombre de cœurs utilisé pour des paquets gourmands en CPU pendant un long moment peut atténuer des problèmes de température.

  • Réduire le nombre de coùrs évitera d'éventuels problèmes de mémoire sur les systèmes qui n'ont pas suffisamment de mémoire (ou d'espace d'échange) quand tous les cœurs sont actifs. L'approche suggérée est de limiter le nombre de cœurs à environ un pour chaque 1,5 Go de RAM et d'espace d'échange combinés.

Configuration de QtWebEngine

Informations sur la configuration

Si vous mettez à jour depuis une version mineur plus ancienne de cette application, vous devrez nettoyer le cache du navigateur pour que certaines pages fonctionnent, p. ex. pour falkon ce sera dans ~/.cache/falkon/. vous devrez le faire si le navigateur commence à rendre la page puis se change en un onglet vide avec un message disant que quelque chose s'est mal passé, et un bouton pour réessayer. Même après avoir supprimé l'ancien cache, vous pourriez avoir besoin de réessayer plusieurs fois pour chaque onglet affecté.

Si un navigateur utilisant ce paquet ne s'exécute pas et si lorsqu'il est lancé depuis un terminal il rapporte « Trace/breakpoint trap » c'est probablement un problème de configuration du noyau — il n'y a pas besoin de reconstruire QtWebEngine, voyez la prochaine section, recompilez le noyau et redémarrez sur le nouveau noyau.

Configuration du noyau

Ce paquet n'a pas besoin des options facultatives des espaces de noms du noyau, mais si les espaces de noms utilisateurs sont activés (comme c'est le cas dans certaines unités systemd, en durcissement) les espaces de noms de PID doivent aussi être activés. Dans ce cas activez les options suivantes dans la configuration du noyau et recompilez le noyau si nécessaire :

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

Contents

Programmes installés: qtwebengine_convert_dict et QtWebEngineProcess (dans $QT5DIR/libexec)
Bibliothèques installées: libQt5Pdf.so, libQt5PdfWidgets.so, libQt5WebEngineCore.so, libQt5WebEngine.so et libQt5WebEngineWidgets.so
Répertoires installés: $QT5DIR/include/QtPdf, $QT5DIR/include/QtPdfWidgets, $QT5DIR/include/QtWebEngine, $QT5DIR/include/QtWebEngineCore, $QT5DIR/include/QtWebEngineWidgets, $QT5DIR/qml/QtWebEngine et $QT5DIR/translations/qtwebengine_locales

Descriptions courtes

qtwebengine_convert_dict

converti les dictionnaires hunspell (.dic) au format chromium (.bdic)

QtWebEngineProcess

est un programme libexec qui lance un processus zygote (qui écoute les requêtes de spawn d'un processus maître et se fork en réponse)

libQtWebEngine.so

fournit des types QML pour présenter du contenu web dans une application QML

libQtWebEngineCore.so

fournit l'API publique partagée par QtWebEngine et QtWebEngineWidgets

libQtWebEngineWidgets.so

fournit un moteur de navigateur web ainsi que des classes C++ pour présenter et interagir avec du contenu web

Last updated on