GNU/Linux >> Znalost Linux >  >> Ubuntu

Ubuntu – Jak zakázat `apt-daily.service` na Ubuntu Cloud Vm Image?

Obraz virtuálního počítače serveru Ubuntu 16.04 zjevně spouští „apt-daily.service“ každých
přibližně 12 hodin; tato služba provádí různé úkoly související s APT, jako je obnovování
seznamu dostupných balíčků, provádění bezobslužných aktualizací v případě potřeby atd.

Při spuštění ze „snímku“ virtuálního počítače se služba spustí okamžitě , jak (
předpokládám) systemd rychle uvědomí, že časovač měl už dávno zhasnout.

Spuštěný APT však brání ostatním apt procesy se nespouštějí, protože má
zámek na /var/lib/dpkg . Tato chybová zpráva vypadá takto:

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?

Potřebuji zakázat tuto automatizovanou úlohu APT, dokud Ansible
nedokončí nastavení stroje (které obvykle zahrnuje instalaci balíčků);
viz https://github.com/gc3-uzh-ch/elasticluster/issues/ 304 pro další informace a
kontext.

Vyzkoušel jsem různé možnosti, jak zakázat funkci „bezobslužných upgradů“
prostřednictvím skriptu „uživatelská data“ pro cloud-init , ale všechny zatím
selhaly.

1. Zakázat úlohu systemd

systemd task apt-daily.service se spouští pomocí apt-daily.timer . Zkoušel jsem
zakázat jeden nebo druhý nebo oba pomocí různých kombinací následujících
příkazů; stále je to apt-daily.service je spuštěno chvíli poté, co se virtuální počítač stane
připraveným přijímat připojení SSH::

    #!/bin/bash

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

2. Zakázat možnost konfigurace APT::Periodic::Enable

Skript /usr/lib/apt/apt.systemd.daily přečte několik konfiguračních
proměnných APT; nastavení APT::Periodic::Enable zcela zakáže funkci
(řádky 331–337). Zkusil jsem to zakázat pomocí následujícího skriptu
::

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

Nicméně i přes APT::Periodic::Enable s hodnotou z příkazového řádku
(viz níže), unattended-upgrades program stále běží…

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

3. Odeberte /usr/lib/apt/apt.systemd.daily celkem

Následující cloud-init skript zcela odstraní skript bezobslužných aktualizací
::

    #!/bin/bash

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

Přesto úloha běží a vidím ji v tabulce procesů! ačkoli soubor
neexistuje, pokud je testován z příkazového řádku::

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

Vypadá to jako cloud-init skript (spolu s příkazovým řádkem SSH)
a proces root systemd se spouštějí v samostatných souborových systémech a procesních
prostorech…

Otázky

Je něco zjevného, ​​co mi chybí? Nebo se děje nějaká magie jmenného prostoru
, o které nevím?

Související:Rozdíl mezi [] a () v základním regulárním výrazu?

A co je nejdůležitější:jak mohu zakázat apt-daily.service prostřednictvím
cloud-init skript?

Přijatá odpověď:

Ano, bylo něco zjevného, ​​co mi chybělo.

Systemd je o souběžném spouštění služeb, takže cloud-init skript je
spuštěn ve stejnou dobu apt-daily.service je spuštěna. Do doby cloud-init dostane ke spuštění uživatelem specifikovaného užitečného zatížení, apt-get update již
běží. Takže pokusy 2. a 3. selhaly ne kvůli nějaké magii jmenného prostoru
, ale protože změnily systém příliš pozdě na apt.systemd.daily k
vyzvednutí změn.

To také znamená, že v podstatě neexistuje žádný způsob, jak zabránit apt.systemd.daily od běhu – člověk ho může zabít až poté, co začal.

Tento skript „uživatelských dat“ jde touto cestou::

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

Stále existuje časové okno, během kterého je možné přihlášení SSH, ale apt-get nepoběží, ale neumím si představit jiné řešení, které by fungovalo na cloudovém obrazu
Ubuntu 16.04.


Ubuntu
  1. Jak deaktivovat službu v Ubuntu

  2. Jak odebrat nebo zakázat Ubuntu Dock

  3. Jak nastavím heslo na cloudovém obrázku Ubuntu?

  1. Jak opravit poškozené balíčky v Ubuntu

  2. Jak povolit/zakázat UFW Firewall na Ubuntu 18.04

  3. Jak zakázat bránu firewall na Ubuntu 18.04

  1. Jak nainstalovat Spotify na Ubuntu 20.04

  2. Jak povolit/zakázat bezobslužné upgrady v Ubuntu 16.04

  3. Jak povolit nebo zakázat služby v Ubuntu Systemd/Upstart