最后编辑(2017-09-13):
此解决方案不再适用于60或更高版本的Chrome。最新的软件包取决于libc6≥2.17,这些软件包无法安装在Ubuntu 12.04上。如果您仍在使用Precise,则应该考虑升级(如我所做的那样),或者如果仍然无法升级,请切换到其他浏览器(尽管此时您不太可能找到仍在维护的任何浏览器)。
编辑(2016-12-06):看起来Chrome现在也依赖于libfontconfig1的更新版本(≥2.9.0)。我已经相应地更新了脚本。到目前为止,新版本似乎运行良好,但是请注意,随着每个伪装的依赖项的出现,您可能会期望应用程序变得不稳定。
编辑(2017-06-10):Chrome 59带有新的依赖项(libfontconfig1≥2.11,libpango和libpangocairo)。我已经更新了脚本以删除这些脚本。同样适用于Chrome稳定性的警告。
Ubuntu 12.04 64位上的依赖项问题的解决方法
Chrome对Ubuntu 12.04版的官方支持已经结束,但这并不意味着您现在必须放弃Chrome。接下来是关于如何在64位Ubuntu 12.04上安装最新的Chrome版本(截至2016-06-28)的快速教程。
警告:这是一个非常棘手的解决方案,可能会在任何时间点停止工作。在继续之前,请确保您知道自己在做什么。
先决条件
更新的内核
重要: 请注意,更新内核可能会带来一系列麻烦和硬件兼容性问题。在继续此步骤之前,请确保您知道如何切换到较早的内核。
最新的Chrome版本取决于许多与沙盒相关的内核功能,而Ubuntu 12.04的默认内核(3.2.0)中不提供这些功能。如果您使用较新的映像(点发行版12.04.2及更高版本)安装了Ubuntu 12.04,则很有可能已经在使用更新的内核了;但是,如果您仍然使用原始内核版本,则可以通过LTS硬件启用堆栈软件包将其更新为Ubuntu 14.04的内核堆栈:
sudo apt-get install --install-recommends linux-generic-lts-trusty
确保在执行内核升级后重新引导系统。如果一切顺利,您的系统现在应该使用Linux内核3.13.X。
依赖问题
如果您在尝试安装最新的Chrome版本时看到错误消息,则会看到两个明显的依赖性问题:
libstdc++6 (>= 4.8.0)
:这是GNU标准C ++库。Chrome发行版50.X及更高版本取决于该库的4.8.0版本,但默认情况下Ubuntu 12.04仅附带4.6.3。
lsb-base (>= 4.1)
:这是Linux Standard Base软件包。它表明发行版符合Linux Foundation设置的一组标准。Chrome版本50.X +需要符合LSB base 4.1中定义的标准,而Ubuntu 12.04仅符合4.0。
事实证明,这两个问题都可以很容易地解决:
libstdc ++ 6(> = 4.8.0)
重要提示: libstdc ++ 6是许多不同软件包所依赖的重要系统库。将此软件包升级到较新的版本可能很危险,并可能导致系统稳定性问题。我在执行此升级的两个系统上都没有遇到任何问题,但是-与往常一样-您的里程可能会有所不同。
幸运的是,libstdc++6
4.8.X可在Ubuntu官方工具链测试构建PPA。第一步,我们将此PPA添加到我们的软件源中:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
从现在开始安装Google Chrome浏览器将使libstdc++6
PPA摆脱依赖,从而消除了第一个依赖问题。解决了这个问题之后,我们继续第二个问题。
lsb-base(> = 4.1)
事实证明,我们实际上不需要安装此软件包的更新版本即可运行最新版本的Chrome。目前,Chrome似乎实际上并不依赖于LSB base 4.1中的任何修改后的标准,因此对它的依赖lsb-base (>= 4.1)
似乎是一种软依赖,我们可以简单地删除它。
当然,您可以手动执行此操作,但是我编写了一个脚本,该脚本可以帮助您完成以下大多数步骤。
安装脚本
#!/bin/bash
# Name: Chrome installer for Ubuntu 12.04 LTS 64-bit
# Author: (c) 2016-2017 Glutanimate
# License: GNU GPLv3
# Manual: http://askubuntu.com/a/792442/
# Description:
#
# Downloads latest chrome release and makes it compatible with 12.04.
#
# This is a hack that will likely stop working at some point,
# but for those of us who can't upgrade Ubuntu just yet
# it's better than running a completely obsolete Chrome release.
set -e
tmpDir=$(mktemp -d /tmp/deb.XXXXXXXXXX)
debUrl="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
debFile="$tmpDir/chrome.deb"
cleanup () {
[[ -n "$tmpDir" ]] && [[ -d "$tmpDir" ]] && rm -r "$tmpDir"
}
trap "cleanup" EXIT
echo "Downloading latest Chrome release..."
mkdir -p "$tmpDir/build"
buildDir="$tmpDir/build"
wget "$debUrl" -O "$tmpDir/chrome.deb" || exit 1
echo "Extracting original deb file..."
dpkg-deb -x "$debFile" "$buildDir"
dpkg-deb --control "$debFile" "$buildDir/DEBIAN"
echo "Updating dependencies..."
perl -pe 's|lsb-base \(\>\= 4\.1\)|lsb-base \(\>\= 4\.0\)|g' "$buildDir/DEBIAN/control" > "$buildDir/DEBIAN/control.1"
perl -pe 's|libfontconfig1 \(\>\= 2\.11\)|libfontconfig1 \(\>\= 2\.8\.0\)|g' "$buildDir/DEBIAN/control.1" > "$buildDir/DEBIAN/control"
perl -pe 's|libpango-1\.0-0 \(\>\= 1\.14\.0\), libpangocairo-1\.0-0 \(\>\= 1\.14\.0\), ||g' "$buildDir/DEBIAN/control" > "$buildDir/DEBIAN/control.1"
mv "$buildDir/DEBIAN/control.1" "$buildDir/DEBIAN/control"
echo "Building new deb file..."
dpkg -b "$buildDir" "$tmpDir/chrome_modified.deb"
echo "Installing new Chrome version. Please enter your password:"
sudo dpkg -i "$tmpDir/chrome_modified.deb"
复制上面的脚本,将其另存为install_chrome.sh
并将其标记为可执行文件(通过chmod +x install_chrome.sh
或文件管理器的属性对话框)。
完成后,您可以使用以下命令执行脚本:
./install_chrome.sh
该脚本将继续下载最新的稳定Chrome版本,对其进行修改以消除对基于lsb-base 4.1的依赖性,并提示您通过来安装更新的.deb
文件dpkg
。
恭喜,您现在在Ubuntu 12.04上使用Google Chrome的更新版本!
更新
要更新Chrome,只需再次运行脚本即可。
未来兼容性
重要提示:由于此解决方案可能随时停止运行,因此建议您始终将最新的有效修改.deb
文件另存为备份,以防Chrome由于更新而突然无法启动。
要保存最新的修改后的安装程序,只需sudo
在运行脚本时获得密码提示后立即转到脚本的临时目录(即,在安装修改后的.deb
文件之前)。临时目录应该位于下面的某个位置/tmp/deb.XXXXXXXXX
(其中XXXXXXXXX
是一个随机字符串)。