1 Repositories and Priority.pt
Anagnostakis Ioannis edited this page 2026-06-30 21:10:06 +03:00

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

Repositórios e prioridade

Esta é a ideia que define o slacker, e o que o distingue de uma simples ferramenta de espelhos: cada repositório vive num único modelo ordenado por prioridade, e a prioridade nunca é violada em silêncio.


A regra de prioridade

Quando o mesmo nome de pacote é oferecido por vários repositórios, vence o do repositório de prioridade mais alta. Mais importante ainda:

Um pacote instalado nunca é migrado em silêncio para outro repositório, e nunca é rebaixado. Um candidato só é proposto a partir de um repositório de prioridade maior ou igual. A única exceção é um repo:name explícito.

Assim, dar a um repositório uma prioridade alta e distinta tranca os seus pacotes: nada de um repositório inferior os pode substituir, nem mesmo com um número de versão mais recente.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
  I["pacote instalado<br/>(o seu build tag = a sua fonte)"] --> D{"prioridade do repo candidato<br/>vs a fonte instalada"}
  D -->|maior ou igual| U["pode atualizar / substituir"]
  D -->|menor| K["mantido - nunca rebaixado<br/>nunca migrado"]
  PIN["repo:name"] -. "força um repo,<br/>ignorando a prioridade" .-> U
  classDef grey fill:#0d1117,stroke:#6e7781,color:#8b949e;
  classDef blue fill:#0d1117,stroke:#1f6feb,color:#e6edf3;
  classDef green fill:#0d1117,stroke:#2ea043,color:#e6edf3;
  class I,PIN grey
  class D blue
  class U green
  class K grey

Como sabe o slacker a «fonte» de um pacote instalado sem uma base de dados? Pelo seu build tag — o campo build menos os dígitos iniciais (1_SBo_SBo, 7cfcf, 1 → oficial). Uma linha tag-priority do utilizador, ou o repositório binário de prioridade mais alta que entrega essa etiqueta (cf → conraid, alien → alienbob, detetado automaticamente), decide a prioridade a que pertence.


O ficheiro repos

# priority  name        url|mirror|mirror/<subpath>                          [flags]
100         slackware   mirror                                                official
200         patches     mirror/patches                                        subtree immutable
90          extras      mirror/extra                                          subtree immutable
85          testing     mirror/testing                                        subtree immutable
80          conraid     https://slackers.it/repository/slackware64-current    immutable
60          alienbob    https://slackware.nl/people/alien/sbrepos/current/x86_64
# linhas tag-priority (podem partilhar uma prioridade):
100         SBo         _SBo
100         local       _rtz

O campo URL

Forma Significado
um URL literal https://, http://, ou file:// (este último para um clone local / NFS / suporte montado — três barras para um caminho absoluto)
mirror a linha ativa de mirrors, tal como está — usa-a para o repositório oficial
mirror/<subcaminho> o espelho ativo com um subcaminho acrescentado (mirror/extra, mirror/testing, mirror/patches) — uma subárvore que segue o espelho que escolheste

Um URL aponta para a raiz do repositório que contém PACKAGES.TXT; para os espelhos oficiais, o MANIFEST.bz2 fica num subdiretório por arquitetura que o slacker encontra automaticamente.

As flags

Flag O que faz
official Marca o repositório seguido: alimenta o show-changelog e é o predefinido para install-new. A colocação continua a ser só por prioridade — o repositório oficial pode ficar em qualquer lado.
immutable Todo o pacote atribuído a este repositório é mantido fora do clean-system. Usa-a para extra/testing/patches que mantenhas instalados, em vez de pôr cada um na lista negra.
subtree Este URL é uma subárvore da distribuição Slackware (extra, patches, testing, pasture). O PACKAGES.TXT delas lista localizações relativas à raiz da distribuição, por isso os pacotes e a GPG-KEY são obtidos do URL pai (raiz) enquanto os metadados vêm do próprio URL. Sem ela, esses pacotes dão 404 com um segmento de caminho duplicado. As quatro subárvores têm de levar sempre esta flag.
verify=... Substituição de verificação por repositório (ver Security).

mirror/extra + subtree andam aos pares. O mirror/extra resolve o URL; o subtree corrige como os pacotes e a chave são obtidos a partir dele.


Fixação (pinning) e seletores

Um PATTERN na linha de comandos pode ser:

Forma Corresponde a
firefox um nome de pacote exato
python uma subcadeia de nome — todos os python-*
kde uma série Slackware (a, ap, d, k, kde, l, n, t, x, xap, xfce, y, …) — só essa série, nunca subcadeias
repo:name um pin — força um repositório independentemente da prioridade (ex. alienbob:vlc)
@repo um seletor de conjunto — todos os pacotes desse repositório (install @gnome, remove @gnome)
@_tag todos os pacotes com essa etiqueta de build (remove @_SBo)

O @ é obrigatório, para que uma palavra solta nunca seja confundida com um repositório. Um @repo/@_tag desconhecido dá uma sugestão «did you mean» e lista os repositórios e etiquetas disponíveis.

Quando um padrão corresponde a mais de um pacote, install/upgrade/reinstall/ remove mostram uma lista numerada — Enter para todos, números/intervalos como 1 3 5 ou 2-4, n para cancelar.

Não existe carácter universal * para a seleção na linha de comandos. Um * sem aspas é expandido pela tua shell para os nomes de ficheiro do diretório atual antes de o slacker correr (o slacker nunca vê o * nem lê o teu diretório); se isso produzir uma enxurrada de argumentos que não são pacotes, o slacker reconhece-o e recusa o comando, sem alterar nada. Põe um padrão literal entre aspas, ou usa @repo para um repositório inteiro. (A Blacklist é o único lugar onde os padrões são globs/regex.)


Gerir repositórios a partir da CLI

slacker add-repo  85 ktown https://slackware.nl/people/alien/ktown/current/x86_64
slacker add-repo  90 extras mirror/extra subtree immutable
slacker del-repo  ktown
slacker pri-repo  95 extras          # reajustar a prioridade de um repo existente
slacker add-tag   100 SBo _SBo
slacker del-tag   _SBo
slacker list-repos          # prioridade, verify, flags, número de instalados

O add-repo valida a linha e, após confirmação, obtém e examina (vets) o repositório (ver Security).

O pri-repo PRIORITY NAME altera a prioridade de um repositório que já tens. Verifica que NAME é um repositório ativo (sugerindo a correspondência mais próxima num erro de escrita) e recusa uma PRIORITY que outro repositório já detenha, nomeando o conflito para que escolhas outro valor — as prioridades têm de continuar distintas. Só a prioridade dessa linha é reescrita; o URL e as flags ficam exatamente como estavam.