Comment activer les mises à jour automatiques silencieuses pour tout référentiel?

44

J'ai lu ici comment activer les mises à jour automatiques silencieuses pour Google Chrome. Cependant, j'ai d'autres référentiels comme Spotify, Docky et d'autres pour lesquels je souhaite activer les mises à jour silencieuses.

J'essaie de faire cela dans mon système Ubuntu 10.04. Mais cette question s'applique à toutes les versions d'Ubuntu. Le paquet Unattended-upgrades est installé.

Comment puis-je faire ceci?

nik90
la source
Voulez-vous des mises à jour de sécurité silencieuses ? ou TOUTES les mises à jour installées sans intervention? Pourquoi?
David6
1
Pratiquement toutes les mises à jour, y compris les référentiels utilisateurs.
nik90

Réponses:

66

Tout d'abord, installez gksu:

sudo apt-get install gksu

Le plus simple pour activer les mises à jour sans surveillance pour votre système est d'éditer le fichier à l' 50unattended-upgradesintérieur /etc/apt/apt.conf.d/avec votre éditeur de texte préféré, par exemple:

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

Vous devez y commenter les sections commentées du bloc Allowed Origins.

Changement

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

à

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

Pour les logiciels qui ne figurent pas dans le dépôt Ubuntu que vous souhaitez mettre à jour, vous devez ajouter une origine et une archive au fichier. Pour trouver ce que sont vos PPA, ouvrez le dossier /var/lib/apt/lists/, c'est-à-dire la zone de stockage des informations d'état pour chaque ressource de package. Ce que vous recherchez, ce sont les fichiers qui se terminent par Release dans le nom.

Ouvrez-en un avec votre éditeur de texte, c'est-à-dire pour 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.

L'origine est évidente ( Origin: Google, Inc.) et l'archive sera celle qui se trouve sous la ligne Suite ( Suite: stable).

Si l'un Originou l' autre Suiteest manquant, il s'agira d'une chaîne vide. Notez cependant que si les deux sont manquants, il ne sera probablement pas possible d'utiliser cette source avec des mises à niveau sans assistance sans inclure d'autres sources présentant le même problème.

Après avoir noté ces 2 lignes, vous devez éditer le 50unattended-upgradesfichier et ajouter les lignes en utilisant ce format "<origin>:<archive>";pour cet exemple "Google\, Inc.:stable";.

L'origine de Google Chrome est un peu délicate, car elle comporte un espace, un point final et une virgule, mais la plupart des fichiers de publication seront faciles à lire.

Autre exemple, la source Node JS spécifie une origine ( Node Source) mais pas une archive; afin que vous puissiez faire correspondre avec "Node Source:";.

Allowed Origins est mis en correspondance à l'aide de caractères génériques de style shell (plus précisément, avec fnmatch () de Python ). Si vous êtes assez prudent pour ne pas inclure de sources conflictuelles, il est possible d'écrire des choses comme "Node *:*";.


N'oubliez pas de faire une sauvegarde de votre 50unattended-upgradesfichier avant de le modifier, faites-le avec sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak.

Pour tester les modifications apportées au fichier, vous pouvez utiliser sudo unattended-upgradesles paramètres --dry-runet --debug.

--dry-run exécutera un cycle de mises à niveau sans assistance, sauf que les mises à niveau ne seront pas réellement installées; il suffira de vérifier et de vérifier que tout va bien.

--debug activera le mode commenté.

Vous pouvez toujours vérifier les journaux pour unattended-upgradesà /var/log/unattended-upgrades/unattended-upgrades.log.


Vous pouvez modifier la configuration des mises à niveau sans surveillance en modifiant le fichier /etc/apt/apt.conf.d/10periodic. Les options de configuration se trouvent dans l'en- /etc/cron.daily/apttête du script. Lisez-les pour configurer la fréquence des mises à niveau sans assistance.

Bruno Pereira
la source
2
Merci ... Très détaillé! puis-je demander pourquoi vous mettez un \ après Google?
nik90
En raison des caractères spéciaux dans l'origine, c'est un caractère d'échappement pour la virgule. La plupart des origines que vous trouverez n'auront pas cela.
Bruno Pereira
1
@Jos Non, c'est comme cela que ça fonctionne, --dry-runvérifiera si des mises à jour sont disponibles sur les listes mises à jour et vous les transmettra, les mises à jour des listes via la configuration que vous avez configurée /etc/cron.daily/apt, son exécution manuelle ne met pas à jour les listes, je pense.
Bruno Pereira
1
Que dois-je mettre comme nom d'archive lorsque le fichier Release correspondant ne répertorie pas une Suite?
Hsivonen
2
Veuillez également vérifier l’approche automatisée ici: askubuntu.com/a/792621/417607
Abhishek Bhatia
14

Approche automatisée pour la réponse de @Bruno Pereira: (pensez à mettre en vedette le dépôt github si vous trouvez la réponse utile.)

Lien de code: https://github.com/abhigenie92/unattended_upgrades_repos

  • Vérifiez les dépôts pour ajouter:

    $ 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
    
  • Maintenant, éditez /etc/apt/apt.conf.d/50unattended-upgradespour les inclure:

    // 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";
    };
    ....
    ....
    
  • Vérifiez si elles sont incluses:

    $ 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
la source
@ andy.holmes bienvenue, envisagez de mettre en vedette le répertoire github si possible. Lien - github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia
Vous pouvez également souhaiter modifier la manière dont dpkg traite les paquets qui tentent de modifier les fichiers de configuration: unix.stackexchange.com/questions/138751/…
deoren
Ce script python est excellent, mais j'ai dû modifier ce que README.md avait suggéré pour 50 mises à niveau sans surveillance pour mon système d'exploitation Raspberry Pi. Spécifier l'origine autorisée comme, par exemple, "Raspberry:stable";ne fonctionnait pas. Au lieu de cela, j'ai utilisé, par exemple,"o=Raspberry, a=stable";
cfogelberg
5

Édition /etc/apt/apt.conf.d/50unattended-upgrades, ajoutez ce qui suit:

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

Cela permettra des mises à niveau sans surveillance pour tous les packages.

Zachary West
la source
Oui, merci pour la réponse claire et concise. Mais il y a des paquets qui ont origin:'', par exemple, datadog-agent from site:'apt.datadoghq.com'. Dans ce cas, il serait également nécessaire d’ajouter "origin=";pour ne pas ignorer les paquets dont l’origine est vide. Mais alors, il vaut mieux utiliser "site=*";au lieu de "origin=*";.
Paul Tobias
J'ai ajouté mon propre référentiel dans un fichier /etc/apt/sources.list.d/my_repo.list, mais il ne met pas à jour le paquet. Manuellement, cela fonctionne avec sudo apt update. Un indice comment?
Sander
Est-ce que cela utilise les mêmes sources qu’une mise à jour manuelle, c’est-à-dire qu’il ignore les sources désactivées?
Silicomancer
3

Il existe des instructions pour forcer une nouvelle exécution à forcer cron à démarrer la mise à jour automatique via le lien suivant . La procédure pour arrêter cron est la suivante

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/*

et redémarrer cron pour que la mise à jour automatique se produise maintenant (ou du moins dans quelques minutes)

sudo service cron start
sudo anacron -fn

Comment ça marche

Plusieurs choses vont déclencher son exécution.

  • Il est /etc/cron.dailyspécifiquement créé par cron /etc/cron.daily/apt. Cron court /etc/cron.dailyà 6h25 (voir /etc/crontab)

  • Anacron fonctionne de parvenu? et il se déclenchera /etc/cron.dailyaprès 5 minutes de disponibilité (voir /etc/anacrontab)

    La note APT::Periodic::RandomSleeppeut être configurée /etc/apt/apt.conf.d/10periodic, mais les valeurs par défaut sont 1800 (30 minutes), de sorte qu'aucune mise à jour ne peut avoir lieu avant 30 minutes après l' /etc/cron.daily/aptexécution.

Bûche

Si cela fonctionne, les choses devraient être enregistrées dans ce dossier /var/log/unattended-upgrades.

Eleanor Ellis
la source
Cela m'a été particulièrement utile car mon fournisseur d'hébergement virtuel pensait que ce serait une bonne idée de supprimer /etc/cron.daily/aptde l'installation par défaut d'Ubuntu 12.04 - les mises à jour automatiques APT n'étaient donc pas effectuées :-(. La réponse à ServerFault serverfault.com/a/568329/ 95570 a fourni des détails sur la création de ce fichier
Alex Dupuy