Chromium-56.0.2924.87

Introduction to Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

[Note]

Note

Download this file via wget as:

wget https://github.com/foutrelis/chromium-launcher/archive/v3.tar.gz \
     -O chromium-launcher-3.tar.gz

Chromium Dependencies

Required

alsa-lib-1.1.3, Cups-2.2.2, desktop-file-utils-0.23, dbus-1.10.14, File::BaseDir-0.07, GTK+-2.24.31, hicolor-icon-theme-0.15, MIT Kerberos V5-1.15, Mesa-13.0.4, Ninja-1.7.2, NSS-3.29, Python-2.7.13, usbutils-008, and X Window System

Recommended

Optional

FFmpeg-3.2.4, GConf-3.2.6, gnome-keyring-3.20.0, ICU-58.2, libjpeg-turbo-1.5.1, libpng-1.6.28, libxml2-2.9.4, libvpx-1.6.1, speech-dispatcher (for the screen reader), and snappy

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/chromium

Installation of Chromium

Fix a build issue on Linux-4.5+:

sed 's/#include <sys\/mman\.h>/&\n\n#if defined(MADV_FREE)\n#undef MADV_FREE\n#endif\n/' \
    -i third_party/WebKit/Source/wtf/allocator/PageAllocator.cpp

Fix a build issue with GCC-6:

sed "s/^config(\"compiler\") {/&\ncflags_cc = [ \"-fno-delete-null-pointer-checks\" ]/" \
    -i build/config/linux/BUILD.gn

If you'd like to enable the use of the WideVine plugin, needed for Netflix support (see the WideVine section below), you'll need to define an available product name ("Pinkie Pie" in this case) with the following command:

sed "s/WIDEVINE_CDM_AVAILABLE/&\n\n#define WIDEVINE_CDM_VERSION_STRING \"Pinkie Pie\"/" \
    -i third_party/widevine/cdm/stub/widevine_cdm_version.h

Remove third-party build files that interfere with system versions:

[Note]

Note

Chromium uses many external projects, the selections below are not set in stone, however they have been tested thoroughly. With Chromium 56.0.2924.87, system versions of icu, libjpeg, libpng, libxml2, libvpx, and zlib are known to break the build at this time.

for LIB in flac harfbuzz-ng libwebp libxslt yasm; do
    find -type f -path "*third_party/$LIB/*" \
        \! -path "*third_party/$LIB/chromium/*" \
        \! -path "*third_party/$LIB/google/*" \
        \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
        -delete
done &&

python build/linux/unbundle/replace_gn_files.py \
    --system-libraries flac harfbuzz-ng libwebp libxslt yasm

Chromium uses an internal tool, gn, to generate the Ninja build files. Complete configuration of the build using the following commands:

[Note]

Note

The Google API Key and OAuth tokens below are specific to LFS. If using these instructions for another distro, or if you intend to distribute binary copies of the software using these instructions, please obtain your own keys following the instructions located at http://www.chromium.org/developers/how-tos/api-keys.

GN_CONFIG=("google_api_key=\"AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ\""
"google_default_client_id=\"595013732528-llk8trb03f0ldpqq6nprjp1s79596646.apps.googleusercontent.com\""
"google_default_client_secret=\"5ntt6GbbkjnTVXx-MSxbmx5e\""
'clang_use_chrome_plugins=false'
'enable_hangout_services_extension=true'
'enable_nacl=false'
'enable_nacl_nonsfi=false'
'enable_widevine=true'
'fatal_linker_warnings=false'
'ffmpeg_branding="Chrome"'
'fieldtrial_testing_like_official_build=true'
'is_debug=false'
'is_clang=false'
'link_pulseaudio=true'
'linux_use_bundled_binutils=false'
'proprietary_codecs=true'
'remove_webcore_debug_symbols=true'
'symbol_level=0'
'treat_warnings_as_errors=false'
'use_allocator="none"'
'use_cups=true'
'use_gconf=false'
'use_gnome_keyring=false'
'use_gold=false'
'use_gtk3=false'
'use_kerberos=true'
'use_pulseaudio=true'
'use_sysroot=false')

Build gn and use it to prepare the Ninja build files:

python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}" &&
out/Release/gn gen out/Release --args="${GN_CONFIG[*]}"

Build Chromium using the following command:

ninja -C out/Release chrome chrome_sandbox chromedriver widevinecdmadapter

This package was already tested as part of the build.

Now, as the root user, install the pacakage:

install -vDm755  out/Release/chrome \
                 /usr/lib/chromium/chromium                   &&
install -vDm4755 out/Release/chrome_sandbox \
                 /usr/lib/chromium/chrome-sandbox             &&
install -vDm755  out/Release/chromedriver \
                 /usr/lib/chromium/chromedriver               &&
ln -svf /usr/lib/chromium/chromium /usr/bin                   &&
ln -svf /usr/lib/chromium/chromedriver /usr/bin/              &&

install -vm755 out/Release/libwidevinecdmadapter.so \
               /usr/lib/chromium/                             &&
install -vDm644 out/Release/icudtl.dat /usr/lib/chromium      &&
install -vDm644 out/Release/gen/content/content_resources.pak \
                /usr/lib/chromium/                            &&
install -vm644 out/Release/{*.pak,*.bin} \
               /usr/lib/chromium/                             &&

cp -av out/Release/locales /usr/lib/chromium/                 &&
chown -Rv root:root /usr/lib/chromium/locales                 &&

install -vDm644 out/Release/chrome.1 \
                /usr/share/man/man1/chromium.1

While still the root user, install icons and the .desktop file:

for size in 16 32; do
    install -vDm644 \
        "chrome/app/theme/default_100_percent/chromium/product_logo_$size.png" \
        "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
done &&

for size in 22 24 48 64 128 256; do
    install -vDm644 "chrome/app/theme/chromium/product_logo_$size.png" \
        "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
done &&

cat > /usr/share/applications/chromium.desktop << "EOF"
[Desktop Entry]
Encoding=UTF-8
Name=Chromium Web Browser
Comment=Access the Internet
GenericName=Web Browser
Exec=chromium %u
Terminal=false
Type=Application
Icon=chromium
Categories=GTK;Network;WebBrowser;
MimeType=application/xhtml+xml;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
EOF

Chromium Launcher

Chromium Launcher is a wrapper for chromium that allows use of the Pepper Flash plugin. If you intend to use the Pepper Flash plugin, build Chromium Launcher by running the following commands:

tar -xf ../chromium-launcher-3.tar.gz &&
cd chromium-launcher-3                &&
make PREFIX=/usr

Install Chromium Launcher with the following commands (as the root user):

rm -f /usr/bin/chromium        &&
make PREFIX=/usr install-strip &&
cd ..

Extracting the WideVine plugin from Chrome

Extract the downloaded deb file with the following commands:

mkdir temp                                         &&
cd temp                                            &&
ar -x ../../google-chrome-stable_56.0.2924.87*.deb &&
tar -xf data.tar.xz

As the root user, install the WideVine plugin with the following command:

install -vm755 opt/google/chrome/libwidevinecdm.so \
    /usr/lib/chromium/

Installing the Pepper Flash plugin:

Extract the Flash Player plugin with the following command:

tar -xf ../../flash_player_ppapi_linux.*.tar.gz

As the root user, install the Pepper Flash plugin with the following command:

install -vdm755 /usr/lib/PepperFlash                     &&
install -vm755 libpepflashplayer.so /usr/lib/PepperFlash &&
install -vm644 manifest.json /usr/lib/PepperFlash

Command Explanations

GN_CONFIG=(...): this array contains all of the defines used in the build.

sed "s/#include <sys...: this command undefines MADV_FREE to fix a build issue with Linux-4.5 and newer.

python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}": this command replaces defines in the gn files with the values contained in ${GN_CONFIG[@]}.

out/Release/gn gen out/Release --args="${GN_CONFIG[*]}": this command runs a Google provided configuration script gn on the source tree to produce a Ninja configuration suitable for the build machine.

ar -x ../../google-chrome-stable*.deb: the ar utility is used to extract Debian archives.

Contents

Installed Programs: /usr/bin/chromium, /usr/lib/chromium/chromium, /usr/lib/chromium/chromedriver, and /usr/lib/chromium/chrome-sandbox
Installed Libraries: none
Installed Directories: /usr/lib/chromium, /usr/lib/chromium-launcher, and (optionally) /usr/lib/PepperFlash

Short Descriptions

/usr/bin/chromium

is a wrapper for the main chromium binary (in /usr/lib/chromium) that allow use of the Pepper Flash plugin.

/usr/lib/chromium/chromium

is the main chromium executable.

/usr/bin/chromedriver

is a WebDriver for Chromium.

/usr/lib/chromium/chrome-sandbox

creates a sandboxed environment for running untrusted code (plugins).

Last updated on 2017-02-22 13:28:29 -0800