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

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

Sperrliste (blacklist)

Die Sperrliste friert Pakete ein, die du nicht angerührt haben willst, und verbirgt jene, die dir nicht angeboten werden sollen. Die Regeln leben in /etc/slacker/blacklist (eine pro Zeile, # für Kommentare) oder werden für dich von den Befehlen frozen und unfrozen hinzugefügt und entfernt.

Die Sperrliste ist verschieden vom PATTERN-Abgleich auf der Kommandozeile. PATTERNs sind Teilzeichenkette + Serie + exakt; Sperrlistenregeln sind Globs oder nicht verankerte reguläre Ausdrücke (plus series/- und @repo-Eingrenzung), abgeglichen gegen die vollständige Kennung name-version-arch-build, wie bei slackpkg.


Regelsyntax

[@repo] PATTERN
  • PATTERN ist eine Slackware-Serie, wenn es auf / endet (z. B. kde/). Andernfalls ist es ein Glob oder ein nicht verankerter Regex, abgeglichen gegen die vollständige Kennung — slacker entscheidet anhand dessen, was du geschrieben hast:
    • Keine Regex-Syntax → Glob. * passt auf eine beliebige Folge von Zeichen, ? auf ein einzelnes, und jedes andere Zeichen (einschließlich eines wörtlichen ., wie in webkit2gtk6.0 oder python3.11) wird unverändert genommen. So funktionieren vlc-*, webkit2gtk6.0*, *-l10n-* wie erwartet.
    • Regex-Syntax → Regex. Ein Muster mit einem der Zeichen [ ] ( ) { } | ^ $ \ oder dem .* / .+-Idiom („beliebige Zeichen“) wird unverändert als Regex genommen. So fängt xf86-.*-202.* einen 202x-Build, ^vlc-[0-9] verankert am Paket vlc, und ein bloßes vlc passt auf jede Kennung, die vlc enthält. Verankere mit ^...$ für einen exakten Abgleich.
  • Das optionale @repo-Präfix grenzt die Regel auf ein Repository ein — passend auf den Repo-Namen oder den Build-Tag: für ein verfügbares Paket dessen Kandidaten-Repository; für ein installiertes dessen Quelle. So grenzt @testing xf86-.* auf das Repo testing ein, während @_SBo foo auf Pakete mit dem Build-Tag _SBo eingrenzt.

Eingefroren vs. verborgen

Der Treffer ist… Wirkung
installiert dieser Kandidat ist eingefroren — wird behandelt, als böte sein Repo das Paket nicht an; das Paket selbst wird nie von clean-system gelistet
nicht installiert verborgen vor install-new, Upgrades und check-updates, wird aber von search/info weiterhin mit [blacklisted] markiert angezeigt

Die Sperrliste wird von jedem das System verändernden Befehl beachtet (einschließlich reinstall).

Einfrieren ist ein Fallback, kein Pin

Ein Einfrieren pinnt nicht einfach die installierte Version fest. Ein eingefrorener Kandidat wird behandelt, als böte sein Repository das Paket überhaupt nicht an, und die Auflösung läuft dann normal nach Priorität über die verbleibenden (nicht eingefrorenen) Kandidaten weiter. Ein installiertes Paket wird nur dann unverändert gehalten, wenn jeder Kandidat, den es sonst in Betracht zöge, eingefroren ist.

  • Ein frozen xf86-.* ohne @repo friert diesen Namen in jedem Repo ein → es wird überall gehalten.
  • Ein eingegrenztes @testing xf86-.* friert nur den testing-Kandidaten ein → die Auflösung fällt nach Priorität auf das nächste Repo durch (z. B. slackware), und dessen Aktualisierungen fließen weiter.

Der Fallback fällt nie unter die Priorität der Quelle, aus der das Paket derzeit installiert ist, sodass ein Einfrieren nie zu einer Herabstufung wird; wäre der einzige nicht eingefrorene Kandidat niedriger eingestuft, wird das Paket stattdessen gehalten. Ein pin grenzt zuerst die Kandidatenmenge ein, und das Einfrieren wird darin angewandt, sodass ein Paket, das zugleich gepinnt und eingefroren ist, gehalten wird.


Der Befehl frozen

frozen validiert Regeln und hängt sie für dich an die Sperrliste an.

slacker frozen "@alienbob vlc-[0-9]"     # nur alienbobs vlc einfrieren (Regex)
slacker frozen "vlc-*"                     # ein Glob: alles, was mit "vlc-" beginnt
slacker frozen "webkit2gtk6.0*"           # ein Glob; der Punkt ist wörtlich
slacker frozen kde/                       # die ganze kde-Serie einfrieren
slacker frozen "xf86-.*-202.*"            # eine Regex-Regel
slacker frozen "@conraid ^ffmpeg-"        # nahezu exakt, eingegrenzt auf conraid
  • Jedes Argument ist eine Regel; setze jede Regel mit Leerzeichen in Anführungszeichen (etwa eine @repo-Regel).
  • slacker meldet einen wahrscheinlichen Fehler — ein @repo, das kein aktives Repository benennt, oder ein Regex mit Leerzeichen (keine Paketkennung hat Leerzeichen, also ist das meist ein vergessenes @ oder ein Anführungszeichen- Patzer) — und fragt, ob es trotzdem deklariert werden soll.
  • Es gibt aus, was jede Regel einfrieren wird, und bittet um Bestätigung. --yes überspringt die Rückfragen. Bereits vorhandene Regeln werden übersprungen.

Der Befehl unfrozen

unfrozen ist das Gegenstück zu frozen: er entfernt Regeln aus der Sperrliste.

slacker unfrozen                          # die aktuellen Regeln auflisten (zum Lesen kein root nötig)
slacker unfrozen emacs                     # die Regel "emacs" entfernen
slacker unfrozen "@alienbob vlc-[0-9]"     # eine eingegrenzte Regel entfernen (in Anführungszeichen)
slacker unfrozen "xf86-.*-202.*"           # Sonderzeichen werden wörtlich abgeglichen

Der Abgleich ist exakt und wörtlich — nie ein Muster. Jedes Argument muss einer bestehenden Regel Zeichen für Zeichen gleichen; die Regex-Metazeichen in einer Regel (.*, *, -, [, ], /) werden unverändert verglichen, nicht interpretiert. So entfernt unfrozen "fcitx5*" nur die Regel fcitx5* und rührt fcitx5-qt nie an, und unfrozen fcitx5 (eine kürzere Zeichenkette) passt auf nichts, statt fcitx5* versehentlich zu entfernen. Das ist Absicht: eine Sperrliste ist voller Sonderzeichen, und der exakte Abgleich ist der einzige sichere Weg, die richtige Zeile zu entfernen.

  • Führe ihn ohne Argument aus, um die aktuellen Regeln auszugeben und so den exakten zu entfernenden Text zu kopieren.
  • Kommentarzeilen, Leerzeilen und jede nicht von dir benannte Regel werden unverändert bewahrt; eine nicht gefundene Regel wird gemeldet, und nichts wird geschrieben, sofern nicht mindestens eine Regel tatsächlich getroffen hat.
  • Setze jede Regel mit Leerzeichen oder Shell-Sonderzeichen in Anführungszeichen (eine @repo-Regel, ein abschließendes *), genau wie bei frozen.

Eine Regel von Hand aus der Datei zu entfernen funktioniert auch — unfrozen tut es nur sicher, mit der Exakt-Abgleich-Garantie und der Auflistung der aktuellen Regeln.


Ein durchgespieltes Beispiel: nur das vlc eines Repositorys einfrieren

Angenommen, du behältst vlc von alienbob und willst nie, dass es ersetzt oder entfernt wird:

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

Warum vlc-[0-9] und nicht nur vlc? Die Regel wird ohne Verankerung über die vollständige Kennung abgeglichen. vlc allein würde auch vlc-plugin-foo oder alles treffen, was diese Buchstaben enthält; vlc-[0-9] verankert an der Versionsgrenze, um das Paket vlc selbst zu treffen. Für einen strengen Abgleich könntest du ^vlc-[0-9] schreiben. (Der Glob vlc-* wird ebenfalls akzeptiert — er kompiliert zu vlc-.* und friert die ganze vlc--Familie ein, Plugins eingeschlossen; verwende den Regex ^vlc-[0-9], wenn du nur das Paket vlc willst.)


Pins: ein Paket nur aus einem Repository nehmen

Dieselbe blacklist-Datei speichert auch Pins — das positive Gegenstück zu einem Einfrieren. Ein Einfrieren sagt nimm dieses Paket nie (oder nicht aus diesem Repository); ein Pin sagt nimm dieses Paket nur aus diesem Repository, unter Missachtung der Priorität.

Verwalte Pins mit zwei Befehlen:

slacker pin alienbob:vlc     # vlc kommt nun nur von alienbob, selbst wenn ein Repo
                             # höherer Priorität einen anderen Build anbietet
slacker unpin vlc            # zurück zur normalen prioritätsbasierten Auflösung
slacker unpin                # (ohne Argument) die aktuellen Pins auflisten

Ein Pin wird mit einer 100%-Markierung in die blacklist-Datei geschrieben, sodass du ihn auch von Hand hinzufügen oder lesen kannst:

@alienbob 100% vlc

Wie er sich verhält:

  • Jeder Befehl beachtet ihn — install, upgrade und upgrade-all beziehen das Paket nur aus dem gepinnten Repository, ungeachtet der Priorität. Ein Plan, der ein gepinntes Paket enthält, listet es unter „pinned (taken only from their repo, ignoring priority)“, so wie eingefrorene Pakete hervorgehoben werden.
  • Pins verwenden einen exakten Paketnamen, nie ein Muster (vlc, nicht vlc*). Ein wörtlicher Punkt ist in Ordnung — python3.11 und webkit2gtk6.0 sind gültige Pin-Namen. Um ein Muster einzufrieren, verwende stattdessen frozen (es akzeptiert Globs und Regex).
  • Ein Paket hat höchstens einen Pin. Es an ein anderes Repository zu pinnen ersetzt den alten.
  • Bietet das gepinnte Repository das Paket derzeit nicht an, bleibt es einfach, wie es ist (es wird nie von anderswo geholt), bis dieses Repository es bereitstellt. slacker status meldet einen Pin, dessen Repository nicht aktiv ist, und del-repo warnt dich, wenn Pakete an das von dir entfernte Repository gepinnt sind.
  • In clean-system schützt ein Pin allein ein Paket nicht. Doch ein fremdes Paket, das gepinnt ist und tatsächlich aus dem Repo installiert wurde, an das es gepinnt ist, wird in einem eigenen Schritt angeboten — [R]emove all / [K]eep all / [P]rompt each, standardmäßig Keep (ein Pin ist eine bewusste Wahl). Ein gepinnter Name, dessen installierte Kopie aus einer anderen Quelle stammt, wird von diesem Schritt ignoriert und folgt der normalen clean-system-Logik.
  • Ein Einfrieren gewinnt beim selben Paket stets gegen einen Pin: ist vlc zugleich eingefroren und gepinnt, greift das Einfrieren, und der Pin tut nichts, bis du unfrozen darauf anwendest.

Pin vs. das eingegrenzte Einfrieren aus dem obigen Beispiel: @alienbob vlc friert alienbobs vlc ein (und lässt andere Repositorys es nach Priorität aktualisieren); @alienbob 100% vlc pinnt vlc an alienbob (und lässt kein anderes Repository es bereitstellen). Sie sind Gegensätze.


Sperrliste vs. Repository-Quarantäne

Sie lösen verschiedene Probleme:

Sperrliste (frozen) Quarantäne (distrust-repo)
Umfang bestimmte Pakete (per Regex/Serie) ein ganzes Repository
Wirkung jene Pakete einfrieren / verbergen das Repository stellt kein Paket bereit
Wofür „dieses Paket nie anrühren“ „dieser Quelle gerade nicht vertrauen“

Siehe Security für das Quarantäne-Modell.