5 Blacklist.it
Anagnostakis Ioannis edited this page 2026-06-30 21:10:06 +03:00

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

Lista nera (blacklist)

La lista nera congela i pacchetti che non vuoi vengano toccati, e nasconde quelli che non vuoi ti vengano proposti. Le regole vivono in /etc/slacker/blacklist (una per riga, # per i commenti), oppure sono aggiunte e rimosse per te dai comandi frozen e unfrozen.

La lista nera è diversa dalla corrispondenza di PATTERN sulla riga di comando. I PATTERN sono sottostringa + serie + esatto; le regole di lista nera sono glob o espressioni regolari non ancorate (più l'ambito series/ e @repo) applicate all'identificatore completo name-version-arch-build, come slackpkg.


Sintassi delle regole

[@repo] PATTERN
  • Il PATTERN è una serie Slackware quando termina con / (es. kde/). Altrimenti è un glob o una regex non ancorata applicata all'identificatore completo — slacker decide in base a ciò che hai scritto:
    • Nessuna sintassi regex → glob. * corrisponde a qualsiasi sequenza di caratteri, ? a uno, e ogni altro carattere (incluso un . letterale, come in webkit2gtk6.0 o python3.11) è preso così com'è. Così vlc-*, webkit2gtk6.0*, *-l10n-* funzionano come ti aspetti.
    • Sintassi regex → regex. Un pattern che contiene un carattere [ ] ( ) { } | ^ $ \ , o l'idioma .* / .+ («qualsiasi carattere»), è preso come regex così com'è. Così xf86-.*-202.* cattura un build 202x, ^vlc-[0-9] si ancora al pacchetto vlc, e un semplice vlc corrisponde a qualsiasi identificatore che contenga vlc. Ancora con ^...$ per una corrispondenza esatta.
  • Il prefisso opzionale @repo restringe la regola a un repository: per un pacchetto disponibile, il suo repository candidato; per uno installato, la sua sorgente.

Congelato vs nascosto

La corrispondenza è… Effetto
installata congelata — mai installata, aggiornata, reinstallata o rimossa, e mai elencata da clean-system
non installata nascosta da install-new, dagli aggiornamenti e da check-updates, ma ancora mostrata da search/info con la dicitura [blacklisted]

La lista nera è rispettata da ogni comando che modifica il sistema (incluso reinstall).


Il comando frozen

frozen valida le regole e le aggiunge alla lista nera per te.

slacker frozen "@alienbob vlc-[0-9]"     # congela solo il vlc di alienbob (regex)
slacker frozen "vlc-*"                     # un glob: tutto ciò che inizia con "vlc-"
slacker frozen "webkit2gtk6.0*"           # un glob; il punto è letterale
slacker frozen kde/                       # congela l'intera serie kde
slacker frozen "xf86-.*-202.*"            # una regola regex
slacker frozen "@conraid ^ffmpeg-"        # quasi esatto, ristretto a conraid
  • Ogni argomento è una regola; metti tra apici ogni regola che contenga spazi (una regola @repo, per esempio).
  • slacker segnala un probabile errore — un @repo che non nomina alcun repository attivo, o una regex che contiene uno spazio (nessun identificatore di pacchetto ha spazi, quindi di solito è una @ dimenticata o un errore di apici) — e chiede se dichiararla comunque.
  • Stampa cosa congelerà ogni regola e chiede conferma. --yes salta le richieste. Le regole già presenti vengono saltate.

Il comando unfrozen

unfrozen è la controparte di frozen: rimuove regole dalla lista nera.

slacker unfrozen                          # elenca le regole attuali (non serve root per leggere)
slacker unfrozen emacs                     # rimuovi la regola "emacs"
slacker unfrozen "@alienbob vlc-[0-9]"     # rimuovi una regola ristretta (tra apici)
slacker unfrozen "xf86-.*-202.*"           # i caratteri speciali sono confrontati letteralmente

La corrispondenza è esatta e letterale — mai un pattern. Ogni argomento deve uguagliare una regola esistente carattere per carattere; i metacaratteri regex di una regola (.*, *, -, [, ], /) sono confrontati così come sono, e non interpretati. Così unfrozen "fcitx5*" rimuove solo la regola fcitx5* e non tocca mai fcitx5-qt, e unfrozen fcitx5 (una stringa più corta) non corrisponde a nulla invece di rimuovere fcitx5* per sbaglio. È deliberato: una lista nera è piena di caratteri speciali, e la corrispondenza esatta è l'unico modo sicuro di rimuovere la riga giusta.

  • Eseguilo senza argomento per stampare le regole attuali, così da copiare il testo esatto da rimuovere.
  • Le righe di commento, le righe vuote e ogni regola che non hai nominato sono conservate così come sono; una regola non trovata viene segnalata, e nulla viene scritto a meno che almeno una regola non abbia corrisposto.
  • Metti tra apici ogni regola con spazi o caratteri speciali della shell (una regola @repo, un * finale), esattamente come per frozen.

Rimuovere una regola dal file a mano funziona anche — unfrozen lo fa solo in modo sicuro, con la garanzia di corrispondenza esatta e l'elenco delle regole attuali.


Un esempio pratico: congelare il vlc di un solo repository

Diciamo che tieni vlc da alienbob e non vuoi mai che venga sostituito o rimosso:

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

Perché vlc-[0-9] e non solo vlc? La regola è applicata senza ancoraggio sull'identificatore completo. vlc da solo corrisponderebbe anche a vlc-plugin-foo o a qualsiasi cosa contenga quelle lettere; vlc-[0-9] si ancora al confine di versione per corrispondere al pacchetto vlc stesso. Per una corrispondenza stretta potresti scrivere ^vlc-[0-9]. (Il glob vlc-* è pure accettato — si compila in vlc-.* e congela l'intera famiglia vlc-, plugin inclusi; usa la regex ^vlc-[0-9] quando vuoi solo il pacchetto vlc.)


Pin: prendere un pacchetto solo da un repository

Lo stesso file blacklist memorizza anche pin — l'opposto positivo di un congelamento. Un congelamento dice non prendere mai questo pacchetto (o non da questo repository); un pin dice prendi questo pacchetto solo da questo repository, ignorando la priorità.

Gestisci i pin con due comandi:

slacker pin alienbob:vlc     # vlc ora viene solo da alienbob, anche se un repo di
                             # priorità più alta offre un altro build
slacker unpin vlc            # ritorno alla risoluzione normale per priorità
slacker unpin                # (senza argomento) elenca i pin attuali

Un pin è scritto nel file blacklist con un marcatore 100%, quindi puoi anche aggiungerlo o leggerlo a mano:

@alienbob 100% vlc

Come si comporta:

  • Ogni comando lo rispetta — install, upgrade e upgrade-all prelevano il pacchetto solo dal repository pinnato, senza riguardo alla priorità. Un piano che include un pacchetto pinnato lo elenca sotto «pinned (taken only from their repo, ignoring priority)», come vengono evidenziati i pacchetti congelati.
  • I pin usano un nome di pacchetto esatto, mai un pattern (vlc, non vlc*). Un punto letterale va bene — python3.11 e webkit2gtk6.0 sono nomi di pin validi. Per congelare un pattern, usa invece frozen (accetta glob e regex).
  • Un pacchetto ha al più un pin. Pinnarlo a un altro repository sostituisce il vecchio.
  • Se il repository pinnato al momento non offre il pacchetto, questo resta semplice- mente com'è (non viene mai prelevato da altrove) finché quel repository non lo fornisce. slacker status segnala un pin il cui repository non è attivo, e del-repo ti avverte se ci sono pacchetti pinnati al repository che stai rimuovendo.
  • Un congelamento vince sempre su un pin sullo stesso pacchetto: se vlc è sia congelato sia pinnato, prevale il congelamento e il pin non fa nulla finché non fai unfrozen.

Pin vs il congelamento ristretto dell'esempio sopra: @alienbob vlc congela il vlc di alienbob (e lascia che altri repository lo aggiornino per priorità); @alienbob 100% vlc pinna vlc ad alienbob (e non lascia che nessun altro repository lo fornisca). Sono opposti.


Lista nera vs quarantena di repository

Risolvono problemi diversi:

Lista nera (frozen) Quarantena (distrust-repo)
Ambito pacchetti specifici (per regex/serie) un repository intero
Effetto congela / nasconde quei pacchetti il repository non fornisce alcun pacchetto
Usala per «non toccare mai questo pacchetto» «non fidarti di questa sorgente in questo momento»

Vedi Security per il modello di quarantena.