source: xsoft/graphweb/chromium.xml@ 1fb6a438

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts lazarus lxqt perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition trunk upgradedb xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since 1fb6a438 was 1fb6a438, checked in by DJ Lucas <dj@…>, 7 years ago

Install ICU data for Chromium. Thanks to John Burrell for the fix.

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

  • Property mode set to 100644
File size: 18.8 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 chromium-download-http "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-&chromium-version;.tar.xz">
8 <!ENTITY chromium-download-ftp " ">
9 <!ENTITY chromium-md5sum "aca4aeff806e1230912aa9c9df6b7be7">
10 <!ENTITY chromium-size "495 MB">
11 <!ENTITY chromium-buildsize "5.6 GB">
12 <!ENTITY chromium-time "94 SBU (with 4 threads)">
13 <!-- Ninja defaults to parallel build unless supplying -j1, SBU measured on
14 dual core, hyperthreaded CPU (4 threads). -->
15]>
16
17<sect1 id="chromium" xreflabel="Chromium-&chromium-version;">
18 <?dbhtml filename="chromium.html"?>
19
20 <sect1info>
21 <othername>$LastChangedBy$</othername>
22 <date>$Date$</date>
23 </sect1info>
24
25 <title>Chromium-&chromium-version;</title>
26
27 <indexterm zone="chromium">
28 <primary sortas="a-Chromium">Chromium</primary>
29 </indexterm>
30
31 <sect2 role="package">
32 <title>Introduction to Chromium</title>
33
34 <para><application>Chromium</application> is an open-source browser project
35 that aims to build a safer, faster, and more stable way for all users to
36 experience the web.</para>
37
38 &lfs80_checked;
39
40 <bridgehead renderas="sect3">Package Information</bridgehead>
41 <itemizedlist spacing="compact">
42 <listitem>
43 <para>Download (HTTP): <ulink url="&chromium-download-http;"/></para>
44 </listitem>
45 <listitem>
46 <para>Download (FTP): <ulink url="&chromium-download-ftp;"/></para>
47 </listitem>
48 <listitem>
49 <para>Download MD5 sum: &chromium-md5sum;</para>
50 </listitem>
51 <listitem>
52 <para>Download size: &chromium-size;</para>
53 </listitem>
54 <listitem>
55 <para>Estimated disk space required: &chromium-buildsize;</para>
56 </listitem>
57 <listitem>
58 <para>Estimated build time: &chromium-time;</para>
59 </listitem>
60 </itemizedlist>
61
62 <bridgehead renderas="sect3">Additional Downloads</bridgehead>
63 <bridgehead renderas="sect4">Required patch to fix build issues with
64 <application>gcc-7.1.0</application>:</bridgehead>
65 <itemizedlist spacing="compact">
66 <listitem>
67 <para>
68 <ulink url="&patch-root;/chromium-&chromium-version;-gcc7-1.patch"/>
69 </para>
70 </listitem>
71 </itemizedlist>
72
73 <bridgehead renderas="sect4">Recommended patch to use the system
74 <application>FFmpeg</application>:</bridgehead>
75 <itemizedlist spacing="compact">
76 <listitem>
77 <para>
78 <ulink url="&patch-root;/chromium-&chromium-version;-system_ffmpeg-1.patch"/>
79 </para>
80 </listitem>
81 </itemizedlist>
82
83 <bridgehead renderas="sect4">Optional Chrome binaries to extract the
84 <application>WideVine</application> plug-in (Netflix) support:</bridgehead>
85 <itemizedlist spacing="compact">
86 <listitem>
87 <para>Download (HTTP):</para>
88 <para>
89 <ulink url="http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_&chromium-version;-1_amd64.deb"/>
90 </para>
91 </listitem>
92 <listitem>
93 <para>Download MD5 sum: 97b313ad0abeba57d916bdb88c3ded90</para>
94 </listitem>
95 <listitem>
96 <para>Download size: 52 MB</para>
97 </listitem>
98 </itemizedlist>
99 <itemizedlist spacing="compact">
100 <listitem>
101 <para>Download (HTTP):</para>
102 <para>
103 <ulink url="http://mirror.retrosnub.co.uk/apt/google/pool/main/g/google-chrome-stable/google-chrome-stable_48.0.2564.116-1_i386.deb"/>
104 </para>
105 </listitem>
106 <listitem>
107 <para>Download MD5 sum: 895e877b9bfe5da05a061369c2078626</para>
108 </listitem>
109 <listitem>
110 <para>Download size: 45 MB</para>
111 </listitem>
112 </itemizedlist>
113
114 <bridgehead renderas="sect3">Chromium Dependencies</bridgehead>
115
116 <bridgehead renderas="sect4">Required</bridgehead>
117 <para role="required">
118 <xref linkend="alsa-lib"/>,
119 <xref linkend="cups"/>,
120 <xref linkend="desktop-file-utils"/>,
121 <xref linkend="dbus"/>,
122 <xref linkend="perl-file-basedir"/>,
123 <xref linkend="gtk2"/>,
124 <xref linkend="hicolor-icon-theme"/>,
125 <xref linkend="mitkrb"/>,
126 <xref linkend="mesa"/>,
127 <xref linkend="ninja"/>,
128 <xref linkend="nodejs"/>,
129 <xref linkend="nss"/>,
130 <xref linkend="python2"/>,
131 <xref linkend="usbutils"/>, and
132 <xref linkend="x-window-system"/>
133 </para>
134
135 <bridgehead renderas="sect4">Recommended</bridgehead>
136 <para role="recommended">
137 <xref linkend="ffmpeg"/>,
138 <xref linkend="flac"/>,
139 <xref linkend="git"/>,
140<!-- <xref linkend="icu"/>, -->
141 <xref linkend="libevent"/>,
142 <xref linkend="libexif"/>,
143 <xref linkend="libjpeg"/>,
144 <xref linkend="libpng"/>,
145 <xref linkend="libsecret"/>,
146<!-- <xref linkend="libvpx"/>, -->
147 <xref linkend="libwebp"/>,
148 <xref linkend="libxml2"/>,
149 <xref linkend="pciutils"/>,
150 <xref linkend="pulseaudio"/>,
151 <xref linkend="xdg-utils"/>, and
152 <xref linkend="yasm"/>
153 </para>
154
155 <bridgehead renderas="sect4">Optional</bridgehead>
156 <para role="optional">
157 <xref linkend="GConf"/>,
158 <xref linkend="icu"/> (currently broken),
159 <xref linkend="gnome-keyring"/>,
160 <xref linkend="libvpx"/> (currently broken),
161 <ulink url="https://devel.freebsoft.org/speechd">speech-dispatcher</ulink>
162 (for the screen reader), and
163 <ulink url="https://google.github.io/snappy">snappy</ulink>
164 </para>
165
166 <para condition="html" role="usernotes">User Notes:
167 <ulink url="&blfs-wiki;/chromium"/></para>
168
169 </sect2>
170
171 <sect2 role="installation">
172 <title>Installation of Chromium</title>
173
174 <para>Apply a patch to fix errors with building with
175 <application>GCC-7.1.0</application>:</para>
176
177<screen><userinput>patch -Np1 -i ../chromium-&chromium-version;-gcc7-1.patch</userinput></screen>
178
179 <para>Apply a patch to allow use of the system
180 <application>FFmpeg</application>:</para>
181
182<screen><userinput>patch -Np1 -i ../chromium-&chromium-version;-system_ffmpeg-1.patch</userinput></screen>
183
184 <para>Fix a build issue with GCC-6:</para>
185
186<screen><userinput>sed 's/^config("compiler") {/&amp;\ncflags_cc = [ "-fno-delete-null-pointer-checks" ]/' \
187 -i build/config/linux/BUILD.gn</userinput></screen>
188
189 <para>Enable the use of the
190 <ulink url="http://www.widevine.com/">WideVine</ulink> plugin, needed for
191 Netflix support (see the WideVine section below). Define an
192 available product name ("Pinkie Pie" in this case) with the following
193 command:</para>
194
195<screen><userinput>sed 's/WIDEVINE_CDM_AVAILABLE/&amp;\n\n#define WIDEVINE_CDM_VERSION_STRING "Pinkie Pie"/' \
196 -i third_party/widevine/cdm/stub/widevine_cdm_version.h</userinput></screen>
197
198 <para>Remove third-party build files that interfere with system versions:</para>
199
200 <note>
201 <para>
202 Chromium uses many external projects, the selections below are not set
203 in stone, however they have been tested thoroughly. With Chromium
204 &chromium-version;, system versions of icu, libvpx, and zlib
205 are known to break the build at this time.
206 <!-- icu: Not at 59 internally, should be at chromium-59 -->
207 <!-- libvpx: https://bugs.gentoo.org/show_bug.cgi?id=611394 -->
208 <!-- zlib requires libminizip -->
209 </para>
210 </note>
211
212<!-- Again, thanks to Arch, this is much better than listing all the needed
213shipped libs required to use the remove_bundled_files.py script -->
214<!--<screen><userinput>for LIB in ffmpeg flac harfbuzz-ng icu libevent libjpeg \
215 libjpeg_turbo libpng libvpx libwebp libxslt yasm; do
216 find -type f -path "*third_party/$LIB/*" \
217 \! -path "*third_party/$LIB/chromium/*" \
218 \! -path "*third_party/$LIB/google/*" \
219 \! -path "*base/third_party/icu/*" \
220 \! -path "*base/third_party/libevent/*" \
221 \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
222 -delete
223done &amp;&amp; -->
224<screen><userinput>for LIB in ffmpeg flac harfbuzz-ng libevent libjpeg \
225 libjpeg_turbo libpng libwebp libxml libxslt yasm; do
226 find -type f -path "*third_party/$LIB/*" \
227 \! -path "*third_party/$LIB/chromium/*" \
228 \! -path "*third_party/$LIB/google/*" \
229 \! -path "*base/third_party/libevent/*" \
230 \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
231 -delete
232done &amp;&amp;
233
234python build/linux/unbundle/replace_gn_files.py \
235 --system-libraries ffmpeg flac harfbuzz-ng<!--icu--> libevent libjpeg \
236 libpng libwebp libxml libxslt yasm &amp;&amp;
237python third_party/libaddressinput/chromium/tools/update-strings.py</userinput></screen>
238
239 <para><application>Chromium</application> uses an internal tool, <ulink
240 url="https://chromium.googlesource.com/chromium/src/tools/gn">gn</ulink>,
241 to generate the <application>Ninja</application> build files. Complete
242 configuration of the build using the following commands:</para>
243
244 <note>
245 <para>
246 <!-- Taken from Arch Linux - an immensely helpful link - Thanks -->
247 The Google API Key and OAuth tokens below are specific to LFS. If using
248 these instructions for another distro, or if you intend to distribute
249 binary copies of the software using these instructions, please obtain
250 your own keys following the instructions located at
251 <ulink url="http://www.chromium.org/developers/how-tos/api-keys"/>.
252 <!-- BLFS Devs, register an account at Google with your
253 @linuxfromscratch.org email address, and I'll make you an administrator
254 for the 'Chromium for LFS' project (where the API and OAuth keys were
255 created for use in the book).-->
256 </para>
257 </note>
258
259<screen><userinput>GN_CONFIG=('google_api_key="AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ"'
260'google_default_client_id="595013732528-llk8trb03f0ldpqq6nprjp1s79596646.apps.googleusercontent.com"'
261'google_default_client_secret="5ntt6GbbkjnTVXx-MSxbmx5e"'
262'clang_use_chrome_plugins=false'
263'enable_hangout_services_extension=true'
264'enable_nacl=false'
265'enable_nacl_nonsfi=false'
266'enable_widevine=true'
267'fatal_linker_warnings=false'
268'ffmpeg_branding="Chrome"'
269'fieldtrial_testing_like_official_build=true'
270'is_debug=false'
271'is_clang=false'
272'link_pulseaudio=true'
273'linux_use_bundled_binutils=false'
274'proprietary_codecs=true'
275'remove_webcore_debug_symbols=true'
276'symbol_level=0'
277'treat_warnings_as_errors=false'
278'use_allocator="none"'
279'use_cups=true'
280'use_gconf=false'
281'use_gnome_keyring=false'
282'use_gold=false'
283'use_gtk3=false'
284'use_kerberos=true'
285'use_pulseaudio=true'
286'use_sysroot=false')</userinput></screen>
287
288 <para>Build <application>gn</application> and use it to prepare the
289 <application>Ninja</application> build files:</para>
290
291<screen><userinput>sed "/internal\.cc',/a\ 'base/callback_helpers.cc'," \
292 -i tools/gn/bootstrap/bootstrap.py &amp;&amp;
293python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}" &amp;&amp;
294out/Release/gn gen out/Release --args="${GN_CONFIG[*]}"</userinput></screen>
295
296 <warning>
297 <para>Ninja, by default, sets the number of jobs to the number of
298 availalble threads. If your machine is memory constrained, with regard to
299 number of threads, you should reduce the number of jobs by passing the
300 <parameter>-j#</parameter> switch to the <command>ninja</command> command
301 below. Plan for roughly 1.25GB per thread while linking
302 <application>WebKit</application> to avoid out of memery errors.</para>
303 </warning>
304
305 <para>Build <application>Chromium</application> using the following
306 commands:</para>
307
308<screen><userinput>mkdir -p third_party/node/linux/node-linux-x64/bin &amp;&amp;
309ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ &amp;&amp;
310ninja -C out/Release chrome chrome_sandbox chromedriver widevinecdmadapter</userinput></screen>
311
312 <para>This package was already tested as part of the build.</para>
313
314 <para>Now, as the <systemitem class="username">root</systemitem> user,
315 install the pacakage:</para>
316
317<screen role="root"><userinput>install -vDm755 out/Release/chrome \
318 /usr/lib/chromium/chromium &amp;&amp;
319install -vDm4755 out/Release/chrome_sandbox \
320 /usr/lib/chromium/chrome-sandbox &amp;&amp;
321install -vDm755 out/Release/chromedriver \
322 /usr/lib/chromium/chromedriver &amp;&amp;
323ln -svf /usr/lib/chromium/chromium /usr/bin &amp;&amp;
324ln -svf /usr/lib/chromium/chromedriver /usr/bin/ &amp;&amp;
325
326install -vm644 out/Release/icudtl.dat /usr/lib/chromium/ &amp;&amp;
327install -vDm644 out/Release/gen/content/content_resources.pak \
328 /usr/lib/chromium/ &amp;&amp;
329install -vm644 out/Release/{*.pak,*.bin} \
330 /usr/lib/chromium/ &amp;&amp;
331
332cp -av out/Release/locales /usr/lib/chromium/ &amp;&amp;
333chown -Rv root:root /usr/lib/chromium/locales &amp;&amp;
334
335install -vDm644 out/Release/chrome.1 \
336 /usr/share/man/man1/chromium.1</userinput></screen>
337
338 <para>While still the <systemitem class="username">root</systemitem> user,
339 install icons and the .desktop file:</para>
340
341<screen role="root"><userinput>for size in 16 32; do
342 install -vDm644 \
343 "chrome/app/theme/default_100_percent/chromium/product_logo_$size.png" \
344 "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
345done &amp;&amp;
346
347for size in 22 24 48 64 128 256; do
348 install -vDm644 "chrome/app/theme/chromium/product_logo_$size.png" \
349 "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
350done &amp;&amp;
351
352cat &gt; /usr/share/applications/chromium.desktop &lt;&lt; "EOF"
353[Desktop Entry]
354Encoding=UTF-8
355Name=Chromium Web Browser
356Comment=Access the Internet
357GenericName=Web Browser
358Exec=chromium %u
359Terminal=false
360Type=Application
361Icon=chromium
362Categories=GTK;Network;WebBrowser;
363MimeType=application/xhtml+xml;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
364EOF</userinput></screen>
365
366 <bridgehead renderas="sect3">Extracting the WideVine plugin from Chrome</bridgehead>
367
368 <para>Extract the downloaded deb file with the following commands:</para>
369
370<screen><userinput>mkdir temp &amp;&amp;
371cd temp &amp;&amp;
372case $(uname -m) in
373 x86_64) ar -x ../../google-chrome-stable_&chromium-version;-1_amd64.deb
374 ;;
375 i?86) ar -x ../../google-chrome-stable_48.0.2564.116-1_i386.deb
376 ;;
377esac</userinput></screen>
378
379 <para>As the <systemitem class="username">root</systemitem> user, enable
380 the WideVine plugin with the following commands:</para>
381
382<!-- Note that libwidevinecdmadapter.so is not in the tarball. It is
383created only if enable_widevine=true i sset in GN_CONFIG -->
384
385<screen role="root"><userinput>tar -xf data.tar.xz &amp;&amp;
386install -vm755 ../out/Release/libwidevinecdmadapter.so /usr/lib/chromium/ &amp;&amp;
387install -vm755 opt/google/chrome/libwidevinecdm.so /usr/lib/chromium/</userinput></screen>
388
389 </sect2>
390
391 <sect2 role="commands">
392 <title>Command Explanations</title>
393
394 <para><command>GN_CONFIG=(...)</command>: this array contains
395 all of the defines used in the build.</para>
396
397 <para><command>sed...tools/gn/bootstrap/bootstrap.py</command>: Fix a
398 build issue with <application>gn</application>.</para>
399
400 <para><command>python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}"</command>:
401 this command replaces defines in the gn files with the values contained in
402 <envar>${GN_CONFIG[@]}</envar>.</para>
403
404 <para><command>out/Release/gn gen out/Release --args="${GN_CONFIG[*]}"</command>:
405 this command runs a Google provided configuration script
406 <application>gn</application> on the source tree to produce
407 a <application>Ninja</application> configuration suitable for the build
408 machine.</para>
409
410 <para><command>mkdir...ln -s /usr/bin/node
411 third_party/node/linux/node-linux-x64/bin/</command>: these commands
412 replaced the local <application>Node.js</application> (no longer available)
413 with the system installed <application>Node.js</application>.</para>
414
415 <para><command>ar -x ../../google-chrome-stable*.deb</command>:
416 the <command>ar</command> utility is used to extract Debian archives.</para>
417
418 </sect2>
419
420 <sect2 role="content">
421 <title>Contents</title>
422
423 <segmentedlist>
424 <segtitle>Installed Programs</segtitle>
425 <segtitle>Installed Libraries</segtitle>
426 <segtitle>Installed Directories</segtitle>
427
428 <seglistitem>
429 <seg>/usr/lib/chromium/chromium,
430 /usr/lib/chromium/chromedriver, and
431 /usr/lib/chromium/chrome-sandbox</seg>
432 <seg>none</seg>
433 <seg>/usr/lib/chromium</seg>
434 </seglistitem>
435 </segmentedlist>
436
437 <variablelist>
438 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
439 <?dbfo list-presentation="list"?>
440 <?dbhtml list-presentation="table"?>
441
442 <varlistentry id="chromium-prog">
443 <term><command>/usr/bin/chromium</command></term>
444 <listitem>
445 <para> is a wrapper for the main chromium binary (in
446 /usr/lib/chromium) that allow use of the Pepper Flash plugin.</para>
447 <indexterm zone="chromium chromium-prog">
448 <primary sortas="b-chromium">chromium</primary>
449 </indexterm>
450 </listitem>
451 </varlistentry>
452
453 <varlistentry id="chromium-lib">
454 <term><command>/usr/lib/chromium/chromium</command></term>
455 <listitem>
456 <para> is the main chromium executable.</para>
457 <indexterm zone="chromium chromium-lib">
458 <primary sortas="b-chromiumlib">chromium</primary>
459 </indexterm>
460 </listitem>
461 </varlistentry>
462
463 <varlistentry id="chromedriver">
464 <term><command>/usr/bin/chromedriver</command></term>
465 <listitem>
466 <para> is a
467 <ulink url="http://www.seleniumhq.org/projects/webdriver/">
468 WebDriver</ulink> for Chromium.</para>
469 <indexterm zone="chromium chromedriver">
470 <primary sortas="b-chromedriver">chromedriver</primary>
471 </indexterm>
472 </listitem>
473 </varlistentry>
474
475 <varlistentry id="chrome-sandbox">
476 <term><command>/usr/lib/chromium/chrome-sandbox</command></term>
477 <listitem>
478 <para> creates a sandboxed environment for running untrusted
479 code (plugins).</para>
480 <indexterm zone="chromium chrome-sandbox">
481 <primary sortas="b-chrome-sandbox">chrome-sandbox</primary>
482 </indexterm>
483 </listitem>
484 </varlistentry>
485
486 </variablelist>
487
488 </sect2>
489
490</sect1>
Note: See TracBrowser for help on using the repository browser.