Выполнить (Ubuntu) do-release-upgrade с использованием локального зеркала Aptly (отсутствуют файлы meta-release)

Выполнить (Ubuntu) do-release-upgrade с использованием локального зеркала Aptly (отсутствуют файлы meta-release)

Фон

В настоящее время у нас есть локальное зеркало deb, настроенное с использованием снимков Aptly из-за нормативных причин (например, серверам не разрешено получать пакеты через Интернет). Все это прекрасно работает для обычных обновлений. Когда нам нужно выполнить обновление релиза (с Ubuntu 18.04 до 20.04), мы обычно можем просто заменить виртуальную машину, но некоторые серверы требуют, чтобы мы выполнили обновление релиза на месте с использованием нашего зеркала.

Текущее состояние

Мы настроили/etc/update-manager/meta-releaseна наших узлах, чтобы указать на наше зеркало, но, конечно, нетмета-релиз и мета-релиз-ltsфайлы в нашем Aptly. Если мы затем скопируем официальныймета-релизфайлы, которые будут обслуживаться из нашего Aptly, все равно не будут работать, потому что ссылаются на кучу разных внешних URL, установщиков, документации и т. д. и даже если бы мы изменили URL, чтобы они указывали на наш Aptly, все эти файлы не были бы там. Поэтому нам нужно было бы скопировать и обслуживать их тоже.

Решение?

Нужно ли нам разбиратьмета-релизфайлы, скачиваем все установщики и т.д. обслуживаем их и генерируем свои собственныемета-релизфайлы оттуда? Должен быть более простой способ сделать это! Нам придется создавать это с нуля или есть доступные инструменты?

https://www.aptly.info/

P.S. Мы думаем о переходе на Pulp 3, поскольку Aptly, похоже, частично заброшен, но мы не знаем, поможет ли это решить проблему обновления релиза.

решение1

Что мы сделали, так это синхронизировали наше локальное зеркало, загрузилимета-релиз&мета-релиз-ltsфайлы, а также требуемый обновитель, включая информацию о подписи и выпуске (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

[мета-релиз-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. Вы можете переопределить PACKAGECACHE и пользовательские файлы sources.list с помощью флагов apt/dpkg, это можно пропустить, если полное автономное обновление не требуется.

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

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

С помощью этой настройки вы можете выполнить полное обновление, используя только локальные пакеты/конфигурации и запретив взаимодействие с репозиториями ubuntu.com во время обновления.

Одно предостережение касалось использования общесистемных http-прокси-серверов в /etc/enviroment — просто переопределите это, вызвав upgrader с пользовательским env:

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

Программа обновления не читает /etc/apt/apt.conf.d/10proxy, так как он предназначен только для транспорта.

Без этих шагов программа обновления все равно попытается получить доступ к archive.ubuntu.com, используя настроенный вами прокси-сервер, что приведет к сбою обновления.

И, наконец, вызовите его с помощью подоболочки, чтобы перехватить весь вывод журнала, кроме информации в /var/log/dist-upgrade/main.log

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

Надеюсь, это поможет (мы создали его с нуля)

Связанный контент