comportamento inconsistente do `apt-get update` no Ubuntu AWS AMI oficial

comportamento inconsistente do `apt-get update` no Ubuntu AWS AMI oficial

Recebo vários erros inconsistentes nas aptimagens oficiais do Ubuntu ( ami-83e769fb). Estou usando o Packer para construir minha AMI e ele falha cerca de 40% das vezes. A reexecução do script foi bem-sucedida.

Meu script é executado:

sudo apt-get clean all
sudo apt-get update

antes de instalar qualquer pacote.

Algumas vezes recebo este erro:

amazon-ebs: W: GPG error: http://archive.ubuntu.com/ubuntu artful InRelease: Splitting up /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_artful_InRelease into data and signature failed
amazon-ebs: E: The repository 'http://archive.ubuntu.com/ubuntu artful InRelease' is not signed.

Algumas vezes apt-get updateacerta http://us-west-2.ec2.archive.ubuntu.com/ubuntu... outras vezes não.

Outras vezes, faltam pacotes (como apache2ou python3).

Não entendo por que esse comportamento é inconsistente.

Como posso fazer com que apt-get updateo Ubuntu AMI oficial funcione de forma consistente?

Responder1

Se você estiver usando, cloud-initpode esperar que ele seja concluído.

while [ ! -f /var/lib/cloud/instance/boot-finished ]; do
   echo 'Waiting for cloud-init...'
   sleep 1
done

por exemplo, empacotador json:

{
  "type": "shell",
  "inline": [
    "while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo 'Waiting for cloud-init...'; sleep 1; done"
  ]
}

Referência:

Responder2

packer.json antes do provisionamento:

"provisioners": [
    {
       "type": "shell",
       "inline": ["/usr/bin/cloud-init status --wait"]
},

Responder3

Acabei de me deparar com esse problema e acredito que isso aconteça porque o cloud-init ainda está no processo de configuração da instância do EC2 quando apt-geté executado. Resolvi isso inserindo um atraso de 30 segundos em meu script que é executado imediatamente após a inicialização da instância. Acho que a melhor maneira seria pedir ao cloud-init para executar qualquer script User Dataou até mesmo deixá-lo cuidar da instalação e atualizações de pacotes para você [1]. Para meu caso de uso, onde não quero reconhecer o cloud-init, adicionar o atraso foi uma solução aceitável.

  1. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

informação relacionada