使用本地 Aptly 镜像执行(Ubuntu)do-release-upgrade(缺少元发布文件)

使用本地 Aptly 镜像执行(Ubuntu)do-release-upgrade(缺少元发布文件)

背景

由于监管原因(例如:服务器不允许通过互联网获取软件包),我们目前使用 Aptly 快照设置了本地 deb 镜像。所有这些对于正常升级都很好用。当我们需要进行版本升级(从 Ubuntu 18.04 到 20.04)时,我们通常只需替换 VM,但有些服务器要求我们使用镜像进行就地版本升级。

当前状态

我们已经配置/etc/update-manager/meta-release在我们的节点上指向我们的镜像,但当然没有meta-release 和 meta-release-lts在我们的 Aptly 中。如果我们复制官方元发布无法从我们的 Aptly 提供文件,因为它引用了一堆不同的外部 URL、安装程序、文档等。即使我们将 URL 更改为指向我们的 Aptly,所有这些文件也不会存在。所以我们也需要复制并提供这些文件。

解决方案?

我们需要解析元发布文件,下载所有安装程序等。为他们提供服务并生成我们自己的元发布文件?一定有更简单的方法可以做到这一点!我们必须从头开始构建它还是有可用的工具?

https://www.aptly.info/

附言:由于 Aptly 似乎已被部分放弃,因此我们正在考虑切换到 Pulp 3,但我们不知道这是否有助于解决版本升级问题。

答案1

我们所做的是同步我们的本地镜像,下载元发布&元发布版本文件以及所需的更新程序(包括签名和发布信息(bionic.tar.gz bionic.tar.gz.gpg 等等) 来自默认的 Ubuntu 存储库。

archive.ubuntu.com/ubuntu/dists/bionic/main/dist-upgrader-all/current/

然后,我们从镜像中提供这些内容,并修改了与我们的镜像 URL 匹配的元发布文件的内容。

[元发布片段]

[METARELEASE]
URI = http://$YOUR_MIRROR_HERE/ubuntu_1604/meta-release
URI_LTS = http://$YOUR_MIRROR_HERE/ubuntu_1604/meta-release-lts

[meta-release-lts 片段]

[...]
Release-File: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic/Release
ReleaseNotes: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/ReleaseAnnouncement
ReleaseNotesHtml: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/ReleaseAnnouncement.html
UpgradeTool: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/bionic.tar.gz
UpgradeToolSignature: http://$YOUR_MIRROR_HERE/ubuntu/dists/bionic-updates/main/dist-upgrader-all/current/bionic.tar.gz.gpg

我们用了 ”apt dist-upgrade -dy“首先将所有软件包下载/获取到本地 PACKAGECACHE。您可以使用 apt/dpkg 标志覆盖 PACKAGECACHE 和自定义 sources.list 文件,如果不需要完全离线升级,则可以跳过此操作。

/etc/apt/apt.conf.d/10upgrade

dir::etc::sourcelist /srv/apt/custom_sources.list;
dir::cache::archives /srv/apt/packages;"

通过此设置,您可以仅使用本地包/配置进行完全升级,并防止升级期间与 ubuntu.com 存储库的通信。

一个警告是在 /etc/environment 中使用系统范围的 http 代理服务器 - 只需通过使用自定义环境调用升级程序来覆盖它:

$ export HTTP_PROXY="" 
$ export http_proxy="" 
$ export DEBUG_UPDATE_MANAGER=true

更新程序不会读取 /etc/apt/apt.conf.d/10proxy,因为这仅用于传输。

如果没有这些步骤,升级程序仍会尝试使用您配置的代理访问 archive.ubuntu.com,从而导致升级失败。

最后使用子 shell 调用它来捕获除 /var/log/dist-upgrade/main.log 中的信息之外的所有日志输出

$ (do-release-upgrade -f DistUpgradeViewNonInteractive) &>> $somelog

希望这会有所帮助(我们确实是从头开始构建的)

相关内容