Question Comment puis-je installer uniquement les mises à jour de sécurité à partir de la ligne de commande?


sudo apt-get upgrade installe toutes les mises à jour, pas seulement les mises à jour de sécurité. Je sais que je peux utiliser Update Manager pour sélectionner uniquement les mises à jour de sécurité importantes, mais existe-t-il un moyen de le faire depuis la ligne de commande?


286
2017-07-28 22:50


origine


Je ne pense pas. dist-upgrade amène le système entier à une nouvelle version. Je parle de mises à jour quotidiennes, comme celles que vous voyez dans Update Manager. - mac9416
Oh, je vois ce que vous dites maintenant. Hé, je lance apt-get update si souvent, je le tape sans réfléchir. Merci pour l'information! - mac9416
Vous voulez "apt-get dist-upgrade", pas "apt-get upgrade". "dist-upgrade" n'est pas pour les nouvelles versions (c'est-à-dire "do-release-upgrade" une commande séparée). L'utilisation de "dist-upgrade" signifie qu'il va gérer les dépendances changeantes des nouveaux paquets. Cela peut être important. - Kees Cook
dist-upgrade est l'opération normale effectuée par l'interface graphique d'Update Manager. Pour les paquets tels que le noyau où il y a un linux-image-generic package, en fonction de l'image actuelle, par exemple linux-image-3.x.y-zz-generic (chaque version est un nom de paquet séparé), dist-upgrade (qui permet d'installer de nouveaux paquets pour satisfaire les dépendances) effectuera cette mise à niveau, alors que la mise à niveau affichera le paquet du noyau comme étant bloqué. - chronitis
Surprenant qu'il n'y ait pas de bon apt-get réponses basées sur ceci, en considérant comment il est bien visible sur chaque serveur - Karthik T


Réponses:


Le paquet mises à niveau sans surveillance fournit des fonctionnalités pour installer les mises à jour de sécurité automatiquement.

Vous pouvez l'utiliser, mais au lieu de configurer la partie automatique, vous pouvez l'appeler manuellement. Pour ce cas, le suivant devrait le faire tranquillement:

sudo unattended-upgrade

ou version plus verbeuse, pour contrôler comment ça se passe

sudo unattended-upgrade -d

REMARQUE: lorsque vous appelez sans mise à niveau, vous laissez le "s" à la fin.

Cela suppose que le package est installé par défaut, ce qui est probablement le cas. Sinon, il suffit de faire:

sudo apt-get install unattended-upgrades

Voir également /usr/share/doc/unattended-upgrades/README.md.


267
2017-07-29 17:28



Pour désactiver l'exécution automatique de unattended-upgrade vous avez probablement besoin de modifier /etc/cron.daily/apt, mais pas sûr qu'il soit "correct" de le faire - Jaime Hablutzel
remarque: pour le serveur Ubuntu 12.04.5 LTS, unattended-upgrades n'est pas installé par défaut. - Raptor
Puisque vous faites cela depuis la ligne de commande, utilisez -v pour les messages d'information ou -d pour les messages de débogage. Sinon, l'utilitaire sera très silencieux, auquel cas vous devrez vérifier les journaux /var/log/unattended-upgrades. Vous pouvez aussi utiliser --dry-run pour simuler mais pas réellement mettre à jour quoi que ce soit. Pour plus d'informations et d'autres options, utilisez --help pour obtenir le message d'aide. - ADTC
j'ai appris quelques choses sur unattended-upgrades aujourd'hui. Merci! - the0ther
"pour surveiller comment ça se passe", il suffit de déboguer les messages non interactifs correctement? - Aquarius Power


Quelques conseils sur la façon de gérer les mises à jour

Cela s'applique à Debian et à Ubuntu, mais des instructions plus spécifiques pour Ubuntu suivent.

  • Afficher uniquement les mises à jour de sécurité:

    apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
    

    ou

    sudo unattended-upgrade --dry-run -d
    

    ou

    /usr/lib/update-notifier/apt-check -p
    
  • Afficher tous les paquets pouvant être mis à niveau

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Installer les mises à jour de sécurité uniquement

    apt-get -s dist-upgrade | grep "^Inst" | 
        grep -i securi | awk -F " " {'print $2'} | 
        xargs apt-get install
    

Remarques: 

  • Parfois, Ubuntu affiche les mises à jour de sécurité comme si elles venaient du dépôt de $ release-updates. C'est ce que je suis dit, car les développeurs Ubuntu transmettent également les mises à jour de sécurité au référentiel $ release-updates pour accélérer leur disponibilité.

    Si tel est le cas, vous pouvez effectuer les opérations suivantes pour afficher uniquement les mises à jour de sécurité:

    sudo sh -c 'grep ^deb /etc/apt/sources.list | 
        grep security > /etc/apt/sources.security.only.list'
    

    et

    apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null  | 
        grep "^Inst" | awk -F " " {'print $2'}
    
  • Vérifiez quels services doivent être redémarrés après les mises à niveau de package. Déterminez quels paquets vous allez mettre à niveau au préalable et planifiez vos redémarrages / redémarrages. Le problème est que, sauf si vous redémarrez un service, il peut toujours utiliser une version plus ancienne d'une bibliothèque (la raison la plus courante) qui a été chargée en mémoire avant d'installer un nouveau package qui corrige une vulnérabilité ou autre.

    checkrestart -v
    

    Cependant, gardez à l'esprit que checkrestart peut lister des processus qui ne doivent pas nécessairement être redémarrés. Par exemple, le service PostgreSQL conserve dans sa mémoire une référence à un fichier xlog déjà supprimé, ce qui n'est pas une raison valable pour redémarrer le service.

    Par conséquent, un autre moyen, plus fiable, de vérifier cela à l’aide d’utilitaires standard est le petit script bash que j'ai volé sans vergogne. https://locallost.net/?p=233

    Il vérifie si les processus en cours d'exécution sur un système utilisent toujours des bibliothèques supprimées en conservant des copies de ceux de la mémoire active.

    ps xh -o pid |
    while read PROCID; do
           grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
           if [ $? -eq 0 ]; then
                   CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
                   echo -e "\tPID $PROCID $CMDLINE\n"
           fi
    done
    

104
2017-11-16 11:35



Je remarque seulement maintenant ce post. C'est extrêmement précis. Merci beaucoup (+1) - Danduk82
D'où vient 'checkrestart'? Je ne le trouve pas dans Ubuntu Trusty. J'ai trouvé "needrestart" qui semble correspondre à vos instructions? - Ben XO
On peut le trouver dans le paquet debian-goodies: packages.debian.org/wheezy/debian-goodies. Il y a aussi needrestart. Vous pouvez trouver les deux sur Xenial en exécutant: $ apt-cache search checkrestart - ILIV
Je reçois "E: Impossible d'ouvrir le fichier de verrouillage / var / lib / dpkg / lock - open (13: autorisation refusée)" même avec sudo. Est-ce quelque chose de spécifique à l'une des mises à jour ou aux commandes que vous avez fournies? - Nathan Hornby
Il s'agit probablement d'une terminaison incorrecte / anormale de dpkg qui laissait un fichier de verrouillage non effacé. Ne se produit pas normalement jusqu'à, par ex. l'installation d'un paquet ne se termine pas correctement (disque complet, etc.) Vous ne pouvez probablement pas exécuter d'autres commandes apt-get et dpkg, n'est-ce pas? - ILIV


remplacer /etc/apt/preferences avec les éléments suivants:

Package: *
Pin: release a=lucid-security
Pin-Priority: 500

Package: *
Pin: release o=Ubuntu
Pin-Priority: 50

maintenant un simple apt-get upgrade mettra à jour toutes les mises à jour de sécurité uniquement.

Pourquoi (et comment) cela fonctionne: Le fichier de préférences épinglera tous les paquets de la distribution Ubuntu à la priorité 50, ce qui les rendra moins désirables que les paquets déjà installés. Les fichiers provenant du référentiel de sécurité reçoivent la priorité par défaut (500) et sont donc considérés pour l'installation. Cela signifie que seuls les packages considérés comme plus souhaitables que ceux actuellement installés sont des mises à jour de sécurité. Plus d'informations sur l'épinglage dans le apt_preferences page de manuel.

Vous pouvez temporairement promouvoir une certaine distribution pour les mises à jour avec le --target-release option qui fonctionne avec apt-get et aptitude (au moins) qui vous permettra d'épingler certaines versions pour qu'elles puissent être mises à niveau.

Si vous souhaitez utiliser ceci pour les scripts uniquement et ne pas le rendre par défaut pour le système, vous pouvez placer les règles dans un autre emplacement et l'utiliser à la place:

apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade

Cela permettra de rechercher le fichier de préférences à partir d'un emplacement autre que celui par défaut.

Le fichier de préférences donné à titre d'exemple ne s'applique pas aux référentiels tiers, si vous souhaitez épingler ceux que vous pouvez utiliser apt-cache policy pour déterminer facilement les clés requises pour épingler.


46
2017-07-29 04:12



Merci d'avoir pris le temps de répondre de manière approfondie. je pense Je comprends comment ça marche. Mais quand je crée le fichier / etc / apt / preferences et que je lance apt-get upgrade, il souhaite mettre à jour tous les paquets, pas seulement les mises à jour de sécurité. La mise à niveau de la liste avant et après est exactement la même, sauf avec / etc / apt / preferences, il ne veut pas mettre à jour Leafpad, que j'ai construit à partir des sources et installé "à la main" avec dpkg. C'est très étrange pour moi, mais cela peut vouloir dire quelque chose pour vous. - mac9416
Vous pouvez voir ce qui se passe avec la commande de stratégie apt-cache. Choisissez l'un des packages qui ne reçoivent pas de correctif de sécurité et exécutez-le apt-cache policy packagename. Cela listera les priorités pour les différentes versions. Vous devriez voir différentes lignes et différentes priorités. S'il n'y a pas de lignes avec la priorité 50, le pinning n'affecte pas les paquets en question pour une raison quelconque. - Ressu
J'avais suivi cette réponse par le passé. Aujourd'hui, j'ai découvert qu'en raison de cette réponse, 68 packages de mises à jour de sécurité n'étaient PAS installés sur mon serveur et n'apparaissaient pas comme des candidats potentiels à l'installation. Ce n'est pas une bonne réponse! - Shade


Ce qui suit est confirmé dans Ubuntu 14.04 LTS.

Utilisez le unattended-upgrade paquet.

Regardez le fichier /etc/apt/apt.conf.d/50unattended-upgrades. Il devrait y avoir une section en haut qui est:

// 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";
};

Notez qu'il a été configuré pour autoriser uniquement les mises à niveau sans assistance pour les packages de sécurité, par défaut.

Modifier le fichier /etc/apt/apt.conf.d/10periodic semblable à:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Cela permettra d'exécuter des mises à niveau de sécurité automatiques sans surveillance, une fois par jour.

Maintenant, pour exécuter manuellement: sudo unattended-upgrade.

Pour tester comme une course à sec, sans rien faire: sudo unattended-upgrade --dry-run.

La source: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html


9
2017-10-03 17:18



Y a-t-il un moyen d'en faire un calendrier mensuel? - mike.b93
@ mike.b93, je crois que la mise APT::Periodic::Unattended-Upgrade "30"; Le ferait - tous les 30 jours. - vcardillo


Bien que ce soit assez moche, vous pouvez désactiver tous les référentiels à part le référentiel de sécurité et ensuite faire:

sudo apt-get update && sudo apt-get upgrade

Je ne l'ai pas testé, mais en théorie, il ne trouverait que les mises à jour dans le référentiel de sécurité et les appliquerait ...


5
2017-07-29 00:00



Oui, c'est une possibilité. Je vais le regarder Je ne suis pas bon à BASH, mais je peux essayer de faire un script pour le faire. - mac9416
OK, j'ai désactivé toutes les mises en pension de sécurité sauf Ubuntu et j'ai lancé un sudo apt-get update && sudo apt-get upgrade (annulation avant toute mise à niveau). Puis j'ai réactivé tous mes repos, j'ai couru sudo apt-get updateeet ouvert le gestionnaire de mises à jour. Les paquets marqués comme mises à jour de sécurité n'étaient pas exactement ce que apt-get upgrade trouvé, mais ils étaient très proches - assez proches pour moi. Je souhaite toujours savoir exactement comment Update Manager le fait et comment faire la même chose à partir de la ligne de commande, mais cela va le faire. Merci! - mac9416


  • apt-get update: Il suffit de lire les entrées dans le référentiel - en fonction de la liste existante. Nécessaire pour vérifier ce qui est nouveau.
  • apt-get upgrade: toutes les mises à jour pour les paquets installés sans modules du noyau. Aucune mise à jour de publication.
  • apt-get dist-upgrade: toutes les mises à jour pour les paquets installés également avec les modules du noyau. Aucune mise à jour de publication.
  • apt-get avec paramètre -s: test uniquement, aucune modification effectuée.

3
2017-08-02 09:49





Je ne trouve pas d'option dans apt-get ou aptitude, cependant quelqu'un a eu la meme question sur SuperUser. La seule réponse est:

Vérifiez et ajustez /etc/apt/apt.conf.d/50unattended-upgrade. Avez-vous remplacé «karmic» par le nom de code de votre Ubuntu?

Aucune réponse quant à savoir si cela a fonctionné cependant.


0
2017-07-28 23:04



Il semble que la méthode décrite dans cette page wiki dépend de la définition de l'argument --target-release d'aptitude sur <release> -security. Comme le protocole OP de cette question, cette méthode installe toutes les mises à niveau, pas seulement les mises à niveau de sécurité. En lisant les pages de manuel d'apt-get et d'aptitude, je ne pense pas que l'argument --target-release soit même destiné à limiter les mises à niveau à la sécurité, même si je ne suis pas sûr est pour. - mac9416