Σε ένα δίκτυο υπολογιστών με Linux είτε είναι στο σπίτι σου είτε είναι στην δουλειά, θέλεις να κατεβάζεις σε ένα PC τις αναβαθμίσεις και να γίνονται εγκατάσταση και σε όλα τα υπόλοιπά… Σωστά;

Αποφάσισες να περάσεις το Linux στο μηχάνημα σου, βρήκες μια ωραία διανομή όπως το Linux Mint και βρήκες έκπληκτος πως τελικά το Linux είναι ευκολότερο και σταθερότερο από τα Windows. Τελικά το πέρασες και στον δεύτερο υπολογιστή και το πέρασες και στο laptop το δικό σου αλλά και της γυναίκας και των παιδιών. Χωρίς να το καταλάβεις έχεις πλέον ένα δίκτυο από υπολογιστές να διαχειριστείς.

Στην πορεία, ανακάλυψες τις αναβαθμίσεις του λογισμικού και πόσο έλεγχο έχεις σε αυτές. Αλλά θα πρέπει σε κάθε μηχάνημα να κατεβάζεις και να εγκαθιστάς τις ενημερώσεις ξεχωριστά. Δεν θα ήταν ωραίο να μπορούσες να τις κατεβάσεις μόνο μια φορά;

Ναι μπορείς να το κάνεις και να γλυτώσεις έτσι χρόνο και χρήση δικτύου. Θα περιγράψω πως το κάνεις αυτό στο Linux Mint, αλλά τα ίδια ισχύουν για κάθε άλλη Debian βασισμένη διανομή όπως το Ubuntu.

Ακόμα και αν δεν έχεις δίκτυο αλλά μόνο ένα υπολογιστή η μέθοδος αυτή είναι χρήσιμη αν έχεις εικονικές μηχανές ή containers σε ένα υπολογιστή. Ο χρόνος που θέλει το ansible ή το chef για να στήσει μια μηχανή ξοδεύεται για να κατεβάσει συχνά ξανά και ξανά τις ίδιες ενημερώσεις. Αν έχεις ήδη στημένο ένα squid καλύτερα να τον χρησιμοποιήσεις, αλλά δεν θα σου πω πως. Τώρα αν δεν έχεις ιδέα για το τι ακριβώς είπα σε αυτή την παράγραφο, δεν πειράζει η ζωή είναι μικρή.

apt-cacher-ng
Ένας υπολογιστής κατεβάζεις τις ενημερώσεις και όλοι οι υπόλοιποι αναβαθμίζονται από αυτόν

apt-cacher-ng: Προετοιμασία του κεντρικού υπολογιστή ενημερώσεων

Πρώτα θα πρέπει να βρούμε τον υπολογιστή που θα δρα ως ενδιάμεσος. Αυτός μπορεί να είναι οποιοσδήποτε (ακόμα και ένα RaspberyPi συνδεδεμένο σε SATA) Θα πρέπει να έχει αρκετό ελεύθερο χώρο στο δίσκο και σταθερή εσωτερική διεύθυνση IP. Αυτό μπορείς να το κάνεις και από της ρυθμίσεις του δρομολογητή (router).

Στο παράδειγμα μου ο υπολογιστής έχει την διεύθυνση 192.168.1.50. Ρυθμίστε και σημειώστε κάπου την δική σας διεύθυνση. Μετά πρέπει να εγκαταστήσουμε το apt-cacher-ng στον υπολογιστή αυτόν. Αυτό θα τον κάνει να δρα ως ενδιάμεσος (proxy) στα αποθετήρια του apt. Το εγκαθιστούμε ως συνήθως με την εντολή:

sudo apt install apt-cacher-ng

και θα εγκατασταθεί και θα ξεκινήσει η υπηρεσία. Μπορούμε να βρούμε το αρχείο ρυθμίσεων να το ρυθμίσουμε με την εντολή

sudo -H xed /etc/apt-cacher-ng/acng.conf

αλλά οι προκαθορισμένες ρυθμίσεις είναι μια χαρά και δεν θέλει να πειράξουμε κάτι. Αν δεν έχετε Μint θα αντικαταστήσετε το xed με κάποιο άλλο επεξεργαστή κειμένου όπως το gedit ή το kate.

Στην συνέχεια ανοίγουμε με το πρόγραμμα περιήγησης την σελίδα

http://192.168.1.50:3142/

αντικαθιστώντας την IP με αυτή του ενδιάμεσου υπολογιστή και βλέπουμε το μήνυμα «The requested page is not accessible». Και αυτό σημαίνει ότι δουλεύει. Θα πρέπει τώρα να ρυθμίσουμε το υποσύστημα του apt σε κάθε υπολογιστή στο δίκτυο, αλλά και στον ίδιο τον server.

Η εύκολη μέθοδος με avahi

Στον υπολογιστή που θα κάνει τον ενδιάμεσο εγκαθιστούμε επίσης το πακέτο avahi-daemon

sudo apt install avahi-daemon

Το avahi είναι μια υπηρεσία που «διαφημίζει», στο τοπικό δίκτυο, το τι μπορεί να κάνει ο υπολογιστής μας. Σε όλους τους υπολογιστές άρα και στον server θα εγκαταστήσουμε το πακέτο squid-deb-proxy-client

sudo apt install squid-deb-proxy-client

Αυτό ήταν. Τώρα το apt θα ψάξει να βρει ένα ενδιάμεσο (server) πρώτα. Αν βρει θα τους χρησιμοποιήσει, αν όχι θα επιστρέψει στα παλιά του κόλπα.

Η χειροκίνητη μέθοδος

Στη σελίδα που άνοιξε http://192.168.1.50:3142/ μας έχει οδηγίες και μας δίνει δυο επιλογές. Μιας και δεν είμαστε μαζοχιστές θα πάμε με την ευκολότερη.

Θα φτιάξουμε ένα αρχείο στην θέση /etc/apt/apt.conf.d/00aptproxy με την εντολή

sudo -H xed /etc/apt/apt.conf.d/00aptproxy

και το οποίο θα περιέχει την γραμμή που παίρνουμε με άρπα/κολλά

Acquire::http::Proxy "http://192.168.1.50:3142";

Το ίδιο αρχείο θα φτιάξουμε σε κάθε άλλο υπολογιστή. Αν κάποια στιγμή δεν θέλουμε για κάποιον υπολογιστή να το χρησιμοποιεί απλά αφαιρούμε αυτό το αρχείο.

Η σελίδα που ανοίξαμε θα μας οδηγήσει επίσης στην σελίδα

http://localhost:3142/acng-report.html

από όπου μπορούμε να δούμε στατιστικά του ενδιάμεσου, το βιβλίο οδηγιών (στα αγγλικά) και να κάνουμε κάποιες ενέργειες συντήρησης.

Αν έχουμε ενεργοποιημένο το firewall στον υπολογιστή, θα πρέπει προφανώς να ανοίξουμε και την πόρτα 3142. Αυτό μπορεί να γίνει με την εντολή

sudo -Η ufw allow 3142/tcp

Έλεγχος αν δουλεύει

Σε ένα τερματικό δίνουμε την εντολή

sudo apt update

και ελέγχουμε για σφάλματα. Στην δική μου περίπτωση προέκυψε ένα σφάλμα.

Err:2 https://download.docker.com/linux/debian buster InRelease
Reading from proxy failed - read (115: Operation now in progress) [IP: 192.168.1.50 3142]
W: Failed to fetch https://download.docker.com/linux/debian/dists/buster/InRelease Reading from proxy failed - read (115: Operation now in progress) [IP: 192.168.1.50 3142]
W: Some index files failed to download. They have been ignored, or old ones used instead.

Τι συνέβη εδώ; Έχω ένα αποθετήριο για κάτι που το λένε docker. Και αυτό ήταν ρυθμισμένο να χρησιμοποιεί ασφαλή σύνδεση (SSL). Για τεχνικούς λόγους αυτό είναι προβληματικό. Πήγα στο αρχείο που το όριζε, το /etc/apt/sources.list.d/docker.list στην συγκεκριμένη περίπτωση, και άλλαξα την γραμμή που λέει

deb [arch=amd64] https://download.docker.com/linux/debian buster edge

σε (αντί για https σε http)

deb [arch=amd64] http://download.docker.com/linux/debian buster edge

και όλα δούλεψαν ρολόι. Και όχι δεν θυσίασα τίποτα από πλευράς ασφαλείας. Το https εδώ δεν έχει νόημα.

Τώρα μπορώ να κάνω αναβαθμίσεις κανονικά είτε από το τερματικό είτε με γραφικό τρόπο.

Επίλογος

Το apt-cacher-ng θα κατεβάσει τα πακέτα και τα ευρετήρια μόνο αν ζητηθούν και θα τα βάλει στον φάκελο /var/cache/apt-cacher-ng.

Το apt δεν το ξέρει αυτό και θα “κατεβάσει” ξανά τα πακέτα. Άρα ο υπολογιστής που θα κάνει τον ενδιάμεσο θα έχει αυξημένες απαιτήσεις σε χώρο δίσκου. Όχι βέβαια τις τρελές απαιτήσεις που θα είχε αν στήναμε ένα τοπικό mirror, μόνο ότι χρειαστεί να κατεβεί θα κατεβεί.

Μάλιστα θα δουλέψει ακόμα και αν οι διάφοροι υπολογιστές δεν έχουν την ίδια έκδοση της διανομής ή ακόμα και αν έχουν διαφορετική εντελώς διανομή, αρκεί να είναι αυτή βασισμένη στις τεχνολογίες του debian.

Τα προγράμματα που καθαρίζουν τον δίσκο όπως το ucaresystem-core δεν θα πειράξουν καθόλου τον φάκελο /var/cache/apt-cacher-ng τον οποίο θα διαχειριστεί το ίδιο το apt-cacher-ng.