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 completoname-version-arch-build, como oslackpkg.
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 emwebkit2gtk6.0oupython3.11) é tomado tal como está. Assimvlc-*,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á. Assimxf86-.*-202.*apanha um build 202x,^vlc-[0-9]ancora-se ao pacotevlc, e um simplesvlccorresponde a qualquer identificador que contenhavlc. Ancora com^...$para uma correspondência exata.
- Sem sintaxe de regex → glob.
- O prefixo opcional
@reporestringe a regra a um repositório: para um pacote disponível, o seu repositório candidato; para um instalado, a sua fonte.
Congelado vs escondido
| A correspondência está… | Efeito |
|---|---|
| instalada | congelada — nunca instalada, atualizada, reinstalada nem removida, e nunca listada 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 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
@repoque 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
--yessalta 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 parafrozen.
Remover uma regra do ficheiro à mão também funciona — o
unfrozenapenas 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 só 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 só 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,upgradeeupgrade-allobtê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ãovlc*). Um ponto literal é permitido —python3.11ewebkit2gtk6.0são nomes de pin válidos. Para congelar um padrão, usa antesfrozen(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 statusassinala um pin cujo repositório não está ativo, e odel-repoavisa-te se houver pacotes fixados ao repositório que estás a remover. - Um congelamento vence sempre um pin no mesmo pacote: se
vlcestiver ao mesmo tempo congelado e fixado, o congelamento prevalece e o pin nada faz até fazeresunfrozen.
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.
slacker
Getting started
Using slacker
- Commands
- Common Workflows
- Distribution Upgrade
- Repositories and Priority
- Package History
- Dependencies
- Docker
- Templates
- Blacklist
Trust & safety
Reference
For contributors
slacker - slackpkg + slackpkg+ in one - Apache-2.0 - by Ioannis Anagnostakis (rizitis) - beta / WIP, for Slackware -current (64-bit & 32-bit)