Introduksjon til QtWebEngine
QtWebEngine integrerer
chromium sin nettfunksjoner i Qt.
Den sender med sin egen kopi av ninja som den bruker til byggingen
hvis den ikke kan finne en systemkopi og forskjellige kopier av
biblioteker fra ffmpeg, icu, libvpx, og zlib (inkludert libminizip)
som har blitt skilt ut av chromium
utviklere.
Denne pakken og nettlesere som bruker den kan være nyttig hvis du
trenger å bruke et nettsted utviklet for google chrome, eller
chromium, nettlesere.
Important
Qt-5.15 nådde End Of Life 26. mai 2023. Forlenget levetid Qt5.15
LTS har blitt forlenget til 26. mai 2025 for de med
abonnementslisenser. Fordi qtwebengine bruker chromium kode under
LGPL, ser det ut til at noen nye tilbakeporterte CVE reparasjoner
for QtWebEngine vil være tilgjengelige etter at Qt lager
offentlige utgivelser av gjeldende versjoner.
Warning
QtWebEngine bruker en utskilt kopi av chromium, og er derfor
sårbar til mange problemer som finnes der. Qt utviklerne har
alltid foretrukket å lage utgivelser samtidig som resten av Qt (i
stedet for å legge til nødrettinger), men med stabile versjoner
som blir utgitt etter gjeldende utviklingsversjon. Nå som de er
opptatt av å flytte til Qt6, har 5.15.3 og senere Qt-5.15
utgivelser er i utgangspunktet kun tilgjengelige for betalende
kunder. QtWebEngine er noe av et unntak på grunn av sin LGPL
lisens, men får git kildene (med utskilt chromium undermodul) til
en posisjon hvor det lykkes med å bygge videre på et nåværende
BLFS system kan kreve mye arbeid og derfor kan oppdateringer av
boken bli forsinket.
Det virker sannsynlig at fremtidige 5.15 serieversjoner også vil
bli utgitt lenge etter at chromium sårbarhetene er kjent, men
fikser for QtWebEngine finnes i git, og redaktørene mener at
kjente sårbarheter i nettlesere bør fikses.
Tarballen lenket nedenfor ble opprettet fra 5.15 git grenen og 87
grenen til chromium undermodulen (som er utskilt fra chromium).
Se GIT-VERSIONS filen i tarballen for detaljer om siste
forpliktelser.
Denne pakken er kjent for å bygge og fungere riktig ved å bruke en
LFS 12.1 plattform.
Warning
Som standard vil ninja bruke alle online CPUer +2 (hvis minst 4
finnes), selv om de ikke er tilgjengelige for gjeldende oppgave
på grunn av at byggeterminalen har blitt begrenset med
'oppgavesett'. I BLFS, denne pakken tar mer tid å bygge enn noen
annen. I ett eksempel, konstruksjonen av denne pakken krasjet ved
omtrent 90 prosent punktet på grunn av et lite minneproblem på et
system med 24 kjerner og 32 GB av minne.
For å omgå dette, se kommandoforklaringene nedenfor.
Note
Hvis du oppgraderer og har installert en nyere versjon av
ICU-74.2 siden du sist installerte Qt-5.15.12, må du
installere Qt5 på nytt før oppgraderingen, ellers vil den siste
lenken av denne pakken mislykkes med en advarsel om at versjonen
av icu bibliotekene som trengs av libQt5Core.so kan komme i
konflikt med versjonen som brukes til denne pakken.
Uvanlig er det leverte GN byggesystemet (brukt til å lage Ninja
filene) krever en statisk libstdc++.a
selv om de installerte bibliotekene
bruker den delte versjonen riktig. Hvis et statisk bibliotek ikke
er til stede, vil byggingen mislykkes ganske raskt. Vær
oppmerksom på at hvis du prøver å bygge webengine som en del av
Qt og det statiske biblioteket
ikke er tilgjengelig, vil den byggingen enten fullføres uten å
installere webengine, eller mislykkes under installasjonen (begge
varianter ble observert i 5.12.0).
Pakkeinformasjon
Ytterligere Nedlastinger
qtwebengine Avhengigheter
Påkrevd
nodejs-20.11.1, nss-3.98, pciutils-3.10.0, Python-3.11.1, og (Qt-5.15.12 eller qt-components-5.15.12 med qtlocation og
qtwebchannel)
Anbefalt
Note
Hvis disse pakkene ikke er installert, vil byggeprosessen
kompilere og installere sin egen (kanskje eldre) versjon, med
bivirkning av økt bygg og installert diskplass og byggetid.
enten alsa-lib-1.2.11 eller PulseAudio-17.0 (eller begge), FFmpeg-6.1.1, ICU-74.2, libwebp-1.3.2, libxslt-1.1.39, og Opus-1.4
Valgfri
libevent-2.1.12, MIT
Kerberos V5-1.21.2, pipewire-1.0.3, Poppler-24.02.0, jsoncpp,
libsrtp, snappy
Installasjon av qtwebengine
Bruk en oppdatering for å fikse flere problemer som kan forhindre
at byggingen fullføres, og for å tvinge den til å bruke python3:
patch -Np1 -i ../qtwebengine-5.15.17-build_fixes-2.patch
Hvis du bygger med systemets FFmpeg-6.1.1
som redaktørene anbefaler, bruk en oppdatering som løser problemer
når du bygger med ffmpeg-5 og senere:
patch -Np1 -i ../qtwebengine-5.15.17-ffmpeg5_fixes-1.patch
Selv om build_fixes oppdateringen har sørget for at git ikke blir
påkalt under byggingen, byggesystemet har labyrintiske regler for
bysantinsk kompleksitet, og spesielt prøver å bygge uten to
.git
mapper vil føre til at den til
slutt faller inn i uventet og ubyggbar kode som refererer til en
privat deklarasjon som ikke er opprettet. Unngå dette ved å
opprette de nødvendige mappene:
mkdir -pv .git src/3rdparty/chromium/.git
Fordi denne versjonen av qtwebengine er rettet mot en senere
utgivelse enn nåværende offentlige utgivelser, endre den for å
bygge for qt-5.15.12 ved bruk av sed:
sed -e '/^MODULE_VERSION/s/5.*/5.15.12/' -i .qmake.conf
Sørg nå for at de lokale deklarasjonene er tilgjengelige når du
ikke bygger som del av det komplette Qt-5.15.12:
find -type f -name "*.pr[io]" |
xargs sed -i -e 's|INCLUDEPATH += |&$$QTWEBENGINE_ROOT/include |'
Deretter lar du pulsaudio biblioteket koble på byggetidspunktet i
stedet for kjøretid. Dette forhindrer også et problem med nyere
pulsaudio:
sed -e '/link_pulseaudio/s/false/true/' \
-i src/3rdparty/chromium/media/media_options.gni
Deretter fikser du en byggefeil som oppstår når libxml2-2.12.0
eller nyere er installert:
sed -e 's/xmlError/const xmlError/' \
-i src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor.h \
-i src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc
Installer qtwebengine ved å kjøre
følgende kommandoer:
mkdir build &&
cd build &&
PATH=/opt/python3.11/bin:$PATH qmake .. -- \
-system-ffmpeg \
-proprietary-codecs \
-webengine-icu &&
make
Denne pakken kommer ikke med en testpakke.
Nå, som root
bruker:
make install
Fjern referanser til byggemappen fra installert bibliotek
avhengighetsfiler (prl) ved å kjøre følgende kommandoer som
root
bruker:
find $QT5DIR/ -name \*.prl \
-exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;
Parameterforklaringer
PATH=/opt/python3.11/bin:$PATH:
Denne bryteren tvinger denne pakken å bruke versjonen av Python
3.11 som er installert i /opt. Dette gjøres for å redusere sjansene
for problemer som kan oppstå under byggingen, og for å forenkle
instruksjonene siden denne pakken er inkompatibel med Python 3.12
uten ytterligere modifikasjoner.
qmake: Dette vil
bygge den inkluderte kopien av ninja hvis den ikke allerede er installert og
bruke den til å konfigurere bygget.
-- -system-ffmpeg -proprietary-codecs
-webengine-icu: Hvis noen alternativer sendes til
qmake må de komme etter '--' som må følge '..' som peker til
hovedmappen. Alternativene her får den til å bruke system ffmpeg og
system icu. Alternativet '-proprietary-codecs' tillater ffmpeg for
å dekode H264 og H265 kodeker. Hvis bygget er en del av full Qt5,
vil system icu brukes automatisk (bare) av Qt5Core hvis det er
tilgjengelig, men med mindre dette alternativet brukes, vil
webengine alltid bruke sin sendte kopi av icu, som legger til tid
og plass til bygget. Fjern -system-ffmpeg
bryteren hvis du ikke
har FFmpeg-6.1.1 installert og ønsker å bygge denne
pakken med en intern kopi av ffmpeg.
-webengine-jumbo-build 0
: Hvis dette
legges til qmake kommandoen vil det føre til at 'Jumbo Build Merge
Limit' blir rapportert som 'no' i stedet for 8. Det slår av jumbo
bygget. Noen distroer gjør det for å få en mindre bygging på noen
arkitekturer som MIPS. På x86_64 kan den spare litt plass i bygget,
men byggetiden vil øke med en veldig stor mengde.
-webengine-kerberos
: Legg til denne
hvis du har installert MIT
Kerberos V5-1.21.2 og ønsker å koble til fra en nettleser ved
hjelp av QtWebEngine til en webserver som krever at du kobler deg
til via kerberos.
NINJAJOBS=4 make
: Hvis du oppdaterte
system ninja i LFS til å gjenkjenne miljøvariabelen NINJAJOBS, vil
denne kommandoen kjøre systemets ninja med det angitte antall
jobber (dvs. 4). Det er flere grunner til at du kanskje vil bruke
alternativer som dette:
-
Å bygge på et undersett av CPUer gjør det mulig å måle
byggetiden for et mindre antall prosessorer, og/eller kjører
andre CPU intensive oppgaver samtidig. For en redaktør på en
maskin med mange CPUer, å prøve å måle byggetiden for en
4-CPU maskin, NINJAJOBS=4 make
vil gi en rimelig tilnærming (det er en kort periode hvor N+2
python og node jobber kjøres).
-
På en maskin med bare 4 CPUer tilgjengelig, standard
planlegging med N+2 jobber for qtwebengine er tregere med
mellom 3% og 7%, sannsynligvis på grunn av størrelsen på C++
filene og deres mange inkluderinger og maler. Derfor, hvis du
er i tvil, sett NINJAJOBS til antall CPUer.
-
Å redusere antall kjerner som brukes på langvarig CPU
intensive pakker kan hjelpe på varmeproblemer.
-
Redusering av antall kjerner vil forhindre potensielt tomt
minne problemer på systemer som ikke har nok minne (eller
vekselminne) når alle kjerner er aktive. En foreslått
tilnærming er å begrense antall kjerner til omtrent en kjerne
for hver 1,5 GB av kombinert RAM og vekselminne.
Konfigurere QtWebEngine
Konfigurasjonsinformasjon
Hvis du oppgraderer fra en eldre mindre versjon av denne
applikasjon, for at enkelte nettsider skal lastes, må du kanskje
fjerne nettleseren sin
mellomlagring, f.eks. til falkon
vil de bli funnet i ~/.cache/falkon/
. Du må gjøre dette hvis
nettleseren begynner å gjengi siden og endres deretter til en tom
fane med en melding at noe gikk galt, og en knapp for å prøve på
nytt. Til og med etter at du har fjernet de gamle mellomlagrene,
kan det hende du må prøve noen ganger for hver berørt fane.
Hvis en nettleser som bruker denne pakken ikke klarer å kjøre og
når den kjøres fra en term rapporterer det 'Trace/breakpoint
trap', dvs sannsynligvis et problem med kjernekonfigurasjon - det
er ikke nødvendig å gjenoppbygge QtWebEngine, se neste avsnitt,
kompiler på nytt kjernen og start på nytt til den nye kjernen.
Kjernekonfigurasjon
Denne pakken krever ingen av de valgfrie kjernenavneromselementene,
men hvis brukernavneområdet er aktivert (som
skjer i noen enhetsfiler, for økt sikkerhet) PID navneområde
må også være aktivert. Aktiver i så fall følgende alternativer i
kjernekonfigurasjonen og kompiler kjernen på nytt om nødvendig:
General setup --->
-*- Namespaces support ---> [NAMESPACES]
# Enable or disable *both* of them:
[ /*] User namespace [USER_NS]
[ /*] PID Namespaces [PID_NS]
Innhold
Installerte Programmer:
qtwebengine_convert_dict og
QtWebEngineProcess (in $QT5DIR/libexec)
Installerte Biblioteker:
libQt5Pdf.so, libQt5PdfWidgets.so,
libQt5WebEngineCore.so, libQt5WebEngine.so, og
libQt5WebEngineWidgets.so
Installerte Mapper:
$QT5DIR/include/QtPdf,
$QT5DIR/include/QtPdfWidgets, $QT5DIR/include/QtWebEngine,
$QT5DIR/include/QtWebEngineCore,
$QT5DIR/include/QtWebEngineWidgets, $QT5DIR/qml/QtWebEngine, og
$QT5DIR/translations/qtwebengine_locales
Korte Beskrivelser
qtwebengine_convert_dict
|
konverterer hunspell ordbøker (.dic ) til chromium format (.bdic )
|
QtWebEngineProcess
|
er et libexec program som kjører en zygote prosess (en
som lytter for spawn forespørsler fra en masterprosess,
og vil gå inn i respons)
|
libQtWebEngine.so
|
gir QML typer for gjengivelse av nettinnhold i en QML
applikasjon
|
libQtWebEngineCore.so
|
gir offentlig API som deles av både QtWebEngine og
QtWebEngineWidgets
|
libQtWebEngineWidgets.so
|
gir en nettlesermotor samt C++ klasser for å gjengi og
samhandle med nettinnhold
|