使用本地 Aptly 鏡像執行 (Ubuntu) do-release-upgrade (缺少元發布文件)

使用本地 Aptly 鏡像執行 (Ubuntu) do-release-upgrade (缺少元發布文件)

背景

由於監管原因(例如:伺服器不允許透過網路取得套件),我們目前使用 Aptly 快照設定了本機 deb 鏡像。所有這些對於正常升級來說都很好。當我們需要進行版本升級(從 Ubuntu 18.04 到 20.04)時,我們通常只需更換虛擬機器即可,但有些伺服器要求我們使用映像進行就地版本升級。

目前狀態

我們已經配置了/etc/update-manager/meta-release在我們的節點上指向我們的鏡像,但當然沒有元發布和元發布-lts文件在我們的 Aptly.如果我們再複製官方的元發布從我們的 Aptly 提供的文件仍然無法運作,因為它引用了一堆不同的外部 URL、安裝程式、文件等,即使我們將 URL 更改為指向我們的 Aptly,所有這些文件也不會在那裡。所以我們也需要複製並提供這些服務。

解決方案?

我們需要解析元發布文件,下載所有安裝程式等,為它們提供服務並產生我們自己的元發布文件來自那?一定有一個更簡單的方法來做到這一點!我們是否必須從頭開始建造它,或者是否有可用的工具?

https://www.aptly.info/

附言。我們正在考慮切換到 Pulp 3,因為 Aptly 似乎已被部分放棄,但我們不知道這是否有助於解決版本升級問題。

答案1

我們所做的是同步本地鏡像,下載元發布&元發布-lts文件以及所需的更新程序,包括簽名和發布資訊(仿生.tar.gz 仿生.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

[元發布-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 升級-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

希望這會有所幫助(我們確實從頭開始建造它)

相關內容