Aller au contenu
Administration Linux medium

Administrer les paquets avec Zypper

16 min de lecture

Zypper est le gestionnaire de paquets en ligne de commande d'openSUSE et de SUSE Linux Enterprise. Cette page vous donne les commandes réellement utiles au quotidien : installer, mettre à jour, gérer les dépôts, appliquer les correctifs de sécurité et remettre d'aplomb un système dont les métadonnées sont cassées. Elle s'adresse à un administrateur qui connaît déjà apt ou dnf et qui doit opérer une machine SUSE. Deux pièges classiques sont traités explicitement, parce qu'ils font perdre des paquets ou laissent passer des failles : la confusion entre paquets orphelins et paquets inutiles, et l'idée fausse que zypper patch ne poserait que des correctifs de sécurité.

  • Installer, rechercher et supprimer un paquet avec les commandes de base de Zypper.
  • Mettre à jour un système SUSE et choisir entre zypper update et zypper dist-upgrade.
  • Ajouter, désactiver et prioriser un dépôt logiciel.
  • Appliquer les correctifs de sécurité en filtrant correctement les patchs.
  • Distinguer les paquets orphelins des paquets inutiles avant tout nettoyage.
  • Diagnostiquer un cache corrompu, une dépendance cassée ou un verrou bloquant.

Les commandes de cette page ont été vérifiées sur openSUSE Leap 16.0 avec Zypper 1.14.95. Les alias courts (in, up, lr, ref) fonctionnent partout, mais les formes longues sont conservées ici pour rester lisibles.

C'est le cœur du travail quotidien. Les commandes de lecture (search, info) ne demandent aucun privilège : lancez-les avec votre compte normal. Les commandes qui modifient le système (install, remove, update) exigent sudo, puisqu'elles écrivent dans la base RPM et dans les répertoires système.

Commencez par chercher le paquet, puis vérifiez ce qu'il contient avant de l'installer :

Fenêtre de terminal
zypper search htop
zypper info htop

zypper search cherche dans le nom et la description des paquets des dépôts activés. zypper info affiche la version disponible, le dépôt d'origine, la taille installée et l'état (installé ou non). La sortie doit indiquer Installed : No tant que le paquet n'est pas présent.

L'installation et la suppression tiennent en deux commandes :

Fenêtre de terminal
sudo zypper install htop
sudo zypper remove htop

Zypper affiche un récapitulatif de transaction (paquets ajoutés, dépendances tirées, espace disque) et attend une confirmation. C'est le bon moment pour relire ce qui va être touché, en particulier quand une simple installation entraîne le retrait d'un autre paquet.

Pour la mise à jour, Zypper propose deux commandes qui ne font pas du tout la même chose, et le choix a des conséquences :

CommandeCe qu'elle faitQuand l'utiliser
sudo zypper updateMet à jour les paquets installés vers une version plus récente quand c'est possible. Ne change pas de fournisseur, n'enlève rien.Leap et SLE, maintenance courante
sudo zypper dist-upgradeEffectue une mise à niveau de distribution : accepte les changements de fournisseur, les suppressions et les renommages de paquets.Tumbleweed (rolling release), montée de version Leap

En clair, zypper update est conservateur : s'il faut désinstaller quelque chose pour progresser, il préfère ne rien faire. zypper dist-upgrade (alias dup) est autoritaire : il aligne le système sur ce que les dépôts proposent, quitte à supprimer des paquets. Sur Tumbleweed, c'est la commande attendue ; sur un serveur Leap ou SLE en production, zypper update est la bonne routine.

Fenêtre de terminal
sudo zypper update
sudo zypper update htop

Vous pouvez restreindre la mise à jour à un seul paquet en le nommant. Vérifiez ensuite avec zypper info htop que la version installée correspond bien à celle annoncée par le dépôt.

Un dépôt est une source de paquets identifiée par une URL et un alias. Tout ce que Zypper peut installer vient d'un dépôt activé, donc la première chose à faire sur une machine inconnue est de regarder d'où viennent ses paquets.

Fenêtre de terminal
zypper repos
zypper lr -d

zypper repos (alias lr) liste les dépôts avec leur alias, leur état (activé ou non), le contrôle GPG et la priorité. L'option -d ajoute l'URL complète et le rafraîchissement automatique. Un dépôt sans contrôle GPG doit vous alerter : il installe des paquets non signés.

L'ajout d'un dépôt suit toujours le même schéma, URL puis alias :

Fenêtre de terminal
sudo zypper addrepo https://download.opensuse.org/repositories/multimedia:/libs/openSUSE_Tumbleweed/ multimedia-libs
sudo zypper refresh

Le refresh télécharge les métadonnées du nouveau dépôt et vous demande d'accepter sa clé GPG. Sans cette étape, Zypper ignore le dépôt : il ne sait pas encore ce qu'il contient. Pour retirer un dépôt devenu inutile, sudo zypper removerepo multimedia-libs suffit.

La priorité règle les conflits quand deux dépôts fournissent le même paquet. Elle est source de confusion, alors retenez la règle : plus le nombre est petit, plus le dépôt est prioritaire. La valeur par défaut est 99 sur tous les dépôts d'une installation standard.

Fenêtre de terminal
sudo zypper modifyrepo --priority 90 multimedia-libs
zypper lr -p

Ici, la priorité 90 place multimedia-libs devant les dépôts officiels restés à 99. C'est exactement ce qu'on veut pour un dépôt de codecs qui doit fournir ses propres versions. La sortie de zypper lr -p doit afficher 90 dans la colonne Priority.

Vous pouvez enfin désactiver un dépôt sans le supprimer, ce qui est pratique pour isoler un problème sans perdre sa configuration :

Fenêtre de terminal
sudo zypper modifyrepo --disable multimedia-libs
sudo zypper modifyrepo --enable multimedia-libs

Correctifs de sécurité : ce que patch fait vraiment

Section intitulée « Correctifs de sécurité : ce que patch fait vraiment »

C'est le point où beaucoup de documentations se trompent, y compris des mémentos très partagés. Un patch au sens SUSE est une mise à jour packagée par l'éditeur avec des métadonnées : une catégorie (security, recommended, optional, feature, document, yast) et une sévérité (critical, important, moderate, low).

Les deux commandes ci-dessous ne filtrent rien par défaut :

Fenêtre de terminal
zypper list-patches
sudo zypper patch

zypper list-patches liste tous les patchs applicables, pas uniquement les correctifs de sécurité. zypper patch installe tous les patchs nécessaires, toutes catégories confondues. Croire l'inverse conduit à deux erreurs symétriques : penser qu'on a « seulement » corrigé la sécurité alors qu'on a poussé des changements fonctionnels, ou croire à tort qu'une machine soumise à un audit n'a reçu que des correctifs de sécurité.

Pour ne travailler que sur la sécurité, le filtrage est explicite et obligatoire :

Fenêtre de terminal
zypper list-patches --category security
sudo zypper patch --category security

L'option --category (forme courte -g) restreint aux patchs de la catégorie demandée. Une variante utile filtre sur la sévérité plutôt que sur la catégorie, par exemple pour ne traiter en urgence que le plus grave :

Fenêtre de terminal
sudo zypper patch --severity critical --severity important

Vérifiez le résultat en relançant zypper list-patches --category security : la sortie doit annoncer qu'aucun patch de sécurité n'est applicable. Si vous travaillez sur un CVE précis remonté par un scanner, Zypper sait cibler directement :

Fenêtre de terminal
zypper list-patches --cve=CVE-2024-6387
sudo zypper patch --cve=CVE-2024-6387

Une fois les correctifs posés, les processus déjà lancés continuent d'utiliser les anciennes bibliothèques chargées en mémoire. Un patch OpenSSL n'a aucun effet sur un service qui tourne encore avec l'ancienne version :

Fenêtre de terminal
sudo zypper ps -s

zypper ps liste les processus qui utilisent des fichiers supprimés par les dernières mises à jour, et -s produit un tableau court avec le nom du service systemd concerné. Redémarrez ces services (sudo systemctl restart <service>), ou la machine si le noyau a été mis à jour. Tant que cette étape n'est pas faite, le correctif n'est pas réellement appliqué.

Nettoyer : orphelins et inutiles ne sont pas la même chose

Section intitulée « Nettoyer : orphelins et inutiles ne sont pas la même chose »

Deux options de zypper packages sont régulièrement confondues, et l'erreur coûte cher : elle fait supprimer des logiciels encore voulus.

OptionCe qu'elle montre vraimentFaut-il supprimer ?
--orphanedLes paquets installés qui n'appartiennent plus à aucun dépôt configuré (ni candidat de mise à jour).Non, pas automatiquement
--unneededLes paquets dont plus rien ne dépend : tirés comme dépendance, désormais inutiles.Oui, après relecture

Un paquet orphelin n'est pas un paquet inutile. C'est un paquet que Zypper ne retrouve plus dans les dépôts : un RPM installé à la main, un logiciel venu d'un dépôt que vous avez retiré, ou un paquet abandonné lors d'une montée de version. Il peut très bien être essentiel à votre service. Supprimer en masse la sortie de --orphaned est le meilleur moyen de désinstaller un agent de supervision ou un pilote propriétaire encore utilisé.

Fenêtre de terminal
zypper packages --orphaned

La colonne Repository de la sortie affiche @System, ce qui signifie exactement cela : ce paquet ne vient plus d'aucun dépôt connu. Traitez la liste au cas par cas, en vous demandant pour chaque ligne d'où venait le paquet et s'il sert encore.

Le vrai nettoyage, celui des dépendances devenues inutiles (l'équivalent de apt autoremove), passe par --unneeded :

Fenêtre de terminal
zypper packages --unneeded
sudo zypper remove nom_du_paquet

Relisez la liste avant de supprimer : un paquet peut être « inutile » au sens du solveur alors que vous l'utilisez en ligne de commande, simplement parce qu'il a été installé comme dépendance et jamais marqué comme voulu. Sur Tumbleweed, la mise à niveau sait faire ce ménage au passage avec sudo zypper dist-upgrade --remove-orphaned.

Certaines opérations demandent de figer un paquet, typiquement une version de noyau ou d'agent applicatif validée par un éditeur, que les mises à jour automatiques ne doivent pas déplacer. Zypper appelle cela un verrou (lock).

Fenêtre de terminal
sudo zypper addlock kernel-default
zypper locks
sudo zypper removelock kernel-default

zypper locks liste les verrous actifs avec leur numéro, que vous pouvez passer directement à removelock. Un verrou oublié est une cause fréquente de « mise à jour qui ne s'installe pas sans message clair » : quand un paquet refuse obstinément de bouger, regardez d'abord cette liste.

L'autre besoin récurrent est de basculer un ensemble de paquets vers un dépôt précis, par exemple les codecs multimédia :

Fenêtre de terminal
sudo zypper dist-upgrade --from multimedia-libs

L'option --from restreint la mise à niveau au dépôt nommé : les autres paquets restent où ils sont. C'est la façon propre de changer de fournisseur pour une famille de paquets sans toucher au reste du système.

Zypper est fiable, mais les incidents se ressemblent d'une machine à l'autre. Voici les trois symptômes les plus fréquents en production, avec la cause probable et la commande qui remet les choses en ordre.

SymptômeCause probableCorrection
Valid metadata not found ou dépôt qui échoue au refreshCache de métadonnées corrompu ou périmésudo zypper clean --all puis sudo zypper refresh --force
Installation refusée pour dépendance manquante ou paquet casséBase RPM incohérente après une opération interrompuesudo zypper verify
Un paquet refuse de se mettre à jour, sans erreur expliciteVerrou posé sur le paquetzypper locks puis sudo zypper removelock nom_du_paquet

Le duo clean puis refresh est le premier réflexe : sudo zypper clean --all vide les caches de métadonnées et de paquets, et sudo zypper refresh --force force un rechargement complet depuis les dépôts. Cela résout la grande majorité des erreurs de téléchargement, y compris après un changement d'URL de miroir.

Quand le système reste incohérent, sudo zypper verify contrôle les dépendances de tous les paquets installés et propose d'installer ou de retirer ce qu'il faut pour réparer. Lisez sa proposition avant d'accepter : c'est un diagnostic, pas une baguette magique.

Si un fichier d'un paquet a été effacé ou abîmé, forcez la réinstallation plutôt que de bricoler le fichier à la main :

Fenêtre de terminal
sudo zypper install --force openssh

L'option --force réinstalle le paquet même s'il est déjà présent dans la même version. Le journal /var/log/zypper.log (l'historique complet des transactions et des erreurs) reste la meilleure source quand la sortie du terminal ne suffit pas : sudo less /var/log/zypper.log.

Enfin, sur une installation openSUSE en Btrfs avec snapper, chaque transaction Zypper crée un instantané avant et après. C'est le filet de sécurité qui permet de revenir en arrière après une mise à jour qui casse le démarrage :

Fenêtre de terminal
sudo snapper list
sudo snapper rollback ID

Le rollback restaure l'état du système au numéro d'instantané indiqué et demande un redémarrage. Vérifiez avant de lancer que la ligne choisie correspond bien au « pre » de la transaction fautive, colonne Description de snapper list.

Zypper est né dans le projet openSUSE en 2006, avec openSUSE 10.2. Les outils de l'époque (YaST2, rug, zen-updater) étaient jugés lents et mal adaptés aux mises à jour par internet. SUSE a donc bâti libzypp, la bibliothèque qui résout les dépendances, et Zypper comme client en ligne de commande. C'est ce moteur partagé qui explique pourquoi Zypper et l'interface graphique YaST prennent toujours les mêmes décisions : ils s'appuient sur le même solveur.

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • zypper update est conservateur (aucune suppression) ; zypper dist-upgrade accepte les changements de fournisseur et les suppressions. Réservez dup à Tumbleweed et aux montées de version.
  • zypper list-patches et zypper patch traitent tous les patchs applicables, pas seulement la sécurité. Le filtre --category security (ou --severity) est obligatoire pour cibler les correctifs de sécurité.
  • Après un patch, zypper ps -s révèle les services encore chargés avec les anciennes bibliothèques. Sans redémarrage, le correctif n'est pas actif.
  • packages --orphaned = paquets hors dépôt (RPM manuel, dépôt retiré). Ne jamais les supprimer en masse.
  • packages --unneeded = paquets dont plus rien ne dépend. C'est là qu'est le vrai nettoyage, l'équivalent d'apt autoremove.
  • Pour les dépôts, une priorité numérique plus basse gagne ; la valeur par défaut est 99.
  • Cache cassé : zypper clean --all puis zypper refresh --force. Dépendances incohérentes : zypper verify. Paquet figé : zypper locks.
  • Sur Btrfs, snapper rollback est le filet de sécurité après une mise à jour qui casse le démarrage.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn