GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Ubuntu:¿cómo deshabilitar `apt-daily.service` en la imagen de Ubuntu Cloud Vm?

La imagen de la máquina virtual del servidor Ubuntu 16.04 aparentemente inicia el "apt-daily.service" cada
12 horas más o menos; este servicio realiza varias tareas relacionadas con APT como actualizar
la lista de paquetes disponibles, realizar actualizaciones desatendidas si es necesario, etc.

Cuando se inicia desde una "instantánea" de VM, el servicio se activa inmediatamente , como (supongo
) systemd se da cuenta rápidamente de que el temporizador debería haberse disparado hace mucho tiempo.

Sin embargo, un APT en ejecución impide que otros apt los procesos se ejecuten ya que tiene un bloqueo
en /var/lib/dpkg . El mensaje de error que indica esto se ve así:

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?

Necesito deshabilitar esta tarea APT automatizada hasta que Ansible
haya completado la configuración de la máquina (lo que generalmente implica la instalación de paquetes);
consulte https://github.com/gc3-uzh-ch/elasticluster/issues/ 304 para obtener más información y
contexto.

Probé varias opciones para deshabilitar la función de "actualizaciones desatendidas"
a través de un script de "datos de usuario" para cloud-init , pero todos han fallado hasta
hasta ahora.

1. Deshabilitar la tarea systemd

tarea systemd apt-daily.service es activado por apt-daily.timer . He intentado
deshabilitar uno u otro, o ambos, con varias combinaciones de los siguientes comandos
; aún así, el apt-daily.service se inicia momentos después de que la máquina virtual esté
lista para aceptar conexiones SSH::

    #!/bin/bash

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

2. Deshabilitar la opción de configuración APT::Periodic::Enable

Script /usr/lib/apt/apt.systemd.daily lee algunas variables de configuración de APT
; la configuración APT::Periodic::Enable desactiva la funcionalidad
por completo (líneas 331–337). He intentado deshabilitarlo con el siguiente
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

Sin embargo, a pesar de APT::Periodic::Enable teniendo valor desde la línea de comando
(ver más abajo), las unattended-upgrades el programa aún se está ejecutando...

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

3. Eliminar /usr/lib/apt/apt.systemd.daily en total

El siguiente cloud-init el script elimina el script de actualizaciones desatendidas
por completo::

    #!/bin/bash

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

Aún así, la tarea se ejecuta y puedo verla en la tabla de procesos. aunque el archivo
no existe si se prueba desde la línea de comando::

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

Parece que cloud-init script (junto con la línea de comandos SSH)
y el proceso systemd raíz se ejecutan en sistemas de archivos y espacios de proceso
separados...

Preguntas

¿Hay algo obvio que me estoy perdiendo? ¿O hay algo mágico en el espacio de nombres
del que no estoy al tanto?

Relacionado:¿Diferencia entre [] y () en expresión regular básica?

Lo más importante:¿cómo puedo desactivar el apt-daily.service? a través de un
cloud-init guión?

Respuesta aceptada:

Sí, había algo obvio que me estaba perdiendo.

Systemd tiene que ver con el inicio simultáneo de servicios, por lo que cloud-init el script
se ejecuta al mismo tiempo el apt-daily.service se desencadena. Para cuando cloud-init consigue ejecutar la carga útil especificada por el usuario, apt-get update ya está
ejecutándose. Así que los intentos 2. y 3. fallaron no debido a algún espacio de nombres
magia, sino porque alteraron el sistema demasiado tarde para apt.systemd.daily para
recoger los cambios.

Esto también significa que básicamente no hay forma de prevenir apt.systemd.daily de correr:uno solo puede matarlo después de que haya comenzado.

Este script de "datos de usuario" toma esta ruta::

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

Todavía hay una ventana de tiempo durante la cual los inicios de sesión SSH son posibles aún apt-get no se ejecutará, pero no puedo imaginar otra solución que pueda funcionar en la imagen de nube stock
Ubuntu 16.04.


Ubuntu
  1. Cómo arreglar paquetes rotos en Ubuntu

  2. Cómo habilitar/deshabilitar el cortafuegos UFW en Ubuntu 18.04

  3. Cómo deshabilitar un servicio en Ubuntu

  4. Cómo eliminar o deshabilitar Ubuntu Dock

  5. ¿Cómo configuro una contraseña en una imagen de nube de Ubuntu?

Cómo deshabilitar un PPA particular en Ubuntu

Cómo deshabilitar la cuenta de invitado en Ubuntu

Cómo deshabilitar IPv6 en Ubuntu Linux

Cómo instalar Ulauncher en Ubuntu 20.04

Cómo deshabilitar IPv6 en Ubuntu 18.04 LTS

Cómo deshabilitar IPv6 en Ubuntu 20.04 LTS