Κάποια στιγμή μπορεί να κάνεις ένα απλό:
sudo apt upgrade
ή:
sudo pacman -Syu
και να δεις ένα πακέτο που δεν θέλεις να αναβαθμίσεις.
Μπορεί να είναι μια εφαρμογή που δουλεύει όπως θέλεις, μια βιβλιοθήκη που δημιουργεί κάποιο conflict ή ακόμα και ένας kernel που δεν θέλεις να πειράξεις, επειδή το συγκεκριμένο hardware σου λειτουργεί μια χαρά.
user@osarena:~$ sudo pacman -Syu --ignore firefox
:: Synchronizing package databases...
core is up to date
extra is up to date
multilib is up to date
:: Starting full system upgrade...
warning: firefox: ignoring package upgrade (154.0.1 => 155.0.1)
there is nothing to do
user@osarena:~$
Το να αγνοήσεις ένα πακέτο μπορεί να είναι χρήσιμο. Θέλει όμως προσοχή, γιατί οι αναβαθμίσεις στο Linux δεν γίνονται πάντα ανεξάρτητα η μία από την άλλη.
☞ Γιατί να αγνοήσετε ένα πακέτο (Και οι Κίνδυνοι)
Υπάρχουν αρκετοί λόγοι για τους οποίους μπορεί να θέλεις να κρατήσεις μια συγκεκριμένη έκδοση:
- Σταθερότητα: Η τρέχουσα έκδοση λειτουργεί και δεν θέλεις να ρισκάρεις κάτι που δουλεύει.
- Συμβατότητα: Μια νεότερη έκδοση μπορεί να δημιουργεί προβλήματα με άλλο λογισμικό.
- Προσωπική προτίμηση: Μερικές φορές απλά προτιμάς μια συγκεκριμένη έκδοση.
- Hardware: Ένα update μπορεί να επηρεάσει drivers ή τη λειτουργία συγκεκριμένου hardware.
Εδώ όμως χρειάζεται λίγη σκέψη.
Δεν είναι καλή ιδέα να αρχίσεις να κρατάς πίσω ό,τι σου εμφανίζεται.
Ειδικά πακέτα όπως glibc, systemd, openssl ή ο kernel αποτελούν βασικά κομμάτια του συστήματος. Το να τα κρατήσεις πίσω για μεγάλο χρονικό διάστημα μπορεί να δημιουργήσει προβλήματα εξαρτήσεων, να αφήσει γνωστά κενά ασφαλείας (CVEs) ή να οδηγήσει σε μια κατάσταση όπου το σύστημα δεν μπορεί να αναβαθμιστεί σωστά.
Και ειδικά σε rolling release διανομές όπως το Arch, το να αφήνεις συστηματικά πακέτα πίσω μπορεί να οδηγήσει σε partial upgrade, κάτι που δεν υποστηρίζεται.
Με απλά λόγια: κράτα ένα πακέτο επειδή υπάρχει συγκεκριμένος λόγος, όχι επειδή απλώς δεν σου αρέσει η καινούργια έκδοση.
☞ 1. Arch Linux / Manjaro (pacman)
Στον κόσμο του Arch και των διανομών που βασίζονται σε αυτό, όπως το Manjaro, το pacman σου δίνει τη δυνατότητα να αγνοήσεις συγκεκριμένα πακέτα.
Μόνιμη εξαίρεση
Άνοιξε:
sudo nano /etc/pacman.conf
και στην ενότητα [options] πρόσθεσε:
IgnorePkg = firefox thunderbird
Από εδώ και πέρα τα συγκεκριμένα πακέτα θα εξαιρούνται από τις κανονικές αναβαθμίσεις.
Αν θέλεις να επαναφέρεις την κανονική συμπεριφορά, απλώς αφαίρεσε ή σχολίασε τη συγκεκριμένη γραμμή.
Προσωρινή εξαίρεση
Αν θέλεις να παρακάμψεις ένα πακέτο μόνο για τη συγκεκριμένη αναβάθμιση:
sudo pacman -Syu --ignore firefox
Αυτό είναι συνήθως προτιμότερο όταν θέλεις απλώς να αποφύγεις προσωρινά ένα προβληματικό update.
Προσοχή: Το Arch βασίζεται στην αρχή ότι τα πακέτα αναβαθμίζονται ως σύνολο. Η μόνιμη εξαίρεση πακέτων μπορεί να δημιουργήσει ασυμβατότητες με τις νεότερες εκδόσεις των υπόλοιπων πακέτων.
Άρα, ειδικά εδώ, το «θα το αφήσω έτσι για πάντα» δεν είναι και η καλύτερη ιδέα.
☞ 2. Debian / Ubuntu / Linux Mint / Pop!_OS (apt)
Στις Debian-based διανομές υπάρχουν περισσότεροι από ένας τρόποι.
Μέθοδος A: apt-mark
Αρχικά μπορείς να δεις ποια έκδοση είναι διαθέσιμη:
apt-cache policy vlc
Για να κρατήσεις την εγκατεστημένη έκδοση:
sudo apt-mark hold vlc
Για να επιτρέψεις ξανά τις αναβαθμίσεις:
sudo apt-mark unhold vlc
Και αν θέλεις να δεις ποια πακέτα βρίσκονται αυτή τη στιγμή σε κατάσταση hold:
apt-mark showhold
Αυτή είναι η απλή και πρακτική λύση όταν απλώς θέλεις να πεις στο APT «μην πειράξεις αυτό το πακέτο».
Μέθοδος B: APT Preferences / Pinning
Υπάρχει και το APT pinning, το οποίο είναι πιο προχωρημένη μέθοδος και χρησιμοποιείται όταν θέλεις να δώσεις προτεραιότητα σε συγκεκριμένη έκδοση ή repository.
Για παράδειγμα:
sudo nano /etc/apt/preferences.d/hold-ffmpeg
και:
Package: ffmpeg Pin: version 5.1.2-1build1 Pin-Priority: 1001
Εδώ όμως χρειάζεται προσοχή.
Το Pin-Priority πάνω από 1000 δεν σημαίνει απλώς «κράτα αυτή την έκδοση». Μπορεί να κάνει το APT να προτιμήσει ακόμη και downgrade στην συγκεκριμένη έκδοση.
Άρα, για το απλό «μην αναβαθμίσεις αυτό το πακέτο», το apt-mark hold είναι συνήθως η πιο καθαρή λύση.
Το pinning είναι χρήσιμο όταν ξέρεις ακριβώς τι κάνεις και θέλεις να ελέγξεις τις προτεραιότητες των εκδόσεων.
☞ 3. Fedora / RHEL / AlmaLinux / Rocky Linux (dnf)
Στις σύγχρονες εγκαταστάσεις Fedora και στις διανομές που χρησιμοποιούν το νεότερο DNF5, υπάρχει πλέον ενσωματωμένη εντολή versionlock.
Σημαντική Διάκριση DNF4 vs DNF5
DNF4 (π.χ. RHEL 9, Fedora έως την έκδοση 40): Το versionlock είναι plugin. Πρέπει πρώτα να το εγκαταστήσεις:
sudo dnf install 'dnf-command(versionlock)'
Στη συνέχεια η εντολή είναι: sudo dnf versionlock add kodi.
DNF5 (π.χ. Fedora 41+, RHEL 10+): Το versionlock είναι ενσωματωμένο στο κύριο πακέτο. Η εντολή είναι άμεσα διαθέσιμη:
sudo dnf versionlock add kodi
Για να δεις τα κλειδωμένα πακέτα:
sudo dnf versionlock list
Για να αφαιρέσεις το κλείδωμα ενός πακέτου:
sudo dnf versionlock delete kodi
Για να αφαιρέσεις όλα τα locks (χρήσιμο για καθαρισμό):
sudo dnf versionlock clear
Το DNF5 αποθηκεύει τις σχετικές πληροφορίες στο:
/etc/dnf/versionlock.toml
Μην αντιγράψεις τυφλά έναν παλιό οδηγό που σου λέει να εγκαταστήσεις το plugin. Πρώτα δες ποια έκδοση DNF χρησιμοποιεί η διανομή σου.
☞ 4. openSUSE & Gentoo
openSUSE (zypper)
Το zypper έχει δικό του μηχανισμό κλειδώματος.
Για να κλειδώσεις ένα πακέτο:
sudo zypper addlock libreoffice
Για να δεις τα locks:
sudo zypper locks
Για να αφαιρέσεις το lock:
sudo zypper removelock libreoffice
Υπάρχει επίσης η δυνατότητα προστασίας πακέτων μέσα από το YaST, αλλά καλό είναι να μην αλλάζεις τέτοιες ρυθμίσεις χωρίς να ξέρεις ακριβώς τι επηρεάζουν.
Gentoo
Στο Gentoo δεν μιλάμε ακριβώς για «lock», αλλά για masking.
Για παράδειγμα, μπορείς να δημιουργήσεις ή να επεξεργαστείς το:
/etc/portage/package.mask
και να προσθέσεις:
>=media-gfx/gimp-2.10.30
Αυτό σημαίνει ότι η συγκεκριμένη έκδοση και οι νεότερες θα γίνουν masked και δεν θα επιλέγονται κανονικά από το Portage.
Το masking είναι πολύ ισχυρό εργαλείο του Gentoo και θέλει προσοχή, ειδικά όταν αφορά βιβλιοθήκες ή πακέτα από τα οποία εξαρτώνται άλλα.
☞ 5. Cheat Sheet: Οι βασικές εντολές
Αν δεν θέλεις να θυμάσαι ολόκληρο τον οδηγό, κράτα τα βασικά:
|Διανομή|Εντολή Κλειδώματος|Έλεγχος|Αφαίρεση|
|Arch / Manjaro|IgnorePkg = firefox (στο /etc/pacman.conf)|-|Αφαίρεση γραμμής|
|Debian / Mint|sudo apt-mark hold vlc|apt-mark showhold|sudo apt-mark unhold vlc|
|Fedora / RHEL|sudo dnf versionlock add kodi|sudo dnf versionlock list|sudo dnf versionlock delete kodi|
|openSUSE|sudo zypper addlock libreoffice|sudo zypper locks|sudo zypper removelock libreoffice|
|Gentoo|echo ">=pkg-ver" >> /etc/portage/package.mask|equery uses pkg (ή έλεγχος αρχείου)|Αφαίρεση γραμμής από το mask|
☞ 6. Μερικές πρακτικές συμβουλές
Να θυμάσαι τι έχεις κρατήσει πίσω.
Αν μετά από έξι μήνες έχεις ξεχάσει γιατί ένα πακέτο είναι locked, τότε το lock μάλλον έχει γίνει μέρος του προβλήματος.
Έλεγχε τις εξαρτήσεις.
Ένα πακέτο μπορεί να φαίνεται ανεξάρτητο, αλλά να χρησιμοποιείται από πολλές άλλες εφαρμογές.
Απέφυγε τα locks σε βασικά πακέτα του συστήματος.
Είναι πολύ διαφορετικό να κρατήσεις μια εφαρμογή όπως ο VLC ή ο Firefox και πολύ διαφορετικό να κρατήσεις μια βασική βιβλιοθήκη ή τον kernel.
Ξανασκέψου το μετά από κάποιο διάστημα.
Αν ο λόγος για τον οποίο κράτησες ένα πακέτο έχει πάψει να υπάρχει, αφαίρεσε το lock και κάνε κανονικά την αναβάθμιση.
Μην κάνεις partial upgrades χωρίς λόγο.
Ειδικά σε rolling release διανομές, όπως το Arch, η λογική «αναβαθμίζω τα πάντα εκτός από αυτά τα δέκα πακέτα» μπορεί να καταλήξει σε πολύ περισσότερα προβλήματα από αυτό που προσπάθησες αρχικά να αποφύγεις.
☞ 7. Πηγές & Αναφορές
Το να κρατήσεις ένα πακέτο δεν είναι από μόνο του κακό.
Το πρόβλημα αρχίζει όταν ξεχνάς ό,τι το Linux είναι ένα σύστημα από πακέτα που συνεργάζονται μεταξύ τους.
Οπότε, αν υπάρχει συγκεκριμένος λόγος, κάν' το.
Απλώς να θυμάσαι και τι έχει κρατηθεί.