我正在通过 Azure 上的 Databricks 集群安装软件包apt-get
。每次启动集群时,我都需要重新安装软件包。(我之所以指定 Databricks,是因为有必要指出,这种情况不会每次都发生在同一台物理机器上 - 因此我的问题是如何检查运行之间可能发生的变化。)
有时某个特定的包可以成功安装;但有时却找不到它。
问题(三次尝试到达同一个地方)
- 运行之间可能发生了哪些变化从而导致这种情况?我该如何检查它们?
- 什么原因导致
apt-get update
无法指定最新版本? - 当指定版本时,什么会阻止
apt-get install
找到最新版本?
语境
我最初的问题是我正在尝试安装 gdal:
sudo apt-get update -y
sudo apt-get install gdal -y
Err:1 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libmysqlclient21 amd64 8.0.28-0ubuntu0.20.04.3
# 404 Not Found [IP: 91.189.91.39 80]
# ...
# Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-8.0/libmysqlclient21_8.0.28-0ubuntu0.20.04.3_amd64.deb 404 Not Found [IP: 91.189.91.39 80]
为了了解发生了什么,我尝试单独安装 libmysqlclient21,并查看 apt-get 在安装 libmysqlclient21 时尝试安装什么。
sudo apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Reading package lists...
sudo apt-get install -y libmysqlclient21
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
libmysqlclient21
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,292 kB of archives.
After this operation, 7,652 kB of additional disk space will be used.
Ign:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libmysqlclient21 amd64 8.0.28-0ubuntu0.20.04.3
Err:1 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libmysqlclient21 amd64 8.0.28-0ubuntu0.20.04.3
404 Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/m/mysql-8.0/libmysqlclient21_8.0.28-0ubuntu0.20.04.3_amd64.deb 404 Not Found [IP: 91.189.91.39 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
(运行apt-get update
并--fix-missing
没有改变输出。)
如果安装成功,版本为 8.0.29-0ubuntu0.20.04.3
apt-cache policy libmysqlclient21
libmysqlclient21:
Installed: (none)
Candidate: 8.0.29-0ubuntu0.20.04.3
Version table:
8.0.29-0ubuntu0.20.04.3 500
500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
8.0.19-0ubuntu5 500
500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
失败的时候是8.0.28-0ubuntu0.20.04.3
apt-cache policy libmysqlclient21
libmysqlclient21:
Installed: (none)
Candidate: 8.0.28-0ubuntu0.20.04.3
Version table:
8.0.28-0ubuntu0.20.04.3 500
500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
8.0.19-0ubuntu5 500
500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
如果我进入 Ubuntu 存储库(我想这就是这个?),我发现 8.0.29 版本存在,但 8.0.28 版本不存在。(security.ubuntu.com/ubuntu/pool/main/m/mysql-8.0/)
偶尔我指定安装8.0.29版本时,即使候选版本是8.0.28,安装也会成功,但通常不是:
sudo apt-get update -y
sudo apt-get install -y libmysqlclient21=8.0.29-0ubuntu0.20.04.3
# E: Version '8.0.29-0ubuntu0.20.04.3' for 'libmysqlclient21' was not found
有一次,apt-get clean
在更新和安装之前使用也有效。我还没有能够重现这种情况。
sudo apt-get clean
sudo apt-get update -y
sudo apt-get install libmysqlclient21
特定于 Databricks,与网站相关性值得怀疑 最后,我在交互式 Databricks 集群和作业 Databricks 集群上运行了此程序。所有成功都发生在交互式集群上;作业集群始终无法安装该包。我之所以包括这一点,只是因为它有助于理解。
其他 SE 问题 我读过很多关于 apt-get 的其他 stackexchange 问题,包括这些:
apt-get update
官方 Ubuntu AWS AMI 上的行为不一致; 我觉得这可能接近问题所在。特定的解决方案对我来说不起作用,我不知道/var/lib/cloud/instance/boot-finished
对我来说等效的解决方案是什么。- 为什么 apt-get 不能安装最新的软件;但我的问题不是我没有获得最新版本,而是我只能不一致地获得 Ubuntu 托管的版本
- apt-get 在某些服务器上无法获取最新版本
- 我再也找不到这样的答案:
focal-updates
不focal-security
提供完整软件包,只提供软件包更新,我需要在其他地方找到该软件包。话虽如此,但这并不能改变我获得成功率不一致的事实。为什么 apt-get 有时会知道正确的来源,而有时却不知道?
编辑
我不认为这是为什么 Ubuntu 存储库没有最新版本的软件?因为我指定的是较新的版本是在 ubuntu 存储库中。
另外,我应该强调的是,我没有承诺任何特定的软件包版本。我只需要安装 gdal,但它失败了,因为apt-get
找不到libmysqlclient21
。
当我进入 ubuntu 存储库时,我看到版本 8.0.29-0ubuntu0.20.04.3 存在,但没有版本 8.0.28-0ubuntu0.20.04.3。我还注意到,当下面的候选版本apt-cache policy libmysqlclient21
是 8.0.29… 时,它可以成功安装,而当它是 8.0.28… 时,它没有成功安装。
答案1
我遇到了完全相同的问题。输入:
sudo apt-get update -y --fix-missing;
sudo apt-get install -y libmysqlclient21=8.0.29-0ubuntu0.20.04.3;
我的剧本一开始就为我工作。
我使用标准模式下运行时间为 10.5 ML 的作业集群。
答案2
来自另一个帖子,https://stackoverflow.com/questions/69767441/issues-installing-gdal-bin-libmysqlclient21-dependency-on-20-04-3-databricks,我也遇到了同样的问题。
这个问题变得不常见,并且再也没有出现过。当时 9.1 LTS 已经加入进来,而 libmysqlclient21 的新版本也刚刚出现。因此,感觉问题与运行时可用的版本有关,而 ubuntu 存储库中可用的版本已被移动(不可用,因此出现未找到 IP 的问题)。
我们还遇到了 DNS 问题,导致超时延长,因此这可能造成了更新和安装错误。
我建议尝试回滚到较旧的运行时(例如 9.1 LTS)并查看您如何尝试使用(下面)安装库,因为我们继续取得成功。
# check
apt-cache policy gdal-bin
apt-cache rdepends gdal-bin
# install
sudo apt-get --fix-missing -y update
sudo apt-get install -y gdal-bin
# check
gdalinfo --version
我还将尝试使用相同的代码 10.5 和 10.4 LTS,看看会发生什么。
== 编辑 == 有趣的是,我创建了 5 个作业(9.1 LTS 作业集群、10.4 LTS 作业集群、10.4 LTS 计算集群、10.5 作业集群、10.5 计算集群)
所有作业都失败了,原因相同,未能找到 8.0.29 的更新,然后无法安装 libmysqlclient21_8.0.28
sh sudo apt-get --fix-missing -y update
Hit:1 hXttp://security.ubuntu.com/ubuntu focal-security InRelease
Hit:2 hXttps://repos.azul.com/zulu/deb stable InRelease
Hit:3 hXttp://archive.ubuntu.com/ubuntu focal InRelease
Hit:4 hXttp://archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:5 hXttp://archive.ubuntu.com/ubuntu focal-backports InRelease
Reading package lists...
Get:36 ...//archive.ubuntu.com/ubuntu focal/universe amd64 libgdal26 amd64 3.0.4+dfsg-1build3 [6,156 kB]
Err:27 ...//security.ubuntu.com/ubuntu focal-updates/main amd64 libmysqlclient21 amd64 8.0.28-0ubuntu0.20.04.3
404 Not Found [IP: 91.189.91.39 80]
Get:37 ...//archive.ubuntu.com/ubuntu focal/universe amd64 python3-gdal amd64 3.0.4+dfsg-1build3 [527 kB]
Get:38 ...//archive.ubuntu.com/ubuntu focal/universe amd64 gdal-bin amd64 3.0.4+dfsg-1build3 [256 kB]
Get:39 ...//archive.ubuntu.com/ubuntu focal/universe amd64 proj-bin amd64 6.3.1-1 [88.8 kB]
Fetched 27.8 MB in 5s (5,886 kB/s)
E: Failed to fetch hXttp://security.ubuntu.com/ubuntu/pool/main/m/mysql-8.0/libmysqlclient21_8.0.28-0ubuntu0.20.04.3_amd64.deb 404 Not Found [IP: 91.189.91.39 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
这促使我们调查我们自己的生产,发现错误自 5 月 5 日以来一直发生,与安全补丁的发布一致:
mysql-8.0 (8.0.29-0ubuntu0.20.04.3) focal-security; urgency=medium
* SECURITY REGRESSION: 8.0.29 breaks existing charm configurations
(LP: #1971565)
- debian/patches/lp1971565.patch: add "name" to the supported global
options list so existing configurations keep working.
-- Marc Deslauriers <[email protected]> Wed, 04 May 2022 08:36:15 -0400
幸运的是,你现在并不孤单!尽管我们处于同样的困境,却没有解决办法
答案3
我成功地
sudo apt clean && sudo apt update --fix-missing -y && sudo apt install -y libmysqlclient21
在尝试安装 gdal 之前,它现在似乎正在工作......
根据评论修改:
sudo rm -r /var/lib/apt/lists/*
sudo apt clean &&
sudo apt update --fix-missing -y &&
sudo apt install -y libmysqlclient21
sudo apt install -y gdal-bin
首先运行这些命令似乎很重要。在流程的稍后阶段运行它们可能不会成功。
(这使用apt-get
而不是最初注释的 apt,因为apt-get
它更面向脚本;但是,两者都有效。)
答案4
我最终再次遇到了一些问题,但我用以下方法解决了它:
wget http://archive.ubuntu.com/ubuntu/pool/main/m/mysql-8.0/libmysqlclient21_8.0.19-0ubuntu5_amd64.deb;
sudo dpkg -i libmysqlclient21_8.0.19-0ubuntu5_amd64.deb;