6 Blacklist.es
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 negra (blacklist)

La lista negra congela los paquetes que no quieres que se toquen, y oculta los que no quieres que se ofrezcan. Las reglas viven en /etc/slacker/blacklist (una por línea, # para comentarios), o las añaden y quitan por ti los comandos frozen y unfrozen.

La lista negra es diferente de la coincidencia de PATTERN en la línea de comandos. Los PATTERN son subcadena + serie + exacto; las reglas de lista negra son globs o expresiones regulares no ancladas (más el ámbito series/ y @repo) aplicadas al identificador completo name-version-arch-build, como slackpkg.


Sintaxis de las reglas

[@repo] PATTERN
  • El PATTERN es una serie de Slackware cuando termina en / (p. ej. kde/). En caso contrario es un glob o una regex no anclada aplicada al identificador completo — slacker decide según lo que escribiste:
    • Sin sintaxis regex → glob. * coincide con cualquier secuencia de caracteres, ? con uno, y cualquier otro carácter (incluido un . literal, como en webkit2gtk6.0 o python3.11) se toma tal cual. Así vlc-*, webkit2gtk6.0*, *-l10n-* funcionan como esperarías.
    • Sintaxis regex → regex. Un patrón que contiene un carácter [ ] ( ) { } | ^ $ \ , o el idioma .* / .+ («cualquier carácter»), se toma como regex tal cual. Así xf86-.*-202.* captura un build 202x, ^vlc-[0-9] se ancla al paquete vlc, y un simple vlc coincide con cualquier identificador que contenga vlc. Ancla con ^...$ para una coincidencia exacta.
  • El prefijo opcional @repo acota la regla a un repositorio: para un paquete disponible, su repositorio candidato; para uno instalado, su fuente.

Congelado vs oculto

La coincidencia está… Efecto
instalada congelada — nunca se instala, actualiza, reinstala ni elimina, y nunca la lista clean-system
no instalada oculta de install-new, las actualizaciones y check-updates, pero aún la muestran search/info marcada como [blacklisted]

La lista negra la respeta todo comando que modifica el sistema (incluido reinstall).


El comando frozen

frozen valida reglas y las añade a la lista negra por ti.

slacker frozen "@alienbob vlc-[0-9]"     # congelar solo el vlc de alienbob (regex)
slacker frozen "vlc-*"                     # un glob: todo lo que empiece por "vlc-"
slacker frozen "webkit2gtk6.0*"           # un glob; el punto es literal
slacker frozen kde/                       # congelar toda la serie kde
slacker frozen "xf86-.*-202.*"            # una regla regex
slacker frozen "@conraid ^ffmpeg-"        # casi exacto, acotado a conraid
  • Cada argumento es una regla; pon entre comillas cualquier regla que contenga espacios (una regla @repo, por ejemplo).
  • slacker señala un probable error — un @repo que no nombra ningún repositorio activo, o una regex que contiene un espacio (ningún identificador de paquete tiene espacios, así que suele ser un @ olvidado o un desliz de comillas) — y pregunta si declararla de todos modos.
  • Imprime lo que congelará cada regla y pide confirmación. --yes se salta las preguntas. Las reglas ya presentes se omiten.

El comando unfrozen

unfrozen es la contraparte de frozen: quita reglas de la lista negra.

slacker unfrozen                          # listar las reglas actuales (no hace falta root para leer)
slacker unfrozen emacs                     # quitar la regla "emacs"
slacker unfrozen "@alienbob vlc-[0-9]"     # quitar una regla acotada (entre comillas)
slacker unfrozen "xf86-.*-202.*"           # los caracteres especiales se comparan literalmente

La coincidencia es exacta y literal — nunca un patrón. Cada argumento debe igualar una regla existente carácter por carácter; los metacaracteres regex de una regla (.*, *, -, [, ], /) se comparan tal cual, no se interpretan. Así unfrozen "fcitx5*" quita solo la regla fcitx5* y nunca toca fcitx5-qt, y unfrozen fcitx5 (una cadena más corta) no coincide con nada en lugar de quitar fcitx5* por accidente. Es deliberado: una lista negra está llena de caracteres especiales, y la coincidencia exacta es la única forma segura de quitar la línea correcta.

  • Ejecútalo sin argumento para imprimir las reglas actuales, y así copiar el texto exacto a quitar.
  • Las líneas de comentario, las líneas vacías y cualquier regla que no nombraste se conservan tal cual; una regla no encontrada se informa, y no se escribe nada salvo que al menos una regla haya coincidido.
  • Pon entre comillas cualquier regla con espacios o caracteres especiales del shell (una regla @repo, un * final), exactamente igual que para frozen.

Quitar una regla del archivo a mano también funciona — unfrozen simplemente lo hace de forma segura, con la garantía de coincidencia exacta y el listado de reglas actuales.


Un ejemplo trabajado: congelar el vlc de un solo repositorio

Digamos que mantienes vlc de alienbob y nunca quieres que se reemplace ni se elimine:

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

¿Por qué vlc-[0-9] y no solo vlc? La regla se aplica sin anclar sobre el identificador completo. vlc por sí solo coincidiría también con vlc-plugin-foo o con cualquier cosa que contenga esas letras; vlc-[0-9] se ancla al límite de versión para coincidir con el paquete vlc en sí. Para una coincidencia estricta podrías escribir ^vlc-[0-9]. (El glob vlc-* también se acepta — se compila a vlc-.* y congela toda la familia vlc-, plugins incluidos; usa la regex ^vlc-[0-9] cuando quieras solo el paquete vlc.)


Pins: tomar un paquete solo de un repositorio

El mismo archivo blacklist almacena también pins — el opuesto positivo de un congelado. Un congelado dice nunca tomes este paquete (o no de este repositorio); un pin dice toma este paquete solo de este repositorio, ignorando la prioridad.

Gestiona los pins con dos comandos:

slacker pin alienbob:vlc     # vlc ahora viene solo de alienbob, aunque un repo de
                             # mayor prioridad ofrezca otro build
slacker unpin vlc            # de vuelta a la resolución normal por prioridad
slacker unpin                # (sin argumento) listar los pins actuales

Un pin se escribe en el archivo blacklist con un marcador 100%, así que también puedes añadirlo o leerlo a mano:

@alienbob 100% vlc

Cómo se comporta:

  • Todo comando lo respeta — install, upgrade y upgrade-all obtienen el paquete solo del repositorio fijado, sin importar la prioridad. Un plan que incluye un paquete fijado lo lista bajo «pinned (taken only from their repo, ignoring priority)», igual que se destacan los paquetes congelados.
  • Los pins usan un nombre de paquete exacto, nunca un patrón (vlc, no vlc*). Un punto literal está bien — python3.11 y webkit2gtk6.0 son nombres de pin válidos. Para congelar un patrón, usa frozen (acepta globs y regex).
  • Un paquete tiene como mucho un pin. Fijarlo a otro repositorio reemplaza el anterior.
  • Si el repositorio fijado no ofrece actualmente el paquete, este simplemente permanece como está (nunca se trae de ningún otro sitio) hasta que ese repositorio lo provea. slacker status señala un pin cuyo repositorio no está activo, y del-repo te avisa si hay paquetes fijados al repositorio que eliminas.
  • Un congelado siempre gana a un pin sobre el mismo paquete: si vlc está a la vez congelado y fijado, prevalece el congelado y el pin no hace nada hasta que hagas unfrozen.

Pin vs el congelado acotado del ejemplo anterior: @alienbob vlc congela el vlc de alienbob (y deja que otros repositorios lo actualicen por prioridad); @alienbob 100% vlc fija vlc a alienbob (y no deja que ningún otro repositorio lo provea). Son opuestos.


Lista negra vs cuarentena de repositorio

Resuelven problemas distintos:

Lista negra (frozen) Cuarentena (distrust-repo)
Alcance paquetes concretos (por regex/serie) un repositorio entero
Efecto congelar / ocultar esos paquetes el repositorio no provee ningún paquete
Úsala para «nunca toques este paquete» «no confíes en esta fuente ahora mismo»

Véase Security para el modelo de cuarentena.