Atualizando um servidor ubuntu offline

1

Desenvolvemos um appliance no trabalho que é entregue em locais de baixa a inexistentes na Internet. Ao atualizar nosso software, temos a pilha completa de tecnologias para garantir que o servidor esteja atualizado, como o fantoche e até mesmo o apt-offline.

Nós não instalamos o apt-offline no começo e descobrimos mais tarde, felizmente, foi um pequeno download para instalá-lo que foi aprovado para a maioria dos nossos appliances. Todos eles até agora têm internet baixa (56k a 256k internet), então o download de 1.8mb levou algum tempo, mas conseguimos que funcionasse.

Agora que temos a assinatura original da máquina porque conseguimos gerar uma à distância ou usando uma assinatura padrão criada a partir da mesma chave de instalação USB, podemos gerar um pacote de atualizações para essas pessoas. máquinas e enviá-lo com o disco de atualização USB para o nosso aparelho.

O problema que tenho é que o Puppet também tem pacotes para instalar. Fizemos uma lista de pacotes que precisa ser instalada, mas percebemos tarde demais que o apt-offline gera a assinatura na máquina off-line com essa lista usando --install-packages.

Nós tentamos

  • Usando uma imagem do docker do ubuntu: xenial, mas parece que essa imagem pode ter diferenças e não compactar tudo ...
  • Usando apt-offline + dselect e dpkg para definir a lista de pacotes a serem instalados

E não tivemos muita sorte ...

A única solução que resta, mas é muito irritante, é instalar uma pré-atualização do dispositivo básico. Instale o apt-offline e gere uma nova assinatura padrão que todos usarão com os --install-packages mas, novamente, o problema é quando eu instalo o apt-offline, eu recebo pacotes atualizados para o python, por exemplo. Esses pacotes não serão empacotados pelo apt-offline quando eu fizer um "apt-offline get" porque a assinatura indica que eles estão atualizados.

Então, estamos procurando:

  • Uma maneira de usar uma assinatura, padrão ou de um appliance real
  • Uma maneira de especificar mais pacotes para instalar, desde que não tenhamos acesso ao appliance
  • Uma maneira de empacotar todos os pacotes necessários, mesmo que estejam atualizados
  • Ou algo que se enquadre nessas linhas

Obrigado

    
por Mathieu Dumoulin 11.08.2017 / 14:21

1 resposta

0

Então tivemos que seguir um caminho completamente diferente e acabamos fazendo o seguinte:

Crie uma lista de versões de todos os pacotes instalados usando:

dpkg-query -W -f '${status} ${package} ${version}\n' | sed -n 's/^install ok installed //p' | sed 's/ /=/' | sort | tr -d ''

Obtenha as seleções usando:

debconf-get-selections | sed '/^#,*/d'

Faça o download de todos os debs usando:

cat "$package_list" | xargs apt-get download

Então, através do uso de:

dpkg-scanpackages

Conseguimos criar nosso próprio repositório local de pacotes, inserir esse repositório como o primeiro elemento na lista de fontes e apenas executar uma instalação apt com todas as versões corrigidas. Et Voila!

    
por 11.10.2017 / 14:45