6 Repositories and Priority.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

Repositorios y prioridad

Esta es la idea que define a slacker, y lo que lo distingue de una simple herramienta de mirror: cada repositorio vive en un único modelo ordenado por prioridad, y la prioridad nunca se viola en silencio.


La regla de prioridad

Cuando el mismo nombre de paquete lo ofrecen varios repositorios, gana el del repositorio de mayor prioridad. Más importante aún:

Un paquete instalado nunca se migra en silencio a otro repositorio, y nunca se degrada. Un candidato solo se propone desde un repositorio de prioridad mayor o igual. La única excepción es un repo:name explícito.

Así, dar a un repositorio una prioridad alta y distinta bloquea sus paquetes: nada de un repositorio inferior puede reemplazarlos, ni siquiera con un número de versión más nuevo.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
  I["paquete instalado<br/>(su build tag = su fuente)"] --> D{"prioridad del repo candidato<br/>vs la fuente instalada"}
  D -->|mayor o igual| U["puede actualizar / reemplazar"]
  D -->|menor| K["se conserva - nunca degradado<br/>nunca migrado"]
  PIN["repo:name"] -. "fuerza un repo,<br/>anulando la prioridad" .-> 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

¿Cómo sabe slacker la «fuente» de un paquete instalado sin una base de datos? Por su build tag — el campo build menos los dígitos iniciales (1_SBo_SBo, 7cfcf, 1 → oficial). Una línea tag-priority del usuario, o el repositorio binario de mayor prioridad que entrega esa etiqueta (cf → conraid, alien → alienbob, detectado automáticamente), decide la prioridad a la que pertenece.


El archivo 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
# líneas tag-priority (pueden compartir una prioridad):
100         SBo         _SBo
100         local       _rtz

El campo URL

Forma Significado
una URL literal https://, http://, o file:// (este último para un clon local / NFS / medio montado — tres barras para una ruta absoluta)
mirror la línea activa de mirrors, tal cual — úsala para el repositorio oficial
mirror/<subruta> el mirror activo con una subruta añadida (mirror/extra, mirror/testing, mirror/patches) — un subárbol que sigue al mirror que elegiste

Una URL apunta a la raíz del repositorio que contiene PACKAGES.TXT; para los mirrors oficiales, MANIFEST.bz2 vive en un subdirectorio por arquitectura que slacker localiza automáticamente.

Los flags

Flag Qué hace
official Marca el repositorio rastreado: alimenta show-changelog y es el predeterminado de install-new. La ubicación sigue siendo solo por prioridad — el repositorio oficial puede estar en cualquier sitio.
immutable Todo paquete atribuido a este repositorio queda fuera de clean-system. Úsalo para extra/testing/patches que mantengas instalados, en lugar de poner en la lista negra cada uno.
subtree Esta URL es un subárbol de distribución de Slackware (extra, patches, testing, pasture). Su PACKAGES.TXT lista las ubicaciones relativas a la raíz de la distribución, así que los paquetes y GPG-KEY se obtienen de la URL padre (raíz) mientras que los metadatos vienen de la URL en sí. Sin él, esos paquetes dan 404 con un segmento de ruta duplicado. Los cuatro subárboles deben llevar siempre este flag.
verify=... Anulación de verificación por repositorio (véase Security).

mirror/extra + subtree van en pareja. mirror/extra resuelve la URL; subtree corrige cómo se obtienen los paquetes y la clave de ella.


Fijado (pinning) y selectores

Un PATTERN en la línea de comandos puede ser:

Forma Coincide con
firefox un nombre de paquete exacto
python una subcadena de nombre — todos los python-*
kde una serie de Slackware (a, ap, d, k, kde, l, n, t, x, xap, xfce, y, …) — solo esa serie, nunca subcadenas
repo:name un pin — fuerza un repositorio sin importar la prioridad (p. ej. alienbob:vlc)
@repo un selector de conjunto — todos los paquetes de ese repositorio (install @gnome, remove @gnome)
@_tag todos los paquetes con esa etiqueta de build (remove @_SBo)

El @ es obligatorio, de modo que una palabra suelta nunca se confunde con un repositorio. Un @repo/@_tag desconocido da una sugerencia «did you mean» y lista los repositorios y etiquetas disponibles.

Cuando un patrón coincide con más de un paquete, install/upgrade/reinstall/ remove muestran una lista numerada — Intro para todos, números/rangos como 1 3 5 o 2-4, n para cancelar.

No existe comodín * para la selección en la línea de comandos. Un * sin comillas lo expande tu shell a los nombres de archivo del directorio actual antes de que slacker se ejecute (slacker nunca ve el * ni lee tu directorio); si eso produce una avalancha de argumentos que no son paquetes, slacker lo reconoce y rechaza el comando, sin cambiar nada. Pon entre comillas un patrón literal, o usa @repo para un repositorio entero. (La Blacklist es el único sitio donde los patrones son globs/regex.)


Gestionar repositorios desde la 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 la prioridad de un repo existente
slacker add-tag   100 SBo _SBo
slacker del-tag   _SBo
slacker list-repos          # prioridad, verify, flags, número de instalados

add-repo valida la línea y, tras confirmar, obtiene y examina (vets) el repositorio (véase Security).

pri-repo PRIORITY NAME cambia la prioridad de un repositorio que ya tienes. Comprueba que NAME sea un repositorio activo (sugiriendo la coincidencia más cercana ante una errata) y rechaza una PRIORITY que otro repositorio ya ocupe, nombrando el conflicto para que elijas otro valor — las prioridades deben seguir siendo distintas. Solo se reescribe la prioridad de esa línea; la URL y los flags quedan exactamente como estaban.