Execute (Ubuntu) do-release-upgrade usando um espelho local do Aptly (arquivos de meta-release ausentes)

Execute (Ubuntu) do-release-upgrade usando um espelho local do Aptly (arquivos de meta-release ausentes)

Fundo

Atualmente, temos uma configuração de espelho deb local usando instantâneos do Aptly devido a motivos regulatórios (por exemplo: os servidores não têm permissão para buscar pacotes pela Internet). Tudo isso funciona bem para atualizações normais. Quando precisamos fazer uma atualização de versão (do Ubuntu 18.04 para 20.04), normalmente podemos apenas substituir a VM, mas alguns servidores exigem que façamos uma atualização de versão local usando nosso espelho.

Estado atual

Nós configuramos/etc/update-manager/meta-releaseem nossos nós para apontar para o nosso espelho, mas é claro que não hámeta-lançamento e meta-lançamento-ltsarquivos em nosso Aptly. Se então copiarmos o documento oficialmeta-lançamentoarquivos a serem servidos pelo nosso Aptly, ainda não funcionará porque se refere a vários URLs externos, instaladores, documentações, etc. diferentes e mesmo se alterássemos os URLs para apontar para o nosso Aptly, todos esses arquivos não estariam lá . Portanto, precisaríamos copiá-los e servi-los também.

Solução?

Precisamos analisar ometa-lançamentoarquivos, baixar todos os instaladores, etc. servi-los e gerar nossos própriosmeta-lançamentoarquivos disso? Deve haver uma maneira mais simples de fazer isso! Temos que construir isso do zero ou existem ferramentas disponíveis?

https://www.aptly.info/

PS. Estamos pensando em mudar para o Pulp 3, já que o Aptly parece estar parcialmente abandonado, não que saibamos se isso ajudaria com o problema de atualização de lançamento.

Responder1

O que fizemos foi sincronizar nosso espelho local, baixando ometa-lançamento&meta-release-ltsarquivos, bem como o atualizador necessário, incluindo informações de assinatura e lançamento (biônico.tar.gz biônico.tar.gz.gpg etc.) dos repositórios padrão do Ubuntu.

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

Em seguida, disponibilizamos isso em nosso espelho e modificamos o conteúdo dos arquivos de meta-lançamento que correspondem ao nosso URL de espelho.

[trecho de meta-lançamento]

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

[trecho de 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

Nós costumavamos "apt dist-upgrade -dy"para baixar/buscar todos os pacotes para o PACKAGECACHE local primeiro. Você pode substituir o PACKAGECACHE e os arquivos source.list personalizados usando sinalizadores apt/dpkg, isso pode ser ignorado se a atualização offline completa não for necessária.

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

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

Com esta configuração você pode atualizar completamente usando apenas pacotes/configurações locais e evitar a comunicação com repositórios ubuntu.com durante a atualização.

Uma ressalva foi usar servidores proxy http em todo o sistema em /etc/environment - apenas substitua isso chamando o atualizador com ambiente personalizado:

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

O atualizador não lê /etc/apt/apt.conf.d/10proxy porque é apenas para transporte.

Sem essas etapas, o atualizador ainda tenta acessar archive.ubuntu.com usando seu proxy configurado, o que resulta em falha na atualização.

E, finalmente, chamando-o usando um subshell para capturar toda a saída de log além de informações em /var/log/dist-upgrade/main.log

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

Espero que isso ajude (nós construímos do zero)

informação relacionada