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

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

Lista negra (blacklist)

A lista negra congela os pacotes que não queres ver mexidos, e esconde os que não queres que sejam oferecidos. As regras vivem em /etc/slacker/blacklist (uma por linha, # para comentários), ou são adicionadas e removidas por ti pelos comandos frozen e unfrozen.

A lista negra é diferente da correspondência de PATTERN na linha de comandos. Os PATTERN são subcadeia + série + exato; as regras da lista negra são globs ou expressões regulares não ancoradas (mais o âmbito series/ e @repo), correspondidas com o identificador completo name-version-arch-build, como o slackpkg.


Sintaxe das regras

[@repo] PATTERN
  • O PATTERN é uma série Slackware quando termina em / (ex. kde/). Caso contrário é um glob ou uma regex não ancorada correspondida com o identificador completo — o slacker decide pelo que escreveste:
    • Sem sintaxe de regex → glob. * corresponde a qualquer sequência de caracteres, ? a um, e qualquer outro carácter (incluindo um . literal, como em webkit2gtk6.0 ou python3.11) é tomado tal como está. Assim vlc-*, webkit2gtk6.0*, *-l10n-* funcionam como esperarias.
    • Com sintaxe de regex → regex. Um padrão que contenha um carácter [ ] ( ) { } | ^ $ \ , ou o idioma .* / .+ («quaisquer caracteres»), é tomado como regex tal como está. Assim xf86-.*-202.* apanha um build 202x, ^vlc-[0-9] ancora-se ao pacote vlc, e um simples vlc corresponde a qualquer identificador que contenha vlc. Ancora com ^...$ para uma correspondência exata.
  • O prefixo opcional @repo restringe a regra a um repositório — por correspondência com o nome do repo ou a tag de build: para um pacote disponível, o seu repositório candidato; para um instalado, a sua fonte. Assim @testing xf86-.* restringe-se ao repo testing, ao passo que @_SBo foo se restringe aos pacotes que levam a tag de build _SBo.

Congelado vs escondido

A correspondência está… Efeito
instalada esse candidato está congelado — tratado como se o seu repo não oferecesse o pacote; o pacote em si nunca é listado pelo clean-system
não instalada escondida de install-new, das atualizações e de check-updates, mas ainda mostrada por search/info marcada como [blacklisted]

A lista negra é respeitada por todo o comando que altera o sistema (incluindo reinstall).

O congelamento é um recuo, não um pin

Um congelamento não se limita a fixar a versão instalada. Um candidato congelado é tratado como se o seu repositório não oferecesse o pacote de todo, e a resolução prossegue então normalmente por prioridade sobre os candidatos restantes (não congelados). Um pacote instalado é mantido inalterado só quando todos os candidatos que consideraria estão congelados.

  • Um frozen xf86-.* sem @repo congela esse nome em cada repo → é mantido em toda a parte.
  • Um @testing xf86-.* restrito congela apenas o candidato do testing → a resolução recai no repo seguinte por prioridade (ex. slackware), e as atualizações desse repo continuam a fluir.

O recuo nunca desce abaixo da prioridade da fonte a partir da qual o pacote está atualmente instalado, por isso um congelamento nunca pode tornar-se uma despromoção; se o único candidato não congelado ficasse abaixo disso, o pacote é mantido. Um pin restringe primeiro o conjunto de candidatos, e o congelamento aplica-se dentro dele, por isso um pacote ao mesmo tempo fixado e congelado é mantido.


O comando frozen

O frozen valida regras e acrescenta-as à lista negra por ti.

slacker frozen "@alienbob vlc-[0-9]"     # congelar só o vlc do alienbob (regex)
slacker frozen "vlc-*"                     # um glob: tudo o que comece por "vlc-"
slacker frozen "webkit2gtk6.0*"           # um glob; o ponto é literal
slacker frozen kde/                       # congelar toda a série kde
slacker frozen "xf86-.*-202.*"            # uma regra regex
slacker frozen "@conraid ^ffmpeg-"        # quase exato, restrito a conraid
  • Cada argumento é uma regra; põe entre aspas qualquer regra que contenha espaços (uma regra @repo, por exemplo).
  • O slacker assinala um provável erro — um @repo que não nomeia nenhum repositório ativo, ou uma regex que contém um espaço (nenhum identificador de pacote tem espaços, por isso costuma ser um @ esquecido ou um lapso de aspas) — e pergunta se a declara à mesma.
  • Imprime o que cada regra vai congelar e pede confirmação. O --yes salta as perguntas. Regras já presentes são ignoradas.

O comando unfrozen

O unfrozen é o equivalente de frozen: remove regras da lista negra.

slacker unfrozen                          # listar as regras atuais (não é preciso root para ler)
slacker unfrozen emacs                     # remover a regra "emacs"
slacker unfrozen "@alienbob vlc-[0-9]"     # remover uma regra restrita (entre aspas)
slacker unfrozen "xf86-.*-202.*"           # os caracteres especiais são correspondidos literalmente

A correspondência é exata e literal — nunca um padrão. Cada argumento tem de igualar uma regra existente carácter a carácter; os metacaracteres de regex numa regra (.*, *, -, [, ], /) são comparados tal como estão, e não interpretados. Assim unfrozen "fcitx5*" remove só a regra fcitx5* e nunca toca em fcitx5-qt, e unfrozen fcitx5 (uma cadeia mais curta) não corresponde a nada em vez de remover fcitx5* por acidente. É deliberado: uma lista negra está cheia de caracteres especiais, e a correspondência exata é a única forma segura de remover a linha certa.

  • Executa-o sem argumento para imprimir as regras atuais, de modo a copiar o texto exato a remover.
  • As linhas de comentário, as linhas em branco e qualquer regra que não nomeaste são preservadas tal como estão; uma regra não encontrada é reportada, e nada é escrito a menos que pelo menos uma regra tenha de facto correspondido.
  • Põe entre aspas qualquer regra com espaços ou caracteres especiais de shell (uma regra @repo, um * final), tal como farias para frozen.

Remover uma regra do ficheiro à mão também funciona — o unfrozen apenas o faz em segurança, com a garantia de correspondência exata e a listagem das regras atuais.


Um exemplo trabalhado: congelar o vlc de um só repositório

Digamos que manténs o vlc do alienbob e nunca queres que seja substituído ou removido:

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

Porquê vlc-[0-9] e não apenas vlc? A regra é correspondida sem âncora sobre o identificador completo. vlc sozinho também corresponderia a vlc-plugin-foo ou a tudo o que contenha essas letras; vlc-[0-9] ancora-se à fronteira de versão para corresponder ao pacote vlc em si. Para uma correspondência estrita poderias escrever ^vlc-[0-9]. (O glob vlc-* também é aceite — compila para vlc-.* e congela toda a família vlc-, plugins incluídos; usa a regex ^vlc-[0-9] quando quiseres o pacote vlc.)


Pins: obter um pacote só de um repositório

O mesmo ficheiro blacklist guarda também pins — o oposto positivo de um congelamento. Um congelamento diz nunca obtenhas este pacote (ou não deste repositório); um pin diz obtém este pacote deste repositório, ignorando a prioridade.

Gere os pins com dois comandos:

slacker pin alienbob:vlc     # vlc agora vem só do alienbob, mesmo que um repo de
                             # prioridade mais alta ofereça outro build
slacker unpin vlc            # de volta à resolução normal por prioridade
slacker unpin                # (sem argumento) listar os pins atuais

Um pin é escrito no ficheiro blacklist com um marcador 100%, por isso também o podes acrescentar ou ler à mão:

@alienbob 100% vlc

Como se comporta:

  • Todo o comando o respeita — install, upgrade e upgrade-all obtêm o pacote só do repositório fixado, independentemente da prioridade. Um plano que inclua um pacote fixado lista-o sob «pinned (taken only from their repo, ignoring priority)», tal como os pacotes congelados são realçados.
  • Os pins usam um nome de pacote exato, nunca um padrão (vlc, não vlc*). Um ponto literal é permitido — python3.11 e webkit2gtk6.0 são nomes de pin válidos. Para congelar um padrão, usa antes frozen (aceita globs e regex).
  • Um pacote tem no máximo um pin. Fixá-lo a outro repositório substitui o anterior.
  • Se o repositório fixado não oferecer atualmente o pacote, este fica simplesmente como está (nunca é puxado de outro lado) até esse repositório o fornecer. O slacker status assinala um pin cujo repositório não está ativo, e o del-repo avisa-te se houver pacotes fixados ao repositório que estás a remover.
  • No clean-system, um pin por si só não protege um pacote. Mas um pacote estranho que está fixado e foi de facto instalado a partir do repo a que está fixado é oferecido num passo separado — [R]emove all / [K]eep all / [P]rompt each, com Keep por predefinição (um pin é uma escolha explícita). Um nome fixado cuja cópia instalada veio de outra fonte é ignorado por esse passo e segue a lógica normal do clean-system.
  • Um congelamento vence sempre um pin no mesmo pacote: se vlc estiver ao mesmo tempo congelado e fixado, o congelamento prevalece e o pin nada faz até fazeres unfrozen.

Pin vs o congelamento restrito do exemplo acima: @alienbob vlc congela o vlc do alienbob (e deixa outros repositórios atualizá-lo por prioridade); @alienbob 100% vlc fixa o vlc ao alienbob (e não deixa nenhum outro repositório fornecê-lo). São opostos.


Lista negra vs quarentena de repositório

Resolvem problemas diferentes:

Lista negra (frozen) Quarentena (distrust-repo)
Âmbito pacotes específicos (por regex/série) um repositório inteiro
Efeito congelar / esconder esses pacotes o repositório não fornece nenhum pacote
Usa-a para «nunca mexer neste pacote» «não confiar nesta fonte neste momento»

Ver Security para o modelo de quarentena.