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

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

Repository e priorità

Questa è l'idea che definisce slacker, e ciò che lo distingue da un semplice strumento di mirror: ogni repository vive in un unico modello ordinato per priorità, e la priorità non viene mai violata in silenzio.


La regola di priorità

Quando lo stesso nome di pacchetto è offerto da più repository, vince quello del repository di priorità più alta. Ancora più importante:

Un pacchetto installato non viene mai migrato in silenzio verso un altro repository, e non viene mai retrocesso. Un candidato è proposto solo da un repository di priorità maggiore o uguale. L'unica eccezione è un repo:name esplicito.

Così, dare a un repository una priorità alta e distinta blocca i suoi pacchetti: nulla da un repository inferiore può sostituirli, nemmeno con un numero di versione più recente.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
  I["pacchetto installato<br/>(il suo build tag = la sua sorgente)"] --> D{"priorità del repo candidato<br/>vs la sorgente installata"}
  D -->|maggiore o uguale| U["può aggiornare / sostituire"]
  D -->|minore| K["mantenuto - mai retrocesso<br/>mai migrato"]
  PIN["repo:name"] -. "forza un repo,<br/>scavalcando la priorità" .-> 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

Come fa slacker a conoscere la «sorgente» di un pacchetto installato senza un database? Dal suo build tag — il campo build meno le cifre iniziali (1_SBo_SBo, 7cfcf, 1 → ufficiale). Una riga tag-priority dell'utente, o il repository binario di priorità più alta che fornisce quell'etichetta (cf → conraid, alien → alienbob, rilevato automaticamente), decide la priorità a cui appartiene.


Il file 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
# righe tag-priority (possono condividere una priorità):
100         SBo         _SBo
100         local       _rtz

Il campo URL

Forma Significato
un URL letterale https://, http://, o file:// (l'ultimo per un clone locale / NFS / supporto montato — tre barre per un percorso assoluto)
mirror la riga attiva di mirrors, così com'è — usala per il repository ufficiale
mirror/<sottopercorso> il mirror attivo con un sottopercorso aggiunto (mirror/extra, mirror/testing, mirror/patches) — un sottoalbero che segue il mirror che hai scelto

Un URL punta alla radice del repository che contiene PACKAGES.TXT; per i mirror ufficiali, MANIFEST.bz2 vive in una sottocartella per architettura che slacker individua automaticamente.

I flag

Flag Cosa fa
official Marca il repository tracciato: alimenta show-changelog ed è il predefinito di install-new. La collocazione resta solo per priorità — il repository ufficiale può stare ovunque.
immutable Ogni pacchetto attribuito a questo repository è tenuto fuori da clean-system. Usalo per extra/testing/patches che tieni installati, invece di mettere in lista nera ciascuno.
subtree Questo URL è un sottoalbero di distribuzione Slackware (extra, patches, testing, pasture). Il loro PACKAGES.TXT elenca le posizioni relative alla radice della distribuzione, quindi i pacchetti e GPG-KEY sono scaricati dall'URL padre (radice) mentre i metadati vengono dall'URL stesso. Senza, quei pacchetti danno 404 con un segmento di percorso raddoppiato. I quattro sottoalberi devono sempre portare questo flag.
verify=... Override di verifica per repository (vedi Security).

mirror/extra + subtree vanno in coppia. mirror/extra risolve l'URL; subtree corregge come pacchetti e chiave vengono scaricati da esso.


Pinning e selettori

Un PATTERN sulla riga di comando può essere:

Forma Corrisponde a
firefox un nome di pacchetto esatto
python una sottostringa di nome — tutti i python-*
kde una serie Slackware (a, ap, d, k, kde, l, n, t, x, xap, xfce, y, …) — solo quella serie, mai sottostringhe
repo:name un pin — forza un repository senza riguardo alla priorità (es. alienbob:vlc)
@repo un selettore d'insieme — ogni pacchetto di quel repository (install @gnome, remove @gnome)
@_tag ogni pacchetto con quell'etichetta di build (remove @_SBo)

La @ è obbligatoria, così una parola nuda non viene mai scambiata per un repository. Un @repo/@_tag sconosciuto dà un suggerimento «did you mean» ed elenca i repository e le etichette disponibili.

Quando un pattern corrisponde a più di un pacchetto, install/upgrade/reinstall/ remove mostrano un elenco numerato — Invio per tutti, numeri/intervalli come 1 3 5 o 2-4, n per annullare.

Non esiste un jolly * per la selezione da riga di comando. Un * senza apici viene espanso dalla tua shell nei nomi di file della cartella corrente prima che slacker venga eseguito (slacker non vede mai il * e non legge mai la tua cartella); se ciò produce una valanga di argomenti non-pacchetto, slacker lo riconosce e rifiuta il comando, senza cambiare nulla. Metti tra apici un pattern letterale, o usa @repo per un intero repository. (La Blacklist è l'unico posto in cui i pattern sono glob/regex.)


Gestire i repository dalla 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          # riregolare la priorità di un repo esistente
slacker add-tag   100 SBo _SBo
slacker del-tag   _SBo
slacker list-repos          # priorità, verify, flag, numero di installati

add-repo valida la riga e, dopo conferma, scarica e controlla (vets) il repository (vedi Security).

pri-repo PRIORITY NAME cambia la priorità di un repository che hai già. Verifica che NAME sia un repository attivo (suggerendo la corrispondenza più vicina in caso di errore di battitura) e rifiuta una PRIORITY già detenuta da un altro repository, nominando il conflitto così che tu scelga un altro valore — le priorità devono restare distinte. Viene riscritta solo la priorità di quella riga; l'URL e i flag restano esattamente com'erano.