source: archive/chromium.xml@ 0080c54

10.0 10.1 11.0 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind ken/refactor-virt lazarus perl-modules qt5new trunk xry111/git-date xry111/git-date-for-trunk xry111/git-date-test
Last change on this file since 0080c54 was 0080c54, checked in by Bruce Dubbs <bdubbs@…>, 3 years ago

Cleanup and some tags.

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@20399 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 "0c361a429c5dcea568cbc7b001a82d92">
10 <!ENTITY chromium-size "460 MB">
11 <!ENTITY chromium-buildsize "6.0 GB">
12 <!ENTITY chromium-time "120 SBU (with parallelism=4)">
13 <!-- Ninja defaults to parallel build unless supplying -jx, 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 &lfs82_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 patch:</bridgehead>
69 <itemizedlist spacing="compact">
70 <listitem>
71 <para>
72 <ulink url="&patch-root;/chromium-&chromium-version;-constexpr-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: 1caee436e3dc8fda6560a421e60717e4</para>
97 </listitem>
98 <listitem>
99 <para>Download size: 49.1 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="make-ca"/> (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),<!-- https://crbug.com/731766 -->
160 <xref linkend="GConf"/>,
161 <xref linkend="icu"/> (currently broken),<!-- Review comments at https://chromium.googlesource.com/chromium/src/+/e58fa0ba66272c5f28828b15d06c7e42a9882b3b to verify fitness for BLFS's ICU build -->
162 <xref linkend="gnome-keyring"/>,
163 <xref linkend="libevent"/>,
164 <xref linkend="libpng"/> (currently broken),<!-- https://crbug.com/75240 -->
165 <xref linkend="libvpx"/> (currently broken),<!-- https://bugs.gentoo.org/611394 -->
166 <xref linkend="libxml2"/> (currently broken),<!-- https://crbug.com/736026 -->
167 <xref linkend="upower"/> (runtime),
168 <ulink url="https://devel.freebsoft.org/speechd">speech-dispatcher</ulink>
169 (for the screen reader), and
170 <ulink url="https://google.github.io/snappy">snappy</ulink>
171 </para>
172
173 <para condition="html" role="usernotes">User Notes:
174 <ulink url="&blfs-wiki;/chromium"/></para>
175
176 </sect2>
177
178 <sect2 role="installation">
179 <title>Installation of Chromium</title>
180
181 <para>Enable the use of the
182 <ulink url="http://www.widevine.com/">WideVine</ulink> plugin, needed for
183 Netflix support (see the WideVine section below). Define an
184 available product name ("Pinkie Pie" in this case) with the following
185 command:</para>
186
187<screen><userinput>line='#define WIDEVINE_CDM_VERSION_STRING "Pinkie Pie"'
188sed "/WIDEVINE_CDM_AVAILABLE/a$line" \
189 -i third_party/widevine/cdm/stub/widevine_cdm_version.h</userinput></screen>
190
191 <para>Optionally silence several (2000+) invalid warnings:</para>
192
193<screen><userinput>sed '/static_assert/s:^://:' \
194 -i third_party/WebKit/Source/platform/wtf/text/TextCodec.h</userinput></screen>
195
196 <para>Fix a build issue with recent versions of GCC:</para>
197
198<screen><userinput>patch -Np1 -i ../chromium-&chromium-version;-constexpr-1.patch</userinput></screen>
199
200 <para>Remove third-party build files that interfere with system versions:</para>
201
202 <note>
203 <para>
204 Chromium uses many external projects, the selections below are not set
205 in stone, however they have been tested thoroughly. With Chromium
206 &chromium-version;, system versions of libvpx, libxml2,
207 and zlib are known to break the build at this time.
208 <!-- icu: Now at 59 internally - seems to work now -->
209 <!-- icu: Now at 60 - is broken -->
210 <!-- libevent: needs internal headers - seems to work now -->
211 <!-- libvpx: breaks build in gfx -->
212 <!-- libxml2: breaks build with ui - seems to work now -->
213 <!-- zlib requires libminizip -->
214 </para>
215 </note>
216
217<!-- Again, thanks to Arch, this is much better than listing all the needed
218shipped libs required to use the remove_bundled_files.py script -->
219<screen><userinput>for LIB in <!--ffmpeg -->flac freetype harfbuzz-ng<!-- icu libevent--> libjpeg \
220 libjpeg_turbo<!-- libpng--> libwebp <!-- libxml libvpx-->libxslt yasm; do
221 find -type f -path "*third_party/$LIB/*" \
222 \! -path "*third_party/$LIB/chromium/*" \
223 \! -path "*third_party/$LIB/google/*" \
224 \! -path "*base/third_party/icu/*" \
225 \! -path './third_party/yasm/run_yasm.py' \
226 \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
227 \! -path './third_party/freetype/src/src/psnames/pstables.h' \
228 -delete
229done &amp;&amp;
230
231python build/linux/unbundle/replace_gn_files.py \
232 --system-libraries<!-- ffmpeg--> flac <!-- harfbuzz-ng -->libjpeg libxml libevent \
233 <!--libpng -->libwebp libxslt opus yasm <!-- freetype libxml libvpx--> &amp;&amp;
234
235python third_party/libaddressinput/chromium/tools/update-strings.py</userinput></screen>
236
237 <para><application>Chromium</application> uses an internal tool, <ulink
238 url="https://chromium.googlesource.com/chromium/src/tools/gn">gn</ulink>,
239 to generate the <application>Ninja</application> build files. Complete
240 configuration of the build using the following commands:</para>
241
242 <note>
243 <para>
244 <!-- Taken from Arch Linux - an immensely helpful link - Thanks -->
245 The Google API Key and OAuth tokens below are specific to LFS. If using
246 these instructions for another distro, or if you intend to distribute
247 binary copies of the software using these instructions, please obtain
248 your own keys following the instructions located at
249 <ulink url="http://www.chromium.org/developers/how-tos/api-keys"/>.
250 <!-- BLFS Devs, register an account at Google with your
251 @linuxfromscratch.org email address, and I'll make you an administrator
252 for the 'Google APIs for LFS' project (where the API and OAuth keys
253 were created for use in the book).-->
254 </para>
255 </note>
256
257<screen><userinput>GN_CONFIG=('google_api_key="AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ"'
258'google_default_client_id="595013732528-llk8trb03f0ldpqq6nprjp1s79596646.apps.googleusercontent.com"'
259'google_default_client_secret="5ntt6GbbkjnTVXx-MSxbmx5e"'
260'clang_use_chrome_plugins=false'
261'enable_hangout_services_extension=true'
262'enable_nacl=false'
263'enable_nacl_nonsfi=false'
264'enable_swiftshader=false'
265'enable_widevine=true'
266'fatal_linker_warnings=false'
267'ffmpeg_branding="Chrome"'
268'fieldtrial_testing_like_official_build=true'
269'is_debug=false'
270'is_clang=false'
271'link_pulseaudio=true'
272'linux_use_bundled_binutils=false'
273'proprietary_codecs=true'
274'remove_webcore_debug_symbols=true'
275'symbol_level=0'
276'treat_warnings_as_errors=false'
277'use_allocator="none"'
278'use_cups=true'
279'use_gconf=false'
280'use_gnome_keyring=false'
281'use_gold=false'
282'use_gtk3=true'
283'use_kerberos=true'
284'use_pulseaudio=true'
285'use_sysroot=false'
286'use_system_freetype=true'
287'use_system_harfbuzz=true')</userinput></screen>
288
289 <para>Build <application>gn</application> and use it to prepare the
290 <application>Ninja</application> build files:</para>
291
292<screen><userinput>python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}" &amp;&amp;
293out/Release/gn gen out/Release --args="${GN_CONFIG[*]}"</userinput></screen>
294
295 <warning>
296 <para>Ninja, by default, sets the number of jobs to the number of
297 available threads. If your machine is memory constrained, with regard to
298 number of threads, you should reduce the number of jobs by passing the
299 <parameter>-j#</parameter> switch to the <command>ninja</command> command
300 below. Plan for roughly 1.25GB per thread while linking
301 <application>WebKit</application> to avoid out of memory errors.</para>
302 </warning>
303
304 <para>Build <application>Chromium</application> using the following
305 commands:</para>
306
307<screen><userinput>mkdir -p third_party/node/linux/node-linux-x64/bin &amp;&amp;
308ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ &amp;&amp;
309ninja -C out/Release chrome chrome_sandbox chromedriver widevinecdmadapter</userinput></screen>
310
311 <para>This package was already tested as part of the build.</para>
312
313 <para>Now, as the <systemitem class="username">root</systemitem> user,
314 install the package:</para>
315
316<screen role="root"><userinput>install -vDm755 out/Release/chrome \
317 /usr/lib/chromium/chromium &amp;&amp;
318
319install -vDm4755 out/Release/chrome_sandbox \
320 /usr/lib/chromium/chrome-sandbox &amp;&amp;
321
322install -vDm755 out/Release/chromedriver \
323 /usr/lib/chromium/chromedriver &amp;&amp;
324
325ln -svf /usr/lib/chromium/chromium /usr/bin &amp;&amp;
326ln -svf /usr/lib/chromium/chromedriver /usr/bin &amp;&amp;
327
328install -vDm644 out/Release/gen/content/content_resources.pak \
329 /usr/lib/chromium/ &amp;&amp;
330<!-- This is needed if using internal icu -->
331install -vDm644 out/Release/icudtl.dat \
332 /usr/lib/chromium/icudtl.dat &amp;&amp;
333
334install -vDm644 out/Release/{*.pak,*.bin} \
335 /usr/lib/chromium/ &amp;&amp;
336
337sed -i \
338 -e "s/@@MENUNAME@@/Chromium/g" \
339 -e "s/@@PACKAGE@@/chromium/g" \
340 -e "s/@@USR_BIN_SYMLINK_NAME@@/chromium/g" \
341 chrome/installer/linux/common/desktop.template \
342 chrome/app/resources/manpage.1.in &amp;&amp;
343
344install -vDm644 chrome/installer/linux/common/desktop.template \
345 /usr/share/applications/chromium.desktop &amp;&amp;
346
347install -vDm644 chrome/app/resources/manpage.1.in \
348 /usr/share/man/man1/chromium.1 &amp;&amp;
349
350cp -av out/Release/locales /usr/lib/chromium/ &amp;&amp;
351chown -Rv root:root /usr/lib/chromium/locales &amp;&amp;
352
353for size in 16 32; do
354 install -vDm644 \
355 "chrome/app/theme/default_100_percent/chromium/product_logo_$size.png" \
356 "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
357done &amp;&amp;
358
359for size in 22 24 48 64 128 256; do
360 install -vDm644 "chrome/app/theme/chromium/product_logo_$size.png" \
361 "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
362done</userinput></screen>
363
364 <note>
365 <para>If upgrading from a previous build of chromium using gtk+-2.x, you
366 may need to remove the <filename
367 class="directory">~/.config/chromium</filename> directory.</para>
368 </note>
369
370 <bridgehead renderas="sect3">Extracting the WideVine plugin from Chrome</bridgehead>
371
372 <para>Extract the downloaded deb file with the following commands:</para>
373
374<screen><userinput>mkdir temp &amp;&amp;
375cd temp &amp;&amp;
376case $(uname -m) in
377 x86_64) ar -x ../../google-chrome-stable_&chromium-version;-1_amd64.deb
378 ;;
379 i?86) ar -x ../../google-chrome-stable_48.0.2564.116-1_i386.deb
380 ;;
381esac</userinput></screen>
382
383 <para>As the <systemitem class="username">root</systemitem> user, enable
384 the WideVine plugin with the following commands:</para>
385
386<!-- Note that libwidevinecdmadapter.so is not in the tarball. It is
387created only if enable_widevine=true i sset in GN_CONFIG -->
388
389<screen role="root"><userinput>tar -xf data.tar.xz &amp;&amp;
390install -vm755 ../out/Release/libwidevinecdmadapter.so /usr/lib/chromium/ &amp;&amp;
391install -vm755 opt/google/chrome/libwidevinecdm.so /usr/lib/chromium/</userinput></screen>
392
393 </sect2>
394
395 <sect2 role="commands">
396 <title>Command Explanations</title>
397
398 <para><command>GN_CONFIG=(...)</command>: this array contains
399 all of the defines used in the build.</para>
400
401 <para><command>python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}"</command>:
402 this command replaces defines in the gn files with the values contained in
403 <envar>${GN_CONFIG[@]}</envar>.</para>
404
405 <para><command>out/Release/gn gen out/Release --args="${GN_CONFIG[*]}"</command>:
406 this command runs a Google provided configuration script
407 <application>gn</application> on the source tree to produce
408 a <application>Ninja</application> configuration suitable for the build
409 machine.</para>
410
411 <para><command>mkdir...ln -s /usr/bin/node
412 third_party/node/linux/node-linux-x64/bin/</command>: these commands
413 replaced the local <application>Node.js</application> (no longer available)
414 with the system installed <application>Node.js</application>.</para>
415
416 <para><command>ar -x ../../google-chrome-stable*.deb</command>:
417 the <command>ar</command> utility is used to extract Debian archives.</para>
418
419 </sect2>
420
421 <sect2 role="content">
422 <title>Contents</title>
423
424 <segmentedlist>
425 <segtitle>Installed Programs</segtitle>
426 <segtitle>Installed Libraries</segtitle>
427 <segtitle>Installed Directories</segtitle>
428
429 <seglistitem>
430 <seg>/usr/lib/chromium/chromium,
431 /usr/lib/chromium/chromedriver, and
432 /usr/lib/chromium/chrome-sandbox</seg>
433 <seg>none</seg>
434 <seg>/usr/lib/chromium</seg>
435 </seglistitem>
436 </segmentedlist>
437
438 <variablelist>
439 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
440 <?dbfo list-presentation="list"?>
441 <?dbhtml list-presentation="table"?>
442
443 <varlistentry id="chromium-lib">
444 <term><command>/usr/lib/chromium/chromium</command></term>
445 <listitem>
446 <para> is the main chromium executable.</para>
447 <indexterm zone="chromium chromium-lib">
448 <primary sortas="b-chromiumlib">chromium</primary>
449 </indexterm>
450 </listitem>
451 </varlistentry>
452
453 <varlistentry id="chromedriver">
454 <term><command>/usr/lib/chromium/chromedriver</command></term>
455 <listitem>
456 <para> is a
457 <ulink url="http://www.seleniumhq.org/projects/webdriver/">
458 WebDriver</ulink> for Chromium.</para>
459 <indexterm zone="chromium chromedriver">
460 <primary sortas="b-chromedriver">chromedriver</primary>
461 </indexterm>
462 </listitem>
463 </varlistentry>
464
465 <varlistentry id="chrome-sandbox">
466 <term><command>/usr/lib/chromium/chrome-sandbox</command></term>
467 <listitem>
468 <para> creates a sandboxed environment for running untrusted
469 code (plugins).</para>
470 <indexterm zone="chromium chrome-sandbox">
471 <primary sortas="b-chrome-sandbox">chrome-sandbox</primary>
472 </indexterm>
473 </listitem>
474 </varlistentry>
475
476 </variablelist>
477
478 </sect2>
479
480</sect1>
Note: See TracBrowser for help on using the repository browser.