1 Blacklist_fr
Anagnostakis Ioannis edited this page 2026-07-01 14:26:02 +03:00

EN · EL · FR · ES · IT · RU · ZH · AR · HI · PT · DE

Liste noire (blacklist)

La liste noire fige les paquets que vous ne voulez pas voir touchés, et masque ceux que vous ne voulez pas voir proposés. Les règles vivent dans /etc/slacker/blacklist (une par ligne, # pour les commentaires), ou sont ajoutées et retirées pour vous par les commandes frozen et unfrozen.

La liste noire est différente de la correspondance de PATTERN en ligne de commande. Les PATTERN sont sous-chaîne + série + exact ; les règles de liste noire sont des globs ou des expressions régulières non ancrées (plus le cadrage series/ et @repo) appliquées à l'identifiant complet name-version-arch-build, comme slackpkg.


Syntaxe des règles

[@repo] PATTERN
  • Le PATTERN est une série Slackware lorsqu'il se termine par / (p. ex. kde/). Sinon, c'est un glob ou une regex non ancrée appliquée à l'identifiant complet — slacker décide d'après ce que vous avez écrit :
    • Aucune syntaxe regex → glob. * correspond à toute suite de caractères, ? à un seul, et tout autre caractère (y compris un . littéral, comme dans webkit2gtk6.0 ou python3.11) est pris tel quel. Ainsi vlc-*, webkit2gtk6.0*, *-l10n-* fonctionnent comme prévu.
    • Syntaxe regex → regex. Un pattern contenant un caractère [ ] ( ) { } | ^ $ \ , ou l'idiome .* / .+ (« n'importe quels caractères »), est pris comme regex tel quel. Ainsi xf86-.*-202.* attrape un build 202x, ^vlc-[0-9] s'ancre sur le paquet vlc, et un simple vlc correspond à tout identifiant contenant vlc. Ancrez avec ^...$ pour une correspondance exacte.
  • Le préfixe optionnel @repo cadre la règle sur un dépôt — par correspondance avec le nom du dépôt ou le tag de build : pour un paquet disponible, son dépôt candidat ; pour un paquet installé, sa source. Ainsi @testing xf86-.* se cadre sur le dépôt testing, tandis que @_SBo foo se cadre sur les paquets portant le tag de build _SBo.

Figé vs masqué

La correspondance est… Effet
installée ce candidat est figé — traité comme si son dépôt n'offrait pas le paquet ; le paquet lui-même n'est jamais listé par clean-system
non installée masquée de install-new, des mises à niveau et de check-updates, mais toujours montrée par search/info avec la mention [blacklisted]

La liste noire est respectée par toute commande modifiant le système (y compris reinstall).

Le gel est un repli, pas un épinglage

Un gel ne se contente pas de figer la version installée. Un candidat figé est traité comme si son dépôt n'offrait pas du tout le paquet, et la résolution se poursuit alors normalement par priorité sur les candidats restants (non figés). Un paquet installé n'est maintenu inchangé que lorsque chaque candidat qu'il considérerait est figé.

  • Un frozen xf86-.* sans @repo fige ce nom dans chaque dépôt → il est maintenu partout.
  • Un @testing xf86-.* cadré ne fige que le candidat de testing → la résolution se rabat sur le dépôt suivant par priorité (p. ex. slackware), et les mises à jour de ce dépôt continuent d'affluer.

Le repli ne descend jamais sous la priorité de la source depuis laquelle le paquet est actuellement installé, de sorte qu'un gel ne peut jamais devenir une rétrogradation ; si le seul candidat non figé était classé plus bas, le paquet est maintenu à la place. Un pin restreint d'abord l'ensemble des candidats, puis le gel s'applique en son sein, de sorte qu'un paquet à la fois épinglé et figé est maintenu.


La commande frozen

frozen valide les règles et les ajoute à la liste noire pour vous.

slacker frozen "@alienbob vlc-[0-9]"     # figer seulement le vlc d'alienbob (regex)
slacker frozen "vlc-*"                     # un glob : tout ce qui commence par "vlc-"
slacker frozen "webkit2gtk6.0*"           # un glob ; le point est littéral
slacker frozen kde/                       # figer toute la série kde
slacker frozen "xf86-.*-202.*"            # une règle regex
slacker frozen "@conraid ^ffmpeg-"        # quasi exact, cadré sur conraid
  • Chaque argument est une règle ; protégez par des guillemets toute règle contenant des espaces (une règle @repo, par exemple).
  • slacker signale une erreur probable — un @repo qui ne nomme aucun dépôt actif, ou une regex contenant un espace (aucun identifiant de paquet n'a d'espaces, c'est donc d'ordinaire un @ oublié ou une coquille de guillemets) — et demande s'il faut la déclarer quand même.
  • Il affiche ce que chaque règle va figer et demande confirmation. --yes saute les invites. Les règles déjà présentes sont ignorées.

La commande unfrozen

unfrozen est le pendant de frozen : elle retire des règles de la liste noire.

slacker unfrozen                          # lister les règles actuelles (aucun root requis pour lire)
slacker unfrozen emacs                     # retirer la règle "emacs"
slacker unfrozen "@alienbob vlc-[0-9]"     # retirer une règle cadrée (entre guillemets)
slacker unfrozen "xf86-.*-202.*"           # les caractères spéciaux sont comparés littéralement

La correspondance est exacte et littérale — jamais un pattern. Chaque argument doit égaler une règle existante caractère pour caractère ; les métacaractères regex d'une règle (.*, *, -, [, ], /) sont comparés tels quels, et non interprétés. Ainsi unfrozen "fcitx5*" ne retire que la règle fcitx5* et ne touche jamais fcitx5-qt, et unfrozen fcitx5 (une chaîne plus courte) ne correspond à rien plutôt que de retirer fcitx5* par accident. C'est délibéré : une liste noire est pleine de caractères spéciaux, et la correspondance exacte est le seul moyen sûr de retirer la bonne ligne.

  • Lancez-la sans argument pour afficher les règles actuelles, afin de copier le texte exact à retirer.
  • Les lignes de commentaire, les lignes vides et toute règle que vous n'avez pas nommée sont préservées telles quelles ; une règle introuvable est signalée, et rien n'est écrit sauf si au moins une règle a effectivement correspondu.
  • Protégez par des guillemets toute règle contenant des espaces ou des caractères spéciaux du shell (une règle @repo, un * final), exactement comme pour frozen.

Retirer une règle du fichier à la main fonctionne aussi — unfrozen le fait simplement en toute sécurité, avec la garantie de correspondance exacte et la liste des règles actuelles.


Un exemple concret : figer le vlc d'un seul dépôt

Disons que vous gardez vlc d'alienbob et ne voulez jamais qu'il soit remplacé ou supprimé :

slacker frozen "@alienbob vlc-[0-9]"

Pourquoi vlc-[0-9] et pas simplement vlc ? La règle est appliquée sans ancrage sur l'identifiant complet. vlc seul correspondrait aussi à vlc-plugin-foo ou à tout ce qui contient ces lettres ; vlc-[0-9] s'ancre à la frontière de version pour correspondre au paquet vlc lui-même. Pour une correspondance stricte, vous pourriez écrire ^vlc-[0-9]. (Le glob vlc-* est aussi accepté — il se compile en vlc-.* et fige toute la famille vlc-, plugins compris ; utilisez la regex ^vlc-[0-9] quand vous voulez uniquement le paquet vlc.)


Pins : ne prendre un paquet que d'un seul dépôt

Le même fichier blacklist stocke aussi des pins — l'opposé positif d'un gel. Un gel dit ne jamais prendre ce paquet (ou pas de ce dépôt) ; un pin dit prendre ce paquet uniquement de ce dépôt, en ignorant la priorité.

Gérez les pins avec deux commandes :

slacker pin alienbob:vlc     # vlc ne vient plus que d'alienbob, même si un dépôt
                             # de priorité supérieure propose un autre build
slacker unpin vlc            # retour à la résolution normale par priorité
slacker unpin                # (sans argument) lister les pins actuels

Un pin est écrit dans le fichier blacklist avec un marqueur 100%, vous pouvez donc aussi l'ajouter ou le lire à la main :

@alienbob 100% vlc

Son comportement :

  • Toute commande le respecte — install, upgrade et upgrade-all s'approvisionnent uniquement depuis le dépôt épinglé, quelle que soit la priorité. Un plan incluant un paquet épinglé le liste sous « pinned (taken only from their repo, ignoring priority) », comme les paquets figés sont mis en évidence.
  • Les pins utilisent un nom de paquet exact, jamais un pattern (vlc, pas vlc*). Un point littéral est permis — python3.11 et webkit2gtk6.0 sont des noms de pin valides. Pour figer un pattern, utilisez plutôt frozen (qui accepte globs et regex).
  • Un paquet a au plus un pin. L'épingler sur un autre dépôt remplace l'ancien.
  • Si le dépôt épinglé ne propose pas actuellement le paquet, celui-ci reste tel quel (il n'est jamais tiré d'ailleurs) jusqu'à ce que ce dépôt le fournisse. slacker status signale un pin dont le dépôt n'est pas actif, et del-repo vous avertit si des paquets sont épinglés sur le dépôt que vous retirez.
  • Dans clean-system, un pin à lui seul ne protège pas un paquet. Mais un paquet étranger qui est épinglé et a réellement été installé depuis le dépôt auquel il est épinglé est proposé dans une étape distincte — [R]emove all / [K]eep all / [P]rompt each, avec Keep par défaut (un pin est un choix explicite). Un nom épinglé dont la copie installée provient d'une autre source est ignoré par cette étape et suit la logique normale de clean-system.
  • Un gel l'emporte toujours sur un pin pour le même paquet : si vlc est à la fois figé et épinglé, le gel s'applique et le pin ne fait rien jusqu'à ce que vous fassiez unfrozen.

Pin vs le gel cadré de l'exemple ci-dessus : @alienbob vlc fige le vlc d'alienbob (et laisse d'autres dépôts le mettre à jour selon la priorité) ; @alienbob 100% vlc épingle vlc sur alienbob (et n'autorise aucun autre dépôt à le fournir). Ce sont des opposés.


Liste noire vs quarantaine de dépôt

Elles résolvent des problèmes différents :

Liste noire (frozen) Quarantaine (distrust-repo)
Portée des paquets spécifiques (par regex/série) un dépôt entier
Effet figer / masquer ces paquets le dépôt ne fournit aucun paquet
À utiliser pour « ne jamais toucher à ce paquet » « ne pas faire confiance à cette source en ce moment »

Voir Security pour le modèle de quarantaine.