Das VM-Image des Ubuntu 16.04-Servers startet anscheinend alle 12 Stunden den "apt-daily.service". Dieser Dienst führt verschiedene APT-bezogene Aufgaben aus, z. B. das Aktualisieren der Liste der verfügbaren Pakete, das Ausführen unbeaufsichtigter Upgrades bei Bedarf usw.
Beim Starten von einem VM "Snapshot" wird der Dienst sofort ausgelöst , da (nehme ich an) systemd schnell erkennt, dass der Timer längst abgelaufen sein sollte.
Ein laufender APT verhindert jedoch, dass andere apt
Prozesse ausgeführt werden, da er gesperrt ist /var/lib/dpkg
. Die Fehlermeldung, die dies anzeigt, sieht folgendermaßen aus:
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Ich muss diese automatisierte APT-Aufgabe deaktivieren, bis Ansible die Einrichtung des Computers abgeschlossen hat (was normalerweise die Installation von Paketen umfasst). Weitere Informationen und den Kontext finden Sie unter https://github.com/gc3-uzh-ch/elasticluster/issues/304 .
Ich habe verschiedene Optionen ausprobiert, um die Funktion "Unbeaufsichtigte Upgrades" über ein Skript für "Benutzerdaten" zu deaktivieren cloud-init
, aber alle sind bisher fehlgeschlagen.
1. Deaktivieren Sie die Task systemd
systemd task apt-daily.service
wird ausgelöst durch apt-daily.timer
. Ich habe versucht, den einen oder den anderen oder beide mit verschiedenen Kombinationen der folgenden Befehle zu deaktivieren. apt-daily.service
Nach wie vor wird das gestartet, sobald die VM bereit ist, SSH-Verbindungen zu akzeptieren:
#!/bin/bash
systemctl stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl mask apt-daily.service
systemctl daemon-reload
2. Deaktivieren Sie die Konfigurationsoption APT::Periodic::Enable
Das Skript /usr/lib/apt/apt.systemd.daily
liest einige APT-Konfigurationsvariablen. Die Einstellung APT::Periodic::Enable
deaktiviert die Funktionalität vollständig (Zeilen 331 - 337). Ich habe versucht, es mit dem folgenden Skript zu deaktivieren:
#!/bin/bash
# cannot use /etc/apt/apt.conf.d/10periodic as suggested in
# /usr/lib/apt/apt.systemd.daily, as Ubuntu distributes the
# unattended upgrades stuff with priority 20 and 50 ...
# so override everything with a 99xxx file
cat > /etc/apt/apt.conf.d/99elasticluster <<__EOF
APT::Periodic::Enable "0";
// undo what's in 20auto-upgrade
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
__EOF
Obwohl das Programm über die Befehlszeile APT::Periodic::Enable
einen Wert hat 0
(siehe unten), unattended-upgrades
wird es dennoch ausgeführt ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. Entfernen Sie /usr/lib/apt/apt.systemd.daily
insgesamt
Das folgende cloud-init
Skript entfernt das Skript für unbeaufsichtigte Upgrades insgesamt:
#!/bin/bash
mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED
Trotzdem läuft die Aufgabe und ich kann sie in der Prozesstabelle sehen! Obwohl die Datei nicht existiert, wenn sie über die Befehlszeile abgefragt wird:
ubuntu@test:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory
Es sieht so aus, als ob das cloud-init
Skript (zusammen mit der SSH-Befehlszeile) und der Root-systemd-Prozess in separaten Dateisystemen und Prozessbereichen ausgeführt werden ...
Fragen
Gibt es etwas offensichtliches, was ich vermisse? Oder gibt es eine Namespace-Magie, von der ich nichts weiß?
Am wichtigsten: Wie kann ich das apt-daily.service
über ein
cloud-init
Skript deaktivieren ?
--now
Markierung im systemctl disable
Befehl übersehen, damit die Änderung sofort wirksam wird. Das war mein Problem.
disable --now
gleichbedeutend mit stop
gefolgt von disable
.