GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Ubuntu:come disabilitare `apt-daily.service` su Ubuntu Cloud Vm Image?

L'immagine della VM del server Ubuntu 16.04 apparentemente avvia "apt-daily.service" ogni
12 ore circa; questo servizio esegue varie attività relative ad APT come l'aggiornamento
dell'elenco dei pacchetti disponibili, l'esecuzione di aggiornamenti automatici se necessario, ecc.

Quando si avvia da uno "snapshot" della VM, il servizio viene attivato immediatamente , poiché (
suppongo) systemd si rende presto conto che il timer sarebbe dovuto scattare molto tempo fa.

Tuttavia, un APT in esecuzione impedisce altri apt processi dall'esecuzione poiché mantiene un blocco
su /var/lib/dpkg . Il messaggio di errore che indica questo è simile al seguente:

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?

Devo disabilitare questa attività APT automatizzata finché Ansible
non ha completato la configurazione della macchina (che in genere prevede l'installazione di pacchetti);
vedere https://github.com/gc3-uzh-ch/elasticluster/issues/ 304 per maggiori info e
contesto.

Ho provato varie opzioni per disabilitare la funzione "aggiornamenti non presidiati"
tramite uno script "dati utente" per cloud-init , ma finora hanno fallito tutti
.

1. Disattiva l'attività di sistema

attività di sistema apt-daily.service viene attivato da apt-daily.timer . Ho provato
a disabilitare l'uno o l'altro, o entrambi, con varie combinazioni dei seguenti
comandi; ancora, il apt-daily.service viene avviato pochi istanti dopo che la macchina virtuale diventa
pronta per accettare connessioni SSH::

    #!/bin/bash

    systemctl stop apt-daily.timer
    systemctl disable apt-daily.timer
    systemctl mask apt-daily.service
    systemctl daemon-reload

2. Disabilita l'opzione di configurazione APT::Periodic::Enable

Script /usr/lib/apt/apt.systemd.daily legge alcune variabili di configurazione APT
; l'impostazione APT::Periodic::Enable disabilita completamente la funzionalità
(linee 331–337). Ho provato a disabilitarlo con il seguente
script::

    #!/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

Tuttavia, nonostante APT::Periodic::Enable avente valore dalla riga di comando
(vedi sotto), gli unattended-upgrades il programma è ancora in esecuzione...

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

3. Rimuovi /usr/lib/apt/apt.systemd.daily del tutto

Il seguente cloud-init lo script rimuove del tutto lo script degli aggiornamenti automatici
::

    #!/bin/bash

    mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED

Tuttavia, l'attività viene eseguita e posso vederlo nella tabella dei processi! sebbene il file
non esista se rilevato dalla riga di comando::

[email protected]:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory

Sembra che il cloud-init script (insieme alla riga di comando SSH)
e il processo di root systemd vengono eseguiti in filesystem e processi separati
spazi…

Domande

C'è qualcosa di ovvio che mi sfugge? O c'è qualche magia nello spazio dei nomi in corso
di cui non sono a conoscenza?

Correlati:differenza tra [] e () nell'espressione regolare di base?

Soprattutto:come posso disabilitare apt-daily.service tramite un
cloud-init copione?

Risposta accettata:

Sì, c'era qualcosa di ovvio che mi mancava.

Systemd riguarda l'avvio simultaneo dei servizi, quindi cloud-init lo script viene
eseguito contemporaneamente il apt-daily.service è scatenato. Entro il tempo cloud-init esegue il payload specificato dall'utente, apt-get update è
già in esecuzione. Quindi i tentativi 2. e 3. sono falliti non a causa di qualche magia dello spazio dei nomi
, ma perché hanno alterato il sistema troppo tardi per apt.systemd.daily per
raccogliere le modifiche.

Questo significa anche che praticamente non c'è modo di prevenire apt.systemd.daily dall'esecuzione:uno può ucciderlo solo dopo che è stato avviato.

Questo script "dati utente" segue questa strada::

#!/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

C'è ancora una finestra di tempo durante la quale gli accessi SSH sono ancora possibili apt-get non funzionerà, ma non riesco a immaginare un'altra soluzione che possa funzionare sull'immagine cloud stock
Ubuntu 16.04.


Ubuntu
  1. Come risolvere i pacchetti rotti in Ubuntu

  2. Come abilitare/disabilitare UFW Firewall su Ubuntu 18.04

  3. Come disabilitare un servizio in Ubuntu

  4. Come rimuovere o disabilitare Ubuntu Dock

  5. Come imposto una password su un'immagine cloud di Ubuntu?

Come disabilitare un particolare PPA in Ubuntu

Come disabilitare l'account ospite in Ubuntu

Come disabilitare IPv6 su Ubuntu Linux

Come installare Ulauncher in Ubuntu 20.04

Come disabilitare IPv6 su Ubuntu 18.04 LTS

Come disabilitare IPv6 su Ubuntu 20.04 LTS