/chromium_el_builder

Build scripts for Chromium web browser on Enterprise Linux.

Primary LanguageShell

This project provides shell scripts for building an RPM package
of Chromium web-browser on Enterprise Linux distributions like CentOS.
Currently, it can be used for building Chromium 28 or higher on
CentOS 6.4 and the resulting RPM should be installed on any EL 6.

The RPMs built for CentOS are available here:
  http://people.centos.org/hughesjr/chromium/6/x86_64/RPMS/

Please read the details section before using the build script to learn about
the heavy system requirements and to customize the version, features and keys.
To create an RPM package of Chromium, simply run the build script,
  $ bash chromium_builder.sh

Install the generated RPM using rpm or yum,
  $ sudo yum install chromium-28.0.1500.36-204086.x86_64.rpm

The application is installed to /opt/chromium/ and the desktop file is
at /usr/share/applications/chromium-devel.desktop. An application menu entry
for Chromium browser should be generated in the Internet category.

The package installs the Chromium open source web browser and does not include
the additional proprietary parts of Google Chrome. It can use the system plugins
for Flash and Java. To install the PDF plugin of Google Chrome, the libpdf.so
file can be copied from an existing Chrome installation or by using the
included helper script that downloads an RPM of Google Chrome, and extracts
and copies the libpdf.so,
  $ bash chrome_libpdf_copy.sh

  Another helper script is provided to install PepperFlash,
  $ bash chrome_pepperflash_copy.sh

Details:
========

The script chromium_builder.sh is mostly self-explanatory with inline comments,
additional details are provided here for completeness.
It installs pre-requisite packages, downloads chromium source code
and builds it according to instructions in
  https://code.google.com/p/chromium/wiki/LinuxBuildInstructions

  It also creates an installable RPM package after the build.

If no version information is provided, the internally hard-coded default
version (currently 28.0.1500.36) is used. To build a specific version, use e.g.,
  $ CHROMIUM_VERSION=28.0.1500.29 bash chromium_builder.sh

  The various current versions can be found at
  http://omahaproxy.appspot.com/

  Preferably use the current_version for stable channel and linux os.

The build requires Google API keys to be specified, as outlined in
  https://code.google.com/p/chromium/wiki/LinuxBuildInstructions
  https://sites.google.com/a/chromium.org/dev/developers/how-tos/api-keys.

After getting the keys, specify them by either editing the variables
  GOOGLE_API_KEY
  GOOGLE_DEFAULT_CLIENT_ID
  GOOGLE_DEFAULT_CLIENT_SECRET
in the script or provide them as environment variables.

The installation of pre-requisites requires password for sudo,
and is asked once at the early stages. Apart from the pre-requisites 
for Fedora setup at
  https://code.google.com/p/chromium/wiki/LinuxBuildInstructionsPrerequisites
other dependencies
  subversion git git-svn libgnome-keyring-devel cups-devel libXtst-devel libXt-devel pam-devel
for EL are installed. The dependency on speech-dispatcher application
and libraries is satsified by installing RPMs in speech_dispatcher/ folder,
obtained (with permission) from:
  http://li.nux.ro/download/nux/dextop/el6/


The source code is downloaded from SVN for the specified version, as outlined in
  http://dev.chromium.org/developers/how-tos/get-the-code
. This is a fairly large download of ~ 1.2 GB over the internet and ~ 5.4 GB of
disk space. It takes about 20 minutes on a fast 100 Mbps, low latency (3ms)
connection or 30 minutes on a slower 10 Mbps connection.
The source code is kept at folder chromium_build and archived
to chromium_build.tgz, ~ 1.5 GB, for future reuse.

The configuration is mostly default with provided API keys and proprietary
codecs enabled. A few additional patches specific to EL 6 are applied
and are in the patches/ folder.
These include a patch to compile with gcc-4.4 from
  http://code.google.com/p/v8/issues/detail?id=2093
, a patch to include GTK compatibility header, and a patch to add extern "C"
qualifiers for udev library headers. A patch to disable the startup message
about older GTK is disabled for chromium versions >= 28.
Lastly, a patch is applied to increase the space above tab bar by 4 pixels,
to aid in moving the window by dragging the window. This may be commented
out in the build script for default behaviour.

The build process is fairly intensive and takes about 80 minutes on
a system with quad core CPU, as observed on a notebook with
Intel Core i7 2630QM CPU, 20 GB of RAM, Samsung 830 SSD (read speed
of ~200 MB/s) mounted on ext4 with trim enabled, and CentOS 6.4 system.
The build is performed in folder chromium_build and expands to ~ 7.4 GB.
After the build, the binaries produced in folder chromium_build/src/out/Release
(~2.0 GB) are copied to the folder chromium-${CHROMIUM_VERSION}/opt/chromium
with the object and deps deleted to result in a size of ~ 250 MB.
Together with the XDG desktop file, a tar archive
chromium-${CHROMIUM_VERSION}.tgz, ~80 MB, is generated.

The default configuration results in a fat, statically linked binary
chromium_build/src/out/Release/chromium, ~ 120 MB, and may take time
to load. The upside is few installation dependencies(?).

While the tar archive can be extracted to the system, an RPM package
is created from the archive using the script chromium_rpm_packager.sh.
Temporary files are kept in the folder rpmbuild/.
The RPM package has name=chromium, version=${CHROMIUM_VERSION},
e.g., 28.0.1500.36, and release version that equals the SVN revision
(as can be found using the revision lookup tool at
http://omahaproxy.appspot.com/). This is similar to the convention
used for the official Google Chrome RPM packages at
  https://www.google.com/intl/en/chrome/browser/
. The current RPM generated is chromium-28.0.1500.36-204086.x86_64.rpm.

The generated RPM can be installed using yum. Proprietary addons can be
installed separately using helper scripts or otherwise, as mentioned
in the introduction. The PepperFlash script is adapted from
http://www.webupd8.org/2012/09/how-to-make-chromium-use-flash-player.html.
The scripts can use the environment variables CHANNEL (stable|beta|dev)
or CHROMIUM_VERSION (if currently present in Google Chrome repository)
as parameters.

The final disk space used is ~ 7.5 GB.

Misc:
=====
Credits: various inline references
Copyright: Hirakendu Das, 2013
License: BSD 3-clause

Modified by Johnny Hughes <johnny at centos dot org> to fix various issues
and build on version 28 of chromium.