This document is a mirror of http://chrome.richardlloyd.org.uk as of 2013-08-25.
How to install Google Chrome 28+ on CentOS 6
The problem
Sadly, the
Google
folks apparently think that the world's
most popular commercial Linux (Red Hat Enterprise Linux aka
RHEL)
and its free equivalents
(e.g. CentOS and
Scientific Linux)
are no longer worth supporting at all w.r.t. their
Google Chrome browser.
Yes, they've dropped support for version 6.X of the above RHEL-based platforms
from Google Chrome 28 onwards,
despite the OSes being the latest release and fully
supported
by their respective maintainers until November 2020! It's equally bad that the
latest
Mozilla Firefox and
Opera browsers run happily on the
platforms, providing short shrift for any excuses the Google folks have come up
with to justify their somewhat blinkered support stance.
I've built
Chromium
from regularly pulled source code in the past for
CentOS 5
and it's a tough job
on that platform and I didn't want to do it again for
CentOS 6.
The solution
Luckily, there is a solution to this and it's not rocket science or
that original either. You need to grab libraries from a more recent Linux distro, put
them in a tree (/opt/google/chrome/lib) exclusively picked up by Google Chrome
and then you can indeed run Google Chrome on CentOS 6.4 or later.
I've picked Fedora 15
RPMs
to extract the libraries from because they're
the closest to CentOS 6's libraries and the oldest ones to actually work
with the latest Google Chrome release. Before you ask,
I've tried the Fedora 16 libraries and the Google Chrome binary crashes using those.
Without further ado, I present to you...
The download
install_chrome.sh
4.20 (22nd August 2013 - use yum check-update ahead of OmahaProxy if possible,
don't rely on exact OmahaProxy versions [any newer version will do] when installing,
removed terminal warning because of Google Chrome 29 fix)
It's a bash sell script, so you run it as root as follows:
chmod u+x install_chrome.sh
./install_chrome.sh
IMPORTANT NOTE:
In order for nacl_helper to start correctly, the current release requires you
to disable SELinux e.g. temporarily with "echo 0 >/selinux/enforce" as root
or permanently by editing /etc/selinux/config to set SELINUX=permissive
and then rebooting. A future release will hopefully set some SELinux policies
to avoid this requirement.
The script has optional command line arguments - here's the output of "./install_chrome.sh -h":
Syntax: ./install_chrome.sh [-b] [-d] [-h] [-n] [-q] [-s] [-t tmpdir] [-u] [-U]
-b (or --beta) will switch to beta versions (google-chrome-beta).
-d (or --delete) will delete the temporary directory used for downloads
if an installation was successful.
-h (or -? or --help) will display this syntax message.
-n (or --dryrun) will show what actions the script will take,
but it won't actually perform those actions.
-q (or --quiet) will switch to "quiet mode" where minimal info is displayed.
Specify -q twice to go completely silent except for errors.
-s (or --stable) will switch to stable versions (google-chrome-stable),
which is the default if -b or -U haven't previously been specified.
-t tmpdir (or --tmpdir tmpdir) will use tmpdir as the temporary directory
parent tree rather than $TMPDIR (if set) or /tmp.
-u performs an uninstallation of Google Chrome and chrome-deps rather the
default action of an installation.
-U (or --unstable) will switch to unstable versions (google-chrome-unstable).
I would recommend you read the comments at the top of the script and inspect the
code carefully since you need to run it as root. It will do a fair amount of
downloads to get what it needs and if it finishes successfully, you should be
able to run the "google-chrome" command as a non-root user.
The changelog
- Version 4.20 (22nd August 2013):
If possible, use "yum check-update google-chrome-stable" ahead of the OmahaProxy CSV
site to look for updates. Any newer version can be installed rather than insisting
on the exact OmahaProxy version (after a full day being out-of-date after the
Google Chrome 29 launch, we can't trust it not to happen on each new release).
Used some extra params to the OmahaProxy request to narrow the data down more
precisely. Google Chrome 29 doesn't wrongly output dbus messages like version 28
did, so the terminal warning was removed.
- Version 4.10 (8th August 2013):
Fixed Google Talk (Hangouts) plugin crash by unsetting LD_LIBRARY_PATH when
it's run (yes, for some reason, the plugin is built with an older toolchain
than Google Chrome itself). Some users are reporting i686 is used in their
RPM build path instead of i386 - I couldn't reproduce this, but I've added
code to work around this anyway. modify_wrapper no longer outputs anything
to stdout if it successfully updates /opt/google/chrome/google-chrome.
- Version 4.01 (30th July 2013):
Emergency 2-char bug fix because I found a 4th build environment that triggered
an rpmbuild bug (parses % directives on a commented line in a spec file).
Removed the two percent chars on a comment line and it works again. No idea
why my normal three build environments didn't show this problem (one of them
is literally a VM image of a clean desktop right after an CentOS 6 install).
- Version 4.00 (30th July 2013):
New chrome-deps RPM is built that includes 7 Fedora libraries (libdl.so.2 added
for this release), unset_vars.so (updated slightly) and a modify_wrapper script
that is run post-install to add code to /etc/default/google-chrome to modify
google-chrome if its LD_PRELOAD addition isn't present. modify_wrapper will
also enable the Google Chrome repo. Download/installation of
google-chrome-stable/chrome-deps dependencies is now prompted for.
Don't remove /etc/cron.daily/google-chrome or /etc/yum.conf.d/google-chrome.repo
any more. Added -t (temp dir parent location) option and also -s (stable),
-b (beta) and -U (unstable) options to switch release channels.
- Version 3.20 (27th July 2013):
Compile and install LD_PRELOAD functions that wrap around exec*() routines,
bringing in gcc as a new dependency. The functions save/blank LD_LIBRARY_PATH,
call the original routines and, if they return, restore LD_LIBRARY_PATH.
This is an initial effort to stop helper apps/plugins from crashing when
run from within Google Chrome.
- Version 3.11 (25th July 2013):
If SELinux is enabled, set appropriate SELinux contexts on Fedora libraries
in /opt/google/chrome/lib and that directory itself. If SELinux is enabled
and in enforcing mode, display a warning that permissive mode (with a reboot)
is required to get nacl_helper to run correctly.
- Version 3.10 (24th July 2013):
Use .so.0 extension (instead of .so.3 in earlier releases) for renamed Fedora
ld-linux library. Also changed references to ld-linux*.so.0 in ld-linux, libc
and libstdc++ Fedora libraries. Thanks to Marcus Sundberg for this suggestion.
Dependency list for Google Chrome RPM is now redhat-lsb, wget, xdg-utils
GConf2, libXScrnSaver and libX11 (1.5+). Hangs/errors occurred
with a CentOS 6.0 VM I ran Google Chrome under, but 6.4 is fine, so that's now
the mimimum OS version requirement (script offers to upgrade 6.0-6.3 to the
latest release - if declined, the script aborts).
- Version 3.00 (21st July 2013):
Added command line options at long last. -d will remove /tmp/chrome_install at the end of
the script. -h shows syntax help. -n displays a dry run of what it would do without
actually doing anything. -q reduces the output messages to the minimum needed and -q -q
silences the output completely apart from fatal errors. -u uninstalls the Fedora libraries
and the Google Chrome RPM. Abort script if it detects Google Chrome is running.
Display disk/file usage (only if files are present) for /opt/google/chrome and
/tmp/chrome_install at the start and end of the script. If it's defined, use $TMPDIR
instead of /tmp. Install Fedora libraries before the Google Chrome RPM (was the other
way around). Don't download Fedora RPMs and/or unpack them if the Fedora libraries are
already installed in /opt/google/chrome/lib - this speeds up second and later runs
(e.g. for Google Chrome upgrades) significantly.
- Version 2.10 (20th July 2013):
Can detect if Fedora 15 RPMs have been moved to the archive site and will
download from there instead if they have. Fixed incorrect check for lsb
dependency. Remove a cron file and repo file installed by the Google Chrome RPM.
Simplistic check that OS is an RHEL 6 derivative. Early exits now run clean
up routine. Downloads all go through one function that will restore any
pre-existing file if the download fails.
- Version 2.00 (14th July 2013):
32-bit support added thanks to prodding from Seva Epsteyn. Version check
both installed and downloaded Google Chrome against the OmahaProxy CSV list
and only download/install if out-of-date. Use updated Fedora 15 RPMs rather
than the original ISO versions. Warn if an enabled Google Chrome repo is
present. General code tidy ups and more/readable messages are output now too.
- Version 1.10 (13th July 2013):
Added auto-update check because the number of versions today is getting
somewhat crazy. Also fixed an incorrect skip of force-installing a downloaded
Chrome RPM (if any previous Chrome RPM had been installed, it would have
never installed a new one!).
- Version 1.02 (13th July 2013):
Added --no-check-certificate to wget command (my testing didn't need it, but
someone reported that their wget did need it). Also yum install wget if it's
not on the system.
- Version 1.01 (13th July 2013):
Fixed the bad variable that plagued version 1.00.
- Version 1.00 (13th July 2013):
Downloads latest Chrome and some Fedora 15 RPMs, installs lsb and
some extracted libraries from the F15 RPMs. Had a last-minute bad variable
added that broke the Chrome download completely. :-(
The TODO list
-
SELinux issues with nacl_helper still aren't resolved yet, though
Google Chrome itself will now run with SELinux enforcing enabled,
which wasn't the case with previous script releases. Google Chrome's
startup is so convoluted that it's not obvious what needs to be done to get
nacl_helper to work.
-
The first-time install and run of Google Chrome on a non-KDE system produces
some xdg-mime errors. This is a bug in the xdg-utils package that I've
reported
to Red Hat, so you'll have to wait for them to fix it.
The compatibility note
Please note that CentOS 6
references on this page should hopefully equally cover all RHEL 6
derivatives. Note that I only
use CentOS 6 myself so can't guarantee the compatibility with those other
derivatives. Oh and someone's bound to ask - no, the script won't work with
CentOS 5 or earlier.
The feedback
Any bugs, fixes, improvements or suggestions should be fed back to me,
Richard K. Lloyd, at rklloyd@gmail.com
but please note there is no warranty on this product whatsoever and the script
itself is in the public domain. Because it has to be run as root and
downloads/installs a load of packages, this is a riskier script than most!
The footnote: Google Music Manager rant
I just decided to see if I could upload some of my music collection to
Google Play Music.
And, no, I'm not paying £7.99 a month when I have a very large CD
collection, a fair amount of which I've ripped to MP3s already.
Firstly, you can't upload MP3s from any phone or tablet, even one
running Google's own Android OS or indeed a Chromebook running Chrome OS!
Considering a large number of Google Play
Music users will be playing back their music via an Android or Chrome OS device, it beggars
belief that there isn't a way to upload that very same music from the device
they'll listen to it on. Yes, I know Apple do the same obnoxious thing
with their dreadful iTunes software (the Windows version of that is one of
the most appalling pieces of software I've seen in years), but it still isn't
an excuse for Google to follow the same dismal path Apple has trodden all these
years.
Eventually, I discovered that there's a
Google Music Manager
you can download for Linux and there's even debs/RPMs in the same manner as
Google Chrome has. Getting excited, I duly downloaded the Fedora 64-bit RPM,
but it has an even newer toolchain used to compile it than Google Chrome does!
And, no, you can't use a Fedora 19 VM to run
the Google Music Manager either because Google
won't let you, which is frankly ridiculous.
The solution I eventually found was on this German
blog - Google still has some older RPMs you can download and run on CentOS 6. The
64-bit and
32-bit RPMs
for version 1.0.55.7425 seem to work OK on CentOS 6.4. They have lsb and qtwebkit dependencies and there's some log4cxx
message output on the console that you can ignore. The later 1.0.60.7918 and 1.0.71.8015 RPMs both crash
on CentOS 6.4. I would strongly recommend you keep a copy of the working 1.0.55.7425 RPM, because Google may delete
it at any time.