7 Blacklist.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

Blacklist

Το blacklist παγώνει πακέτα που δε θες να πειραχτούν, και κρύβει όσα δε θες να σου προτείνονται. Οι κανόνες ζουν στο /etc/slacker/blacklist (ένας ανά γραμμή, # για σχόλια), ή προστίθενται κι αφαιρούνται για σένα από τις εντολές frozen και unfrozen.

Το blacklist είναι διαφορετικό από το ταίριασμα PATTERN της γραμμής εντολών. Τα PATTERN είναι substring + series + ακριβές· οι κανόνες του blacklist είναι globs ή αγκύρωτα regular expressions (συν scoping series/ και @repo) που ταιριάζουν στο πλήρες id πακέτου name-version-arch-build, όπως το slackpkg.


Σύνταξη κανόνα

[@repo] PATTERN
  • Το PATTERN είναι μια σειρά (series) του Slackware όταν τελειώνει σε / (π.χ. kde/). Αλλιώς είναι ένα glob ή ένα αγκύρωτο regex που ταιριάζει στο πλήρες id — ο slacker αποφασίζει από αυτό που έγραψες:
    • Χωρίς σύνταξη regex → glob. Το * ταιριάζει οποιαδήποτε ακολουθία χαρακτήρων, το ? ταιριάζει έναν, και κάθε άλλος χαρακτήρας (συμπεριλαμβανομένης μιας κυριολεκτικής ., όπως στο webkit2gtk6.0 ή python3.11) λαμβάνεται αυτολεξεί. Έτσι τα vlc-*, webkit2gtk6.0*, *-l10n-* δουλεύουν όπως θα περίμενες.
    • Σύνταξη regex → regex. Ένα pattern που περιέχει χαρακτήρα [ ] ( ) { } | ^ $ \ , ή το ιδίωμα «οποιοιδήποτε χαρακτήρες» .* / .+, λαμβάνεται ως regex αυτολεξεί. Έτσι το xf86-.*-202.* πιάνει ένα build 202x, το ^vlc-[0-9] αγκυρώνει στο πακέτο vlc, κι ένα σκέτο vlc ταιριάζει σε οποιοδήποτε id περιέχει vlc. Αγκύρωσε με ^...$ για ακριβές ταίριασμα.
  • Το προαιρετικό prefix @repo περιορίζει τον κανόνα σ' ένα repository: για ένα διαθέσιμο πακέτο, στο υποψήφιο repo του· για ένα εγκατεστημένο, στην πηγή του.

Frozen vs hidden

Το ταίριασμα είναι… Αποτέλεσμα
εγκατεστημένο frozen — δεν εγκαθίσταται, αναβαθμίζεται, επανεγκαθίσταται ή αφαιρείται ποτέ, και δεν παρατίθεται ποτέ από το clean-system
μη εγκατεστημένο hidden — κρύβεται από install-new, αναβαθμίσεις και check-updates, αλλά εμφανίζεται ακόμη στα search/info με σήμανση [blacklisted]

Το blacklist τηρείται από κάθε εντολή που μεταβάλλει (συμπεριλαμβανομένου του reinstall).


Η εντολή frozen

Το frozen επικυρώνει κανόνες και τους προσθέτει στο blacklist για σένα.

slacker frozen "@alienbob vlc-[0-9]"     # πάγωσε μόνο το vlc του alienbob (regex)
slacker frozen "vlc-*"                     # ένα glob: ό,τι αρχίζει με "vlc-"
slacker frozen "webkit2gtk6.0*"           # ένα glob· η τελεία είναι κυριολεκτική
slacker frozen kde/                       # πάγωσε όλη τη σειρά kde
slacker frozen "xf86-.*-202.*"            # ένας κανόνας regex
slacker frozen "@conraid ^ffmpeg-"        # σχεδόν ακριβές, scoped στο conraid
  • Κάθε όρισμα είναι ένας κανόνας· βάλε σε εισαγωγικά όποιον κανόνα περιέχει κενά (έναν κανόνα @repo, για παράδειγμα).
  • Ο slacker επισημαίνει πιθανό λάθος — ένα @repo που δεν ονομάζει ενεργό repo, ή ένα regex που περιέχει κενό (κανένα id πακέτου δεν έχει κενά, οπότε αυτό συνήθως είναι ένα ξεχασμένο @ ή λάθος στα εισαγωγικά) — και ρωτά αν να το δηλώσει παρ' όλα αυτά.
  • Τυπώνει τι θα παγώσει κάθε κανόνας και ζητά επιβεβαίωση. Το --yes παρακάμπτει τα prompts. Κανόνες που υπάρχουν ήδη παραλείπονται.

Η εντολή unfrozen

Το unfrozen είναι το αντίθετο του frozen: αφαιρεί κανόνες από το blacklist.

slacker unfrozen                          # λίστα των τρεχόντων κανόνων (δε χρειάζεται root για ανάγνωση)
slacker unfrozen emacs                     # αφαίρεσε τον κανόνα "emacs"
slacker unfrozen "@alienbob vlc-[0-9]"     # αφαίρεσε scoped κανόνα (σε εισαγωγικά)
slacker unfrozen "xf86-.*-202.*"           # οι ειδικοί χαρακτήρες ταιριάζουν κυριολεκτικά

Το ταίριασμα είναι ακριβές και κυριολεκτικό — ποτέ pattern. Κάθε όρισμα πρέπει να ισούται μ' έναν υπάρχοντα κανόνα χαρακτήρα-προς-χαρακτήρα· οι μεταχαρακτήρες regex σ' έναν κανόνα (.*, *, -, [, ], /) συγκρίνονται αυτολεξεί, όχι ερμηνεύονται. Έτσι το unfrozen "fcitx5*" αφαιρεί μόνο τον κανόνα fcitx5* και δεν αγγίζει ποτέ το fcitx5-qt, και το unfrozen fcitx5 (μικρότερη συμβολοσειρά) δεν ταιριάζει με τίποτα αντί ν' αφαιρέσει κατά λάθος το fcitx5*. Αυτό είναι σκόπιμο: ένα blacklist είναι γεμάτο ειδικούς χαρακτήρες, κι το ακριβές ταίριασμα είναι ο μόνος ασφαλής τρόπος ν' αφαιρέσεις τη σωστή γραμμή.

  • Τρέξε το με κανένα όρισμα για να τυπώσεις τους τρέχοντες κανόνες, ώστε ν' αντιγράψεις το ακριβές κείμενο προς αφαίρεση.
  • Γραμμές σχολίων, κενές γραμμές, κι όποιος κανόνας δεν κατονόμασες διατηρούνται αυτολεξεί· ένας κανόνας που δε βρίσκεται αναφέρεται, και τίποτα δε γράφεται εκτός αν ταίριαξε τουλάχιστον ένας κανόνας.
  • Βάλε σε εισαγωγικά όποιον κανόνα περιέχει κενά ή ειδικούς χαρακτήρες του shell (έναν κανόνα @repo, ένα * στο τέλος), ακριβώς όπως για το frozen.

Η αφαίρεση κανόνα από το αρχείο με το χέρι δουλεύει επίσης — το unfrozen απλώς το κάνει με ασφάλεια, με την εγγύηση ακριβούς ταιριάσματος και τη λίστα των τρεχόντων κανόνων.


Ένα δουλεμένο παράδειγμα: πάγωσε το vlc ενός μόνο repo

Έστω ότι κρατάς το vlc από το alienbob και δε θες ποτέ ν' αντικατασταθεί ή ν' αφαιρεθεί:

slacker frozen "@alienbob vlc-[0-9]"

Γιατί vlc-[0-9] και όχι σκέτο vlc; Ο κανόνας ταιριάζει αγκύρωτα πάνω στο πλήρες id. Το σκέτο vlc θα ταίριαζε και το vlc-plugin-foo ή οτιδήποτε περιέχει τα γράμματα· το vlc-[0-9] αγκυρώνει στο όριο της έκδοσης ώστε να ταιριάζει το ίδιο το πακέτο vlc. Για αυστηρό ταίριασμα θα μπορούσες να γράψεις ^vlc-[0-9]. (Το glob vlc-* γίνεται επίσης δεκτό — μεταγλωττίζεται σε vlc-.* και παγώνει όλη την οικογένεια vlc-, μαζί με τα plugins· χρησιμοποίησε το regex ^vlc-[0-9] όταν θες μόνο το πακέτο vlc.)


Pins: πάρε ένα πακέτο μόνο από ένα repo

Το ίδιο αρχείο blacklist αποθηκεύει επίσης pins — το θετικό αντίθετο ενός freeze. Ένα freeze λέει ποτέ μην πάρεις αυτό το πακέτοόχι από αυτό το repo)· ένα pin λέει πάρε αυτό το πακέτο μόνο από αυτό το repo, αγνοώντας την προτεραιότητα.

Διαχειρίσου τα pins με δύο εντολές:

slacker pin alienbob:vlc     # το vlc έρχεται τώρα μόνο από το alienbob, ακόμη κι αν
                             # ένα repo υψηλότερης προτεραιότητας προσφέρει άλλο build
slacker unpin vlc            # πίσω στην κανονική επίλυση κατά προτεραιότητα
slacker unpin                # (χωρίς όρισμα) λίστα των τρεχόντων pins

Ένα pin γράφεται στο αρχείο blacklist μ' έναν δείκτη 100%, οπότε μπορείς και να το προσθέσεις ή να το διαβάσεις με το χέρι:

@alienbob 100% vlc

Πώς συμπεριφέρεται:

  • Κάθε εντολή το τηρεί — τα install, upgrade, και upgrade-all τροφοδοτούν το πακέτο μόνο από το pinned repo, ανεξάρτητα από προτεραιότητα. Ένα plan που περιλαμβάνει pinned πακέτο το παραθέτει κάτω από «pinned (taken only from their repo, ignoring priority)», όπως αναδεικνύονται τα frozen πακέτα.
  • Τα pins χρησιμοποιούν ακριβές όνομα πακέτου, ποτέ pattern (vlc, όχι vlc*). Μια κυριολεκτική τελεία είναι εντάξει — python3.11 και webkit2gtk6.0 είναι έγκυρα ονόματα pin. Για να παγώσεις ένα pattern, χρησιμοποίησε frozen (δέχεται globs και regex).
  • Ένα πακέτο έχει το πολύ ένα pin. Το pin σ' άλλο repo αντικαθιστά το παλιό.
  • Αν το pinned repo δεν προσφέρει αυτή τη στιγμή το πακέτο, το πακέτο απλώς μένει ως έχει (δεν τραβιέται ποτέ από αλλού) μέχρι αυτό το repo να το παρέχει. Το slacker status επισημαίνει pin του οποίου το repo δεν είναι ενεργό, και το del-repo σε προειδοποιεί αν υπάρχουν πακέτα pinned στο repo που αφαιρείς.
  • Ένα freeze κερδίζει πάντα ένα pin στο ίδιο πακέτο: αν το vlc είναι και frozen και pinned, ισχύει το freeze κι το pin δεν κάνει τίποτα μέχρι να το κάνεις unfrozen.

Pin vs το scoped freeze του παραπάνω παραδείγματος: το @alienbob vlc παγώνει το vlc του alienbob (κι αφήνει άλλα repos να το ανανεώσουν κατά προτεραιότητα)· το @alienbob 100% vlc κάνει pin το vlc στο alienbob (και δεν αφήνει κανένα άλλο repo να το παρέχει). Είναι αντίθετα.


Blacklist vs quarantine repo

Λύνουν διαφορετικά προβλήματα:

Blacklist (frozen) Quarantine (distrust-repo)
Εμβέλεια συγκεκριμένα πακέτα (κατά regex/series) ένα ολόκληρο repository
Αποτέλεσμα freeze / hide αυτών των πακέτων το repo δεν παρέχει κανένα πακέτο
Πότε «μην αγγίξεις ποτέ αυτό το πακέτο» «μην εμπιστεύεσαι αυτή την πηγή τώρα»

Δες Security για το μοντέλο quarantine.