¿Cómo habilitar las actualizaciones automáticas silenciosas para cualquier repositorio?

44

Leí aquí cómo habilitar las actualizaciones automáticas silenciosas para Google Chrome. Sin embargo, tengo otros repositorios como Spotify, Docky y otros para los que me gustaría habilitar actualizaciones silenciosas.

Estoy tratando de hacer esto en mi sistema Ubuntu 10.04. Pero esta pregunta se aplica a todas las versiones de Ubuntu. Tengo instalado el paquete de actualizaciones desatendidas .

¿Cómo puedo hacer esto?

nik90
fuente
¿Quieres actualizaciones de seguridad silenciosas ? o TODAS las actualizaciones instaladas sin intervención? ¿Por qué?
david6
1
Casi todas las actualizaciones, incluidos los repositorios de usuarios también.
nik90

Respuestas:

66

Primero, instale gksu:

sudo apt-get install gksu

Lo más fácil de habilitar actualizaciones desatendidas para su sistema es editar el archivo 50unattended-upgradesdentro /etc/apt/apt.conf.d/con su editor de texto favorito, por ejemplo:

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades

En él, debe comentar las secciones comentadas del bloque Orígenes permitidos

Cambio

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
//      "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

a

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
        "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

Para el software que no está en los repositorios de Ubuntu que desea actualizar, debe agregar un origen y archivar el archivo. Para encontrar cuáles son sus PPA, abra la carpeta /var/lib/apt/lists/, que es el área de almacenamiento de información de estado para cada recurso de paquete. Lo que está buscando son los archivos que terminan con Release en el nombre.

Abra uno con su editor de texto, es decir, para Google Chrome:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release

Origin: Google, Inc.
Label: Google
Suite: stable
Codename: stable
Version: 1.0
Date: Thu, 17 Nov 2011 19:09:01 +0000
Architectures: i386 amd64
Components: main
Description: Google chrome-linux repository.

El origen es obvio ( Origin: Google, Inc.) y el archivo será lo que esté debajo de la línea Suite ( Suite: stable).

Si falta Origino Suitefalta, serán la cadena vacía. Pero tenga en cuenta que si faltan ambos , entonces probablemente no será posible usar esa fuente con actualizaciones desatendidas sin incluir otras fuentes con el mismo problema.

Después de anotar esas 2 líneas, debe editar el 50unattended-upgradesarchivo y agregar las líneas usando este formato "<origin>:<archive>";de por este ejemplo "Google\, Inc.:stable";.

El origen de Google Chrome es un poco complicado porque tiene un espacio, un punto final y una coma, pero la mayoría de los archivos Release serán fáciles de leer.

Como otro ejemplo, la fuente Node JS especifica un origen ( Node Source) pero no un archivo; para que pueda coincidir con "Node Source:";.

Allow Origins se combina con comodines de estilo shell (más específicamente, con Python fnmatch () ). Si eres lo suficientemente cuidadoso como para no incluir fuentes en conflicto, es posible escribir cosas como "Node *:*";.


No olvide hacer una copia de seguridad de su 50unattended-upgradesarchivo antes de editarlo, hágalo con sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak.

Para probar los cambios realizados en el archivo, puede usarlos sudo unattended-upgradescon los parámetros --dry-runy --debug.

--dry-run ejecutará un ciclo de actualizaciones desatendido, excepto que realmente no instalará las actualizaciones, solo verificará y verificará que todo esté bien.

--debug habilitará el modo detallado.

Siempre puede verificar los registros unattended-upgradesen /var/log/unattended-upgrades/unattended-upgrades.log.


Puede cambiar la configuración de las actualizaciones desatendidas editando el archivo /etc/apt/apt.conf.d/10periodic, las opciones para la configuración están en el /etc/cron.daily/aptencabezado del script. Léalos para configurar la frecuencia de las actualizaciones desatendidas.

Bruno Pereira
fuente
2
Gracias ... muy detallado! ¿Puedo preguntar por qué pones un \ después de Google?
nik90
Debido a los caracteres especiales en el origen, es un carácter de escape para la coma. La mayoría de los orígenes que encuentres no tendrán eso.
Bruno Pereira
1
@jos No, esa es la forma en que funciona, --dry-runverificará si en las listas actualizadas hay actualizaciones disponibles y las enviará a usted, las actualizaciones de listas a través de la configuración que tenga /etc/cron.daily/apt, ejecutarlo manualmente no actualiza las listas, creo.
Bruno Pereira
1
¿Qué debo poner como nombre de archivo cuando el archivo Release correspondiente no incluye una Suite?
hsivonen
2
Consulte también el enfoque automatizado aquí: askubuntu.com/a/792621/417607
Abhishek Bhatia
14

Enfoque automatizado para la respuesta de @Bruno Pereira: (Considere destacar el repositorio de github si encuentra útil la respuesta).

Enlace de código: https://github.com/abhigenie92/unattended_upgrades_repos

  • Verifique los repositorios para agregar:

    $ python automatic_upgrade.py 
    Add repos:
    "Ubuntu:xenial";
    "LP-PPA-kubuntu-ppa-backports:xenial";
    "LP-PPA-tuxonice:xenial";
    "LP-PPA-webupd8team-sublime-text-3:xenial";
    
    Skipping files due to not present origin or suite. Or origin being a url.:
    packagecloud.io_slacktechnologies_slack_debian_dists_jessie_InRelease
    tiliado.eu_nuvolaplayer_repository_deb_dists_xenial_InRelease
    
  • Ahora edite /etc/apt/apt.conf.d/50unattended-upgradespara incluirlos:

    // Automatically upgrade packages from these (origin:archive) pairs
    Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "${distro_id}:${distro_codename}-updates";
        "${distro_id}:${distro_codename}-proposed";
        "${distro_id}:${distro_codename}-backports";
      "Ubuntu:xenial";
      "LP-PPA-kubuntu-ppa-backports:xenial";
      "LP-PPA-tuxonice:xenial";
      "LP-PPA-webupd8team-sublime-text-3:xenial";
    };
    ....
    ....
    
  • Verifique si están incluidos:

    $ sudo unattended-upgrade --dry-run --debug
    Initial blacklisted packages: 
    Initial whitelisted packages: 
    Starting unattended upgrades script
    Allowed origins are: ['o=Ubuntu,a=xenial-security', 'o=Ubuntu,a=xenial-updates', 'o=Ubuntu,a=xenial-proposed', 'o=Ubuntu,a=xenial-backports', 'o=Ubuntu,a=xenial', 'o=LP-PPA-kubuntu-ppa-backports,a=xenial', 'o=LP-PPA-tuxonice,a=xenial', 'o=LP-PPA-webupd8team-sublime-text-3,a=xenial']
    pkgs that look like they should be upgraded: 
    Fetched 0 B in 0s (0 B/s)                                                                                  
    fetch.run() result: 0
    blacklist: []
    whitelist: []
    No packages found that can be upgraded unattended and no pending auto-removals
    
Abhishek Bhatia
fuente
@ andy.holmes bienvenido, por favor considere protagonizar el repositorio github si es posible. Link- github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia
También es posible que desee modificar la forma en que dpkg trata los paquetes que intentan modificar los archivos de configuración: unix.stackexchange.com/questions/138751/…
deoren
Este script de Python es excelente, sin embargo, tuve que modificar lo que README.md sugirió para 50 actualizaciones desatendidas para mi tramo de ejecución Raspberry Pi. Especificar el origen permitido como, por ejemplo, "Raspberry:stable";no funcionó. En cambio, usé, por ejemplo,"o=Raspberry, a=stable";
cfogelberg
5

Edición /etc/apt/apt.conf.d/50unattended-upgrades, agregue lo siguiente:

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};

Esto permitirá actualizaciones desatendidas para todos los paquetes.

Zachary West
fuente
Sí, gracias por la respuesta clara y concisa. Pero hay paquetes que tienen origin:'', por ejemplo, datadog-agent de site:'apt.datadoghq.com'. En ese caso, también sería necesario agregar "origin=";para no omitir paquetes con origen vacío. Pero entonces es mejor usarlo en "site=*";lugar de "origin=*";.
Paul Tobias
He agregado mi propio repositorio en un archivo /etc/apt/sources.list.d/my_repo.list, pero no actualiza el paquete. Manualmente funciona con sudo apt update. Alguna pista de cómo?
Sander
¿Utiliza esto las mismas fuentes que una actualización manual, es decir, ignora las fuentes deshabilitadas?
Silicomancer
3

Hay instrucciones para forzar una repetición para que cron inicie la actualización automática en el siguiente enlace . El procedimiento para detener cron es este

sudo service anacron stop
sudo service cron stop
sudo rm -rf /var/run/unattend* /var/run/cron* /var/run/anacron*
sudo rm -rf /var/lib/apt/periodic/*

y reiniciar cron para que la actualización automática ocurra ahora (o al menos en unos pocos minutos) es

sudo service cron start
sudo anacron -fn

Cómo funciona

Varias cosas harán que se ejecute.

  • Se dispara desde la ejecución de /etc/cron.dailycron, específicamente /etc/cron.daily/apt. Cron corre /etc/cron.dailya las 6.25 a.m. (ver /etc/crontab)

  • Anacron corre de advenedizo? y se disparará /etc/cron.dailydespués de 5 minutos de tiempo de actividad (ver /etc/anacrontab)

    La nota APT::Periodic::RandomSleepse puede configurar /etc/apt/apt.conf.d/10periodic, pero el valor predeterminado es 1800 (30 minutos), por lo que no se pueden realizar actualizaciones hasta 30 minutos después de las /etc/cron.daily/aptejecuciones.

Iniciar sesión

Si funciona cosas deben ser registrados en esta carpeta, /var/log/unattended-upgrades.

Eleanor Ellis
fuente
Esto fue especialmente útil para mí, ya que mi proveedor de alojamiento virtual pensó que sería una buena idea eliminar /etc/cron.daily/aptla instalación predeterminada de Ubuntu 12.04, por lo que no se estaban realizando actualizaciones automáticas de APT :-(. La respuesta de ServerFault serverfault.com/a/568329/ 95570 proporcionó detalles sobre cómo volver a crear ese archivo.
Alex Dupuy