解决 Ubuntu 12.04 64 位依赖性问题

解决 Ubuntu 12.04 64 位依赖性问题

我正在尝试google-chrome-stable在全新安装的 ubuntu 12.04 上进行安装。我运行以下命令

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb

我收到以下错误

dpkg: dependency problems prevent configuration of google-chrome-stable:
 google-chrome-stable depends on libstdc++6 (>= 4.8.0); however:
Version of libstdc++6 on system is 4.6.3-1ubuntu5.
 google-chrome-stable depends on lsb-base (>= 4.1); however:
Version of lsb-base on system is 4.0-0ubuntu20.3.
dpkg: error processing google-chrome-stable (--install):
 dependency problems - leaving unconfigured
Processing triggers for man-db ...
Processing triggers for bamfdaemon ...
Rebuilding /usr/share/applications/bamf.index...
Processing triggers for desktop-file-utils ...
Processing triggers for gnome-menus ...
Errors were encountered while processing:
 google-chrome-stable

当我运行时,sudo apt-get install -f我刚刚删除了 google-chrome-stable:

The following packages will be REMOVED
  google-chrome-stable

如果我寻找所需的版本,例如我尝试sudo apt-get install libstdc++6=4.8.0但找不到该版本:

E: Version ‘4.8.0’ for ‘libstdc++6’ was not found

我该如何修复它?

我知道不再支持 32 位版本的 Ubuntu 12.04。我正在运行 64 位 Ubuntu 版本。

答案1

您收到这些错误是因为 Google 已终止对 Ubuntu 12.04 的支持。

谷歌:我们将终止对 32 位 Linux Ubuntu Precise (12.04) 上的 Google Chrome 的支持。

您也可以选择安装chromium-browserGoogle Chrome 所基于的版本。

您还可以安装 Ubuntu 14.04 LTS 或 Ubuntu 15.10(均受支持)以使用 Chrome。

但我建议您等到 4 月 21 日,届时新 Ubuntu 16.04 LTS 将发布。

您应该考虑到 Ubuntu 12.04 LTS 只剩下一年的官方安全支持。

答案2

最后修改 (2017-09-13)

此解决方案不再适用于 Chrome 版本 60 及更高版本。最新的软件包依赖于 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。接下来是有关如何在 Ubuntu 12.04 64 位上安装最新版 Chrome(截至 2016-06-28)的快速教程。

警告这是一个非常不成熟的解决方案,可能会随时停止工作。在继续操作之前,请确保您知道自己在做什么。

先决条件

更新内核

重要的: 请注意,更新内核可能会带来一系列麻烦和硬件兼容性问题。在继续此步骤之前,请确保您知道如何切换到较早的内核。

最近的 Chrome 版本依赖于一些与沙盒相关的内核功能,而这些功能在 Ubuntu 12.04 的默认内核(3.2.0)中不可用。如果您使用较新的映像(版本号 12.04.2 及更高版本)安装了 Ubuntu 12.04,则很可能您已经拥有更新的内核;但如果您仍在使用原始内核版本,则可以通过LTS 硬件支持堆栈包

sudo apt-get install --install-recommends linux-generic-lts-trusty

确保在执行内核升级后重新启动系统。如果一切顺利,您的系统现在应该使用 Linux 内核 3.13.X。

依赖问题

如果你查看在尝试安装最新的 Chrome 版本时收到的错误消息,你会发现两个不同的依赖问题:

  1. libstdc++6 (>= 4.8.0):这是 GNU 标准 C++ 库。Chrome 50.X 及以上版本依赖于此库的 4.8.0 版本,但 Ubuntu 12.04 默认仅自带 4.6.3 版本。
  2. lsb-base (>= 4.1):这是 Linux 标准基础包。它表示发行版符合 Linux 基金会制定的一组标准。Chrome 版本 50.X+ 要求符合 LSB 基础 4.1 中定义的标准,但 Ubuntu 12.04 仅符合 4.0。

事实证明这两个问题都可以相当容易地解决:

libstdc++6(>= 4.8.0)

重要的: libstdc++6 是一个重要的系统库,许多不同的软件包都依赖它。将此软件包升级到较新的版本可能会很危险,并可能导致系统稳定性问题。我自己在执行此升级的两个系统上没有遇到任何问题,但 - 一如既往 - 您的情况可能会有所不同。

幸运的是,libstdc++6Ubuntu 官方提供了 4.8.X工具链测试构建 PPA.首先我们将这个 PPA 添加到我们的软件源中:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

从此时开始安装 Google Chrome 将从libstdc++6PPA 中提取依赖项,从而消除第一个依赖项问题。解决了这个问题后,让我们继续解决第二个问题。

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是随机字符串)下的某个位置。

答案3

我认为你不能。他们刚刚升级了,12.04 中无法满足依赖关系

我在 travis 版本上遇到了同样的问题,因此降级了。很多旧版本这里

显然这不是一个很好的答案,我寻找了很长时间,却找不到不降级的方法。

答案4

dpkg: dependency problems prevent configuration of google-chrome-stable:
 google-chrome-stable depends on libstdc++6 (>= 4.8.0); however:
Version of libstdc++6 on system is 4.6.3-1ubuntu5.
 google-chrome-stable depends on lsb-base (>= 4.1); however:
Version of lsb-base on system is 4.0-0ubuntu20.3.

基本上,Google Chrome 需要 lsb-base 和 libstdc++6,而 Precise 中没有这两个软件:

>lsb-base   | 4.0-0ubuntu20          | precise         | all
>lsb-base   | 4.0-0ubuntu20.3        | precise-updates | all
 lsb-base   | 4.1+Debian11ubuntu6    | trusty          | all
 lsb-base   | 4.1+Debian11ubuntu6.1  | trusty-proposed | all
 lsb-base   | 4.1+Debian11ubuntu8    | vivid           | all
 lsb-base   | 4.1+Debian11ubuntu8    | wily            | all
 lsb-base   | 9.20160110             | xenial          | all
>libstdc++6 | 4.6.3-1ubuntu5         | precise         | amd64, armel, armhf, i386, powerpc
 libstdc++6 | 4.8.2-19ubuntu1        | trusty          | amd64, arm64, armhf, i386, powerpc, ppc64el
 libstdc++6 | 4.8.4-2ubuntu1~14.04.1 | trusty-updates  | amd64, arm64, armhf, i386, powerpc, ppc64el
 libstdc++6 | 4.9.2-10ubuntu13       | vivid           | amd64, arm64, armhf, i386, powerpc, ppc64el
 libstdc++6 | 5.2.1-22ubuntu2        | wily            | amd64, arm64, armhf, i386, powerpc, ppc64el
 libstdc++6 | 5.3.1-14ubuntu2        | xenial          | amd64, arm64, armhf, i386, powerpc, ppc64el, s390x

您需要 Trusty(也是 LTS)或更高版本来安装来自 Google 的 google-chrome,或者只需安装 Ubuntu 存储库 chromium-browser 提供的版本。

相关内容