为什么在使用中间 TLS 终止代理进行 do-release-upgrade 时会出现“未发现新版本”的情况?

为什么在使用中间 TLS 终止代理进行 do-release-upgrade 时会出现“未发现新版本”的情况?

最符合我的情况的问题描述如下:

在 Ubuntu 16.04 LTS 上 do-release-upgrade 失败 - 显示:未找到新版本

... 以及其中链接的问题;我本来想将其中一个作为“替代答案”来回复,但我的 SE 代表不够充分。


在极少数情况下,问题源于TLS 终止代理正在使用,但特定 VPS 系统管理员可能不了解这一事实,或者无法进行配置。

问题表现如下:

% do-release-upgrade -c
Checking for a new Ubuntu release
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
There is no development version of an LTS available.
To upgrade to the latest non-LTS develoment release 
set Prompt=normal in /etc/update-manager/release-upgrades.

但是,手动检索文件是可行的,例如在 Ubuntu 18.04.5 LTS 上:

% curl -s https://changelogs.ubuntu.com/meta-release-lts | grep -A10 focal
Dist: focal
Name: Focal Fossa
Version: 20.04.2 LTS
Date: Thu, 23 April 2020 20:04:00 UTC
Supported: 1
Description: This is the 20.04.2 LTS release
Release-File: http://archive.ubuntu.com/ubuntu/dists/focal-updates/Release
ReleaseNotes: http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/dist-upgrader-all/current/ReleaseAnnouncement
ReleaseNotesHtml: http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/dist-upgrader-all/current/ReleaseAnnouncement.html
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/dist-upgrader-all/current/focal.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/dist-upgrader-all/current/focal.tar.gz.gpg

do-release-upgrade是用 Python 编写的urlliburlopen由于某种原因它出现了故障,而我无法确定原因。

答案1

我已经开始启用调试模式:

% export DEBUG_UPDATE_MANAGER=yesplz
% do-release-upgrade -c

...并在输出中找到以下内容:

...
result of meta-release download: '<urlopen error Tunnel connection failed: 403 SSL CONNECT proxying not configured>'
...

我尝试的第一个解决方法是将文件中的 URL 更改/etc/update-manager/meta-release为 havehttp://而不是https://。这“有效”,但不能掉以轻心。

我也尝试squid在同一台机器上安装(缓存代理)并设置环境变量http[s]_proxy(小写和大写),猜测额外的一层软件可能会使货物崇拜版本变得可访问;但这不起作用(即同样的错误)。

最后的解决方法 - 有效! - 是手动下载文件:

% curl https://changelogs.ubuntu.com/meta-release-lts -o /home/`whoami`/.cache/update-manager-core/meta-release-lts
% sudo curl https://changelogs.ubuntu.com/meta-release-lts -o /var/lib/update-manager/meta-release-lts

...然后在尝试之前,通过/usr/lib/python3/dist-packages/UpdateManager/Core/MetaRelease.py在第 339 行编辑并插入以下内容,强制使用该文件:urlopen()

print('UGLY: urlopen my XSS! >:(')
raise(HTTPError(code=304, url='', msg='', hdrs='', fp=open('/tmp/myXSS', 'w')))

因此,回答我自己的问题,这可能是因为:

  • 特定的 TLS 终止代理配置(我无法控制);或者
  • Pythonurllib没有urlopen选择代理设置,或者设置不正确(在“squid解决方法”情况下)。

相关内容