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. Αγκύρωσε με^...$για ακριβές ταίριασμα.
- Χωρίς σύνταξη regex → glob. Το
- Το προαιρετικό prefix
@repoπεριορίζει τον κανόνα σ' ένα repository — ταιριάζοντας με όνομα repo ή build tag: για ένα διαθέσιμο πακέτο, στο υποψήφιο repo του· για ένα εγκατεστημένο, στην πηγή του. Έτσι το@testing xf86-.*περιορίζεται στο repotesting, ενώ το@_SBo fooπεριορίζεται σε πακέτα που φέρουν το build tag_SBo.
Frozen vs hidden
| Το ταίριασμα είναι… | Αποτέλεσμα |
|---|---|
| εγκατεστημένο | ο υποψήφιος είναι frozen — αντιμετωπίζεται σαν να μην πρόσφερε το πακέτο το repo του· το ίδιο το πακέτο δεν παρατίθεται ποτέ από το clean-system |
| μη εγκατεστημένο | hidden — κρύβεται από install-new, αναβαθμίσεις και check-updates, αλλά εμφανίζεται ακόμη στα search/info με σήμανση [blacklisted] |
Το blacklist τηρείται από κάθε εντολή που μεταβάλλει (συμπεριλαμβανομένου του
reinstall).
Το freeze είναι fallback, όχι pin
Ένα freeze δεν καρφώνει απλώς την εγκατεστημένη έκδοση. Ένας frozen υποψήφιος αντιμετωπίζεται σαν να μην πρόσφερε καθόλου το πακέτο το repository του, κι η επίλυση συνεχίζει κανονικά κατά προτεραιότητα πάνω στους υπόλοιπους (μη-frozen) υποψήφιους. Ένα εγκατεστημένο πακέτο κρατιέται αμετάβλητο μόνο όταν κάθε υποψήφιος που θα εξέταζε είναι frozen.
- Ένα
frozen xf86-.*χωρίς@repoπαγώνει αυτό το όνομα σε κάθε repo → κρατιέται παντού. - Ένα scoped
@testing xf86-.*παγώνει μόνο τον υποψήφιο του testing → η επίλυση πέφτει στο επόμενο repo κατά προτεραιότητα (π.χ.slackware), κι οι αναβαθμίσεις εκείνου του repo συνεχίζουν να ρέουν.
Το fallback δεν κατεβαίνει ποτέ κάτω από την προτεραιότητα της πηγής απ' όπου είναι
εγκατεστημένο τώρα το πακέτο, οπότε ένα freeze δεν γίνεται ποτέ υποβάθμιση· αν ο
μόνος μη-frozen υποψήφιος θα κατατασσόταν χαμηλότερα, το πακέτο κρατιέται αντ' αυτού.
Ένα pin περιορίζει πρώτα το σύνολο υποψηφίων κι έπειτα εφαρμόζεται το freeze μέσα
σ' αυτό, οπότε ένα πακέτο και pinned και frozen κρατιέται.
Η εντολή 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 που αφαιρείς. - Στο
clean-system, ένα pin από μόνο του δεν προστατεύει ένα πακέτο. Όμως ένα foreign πακέτο που είναι pinned και εγκαταστάθηκε όντως από το repo στο οποίο είναι pinned προσφέρεται σε ξεχωριστό βήμα — [R]emove all / [K]eep all / [P]rompt each, με προεπιλογή Keep (το pin είναι ρητή επιλογή). Ένα pinned όνομα του οποίου το εγκατεστημένο αντίγραφο ήρθε από άλλη πηγή αγνοείται από αυτό το βήμα κι ακολουθεί την κανονική λογική του clean-system. - Ένα 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.
slacker
Getting started
Using slacker
- Commands
- Common Workflows
- Distribution Upgrade
- Repositories and Priority
- Package History
- Dependencies
- Docker
- Templates
- Blacklist
Trust & safety
Reference
For contributors
slacker - slackpkg + slackpkg+ in one - Apache-2.0 - by Ioannis Anagnostakis (rizitis) - beta / WIP, for Slackware -current (64-bit & 32-bit)