La imagen VM 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.
Al comenzar desde una "instantánea" de VM, el servicio se activa de inmediato , ya que (supongo) systemd se da cuenta rápidamente de que el temporizador debería haberse apagado hace mucho tiempo.
Sin embargo, un APT en ejecución evita que otros aptprocesos se ejecuten ya que mantiene un bloqueo activado /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 (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.
He probado varias opciones para deshabilitar la función de "actualizaciones desatendidas" a través de un script de "datos de usuario" cloud-init, pero todas han fallado hasta ahora.
1. Deshabilitar la tarea systemd
La tarea systemd apt-daily.servicees activada por apt-daily.timer. He intentado deshabilitar uno u otro, o ambos, con varias combinaciones de los siguientes comandos; aún así, apt-daily.servicese inicia momentos después de que la VM 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
El script /usr/lib/apt/apt.systemd.dailylee algunas variables de configuración APT; la configuración APT::Periodic::Enabledeshabilita 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::Enabletener valor 0desde la línea de comandos (ver más abajo), el unattended-upgradesprograma aún se ejecuta ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. Eliminar por /usr/lib/apt/apt.systemd.dailycompleto
El siguiente cloud-initscript elimina por completo el script de actualizaciones desatendidas:
#!/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 ::
ubuntu@test:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory
Parece que el cloud-initscript (junto con la línea de comandos SSH) y el proceso raíz del sistema se ejecutan en sistemas de archivos y espacios de proceso separados ...
Preguntas
¿Hay algo obvio que me estoy perdiendo? ¿O hay alguna magia de espacio de nombres que no conozco?
Lo más importante es: ¿Cómo puedo desactivar el apt-daily.servicea través de un
cloud-initguión?
--nowbandera en el systemctl disablecomando para que el cambio sea efectivo de inmediato. Ese fue mi problema.
disable --nowes equivalente a stopseguido por disable.