![为什么某些软件包在我的 Debian Jessie 安装中不可用?](https://linux22.com/image/115554/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9F%90%E4%BA%9B%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%9C%A8%E6%88%91%E7%9A%84%20Debian%20Jessie%20%E5%AE%89%E8%A3%85%E4%B8%AD%E4%B8%8D%E5%8F%AF%E7%94%A8%EF%BC%9F.png)
我有 Debian Jessie (AMD64和i386 多架构)安装在我的系统上。但是有一些软件包无法安装,尽管它们应该安装。
我正在尝试安装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-avail
rm -f /var/lib/apt/lists/*
刷新之后apt update && apt install mysql-client
答案4
您可以运行该命令吗?如果需要也可以apt policy
运行apt policy mysql-client
apt 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
。