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-upgrades
droit 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-upgrades
peut é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 raw
commandes, 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 -s
lance 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 date
corrige 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-upgrades
au lieu de apt -y purge unattended-upgrades
(ce que je fais maintenant)?
apt-get
dans les scripts, de sorte que le apt
programme 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/…