Fondo
Actualmente tenemos una configuración de espejo deb local que utiliza instantáneas de Aptly debido a razones regulatorias (por ejemplo: los servidores no pueden recuperar paquetes a través de Internet). Todo esto funciona bien para actualizaciones normales. Cuando necesitamos realizar una actualización de la versión (de Ubuntu 18.04 a 20.04), normalmente podemos simplemente reemplazar la VM, pero algunos servidores requieren que realicemos una actualización de la versión local utilizando nuestro espejo.
Estado actual
Hemos configurado/etc/update-manager/meta-lanzamientoen nuestros nodos para apuntar a nuestro espejo pero, por supuesto, no haymeta-lanzamiento y meta-lanzamiento-ltsarchivos en nuestro Aptly. Si luego copiamos el oficialmeta-lanzamientoarchivos que se entregarán desde nuestro Aptly, todavía no funcionará porque se refiere a un montón de URL externas diferentes, instaladores, documentaciones, etc. e incluso si cambiaramos las URL para que apunten a nuestro Aptly, todos esos archivos no estarían allí. . Entonces tendríamos que copiarlos y servirlos también.
¿Solución?
¿Necesitamos analizar elmeta-lanzamientoarchivos, descargar todos los instaladores, etc. servirlos y generar los nuestros propiosmeta-lanzamientoarchivos de eso? ¡Debe haber una forma más sencilla de hacer esto! ¿Tenemos que construir esto desde cero o hay herramientas disponibles?
PD. Estamos pensando en cambiar a Pulp 3 ya que Aptly parece estar parcialmente abandonado, no sabemos si eso ayudaría con el problema de actualización del lanzamiento.
Respuesta1
Lo que hicimos fue sincronizar nuestro espejo local, descargar elmeta-lanzamiento&meta-lanzamiento-ltsarchivos, así como el actualizador requerido, incluida la información de firma y versión (bionic.tar.gz bionic.tar.gz.gpg etc.) de los repositorios predeterminados de Ubuntu.
archive.ubuntu.com/ubuntu/dists/bionic/main/dist-upgrader-all/current/
Luego, los pusimos a disposición desde nuestro espejo y modificamos el contenido de los archivos de metalanzamiento que coincidían con nuestra URL espejo.
[fragmento de metalanzamiento]
[METARELEASE]
URI = http://$YOUR_MIRROR_HERE/ubuntu_1604/meta-release
URI_LTS = http://$YOUR_MIRROR_HERE/ubuntu_1604/meta-release-lts
[fragmento de meta-lanzamiento-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
Nosotros usamos "apto dist-actualización -dy" para descargar/recuperar todos los paquetes en PACKAGECACHE local primero. Puede anular PACKAGECACHE y los archivos fuentes.list personalizados usando indicadores apt/dpkg; esto se puede omitir si no se requiere una actualización completa sin conexión.
/etc/apt/apt.conf.d/10upgrade
dir::etc::sourcelist /srv/apt/custom_sources.list;
dir::cache::archives /srv/apt/packages;"
Con esta configuración, puede actualizar completamente utilizando solo paquetes/configuraciones locales y evitar la comunicación con los repositorios de ubuntu.com durante la actualización.
Una advertencia fue el uso de servidores proxy http en todo el sistema en /etc/environment; simplemente anule esto llamando al actualizador con un entorno personalizado:
$ export HTTP_PROXY=""
$ export http_proxy=""
$ export DEBUG_UPDATE_MANAGER=true
El actualizador no lee /etc/apt/apt.conf.d/10proxy ya que es solo para transporte.
Sin estos pasos, el actualizador aún intenta acceder a archive.ubuntu.com utilizando su proxy configurado, lo que resulta en una falla en la actualización.
Y finalmente llamarlo usando un subshell para capturar todos los resultados del registro además de la información en /var/log/dist-upgrade/main.log
$ (do-release-upgrade -f DistUpgradeViewNonInteractive) &>> $somelog
Espero que esto ayude (lo construimos desde cero)