7 Repositories and Priority.el
Anagnostakis Ioannis edited this page 2026-06-30 21:10:06 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

Repositories και προτεραιότητα

Αυτή είναι η καθοριστική ιδέα του slacker, κι αυτό που τον ξεχωρίζει από ένα απλό εργαλείο mirror: κάθε repository ζει μέσα σ' ένα μοντέλο ταξινομημένο κατά προτεραιότητα, κι η προτεραιότητα δεν παραβιάζεται ποτέ σιωπηλά.


Ο κανόνας της προτεραιότητας

Όταν το ίδιο όνομα πακέτου προσφέρεται από πολλά repositories, κερδίζει αυτό από το repository με την υψηλότερη προτεραιότητα. Πιο σημαντικό:

Ένα εγκατεστημένο πακέτο δε μεταναστεύει ποτέ σιωπηλά σ' άλλο repository, και δεν υποβαθμίζεται ποτέ. Ένας υποψήφιος προτείνεται μόνο από repository υψηλότερης ή ίσης προτεραιότητας. Η μόνη εξαίρεση είναι ένα ρητό repo:name pin.

Έτσι, δίνοντας σ' ένα repository μια διακριτή, υψηλή προτεραιότητα κλειδώνεις τα πακέτα του: τίποτα από repo χαμηλότερης προτεραιότητας δεν μπορεί να τα αντικαταστήσει, ακόμη κι αν έχει νεότερο αριθμό έκδοσης.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#161b22','primaryBorderColor':'#1f6feb','primaryTextColor':'#e6edf3','lineColor':'#6e7781','fontFamily':'monospace'}}}%%
flowchart TB
  I["εγκατεστημένο πακέτο<br/>(το build tag = η πηγή του)"] --> D{"προτεραιότητα υποψήφιου repo<br/>έναντι της εγκατεστημένης πηγής"}
  D -->|υψηλότερη ή ίση| U["επιτρέπεται αναβάθμιση / αντικατάσταση"]
  D -->|χαμηλότερη| K["διατηρείται - ποτέ υποβάθμιση<br/>ποτέ μετανάστευση"]
  PIN["repo:name pin"] -. "επιβάλλει repo,<br/>παρακάμπτοντας την προτεραιότητα" .-> 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

Πώς ξέρει ο slacker την «πηγή» ενός εγκατεστημένου πακέτου χωρίς βάση δεδομένων; Από το build tag του — το πεδίο build μείον τα αρχικά ψηφία (1_SBo_SBo, 7cfcf, 1 → official). Μια γραμμή tag-priority του χρήστη, ή το repo με την υψηλότερη προτεραιότητα που φέρνει αυτό το tag (cf → conraid, alien → alienbob, με αυτόματο εντοπισμό), καθορίζει την προτεραιότητα στην οποία ανήκει.


Το αρχείο 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
# γραμμές tag-priority (μπορούν να μοιράζονται προτεραιότητα):
100         SBo         _SBo
100         local       _rtz

Το πεδίο URL

Μορφή Σημασία
ένα κανονικό URL https://, http://, ή file:// (το τελευταίο για τοπικό clone / NFS / προσαρτημένο μέσο — τρεις κάθετοι για απόλυτη διαδρομή)
mirror η ενεργή γραμμή από το mirrors, ως έχει — χρησιμοποίησέ το για το επίσημο repo
mirror/<subpath> το ενεργό mirror με ένα subpath στο τέλος (mirror/extra, mirror/testing, mirror/patches) — ένα subtree που ακολουθεί όποιο mirror διάλεξες

Ένα URL δείχνει στη ρίζα του repo που περιέχει το PACKAGES.TXT· για τα επίσημα mirror, το MANIFEST.bz2 ζει σ' έναν ανά-αρχιτεκτονική υποκατάλογο που ο slacker βρίσκει αυτόματα.

Τα flags

Flag Τι κάνει
official Σημειώνει το παρακολουθούμενο repo: τροφοδοτεί το show-changelog κι είναι το προεπιλεγμένο για το install-new. Η θέση παραμένει αποκλειστικά κατά προτεραιότητα — το επίσημο repo μπορεί να σταθεί οπουδήποτε.
immutable Κάθε πακέτο που αποδίδεται σ' αυτό το repo κρατιέται έξω από το clean-system. Χρησιμοποίησέ το για extra/testing/patches που κρατάς εγκατεστημένα, αντί να κάνεις blacklist το καθένα.
subtree Αυτό το URL είναι subtree διανομής του Slackware (extra, patches, testing, pasture). Το PACKAGES.TXT τους παραθέτει τις τοποθεσίες πακέτων σχετικά με τη ρίζα της διανομής, οπότε τα πακέτα και το GPG-KEY λαμβάνονται από το γονικό (root) URL ενώ τα metadata από το ίδιο το URL. Χωρίς αυτό, τα πακέτα δίνουν 404 με διπλασιασμένο τμήμα διαδρομής. Τα τέσσερα subtree πρέπει πάντα να φέρουν αυτό το flag.
verify=... Παράκαμψη επαλήθευσης ανά repo (δες Security).

Το mirror/extra + subtree πάνε ζευγάρι. Το mirror/extra επιλύει το URL· το subtree διορθώνει το πώς λαμβάνονται τα πακέτα και το κλειδί από αυτό.


Pinning και selectors

Ένα PATTERN στη γραμμή εντολών μπορεί να είναι:

Μορφή Ταιριάζει
firefox ακριβές όνομα πακέτου
python ένα substring ονόματος — όλα τα python-*
kde μια σειρά (series) του Slackware (a, ap, d, k, kde, l, n, t, x, xap, xfce, y, …) — μόνο αυτή τη σειρά, ποτέ substrings
repo:name ένα pin — επιβάλλει ένα repository ανεξάρτητα από προτεραιότητα (π.χ. alienbob:vlc)
@repo ένας set selector — κάθε πακέτο σ' αυτό το repo (install @gnome, remove @gnome)
@_tag κάθε πακέτο μ' αυτό το build tag (remove @_SBo)

Το @ είναι υποχρεωτικό, ώστε μια σκέτη λέξη να μη μπερδεύεται ποτέ για repo. Ένα άγνωστο @repo/@_tag δίνει πρόταση «did you mean» και παραθέτει τα διαθέσιμα repos και tags.

Όταν ένα pattern ταιριάζει σε περισσότερα από ένα πακέτα, τα install/upgrade/reinstall/remove δείχνουν αριθμημένη λίστα — Enter για όλα, αριθμοί/εύρη όπως 1 3 5 ή 2-4, n για ακύρωση.

Δεν υπάρχει wildcard * για επιλογή στη γραμμή εντολών. Ένα * χωρίς εισαγωγικά το επεκτείνει το shell σου στα ονόματα αρχείων του τρέχοντος καταλόγου πριν τρέξει ο slacker (ο slacker δε βλέπει ποτέ το * και δε διαβάζει ποτέ τον κατάλογό σουαν αυτό παράγει πλημμύρα από μη-πακέτα ορίσματα, ο slacker το αναγνωρίζει και αρνείται την εντολή, χωρίς ν' αλλάξει τίποτα. Βάλε σε εισαγωγικά ένα κυριολεκτικό pattern, ή χρησιμοποίησε @repo για ολόκληρο repository. (Το Blacklist είναι το ένα μέρος όπου τα patterns είναι globs/regex.)


Διαχείριση repos από το 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          # επαναρρύθμιση προτεραιότητας υπάρχοντος repo
slacker add-tag   100 SBo _SBo
slacker del-tag   _SBo
slacker list-repos          # προτεραιότητα, verify, flags, πλήθος εγκατεστημένων

Το add-repo επικυρώνει τη γραμμή και, μετά από επιβεβαίωση, λαμβάνει και ελέγχει (vets) το repo (δες Security).

Το pri-repo PRIORITY NAME αλλάζει την προτεραιότητα ενός repo που έχεις ήδη. Ελέγχει ότι το NAME είναι ενεργό repo (προτείνοντας το κοντινότερο ταίριασμα σε τυπογραφικό) κι αρνείται μια PRIORITY που κρατά ήδη άλλο repo, κατονομάζοντας τη σύγκρουση ώστε να διαλέξεις άλλη τιμή — οι προτεραιότητες πρέπει να μένουν διακριτές. Ξαναγράφεται μόνο η προτεραιότητα αυτής της γραμμής· το URL και τα flags μένουν ακριβώς όπως ήταν.