Estou tendo um problema aqui em que tento automatizar uma configuração com o Ansible.
Algumas das etapas exigem interação com apt
, mas ocasionalmente recebo um erro porque a atualização autônoma foi iniciada e bloqueada no apt. Isso fará com que o manual pare.
Eu tentei muitas maneiras de contornar isso, a mais bem sucedida foi a repetição de um comando apt com falha.
Mas isso não escala, também não é 100% confiável e parece ruim.
Eu optei por emitir um apt -y purge unattended-upgrades
logo no início do playbook. Eu também tentei apt -y remove unattended-upgrades
, mas esse parece retornar enquanto ainda está no trabalho. A limpeza parece desligar as atualizações automáticas como antes de sair, que é o que eu quero.
Mas acontece que mesmo essa chamada para apt -y purge unattended-upgrades
pode falhar devido ao bloqueio. Então eu mudei para while [[ $(dpkg -l | grep -P "unattended-upgrades" | wc -c) -ne 0 ]]; do apt -y purge unattended-upgrades; done
, mas também que falha ocasionalmente (não consigo descobrir por que)
Eu preciso de um comando que, quando executado, encerre e enterre atualizações autônomas imediatamente, independentemente de estar ou não em execução, e garanta que ele não será iniciado assim que o comando retornar, até que eu explique explicitamente apt install
novamente. Está tudo bem se esse comando demorar um minuto para terminar seu trabalho.
Além disso, o sistema não tem o Python instalado, então o Ansible está emitindo apenas comandos raw
, até que eu consiga instalar o Python, que deve ser depois de uma chamada bem-sucedida para apt -y update
Estou em um estado em que posso acionar atualizações autônomas facilmente, já que isso é uma VM, e assim que eu emito um comando date -s
para corrigir a data obsoleta, a atualização automática entra em ação. Depois de iniciar a VM, Eu tenho alguns minutos até que o date
se corrija automaticamente, o que inicia atualizações autônomas.
Isso é o que estou fazendo agora:
- name: Disable autoupdate (part 1 of 2)
raw: sed -i /Update/s/"1"/"0"/ /etc/apt/apt.conf.d/10periodic && sync
- name: Disable autoupdate (part 2 of 2)
raw: echo 'APT::Periodic::Unattended-Upgrade "0";' >> /etc/apt/apt.conf.d/10periodic && sync
- name: Terminate any active autoupdate
raw: ps -A | grep unattended-upgrades | awk '{print $1}' | xargs -r kill -15 $1
- name: Terminate any active dpkg
raw: ps -A | grep dpkg | awk '{print $1}' | xargs -r kill -15 $1
- name: Allow dpkg to recover
raw: dpkg --configure -a
- name: Purge autoupdate
raw: apt -y purge unattended-upgrades
- name: Update apt cache
raw: apt -y update
- name: If needed, install Python
raw: test -e /usr/bin/python || apt -y install python
Terminar o dpkg é o que me assusta. Tudo o que é executado em uma nova instalação do Ubuntu Server 18.04.1
Aqui está a solução criada usando a resposta link