source: xsoft/graphweb/chromium.xml@ 91e89cd

10.0 10.1 11.0 11.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind lazarus perl-modules qt5new trunk upgradedb xry111/intltool xry111/test-20220226
Last change on this file since 91e89cd was 91e89cd, checked in by DJ Lucas <dj@…>, 4 years ago

Don't use system ffmpeg for chromium.

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

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