Ένα είναι σίγουρο, πως αν κάποιον τον ρωτήσεις αν θέλει την αλλαγή θα σου πει ναι. Αλλά στην πραγματικότητα όταν αυτή έρθει μας ξεβολεύει και δεν την θέλουμε. Γιατί έχουμε μάθει κάποια πράγματα και θα πρέπει να ξαναδιαβάσουμε. Αυτή είναι η ρίζα του προβλήματος.
Έβαλα στόχο να μάθω το systemd
. Γιατί υπάρχει πολύς θόρυβος πίσω από αυτό με τους πολέμιους του (και υπήρξα κάποια στιγμή ένας από αυτούς), που περισσότερο φωνασκούν παρά παραθέτουν ουσιαστικά τεχνικά επιχειρήματα. Ούτε να μας λένε γιατί οι λύσεις που προτείνουν είναι καλύτερες καθώς και τα σημεία στα οποία υστερούν. Τις επόμενες εβδομάδες θα προσπαθήσω να μοιραστώ τα πράγματα που βρήκα και να τα κάνω κατανοητά, ώστε να μπορούμε να το κρίνουμε με ουσιαστικά επιχειρήματα. Ή τουλάχιστον θα προσπαθήσω.
Με κανένα τρόπο δεν είμαι λοιπόν ειδικός για να μιλήσω για το θέμα. Ούτε είμαι υπέρμαχος της μιας ή της άλλης τεχνολογίας. Αλλά το systemd
ήρθε για να μείνει, για πολλά χρόνια και είτε σου αρέσει είτε όχι θα πρέπει να το μάθεις. Και θα χαρώ αν αυτή η σειρά βοηθήσει στο να γίνει ένας ουσιαστικός διάλογος. Αλλά αν τα επιχειρήματα είναι του τύπου IBMd, ευχαριστώ, αλλά δεν θα συμμετέχω στον “διάλογο”. Θα χαρώ όμως αν με διορθώσεις σε ότι δεν κατάλαβα καλά.
Η παραδοσιακή δομή ενός συστήματος UNIX
Αν ανοίξεις ένα παλιό βιβλίο για το UNIX θα πέσεις σίγουρα σε ένα σχήμα σαν το παρακάτω:
Μια απλή δομή, με τον πυρήνα του λειτουργικού να αγκαλιάζει και να ελέγχει το υλικό, και τα προγράμματα να κάνουν χρήση των υπηρεσιών του πυρήνα. Αλλά τα πράγματα έχουν πάψει εδώ και δεκαετίες να είναι τόσο απλά. Γιατί κάποια στιγμή ήρθε το Internet. Γιατί οι υπολογιστές είναι πλέον πάνω στα γόνατα μας, αντί να είναι ψυγεία σε κλιματιζόμενους χώρους.
Εκεί που το πρώτο UNIX είχε 2-3 δαίμονες πλέον έχουμε δεκάδες. Και ανάμεσα στα προγράμματα και τον πυρήνα υπάρχει ένα μεγάλο πλήθος στρωμάτων που θα τα ονομάσω διαχείριση συστήματος. Κομμάτια που θα χειριστούν τους επεξεργαστές, κομμάτια που θα τρέξουν εικονικές μηχανές, κομμάτια που θα αντιδράσουν αν βάλεις μια συσκευή USB, κομμάτια που θα τρέξουν εφαρμογές ή υπηρεσίες σε απομόνωση. Και ίσως προσέξατε μια αλλαγή στην ορολογία, πλέον δεν μιλάμε για απλούς δαίμονες, αλλά για πολύπλοκες υπηρεσίες συστήματος. Ανάμεσα σε αυτά υπάρχει και μια υπηρεσία που εκκινεί άλλες υπηρεσίες που την λέμε init
, αλλά αυτή είναι ένα σχετικά μικρό κομμάτι.
Και έχουμε αμέσως την πρώτη παρανόηση για το systemd
. Αυτό προσπαθεί να ενοποιήσει όλα αυτά τα κομμάτια, τα οποία αλληλεπιδρούν μεταξύ τους. Το systemd
δεν είναι μια υπηρεσία εκκίνησης.
Αντί να πρέπει να μάθεις 20 διαφορετικά πράγματα, με την γνώση να μην μεταφέρετε από το ένα στο άλλο, πρέπει να μάθεις μόνο ένα πράγμα. Τι είναι λοιπόν το systemd
; Το systemd
είναι μια ενιαία υπηρεσία διαχείρισης του υπολογιστή. Και λέω ενιαία και όχι μονολιθική, μια άλλη παρανόηση.
Ας πούμε καταρχήν για το επιχείρημα περί πλήθους γραμμών κώδικα. Αν αθροίσεις το σύνολο των γραμμών του κώδικα όλων των υπηρεσιών που αντικαθηστά θα βρεις ότι έχεις περίπου το ίδιο πλήθος γραμμών. Μόνο που το systemd
κάνει περισσότερα. Το να βγάζεις κομμάτια κώδικα και να τα μεταφέρεις αλλού, και μετά να λες “κοίτα με πόσες λίγες γραμμές το κάνω!” δεν το θεωρώ επαρκές επιχείρημα.
Να ξεκαθαρίσουμε και τα περί POSIX. Το POSIX είναι μια προδιαγραφή για το api ενός λειτουργικού συστήματος. Σαν προδιαγραφή ενημερώνετε αρκετά αργά και πρέπει να καλύψει όλα τα λειτουργικά που το ακολουθούν. Ακόμα και τα Windows είναι POSIX. Αν λοιπόν θέλεις να τρέχει το πρόγραμμα σου σε όλα τα λειτουργικά, ή έστω σε άλλα UNIX όπως το BSD θα πρέπει να ακολουθήσεις την προδιαγραφή. Αλλά τότε θα χάσεις όλα όσα κάνουν τον πυρήνα του Linux να είναι Linux. Μια υπηρεσία εκκίνησης για το Linux δεν πρέπει να ακολουθεί το POSIX. Τελεία.
Σε αυτό το πρώτο άρθρο θα δούμε πράγματα που κάνει το systemd
και που δεν ήξερες ότι τα κάνει. Οι περισσότεροι όταν μιλάνε για systemd
το αντιμετωπίζουν σαν μια υπηρεσία εκκίνησης. Δεν θα μιλήσω καθόλου για αυτό το κομμάτι εδώ. Ούτε θα προσπαθήσω καν να εξαντλήσω ένα τόσο μεγάλο θέμα.
Ασφαλής διαδικασία εκκίνησης
Πριν το systemd
δεν υπήρχε κάποιο ενιαίο πρωτόκολλο για την διαδικασία εκκίνησης ανάμεσα στο πρόγραμμα που φορτώνει το λειτουργικό πχ το grub
και τον πυρήνα του λειτουργικού. Επίσης το grub
απλά περνά τον έλεγχο στο λειτουργικό και δεν υπάρχει επικοινωνία μεταξύ τους. Ούτε γίνετε πλήρης χρήση του EFI.Με τα παραπάνω πρωτόκολλα που φέρνει το systemd
, αν το λειτουργικό αποτύχει να ξεκινήσει γίνετε αυτόματη εκκίνηση σε μια προηγούμενη λειτουργική έκδοση. Για περισσότερα [1],[2],[3].
Αυτόματη ανίχνευση κατατμήσεων
Σε ένα δίσκο με GPT μπορεί ο εγκαταστάτης να σημειώσει την χρήση κάθε κατάτμησης με ένα αριθμό UUID. Πριν το systemd
κανένας δεν έκανε χρήση αυτής της δυνατότητας. Τα πλεονεκτήματα:
- Ο εγκαταστάτης μπορεί να διακρίνει την χρήση που έχει κάθε υπάρχουσα κατάτμηση και να έχεις ευκολότερα πολλές διανομές.
- Μπορείς να έχεις ένα ελλιπές `/etc/fstab’ ή και να μην έχεις καθόλου.
- Δεν είναι ανάγκη το grub να γνωρίζει τον δίσκο εκκίνησης.
- Ένας δίσκος μπορεί εύκολα να μεταφερθεί μεταξύ υπολογιστών η containers.
- Στο μέλλον τα εργαλεία διαχείρισης των κατατμήσεων θα μπορούν να δώσουν καλύτερες πληροφορίες. Για περισσότερα [4]
Φορητές υπηρεσίες
Η λύση για μια φορητή υπηρεσία σήμερα είναι το docker
. Μια αξιοπρεπής λύση, αλλά όχι τέλεια. Το
systemd
δεν το αντικαθιστά, αλλά παρέχει ένα νέο ποιο απλό τρόπο [5].
Ασφαλή ονόματα δικτυακών θυρών
Αν στήνεις ένα firewall κάθε καλώδιο σύνδεσης έχει άλλη χρήση. Δεν θέλεις να τα μπερδέψεις. Αλλά πολλές φορές κατά την εκκίνηση μπορεί να γίνει μπέρδεμα και το eth0
να γίνει eth1
κάτι πολύ κακό. Πλέον έχεις σταθερά ονόματα όπως enp2s0
. Για περισσότερα [6].
Διάφορα
- Καλύτερη χρήση της παραγόμενης εντροπίας για παραγωγή τυχαίων αριθμών κάτι απαραίτητο για την κρυπτογραφία [7].
- Ένα Interface για containers [8].
- Ένα αντικαταστάτη του
cron
και τουanacron
- Και πολλά άλλα … (γκρινιάρηδες)
Τα έχω όλλα αυτά στον υπολογιστή μου;
Οι αλλαγές αυτές είναι σημαντικές και δεν τις αξιοποιούν όλες οι διανομές ακόμα. Για παράδειγμα έχουμε ακόμα το /etc/fstab
μιας και θέλουμε να υποστηρίξουμε και παλιά συστήματα. Και έχουμε ακόμα πολλά από τα παλιά συστήματα όπως το anacron
για λόγους συμβατότητας. Αλλά σιγά σιγά τους κάνουμε χρήση, παρά την γκρίνια…
Τα εναλλακτικά συστήματα του systemd
μπορούν να χωριστούν σε δύο κατηγορίες. Τα παλαιολιθικά που έχουν μείνει στο παρελθόν - γιατί εφόσον κάνεις την δουλεία σου με το κάρο, γιατί να χρησιμοποιήσεις το αυτοκίνητο ; - και τα μοντέρνα. Για τα δεύτερα, όπως το 66, ξέρω ακόμα λιγότερα, αλλά η εσωτερική τους αρχιτεκτονική μοιάζει να είναι ίδια, εκτός απο κάτι μικρές λεπτομέριες, με αυτή του systemd
. Επομένως είτε επικρατήσουν, είτε όχι, το systemd
μας ήρθε και θα μείνει. Ας το μάθουμε λοιπόν και καύσωνα επιτρέποντος θα επανέλθω με αναλυτικά άρθρα που θα εξηγούν, ελπίζω κατανοητά για όλους, πρακτικές όψεις του systemd