GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ubuntu – Wie deaktiviere ich „apt-daily.service“ auf dem Ubuntu Cloud Vm Image?

Das Server-VM-Image von Ubuntu 16.04 startet den „apt-daily.service“ anscheinend alle
12 Stunden oder so; Dieser Dienst führt verschiedene APT-bezogene Aufgaben aus, wie z. B. das Aktualisieren
der Liste der verfügbaren Pakete, das Durchführen unbeaufsichtigter Upgrades, falls erforderlich, usw.

Beim Start von einem VM „Snapshot“ wird der Dienst sofort ausgelöst , da (ich
vermute) systemd schnell erkennt, dass der Timer schon längst hätte laufen sollen.

Ein laufendes APT verhindert jedoch andere apt Prozesse daran gehindert zu laufen, da es eine
Sperre auf /var/lib/dpkg hält . Die darauf hinweisende Fehlermeldung 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 Maschineneinrichtung abgeschlossen hat (was normalerweise die Installation von Paketen beinhaltet);
siehe https://github.com/gc3-uzh-ch/elasticluster/issues/ 304 für weitere Informationen und
Kontext.

Ich habe verschiedene Optionen ausprobiert, um die Funktion „unbeaufsichtigte Upgrades“
über ein „Benutzerdaten“-Skript für cloud-init zu deaktivieren , aber alle sind bisher
gescheitert.

1. Deaktivieren Sie die systemd-Aufgabe

Systemaufgabe apt-daily.service wird durch apt-daily.timer ausgelöst . Ich habe versucht
das eine oder das andere, oder beides, mit verschiedenen Kombinationen der folgenden
Befehle zu deaktivieren; immer noch der apt-daily.service wird 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

Skript /usr/lib/apt/apt.systemd.daily liest ein paar APT-Konfigurationsvariablen
; die Einstellung APT::Periodic::Enable deaktiviert die Funktionalität
insgesamt (Zeile 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

Allerdings trotz APT::Periodic::Enable mit dem Wert von der Kommandozeile
(siehe unten), die unattended-upgrades Programm läuft noch…

    [email protected]:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
    AutoAptEnable='0'

3. Entfernen Sie /usr/lib/apt/apt.systemd.daily insgesamt

Die folgende cloud-init Skript entfernt das Skript für unbeaufsichtigte Upgrades
vollständig::

    #!/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 von der Befehlszeile aus geprüft wird::

[email protected]:~$ 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 die cloud-init -Skript (zusammen mit der SSH-Befehlszeile)
und der Root-Systemd-Prozess werden in separaten Dateisystemen und
Prozessbereichen…

ausgeführt

Fragen

Gibt es etwas offensichtliches, das ich vermisse? Oder gibt es irgendeine Namespace-Magie
von der ich nichts weiß?

Verwandte:Unterschied zwischen [] und () im einfachen regulären Ausdruck?

Am wichtigsten:Wie kann ich den apt-daily.service deaktivieren durch eine
cloud-init Skript?

Akzeptierte Antwort:

Ja, da war etwas Offensichtliches, das mir gefehlt hat.

Bei Systemd dreht sich alles um den gleichzeitigen Start von Diensten, also cloud-init Skript wird
gleichzeitig ausgeführt der apt-daily.service ausgelöst wird. Zum Zeitpunkt cloud-init erhält, um die vom Benutzer angegebene Payload auszuführen, apt-get update läuft
bereits. Die Versuche 2. und 3. scheiterten also nicht an irgendeiner Namespace-Magie, sondern weil sie das System zu spät für apt.systemd.daily geändert haben um
die Änderungen zu übernehmen.

Das bedeutet auch, dass es grundsätzlich keine Möglichkeit gibt, vorzubeugen apt.systemd.daily vom Laufen – man kann es nur töten, nachdem es gestartet wurde.

Dieses „Benutzerdaten“-Skript nimmt diesen Weg::

#!/bin/bash

systemctl stop apt-daily.service
systemctl kill --kill-who=all apt-daily.service

# wait until `apt-get updated` has been killed
while ! (systemctl list-units --all apt-daily.service | egrep -q '(dead|failed)')
do
  sleep 1;
done

# now proceed with own APT tasks
apt install -y python

Es gibt noch ein Zeitfenster, in dem SSH-Logins möglich sind, apt-get wird nicht ausgeführt, aber ich kann mir keine andere Lösung vorstellen, die auf dem Stock
Ubuntu 16.04-Cloud-Image funktionieren kann.


Ubuntu
  1. So reparieren Sie beschädigte Pakete in Ubuntu

  2. So aktivieren / deaktivieren Sie die UFW-Firewall unter Ubuntu 18.04

  3. So deaktivieren Sie einen Dienst in Ubuntu

  4. So entfernen oder deaktivieren Sie Ubuntu Dock

  5. Wie lege ich ein Passwort für ein Ubuntu-Cloud-Image fest?

So deaktivieren Sie ein bestimmtes PPA in Ubuntu

So deaktivieren Sie das Gastkonto in Ubuntu

So deaktivieren Sie IPv6 unter Ubuntu Linux

So installieren Sie Ulauncher in Ubuntu 20.04

So deaktivieren Sie IPv6 unter Ubuntu 18.04 LTS

So deaktivieren Sie IPv6 unter Ubuntu 20.04 LTS