Cómo deshabilitar las actualizaciones automáticas en Debian Stretch

por | noviembre 4, 2018

El paso de Debian Jessie a Stretch nos trajo systemd y de la mano actualizaciones automáticas en nuestro sistema.

Estas actualizaciones están configuradas con dos unidades tipo timer que lanzan a su vez y debido momento dos unidades tipo service estáticas.

[root@jota-pc ~]# systemctl list-unit-files | grep apt
apt-daily-upgrade.service                       static   
apt-daily.service                               static   
apt-daily-upgrade.timer                         enabled  
apt-daily.timer                                 enabled  

Los timers son unidades que actúan como crontabs en sí, especificando cuándo lanzan ciertas tareas. De hecho podemos ver estas dos en /lib/systemd/system, por ejemplo apt-daily.timer:

[root@jota-pc system]# cat apt-daily.timer 
[Unit]
Description=Daily apt download activities

[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

Y apt-daily-upgrade.timer:

[root@jota-pc system]# cat apt-daily-upgrade.timer 
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target

Los servicios en estado estático se arrancan si otra unidad de systemd los invoca. Las unidades .timer se encargan de lanzar las unidades homólogas .service que tienen el mismo nombre. De esta manera la unidad tipo timer llamada apt-daily.timer se encargará de lanzar la unidad tipo service apt-daily.service

También podemos echar un vistazo a los servicios de apt que se lanzan en /lib/systemd/system, por ejemplo apt-daily.service:

[Unit]                                                                                                                                                                                                             
Description=Daily apt download activities
Documentation=man:apt(8)
ConditionACPower=true
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/lib/apt/apt.systemd.daily update

Y apt-daily-upgrade.service:

[Unit]
Description=Daily apt upgrade and clean activities
Documentation=man:apt(8)
ConditionACPower=true
After=apt-daily.service

[Service]
Type=oneshot
ExecStart=/usr/lib/apt/apt.systemd.daily install
KillMode=process
TimeoutStopSec=900

Si queremos mirar un poco más veremos que /usr/lib/apt/apt.systemd.daily es simplemente un script en bash al que le pasamos un argumento para que realice ciertas tareas. El equivalente de todo esto que tiene montado systemd es hacer un apt update && apt upgrade.

Pues bien, si queremos deshabilitar estas actualizaciones automáticas:

# apt-daily
systemctl stop apt-daily.timer
systemctl disable apt-daily.timer

# apt-daily-upgrade
systemctl stop apt-daily-upgrade.timer
systemctl disable apt-daily-upgrade.timer

Con deshabilitar los timers basta ya que dejarán de invocarse los service, pero si queremos asegurarnos de que nada ni nadie lanza las unidades service podemos hacerles un mask:

systemctl mask apt-daily.service
systemctl mask apt-daily-upgrade.service

Y ahora si comprobamos:

[root@jota-pc system]# systemctl list-unit-files |grep apt
apt-daily-upgrade.service                       masked   
apt-daily.service                               masked   
apt-daily-upgrade.timer                         disabled 
apt-daily.timer                                 disabled