J'ai un problème ici où j'essaie d'automatiser une configuration avec Ansible.
Certaines étapes nécessitent une interaction avec apt, mais parfois, une erreur se produit car la mise à niveau sans surveillance a démarré et verrouillé apt. Cela fera arrêter le livre de jeu.
J'ai essayé de nombreuses manières de contourner ce problème, le plus réussi étant la répétition d'une commande apt en échec.
Mais cela n’a pas d’échelle, n’est pas fiable à 100% et est désagréable.
J'ai choisi d'émettre un apt -y purge unattended-upgradesdroit au début du livre de jeu. J'ai aussi essayé apt -y remove unattended-upgrades, mais celui-ci semble revenir tant qu'il est encore au travail. La purge semble arrêter les mises à niveau sans surveillance, comme avant sa fermeture, ce que je veux.
Mais il s'avère que même cet appel à apt -y purge unattended-upgradespeut échouer à cause du verrouillage. Donc je l'ai changé en while [[ $(dpkg -l | grep -P "unattended-upgrades" | wc -c) -ne 0 ]]; do apt -y purge unattended-upgrades; done, mais cela échoue aussi occasionnellement (je ne comprends pas pourquoi)
J'ai besoin d'une commande qui, une fois exécutée, terminera et enterrera les mises à niveau sans surveillance immédiatement, qu'elle soit en cours d'exécution ou non, et garantira qu'elle ne démarrera plus dès que cette commande sera retournée, jusqu'à ce que je l'exécute apt installà nouveau explicitement . Ce n'est pas grave si cette commande prend une minute pour terminer son travail.
En outre, Python n’est pas installé sur le système. Ansible n’émet que des rawcommandes, jusqu’à ce que j’installe Python, ce qui devrait se faire après un appel réussi àapt -y update
Je suis dans un état où je peux facilement déclencher des mises à niveau sans surveillance, car il s'agit d'une machine virtuelle, et dès que je date -slance une commande pour corriger la date obsolète, la mise à niveau sans surveillance démarre. Après le démarrage de la machine virtuelle, j'ai quelques minutes jusqu’à ce que se datecorrige automatiquement, ce qui lance alors les mises à niveau sans assistance.
C'est ce que je fais maintenant:
- 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
Terminer dpkg est ce qui me fait peur. Tout ce qui est exécuté sur une nouvelle installation d'Ubuntu Server 18.04.1
Voici la solution créée en utilisant la réponse acceptée:
dpkg --purge unattended-upgradesau lieu de apt -y purge unattended-upgrades(ce que je fais maintenant)?
apt-getdans les scripts, de sorte que le aptprogramme interactif ait toute liberté pour changer de comportement afin de le rendre plus convivial.
python, ubuntu1804 seulement python3. linuxconfig.org/… / docs.ansible.com/ansible/latest/installation_guide/…