为什么某些软件包在我的 Debian Jessie 安装中不可用?

为什么某些软件包在我的 Debian Jessie 安装中不可用?

我有 Debian Jessie (AMD64i386 多架构)安装在我的系统上。但是有一些软件包无法安装,尽管它们应该安装。

我正在尝试安装mysql-client,但出现此错误:

$ apt-get install mysql-client
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package mysql-client is a virtual package provided by:
mysql-client-5.5 5.5.57-0+deb8u1 [Not candidate version]
mysql-client-5.5 5.5.55-0+deb8u1 [Not candidate version]

E: Package 'mysql-client' has no installation candidate

尝试安装mysql-client-5.5会告诉你更多信息:

$ apt-get install mysql-client-5.5
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package mysql-client-5.5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

我的sources.list看起来像这样:

deb http://ftp.de.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://ftp.de.debian.org/debian/ jessie-updates main contrib non-free
deb https://dl.winehq.org/wine-builds/debian/ jessie main

我该如何解决这种奇怪的行为?

更新

只打印apt-cache search mysql这几个包。这对我来说似乎不正确。

akonadi-backend-mysql - MySQL storage backend for Akonadi
libreoffice-base-drivers - Database connectivity drivers for LibreOffice
libmysqlclient18 - MySQL database client library
mysql-common - MySQL database common files, e.g. /etc/mysql/my.cnf
mysql-server-core-5.5 - MySQL database server binaries
php5-sqlite - SQLite module for php5
libqt4-sql-mysql - Qt 4 MySQL database driver
librdf0 - Redland Resource Description Framework (RDF) library
rsyslog - reliable system and kernel logging daemon

答案1

[注:解决方案是在Update 2数据中发现的,并在底部进行了解释,apt pinning。]

诊断此问题需要确定故障发生的位置。

首先,尝试一下,您的源代码似乎有问题,因此只需将它们替换为这些,然后在再次有了工作设置后向后调试:

https://packages.debian.org/search?keywords=mysql-client&searchon=names&suite=oldstable§ion=all

精确命中 软件包 mysql-client

jessie (oldstable) (database): MySQL database client (metapackage depending on the latest version)
5.5.57-0+deb8u1 [security]: all
also provided by: mysql-client-5.5

其他点击包 mysql-client-5.5

jessie (oldstable) (database): MySQL database client binaries
5.5.57-0+deb8u1 [security]: amd64 arm64 armel armhf i386 mips mipsel powerpc ppc64el s390x

这表明有问题的软件包位于旧版本中。将您的sources.list更改为:

#deb http://ftp.de.debian.org/debian/ jessie main contrib non-free
#deb http://security.debian.org/ jessie/updates main contrib non-free
#deb http://ftp.de.debian.org/debian/ jessie-updates main contrib non-free
# try these instead:
deb http://mirrors.kernel.org/debian jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
# and your wine repo
deb https://dl.winehq.org/wine-builds/debian/ jessie main

保存,然后:apt-get update

然后:apt-cache search mysql

如果现在没有显示您的 mysql 客户端,我相信您的系统中某些非常难以调试的内容已损坏。

另外,显示完整的结果: apt-get update 不仅仅是最后一行,而是整个内容,这可能会显示您丢失的错误。

您还可以随时检查您当地的 apt 知道什么,如下所示:

apt-cache show mysql-client

并仔细检查输出。

还:apt-cache policy mysql-client

很明显,apt update无论出于何种原因,您都无法更新,我建议对存储库进行上述更改以从问题中删除一些变量。

[更新]请注意,我更正了 resources.list 中的一行更新您的内容,但您的粘贴显示这是唯一失败的项目,这意味着您的主要 jessie main contrib 非自由本地数据库由于某种原因未正确更新。

修改sources.list,apt-get update再次运行,再次查找错误。很明显您的 apt 软件包数据库无法更新。

[更新2]如果apt-get update正在工作并且没有显示错误,并且如果您看到最终结果:18.9 MB更新,您的粘贴最终显示了这一点,这强烈表明问题是无法将数据写入磁盘,以一种apt本身的方式无法意识到因该故障而显示错误消息。

检查:dmesg | grep apt-get是否还有任何错误消息。检查系统以df -hT确保 apt 写入更新数据的 /var 分区未满。对包含 /var 的分区运行 fsck。

请注意,重新安装不会修复硬件故障,因此找出失败的原因可能比重新安装希望能够解决问题更好。

是否有任何事情或任何人更改了 apt 数据库的权限?

检查以下内容(特别注意文件的大小):

ls -l /var/cache/apt
# the results should look like this:
drwxr-xr-x 3 root root   147456 Jul 22 16:50 archives
-rw-r--r-- 1 root root 32808269 Aug 13 16:15 pkgcache.bin
-rw-r--r-- 1 root root 32088021 Aug 13 16:15 srcpkgcache.bin

此外,每次运行 apt-get update 时,最后修改日期都应该更改。

进一步检查:

ls -l /var/lib/apt/lists/

应该显示您的所有存储库及其从 apt-get update 获取的相关数据,或者在您的情况下,显然已获取但未更新。

重复搜索:apt-cache search mysql-client要么什么也不显示,就像您到目前为止的情况一样,要么应该显示一些内容。

接下来:检查您是否没有设置 apt 首选项来使用以前的发行版或 /etc/apt 中的其他一些未记住的事件:

cd /etc/apt
cat apt.conf apt.conf.d/* preferences preferences.d/*

这应该返回这些文件中设置的任何配置(例如):

APT::Default-Release "buster";
APT::Get::AutomaticRemove "0";
APT::Get::HideAutoRemove "1";

[更新 3 - 解决了吗?]

上面 /etc/apt cat 中的用户配置显示了问题,我一看到它就很明显,但猜不出来,尽管在新稳定版 Stretch 发布后运行旧稳定版 Jessie 的提示已发布应该足以检查固定情况而无需其他测试:

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";
// Pre-configure all packages with debconf before they are installed.
// If you don't like it, comment it out.
DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt || true";};
Package: *
Pin: release a=stable [***** my emphasis]
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10
cat: preferences.d/*: No such file or directory

现在这是有道理的,没有技术问题,没有硬件问题,但 apt 没有显示任何软件包。为什么?因为你的系统被固定在稳定状态,这是stretch,而不是jessie。

更改固定,首先找到包含该固定的文件:

grep -snR 'Pin: release a=stable' /etc/apt

然后将“stable”更改为“jessie”,一切都会恢复正常。

但我相信您需要将其更改为(注意 n 而不是 a,n 是版本的名称):

Pin: release n=jessie

也许在 /etc/apt/apt.conf 中添加这一行,尽管我不认为在您的情况下有必要。

APT::Default-Release "jessie";

https://manpages.debian.org/stretch/apt/apt_preferences.5.en.html

请注意,我认为 jessie 还没有所有 .d 目录,因此很难记住它的文件应该放在哪里,可能在 .d/ 目录中可以正常工作。

默认版本设置在: /etc/apt/apt.conf.d/80Basics 固定位于: /etc/apt/preferences.d/80Basics 在您的情况下,固定位于 /etc/apt/preferences 中

基本上你告诉 apt 固定到稳定,它会尽职尽责地做你告诉它做的事情,只是你的源中没有稳定,你拥有现在旧的稳定。因此,当您询问有关软件包的信息时,apt 会在更新 jessie 源代码后尽职尽责地通知您,基本上找不到任何软件包。没有报告错误,因为没有发生错误,更新工作正常,包数据库更新良好,包列出了所有更新的内容,但遗憾的是,它们都不包含拉伸(稳定)数据。这就是使用“stable”而不是实际发行版名称的风险,因为很容易忘记您所做的,并且当稳定版更改为旧稳定版或 EOL 稳定版时,会更加令人困惑。请注意,通常您可以在源中使用 sid/testing/stable,但我发现当测试滚动到新测试时,这些有时可能会失败,并且 stable 会变成旧的 stable,所以实际名称是我的偏好,当然除了sid,永远不会改变。

我相信这就是解决方案,正如您所看到的,重新安装几乎从来都不是解决方案,而且我越来越怀疑您在某个地方配置了一些您忘记的东西,因为显然一切都正常。

我相信固定将位于/etc/apt/preferences中(因为preferences.d在你的jessie中不存在)。

APT 固定: https://wiki.debian.org/AptPreferences

因此,我使用更保守的“仅当我这么说”的方法来进行混合分发,并使用如下 Pin 文件:

封装:* 引脚:release a=testing 引脚优先级:900

软件包:* Pin:release o=Debian Pin-优先级:-10

因此,所有 debian 软件包的优先级都默认为 -10,而测试则获得 900 分奖励。这会调用以下行为:

来自 apt_preferences(5)

500 < P <=990 :导致安装版本,除非有属于目标版本的可用版本或安装的版本更新[...] P < 0 :阻止安装该版本

[...]

P < 0 :阻止安装该版本

正如你所看到的,你告诉 apt 基本上忽略所有不稳定的东西(-10),并且只使用稳定的(900),所以 apt 做了你告诉它做的事情。

鉴于这是一个稳定的、不是 sid 或测试安装,我通常不会使用 -10 固定,我会使用 100 或 200 之类的值。但只有当我实际运行各种池(如 stretch 和 jessie,或 sid 和 testing)时,我才会使用固定,如果您只使用 Jessie,那么使用它就毫无意义了,即便如此,apt 基本上也会忽略固定并使用默认版本,例如,我将测试固定为 900,但设置为默认版本,因此 apt-cache 策略显示以下内容:

apt-cache policy nano
nano:
  Installed: 2.7.4-1
  Candidate: 2.8.6-1
  Version table:
     2.8.6-2 300
        300 http://mirrors.kernel.org/debian unstable/main i386 Packages
     2.8.6-1 990
        990 http://mirrors.kernel.org/debian buster/main i386 Packages
 *** 2.7.4-1 100
        100 /var/lib/dpkg/status

正如您所看到的,固定值是 990,这不是我做的,这是当您显式声明默认发布时 apt 所做的事情。

https://manpages.debian.org/stretch/apt/apt_preferences.5.en.html

首选项的拉伸手册页非常清楚。

答案2

Mysql 客户端说

这是一个过渡性 MySQL 数据库,依赖于默认的 MySQL 客户端元包。它可以被安全地移除。

我认为你需要 default-mysql-client 或 default-mysql-client-core

前者说

MySQL 是一个快速、稳定和真正的多用户、多线程 SQL 数据库服务器。 SQL(结构化查询语言)是世界上最流行的数据库查询语言。 MySQL 的主要目标是速度、稳健性和易用性。

该包依赖于客户端二进制文件的默认实现以及附加工具 innotop 和 mysqlreport。

后者说

MySQL 是一个快速、稳定和真正的多用户、多线程 SQL 数据库服务器。 SQL(结构化查询语言)是世界上最流行的数据库查询语言。 MySQL 的主要目标是速度、稳健性和易用性。

该包取决于 Akonadi 使用的核心客户端文件的默认实现。

答案3

将 /etc/apt/sources.list 中的 ftp 替换为 http。apt 镜像迟早你必须这样做。以 root 身份或使用 sudo 进行操作。 刷新dpkg --clear-avail之后rm -f /var/lib/apt/lists/*apt update && apt install mysql-client

您的镜子有时无法到达。或许有关的

    ping -c 4 http://mirrors.kernel.org/
ping: unknown host http://mirrors.kernel.org/

在 /etc/apt/sources.list 中

deb http://http.us.debian.org/debian/ jessie main contrib non-free 
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://http.us.debian.org/debian/ jessie-updates contrib non-free main 

dpkg --clear-availrm -f /var/lib/apt/lists/* 刷新之后apt update && apt install mysql-client

答案4

您可以运行该命令吗?如果需要也可以apt policy运行apt policy mysql-clientapt policy mysql-client-5.5

您还需要安装pastebinit apt install pastebinit,然后运行这两个命令cat /etc/apt/sources.list | pastebinit -b paste.debian.net

您可能还想粘贴apt policy和的输出mysql-client-5.5apt policy mysql-client

您可能需要做一些适当的固定,但我们会解决这个问题。另外不要忘记清理缓存apt clean

相关内容