source: x/lib/qtwebengine.xml@ fb6d1550

11.0 11.1 11.2 lazarus qt5new trunk upgradedb xry111/intltool xry111/soup3 xry111/test-20220226
Last change on this file since fb6d1550 was fb6d1550, checked in by Ken Moffat <ken@…>, 18 months ago

Update QtWebEngine to a snapshot from 2021-04-01
(security update).

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@24457 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 23.2 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../general.ent">
5 %general-entities;
6
7 <!ENTITY qtwebengine-major "5.15">
8<!-- URL if there is a public release
9 <!ENTITY qtwebengine-download-http "https://download.qt.io/archive/qt/&qtwebengine-major;/&qtwebengine-version;/submodules/qtwebengine-everywhere-src-&qtwebengine-version;.tar.xz">
10 URL for a prepared git version -->
11 <!ENTITY qtwebengine-download-http "&sources-anduin-http;/qtwebengine/qtwebengine-&qtwebengine-version;.tar.xz">
12 <!ENTITY qtwebengine-download-ftp " ">
13 <!ENTITY qtwebengine-md5sum "97ee413dccf03d2fc09a7718f39367f7">
14 <!ENTITY qtwebengine-size "306 MB">
15 <!ENTITY qtwebengine-buildsize "5.1 GB (154 MB installed)">
16 <!ENTITY qtwebengine-time "101 SBU (Using parallelism=4)">
17]>
18
19<sect1 id="qtwebengine" xreflabel="qtwebengine-&qtwebengine-version;">
20 <?dbhtml filename="qtwebengine.html"?>
21
22 <sect1info>
23 <othername>$LastChangedBy$</othername>
24 <date>$Date$</date>
25 </sect1info>
26
27 <title>QtWebEngine-&qtwebengine-version;</title>
28
29 <indexterm zone="qtwebengine">
30 <primary sortas="a-qtwebengine">qtwebengine</primary>
31 </indexterm>
32
33 <sect2 role="package">
34 <title>Introduction to QtWebEngine</title>
35
36 <para>
37 <application>QtWebEngine</application> integrates
38 <application>chromium</application>'s web capabilities into Qt. It
39 ships with its own copy of ninja which it uses for the build if it cannot
40 find a system copy, and various copies of libraries from ffmpeg, icu,
41 libvpx, and zlib (including libminizip) which have been forked by the
42 <application>chromium</application> developers.
43 </para>
44
45 <para>
46 This package and browsers using it may be useful if you need to use a
47 website designed for google chrome, or chromium, browsers.
48 </para>
49
50 <!-- Note for editors re switching between git versions and releases:
51 If a public release of Qt 5.15.3 (or later) appears in a meaningful
52 time frame, please keep the notes re the git build, as comments, so
53 that updating for later fixes will be easier: in the past, updates
54 of 'stable' versions (i.e. 5.12 when 5.14, 5.15 were the newest)
55 happened much later than updates to the newest version (now Qt6)
56 and it seems likely we might again need to use a git version to fix
57 future chromium vulnerabilities. -->
58
59 <warning>
60 <para>
61 QtWebEngine uses a forked copy of chromium, and is therefore vulnerable
62 to many issues found there. The Qt developers have always preferred to
63 make releases at the same time as the rest of Qt (rather than adding
64 emergency fixes), but with stable versions getting released after the
65 current development version. Now that they are keen to move to Qt6, the
66 5.15.3 and later Qt-5.15 releases are initially only available to paying
67 customers. QtWebEngine is something of an exception because of its LGPL
68 licence, but getting the git sources (with the forked chromium submodule)
69 to a position where they will successfully build on a current BLFS system
70 can take a lot of effort and therefore updates to the book may be delayed.
71 </para>
72
73 <para>
74 It seems likely that future 5.15-series versions will also be released
75 long after the chromium vulnerabilities are known, but fixes for
76 QtWebEngine can be found in git and the editors take the view that
77 known vulnerabilities in browsers should be fixed.
78 </para>
79
80 <para> <!-- for git versions -->
81 The tarball linked to below was created from the 5.15 git branch
82 and the 87-branch of the chromium submodule (which is forked from
83 chromium). See the GIT-VERSIONS file in the tarball for details of
84 the latest commits.
85 </para>
86 </warning>
87
88 <!-- note for editors on obtaining webengine from git.
89 First (if you do not already have a past version)
90 git clone git://code.qt.io/qt/qtwebengine.git
91 git submodule init -
92 that will report qtwebengine-chromium.git registered for src/3rdparty
93 now find the main branch names:
94 git fetch origin
95 git branch -r
96 after a release is prepared (even if the rest is not public), the 5.15
97 branch is probably what you want
98 git checkout origin/5.15
99 Confirm that HEAD is where you expected.
100 Now go to src/3rdparty
101 git fetch origin
102 git branch -r
103 The required branch is likely to be 87-branch unless there is a newer one
104 mentioned in the 5.15 cgit web page (below).
105 git checkout origin/87-branch (or whatever)
106 Use git log or git tk to look at its HEAD and check it seems appropriate.
107
108 To decide when it might be worth creating a new tarball, periodically keep
109 an eye on https://code.qt.io/cgit/qt/qtwebengine.git/ (currently, the 5.15
110 branch, 5.15.4 might get used later). The interesting items are CVE fixes
111 for known chromium vulnerabilities, as well as numbered Security bugs -
112 again, these relate to chromium.
113
114 When I noticed some updates in late March I was searching for one of the
115 CVEs mentioned, and google found a link to a review page for Michael Brüning
116 at https://codereview.qt.nokia.com/q/owner:michael.bruning%2540qt.io. At that
117 time I could see various unmerged items, so I waited. The items for the
118 69-based chromium module are not relevant to 5.15 (possibly they will
119 eventually update 5.12). Review queues for other Qt employees might be found
120 in a similar way, but remember that everythng EXCEPT qtwebengine and chromium
121 is private to Qt until they choose to release it.
122
123 After merging the contents of the qtwebengine and src/3rdparty git extracts,
124 in the top level please create a GIT-VERSIONS file summarising the HEAD
125 commits of both parts, as a reminder of where we are up to.
126
127 Now create tarballs - 'git archive' does not work across submodule boundaries,
128 so you need to create one archive from the top of qtwebengine/ and another
129 from the top of src/3rdparty (chromium, gn, ninja are apparently all part of
130 the qtwebengine-chromium module). Then in a work area untar the qtwebengine
131 tarball, go down to src/3rdparty and untar the submodule tarball.
132 Decide on what to call the result and create a full xz tarball using tar -cJf.
133 end of note for editors -->
134
135 &lfs101_checked;
136
137 <note>
138 <para>
139 By default, ninja will use all online CPUs +2 (if at least 4 exist),
140 even if they are not available to the current task because the build
141 terminal has been restricted with 'taskset'. To work around this, see
142 the Command Explanations below.
143 </para>
144
145 <para>
146 Unusually, the shipped GN build system (used to create the Ninja files)
147 requires a static <filename class="libraryfile">libstdc++.a</filename>
148 although the installed libraries correctly use the shared version. If
149 that static library is not present, the build will fail quite quickly.
150 Please note that if you try to build webengine as part of
151 <application>Qt</application> and the static library is not available,
152 that build will either complete without installing webengine, or else
153 fail during the install (both variants have been observed in 5.12.0).
154 </para>
155 </note>
156
157 <bridgehead renderas="sect3">Package Information</bridgehead>
158 <itemizedlist spacing="compact">
159 <listitem>
160 <para>
161 Download (HTTP): <ulink url="&qtwebengine-download-http;"/>
162 </para>
163 </listitem>
164 <listitem>
165 <para>
166 Download (FTP): <ulink url="&qtwebengine-download-ftp;"/>
167 </para>
168 </listitem>
169 <listitem>
170 <para>
171 Download MD5 sum: &qtwebengine-md5sum;
172 </para>
173 </listitem>
174 <listitem>
175 <para>
176 Download size: &qtwebengine-size;
177 </para>
178 </listitem>
179 <listitem>
180 <para>
181 Estimated disk space required: &qtwebengine-buildsize;
182 </para>
183 </listitem>
184 <listitem>
185 <para>
186 Estimated build time: &qtwebengine-time;
187 </para>
188 </listitem>
189 </itemizedlist>
190
191 <bridgehead renderas="sect3">Additional Downloads</bridgehead>
192 <itemizedlist spacing="compact">
193 <listitem>
194 <para>
195 Required patch:
196 <!-- keep links for releases and git versions as a reminder
197 that the tarball names names differ
198 <ulink url="&patch-root;/qtwebengine-everywhere-src-&qtwebengine-version;-ICU68-2.patch"/> -->
199 <ulink url="&patch-root;/qtwebengine-&qtwebengine-version;-build_fixes-1.patch"/>
200 </para>
201 </listitem>
202 </itemizedlist>
203
204 <bridgehead renderas="sect3">qtwebengine Dependencies</bridgehead>
205
206 <bridgehead renderas="sect4">Required</bridgehead>
207 <!-- the qmake output tends to be misleading. 'khr' is from Mesa -->
208 <para role="required">
209 <xref linkend="nodejs"/>,
210 <xref linkend="nss"/>,
211 <xref linkend="python2"/>, and
212 <xref linkend='qt5'/>
213 </para>
214
215 <bridgehead renderas="sect4">Recommended</bridgehead>
216 <note>
217 <para>
218 If these packages are not installed, the build process will compile and
219 install its own (perhaps older) version, with the side effect of
220 increasing build and installed disk space and build time.
221 </para>
222 </note>
223
224 <para role="recommended">
225 either <xref linkend="alsa-lib"/> or
226 <xref linkend="pulseaudio"/> (or both),
227 <xref linkend="ffmpeg"/>,
228 <xref linkend="icu"/>,
229 <xref linkend="libwebp"/>,
230 <xref linkend="libxslt"/>, and
231 <xref linkend="opus"/>
232 </para>
233
234 <bridgehead renderas="sect4">Optional</bridgehead>
235 <para role="optional">
236 <xref linkend="libevent"/>,
237 <xref linkend="poppler"/>,
238 <ulink url="https://github.com/open-source-parsers/jsoncpp/releases">jsoncpp</ulink>,
239 <ulink url="https://github.com/cisco/libsrtp/releases">libsrtp</ulink>,
240 <ulink url="http://google.github.io/snappy/">snappy</ulink>
241 </para>
242
243 <para condition="html" role="usernotes">
244 User Notes: <ulink url="&blfs-wiki;/qtwebengine"/>
245 </para>
246 </sect2>
247
248 <sect2 role="installation">
249 <title>Installation of qtwebengine</title>
250
251 <note>
252 <para>
253 Unlike version 5.15.2, the chromium-derived build system now needs
254 <command>python</command> to be available and to be python2. In
255 BLFS-10.1 the creation of the python symlink was removed as a step
256 towards eventually getting rid of python2 (other old packages which
257 need python2 usually work by invoking python2). If you are still
258 using an earlier version of BLFS where
259 <filename>/usr/bin/python</filename> exists, you can skip the
260 commands to create the symlink, and to later remove it.
261 </para>
262 </note>
263
264 <para>
265 First, as the <systemitem class="username">root</systemitem>
266 user, create the python symlink:
267 </para>
268
269<screen role="root"><userinput>ln -svf /usr/bin/python{2,}</userinput></screen>
270
271 <para>
272 Now apply a patch to fix several issues that can prevent the build working:
273 </para>
274
275<screen><userinput remap="pre">patch -Np1 -i ../qtwebengine-&qtwebengine-version;-build_fixes-1.patch</userinput></screen>
276
277<!-- start of commands for git versions only -->
278 <para>
279 Although the patch has ensured that git is not invoked during the build,
280 the build system has labyrinthine rules of byzantine complexity, and in
281 particular trying to build without two <filename>.git</filename> directories
282 will lead to it eventually falling into unexpected and unbuildable code
283 which references a private header that has not been created. Avoid this
284 by creating the required directories:
285 </para>
286
287<screen><userinput>mkdir -pv .git src/3rdparty/chromium/.git</userinput></screen>
288
289 <para>
290 Because this version of qtwebengine is aimed at a later release than the
291 current public releases, change it to build for qt-&qt5-version; using a
292 sed:
293 </para>
294
295<screen><userinput>sed -e '/^MODULE_VERSION/s/5.*/&qt5-version;/' -i .qmake.conf</userinput></screen>
296<!-- end of commands for git versions only -->
297
298 <para>
299 Now, ensure that the local headers are available when not building as
300 part of the complete <xref linkend="qt5"/>:
301 </para>
302
303<screen><userinput>find -type f -name "*.pr[io]" |
304 xargs sed -i -e 's|INCLUDEPATH += |&amp;$$QTWEBENGINE_ROOT/include |'</userinput></screen>
305
306 <para>
307 Next, allow the pulseaudio library to be linked at build time, instead
308 of run time. This also prevents an issue with newer pulseaudio:
309 </para>
310
311<screen><userinput>sed -e '/link_pulseaudio/s/false/true/' \
312 -i src/3rdparty/chromium/media/media_options.gni</userinput></screen>
313
314 <para>
315 Finally, fix a change in the build system which allows its developers to
316 pass e.g. -j20 to make (for quick tests of some areas) but breaks the
317 build with LFS's use of the NINJAJOBS environment variable:
318 </para>
319
320<!-- editors: See thread at
321http://lists.linuxfromscratch.org/pipermail/blfs-dev/2019-December/036996.html
322et.seq, particularly 037002.html which shows the commit near the end. -->
323
324<screen><userinput>sed -i 's/NINJAJOBS/NINJA_JOBS/' src/core/gn_run.pro</userinput></screen>
325
326 <para>
327 If an older version of the package's main library has been installed,
328 when the package is built separately it will link to that in preference
329 to its own not-yet-installed version, and fail because of missing symbols.
330 Prevent that by, as the <systemitem class="username">root</systemitem>
331 user, moving the symlink out of the way:
332 </para>
333
334<screen role="root"><userinput>if [ -e ${QT5DIR}/lib/libQt5WebEngineCore.so ]; then
335 mv -v ${QT5DIR}/lib/libQt5WebEngineCore.so{,.old}
336fi</userinput></screen>
337
338 <para>
339 Install <application>qtwebengine</application> by running the following
340 commands:
341 </para>
342
343<screen><userinput>mkdir build &amp;&amp;
344cd build &amp;&amp;
345
346qmake .. -- -system-ffmpeg -webengine-icu &amp;&amp;
347make</userinput></screen>
348
349<!--
350 <para>
351 if you wish to build the HTML documentation, issue:
352 </para>
353
354<screen><userinput>make docs</userinput></screen>
355-->
356 <para>
357 This package does not come with a test suite.
358 </para>
359
360 <para>
361 Now, as the <systemitem class="username">root</systemitem> user:
362 </para>
363
364<screen role="root"><userinput>make install</userinput></screen>
365
366 <!-- EDITORS NOTE: If you are updating this package, use INSTALL_ROOT=
367 instead of DESTDIR= -->
368<!--
369 <para>
370 If you built the HTML documentation, install it with:
371 </para>
372
373<screen role="root"><userinput>make install_docs</userinput></screen>
374-->
375 <para>
376 Remove references to the build directory from installed library
377 dependency (prl) files by running the following
378 commands as the <systemitem class="username">root</systemitem> user:
379 </para>
380
381<screen role="root"><userinput>find $QT5DIR/ -name \*.prl \
382 -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;</userinput></screen>
383
384 <para>
385 Finally, as the <systemitem class="username">root</systemitem>
386 user, remove the python symlink:
387 </para>
388
389<screen role="root"><userinput>rm -v /usr/bin/python</userinput></screen>
390 </sect2>
391
392 <sect2 role="commands">
393 <title>Command Explanations</title>
394
395 <para>
396 <command>qmake</command>: This will build the included copy of
397 <application>ninja</application> if it is not already installed
398 and use it to configure the build.
399 </para>
400
401 <para>
402 <command>-- -system-ffmpeg -webengine-icu</command>: If any options are
403 passed to qmake they must come after '--' which must follow '..' that points
404 to the main directory. The options here cause it to use system ffmpeg and
405 system icu. If built as part of full Qt5, the system icu is automatically
406 used (only) by Qt5Core if it is available, but unless this option is used
407 webengine will always use its shipped copy of icu, adding time and space
408 to the build.
409 </para>
410
411 <!--
412 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
413 href="../../xincludes/SIOCGSTAMP.xml"/>
414 -->
415
416 <para>
417 <option>NINJAJOBS=4 make</option>: If you patched system ninja in LFS to
418 recognize the NINJAJOBS environment variable, this command will run system
419 ninja with the specified number of jobs (i.e. 4).
420 There are several reasons why you might want to do this:
421 </para>
422
423 <itemizedlist>
424 <listitem>
425 <para>
426 Building on a subset of CPUs allows measuring the build time
427 for that number of processors or to run other CPU-intensive tasks on
428 other cores.
429 </para>
430 </listitem>
431 <listitem>
432 <para>
433 Improving the build speed on a less-well endowed 4-core machine.
434 On a machine with a powerful CPU and plenty of RAM, running N+2
435 jobs (the ninja default for 4+ cores) for the large working sets
436 of the C++ compiles in this package is typically only marginally
437 faster than running N jobs at a time. But for a machine with less
438 memory it can be much slower.
439 </para>
440 </listitem>
441 <listitem>
442 <para>
443 Reducing the number of cores being used on long running, CPU
444 intensive packages may alleviate heat problems.
445 </para>
446 </listitem>
447 </itemizedlist>
448
449 </sect2>
450
451 <sect2 role="configuration">
452 <title>Configuring QtWebEngine</title>
453
454 <sect3 id="qtwebengine-config">
455 <title>Configuration Information</title>
456
457 <para>
458 If you are upgrading from an older minor version of this
459 application, for some webpages to load you may need to
460 clear the <emphasis>browser</emphasis> caches, e.g. for
461 <application>falkon</application> they will be found in
462 <filename class="directory">~/.cache/falkon/</filename>.
463 You will need to do this if the browser starts to render
464 the page and then changes to a blank tab with a message
465 that something went wrong, and a button to Retry. Even
466 after removing the old caches, you may need to retry a
467 few times for each affected tab.
468 </para>
469
470 <para>
471 If a browser using this package fails to run and when run
472 from a term it reports 'Trace/breakpoint trap' that is
473 probably a kernel configuration issue - there is no need
474 to rebuild QtWebEngine, see the next section, recompile
475 the kernel and reboot to the new kernel.
476 </para>
477
478 </sect3>
479
480 </sect2>
481
482 <sect2 role="kernel" id="qtwebengine-kernel">
483 <title>Kernel Configuration</title>
484
485 <para>
486 This package does not require any of the optional kernel namespace items,
487 but if User namespace is enabled <phrase revision="systemd">(as happens
488 in some unit files, for hardening)</phrase> PID namespace must also be
489 enabled. In that case enable the following options in the kernel
490 configuration and recompile the kernel if necessary:
491 </para>
492
493<!-- Spaces are significant in <screen> sections -->
494<screen><literal>General setup ---&gt;
495 -*- Namespaces support ---&gt;
496 [ ] User namespace [CONFIG_USER_NS]
497 [*] PID namespace [CONFIG_PID_NS]</literal></screen>
498
499 <indexterm zone="qtwebengine qtwebengine-kernel">
500 <primary sortas="d-qtwebengine">qtwebengine</primary>
501 </indexterm>
502 </sect2>
503
504 <sect2 role="content">
505 <title>Contents</title>
506
507 <segmentedlist>
508 <segtitle>Installed Programs</segtitle>
509 <segtitle>Installed Libraries</segtitle>
510 <segtitle>Installed Directories</segtitle>
511
512 <seglistitem>
513 <seg>
514 qtwebengine_convert_dict and
515 QtWebEngineProcess (in $QT5DIR/libexec)
516 </seg>
517 <seg>
518 libQt5Pdf.so,
519 libQt5PdfWidgets.so,
520 libQt5WebEngineCore.so,
521 libQt5WebEngine.so, and
522 libQt5WebEngineWidgets.so
523 </seg>
524 <seg>
525 $QT5DIR/include/QtPdf,
526 $QT5DIR/include/QtPdfWidgets,
527 $QT5DIR/include/QtWebEngine,
528 $QT5DIR/include/QtWebEngineCore,
529 $QT5DIR/include/QtWebEngineWidgets,
530 $QT5DIR/qml/QtWebEngine, and
531 $QT5DIR/translations/qtwebengine_locales
532 </seg>
533 </seglistitem>
534 </segmentedlist>
535
536 <variablelist>
537 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
538 <?dbfo list-presentation="list"?>
539 <?dbhtml list-presentation="table"?>
540
541 <varlistentry id="qtwebengine_convert_dict">
542 <term><command>qtwebengine_convert_dict</command></term>
543 <listitem>
544 <para>
545 converts hunspell dictionaries (<literal>.dic</literal>) to chromium
546 format (<literal>.bdic</literal>)
547 </para>
548 <indexterm zone="qtwebengine qtwebengine_convert_dict">
549 <primary sortas="b-qtwebengine_convert_dict">qtwebengine_convert_dict</primary>
550 </indexterm>
551 </listitem>
552 </varlistentry>
553
554 <varlistentry id="QtWebEngineProcess">
555 <term><command>QtWebEngineProcess</command></term>
556 <listitem>
557 <para>
558 is a libexec program which runs a zygote process (one that listens
559 for spawn requests from a master process and will fork itself in
560 response)
561 </para>
562 <indexterm zone="qtwebengine QtWebEngineProcess">
563 <primary sortas="b-QtWebEngineProcess">QtWebEngineProcess</primary>
564 </indexterm>
565 </listitem>
566 </varlistentry>
567
568 <varlistentry id="libQtWebEngine-lib">
569 <term><filename class="libraryfile">libQtWebEngine.so</filename></term>
570 <listitem>
571 <para>
572 provides QML types for rendering web content within a QML application
573 </para>
574 <indexterm zone="qtwebengine libQtWebEngine-lib">
575 <primary sortas="c-libQtWebEngine">libQtWebEngine.so</primary>
576 </indexterm>
577 </listitem>
578 </varlistentry>
579
580 <varlistentry id="libQtWebEngineCore">
581 <term><filename class="libraryfile">libQtWebEngineCore.so</filename></term>
582 <listitem>
583 <para>
584 provides public API shared by both QtWebEngine and QtWebEngineWidgets
585 </para>
586 <indexterm zone="qtwebengine libQtWebEngineCore">
587 <primary sortas="c-libQtWebEngineCore">libQtWebEngineCore.so</primary>
588 </indexterm>
589 </listitem>
590 </varlistentry>
591
592 <varlistentry id="libQtWebEngineWidgets">
593 <term><filename class="libraryfile">libQtWebEngineWidgets.so</filename></term>
594 <listitem>
595 <para>
596 provides a web browser engine as well as C++ classes to render and
597 interact with web content
598 </para>
599 <indexterm zone="qtwebengine libQtWebEngineWidgets">
600 <primary sortas="c-libQtWebEngineWidgets">libQtWebEngineWidgets.so</primary>
601 </indexterm>
602 </listitem>
603 </varlistentry>
604
605 </variablelist>
606 </sect2>
607
608</sect1>
Note: See TracBrowser for help on using the repository browser.