Μερικά πράγματα που κάνει το systemd

Ένα είναι σίγουρο, πως αν κάποιον τον ρωτήσεις αν θέλει την αλλαγή θα σου πει ναι. Αλλά στην πραγματικότητα όταν αυτή έρθει μας ξεβολεύει και δεν την θέλουμε. Γιατί έχουμε μάθει κάποια πράγματα και θα πρέπει να ξαναδιαβάσουμε. Αυτή είναι η ρίζα του προβλήματος.

image

Έβαλα στόχο να μάθω το systemd. Γιατί υπάρχει πολύς θόρυβος πίσω από αυτό με τους πολέμιους του (και υπήρξα κάποια στιγμή ένας από αυτούς), που περισσότερο φωνασκούν παρά παραθέτουν ουσιαστικά τεχνικά επιχειρήματα. Ούτε να μας λένε γιατί οι λύσεις που προτείνουν είναι καλύτερες καθώς και τα σημεία στα οποία υστερούν. Τις επόμενες εβδομάδες θα προσπαθήσω να μοιραστώ τα πράγματα που βρήκα και να τα κάνω κατανοητά, ώστε να μπορούμε να το κρίνουμε με ουσιαστικά επιχειρήματα. Ή τουλάχιστον θα προσπαθήσω.

Με κανένα τρόπο δεν είμαι λοιπόν ειδικός για να μιλήσω για το θέμα. Ούτε είμαι υπέρμαχος της μιας ή της άλλης τεχνολογίας. Αλλά το systemd ήρθε για να μείνει, για πολλά χρόνια και είτε σου αρέσει είτε όχι θα πρέπει να το μάθεις. Και θα χαρώ αν αυτή η σειρά βοηθήσει στο να γίνει ένας ουσιαστικός διάλογος. Αλλά αν τα επιχειρήματα είναι του τύπου IBMd, ευχαριστώ, αλλά δεν θα συμμετέχω στον “διάλογο”. Θα χαρώ όμως αν με διορθώσεις σε ότι δεν κατάλαβα καλά.

Η παραδοσιακή δομή ενός συστήματος UNIX

Αν ανοίξεις ένα παλιό βιβλίο για το UNIX θα πέσεις σίγουρα σε ένα σχήμα σαν το παρακάτω:

external-content.duckduckgo.com

Μια απλή δομή, με τον πυρήνα του λειτουργικού να αγκαλιάζει και να ελέγχει το υλικό, και τα προγράμματα να κάνουν χρήση των υπηρεσιών του πυρήνα. Αλλά τα πράγματα έχουν πάψει εδώ και δεκαετίες να είναι τόσο απλά. Γιατί κάποια στιγμή ήρθε το Internet. Γιατί οι υπολογιστές είναι πλέον πάνω στα γόνατα μας, αντί να είναι ψυγεία σε κλιματιζόμενους χώρους.

Εκεί που το πρώτο UNIX είχε 2-3 δαίμονες πλέον έχουμε δεκάδες. Και ανάμεσα στα προγράμματα και τον πυρήνα υπάρχει ένα μεγάλο πλήθος στρωμάτων που θα τα ονομάσω διαχείριση συστήματος. Κομμάτια που θα χειριστούν τους επεξεργαστές, κομμάτια που θα τρέξουν εικονικές μηχανές, κομμάτια που θα αντιδράσουν αν βάλεις μια συσκευή USB, κομμάτια που θα τρέξουν εφαρμογές ή υπηρεσίες σε απομόνωση. Και ίσως προσέξατε μια αλλαγή στην ορολογία, πλέον δεν μιλάμε για απλούς δαίμονες, αλλά για πολύπλοκες υπηρεσίες συστήματος. Ανάμεσα σε αυτά υπάρχει και μια υπηρεσία που εκκινεί άλλες υπηρεσίες που την λέμε init, αλλά αυτή είναι ένα σχετικά μικρό κομμάτι.

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

Αντί να πρέπει να μάθεις 20 διαφορετικά πράγματα, με την γνώση να μην μεταφέρετε από το ένα στο άλλο, πρέπει να μάθεις μόνο ένα πράγμα. Τι είναι λοιπόν το systemd; Το systemd είναι μια ενιαία υπηρεσία διαχείρισης του υπολογιστή. Και λέω ενιαία και όχι μονολιθική, μια άλλη παρανόηση.

systemd-architecture

Ας πούμε καταρχήν για το επιχείρημα περί πλήθους γραμμών κώδικα. Αν αθροίσεις το σύνολο των γραμμών του κώδικα όλων των υπηρεσιών που αντικαθηστά θα βρεις ότι έχεις περίπου το ίδιο πλήθος γραμμών. Μόνο που το 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

12 Likes

Αυτή η παρανόηση προκύπτει από την, κακώς αναπαραγόμενη, λανθασμένη αντίληψη ότι το init που ονομάζεται systemd είναι ταυτόσημο με το έργο systemd, το οποίο περιλαμβάνει και άλλα συστατικά (όπως τα systemd-nspawn, systemd-boot, systemd-networkd κλπ.) αλλά δεν είναι το init systemd.

Επιπλέον, η υλοποίηση που επιλέγει η εκάστοτε διανομή ως προς την αλληλεξάρτηση των συστατικών του έργου systemd και το πακετάρισμα που κάνει αφορά αποκλειστικά αυτήν. Δεν είναι απαραίτητο να υπάρχουν όλα τα συστατικά του έργου systemd σε ένα σύστημα για να λειτουργήσει το init systemd ή κάποιο επιμέρους συστατικό.

Είτε σε GPT, είτε σε MBR, μπορείς να χρησιμοποιήσεις UUIDs ή labels για να έχεις μοναδικό αναγνωριστικό για το fs σε κάθε partition σε fstab ή/και grub configuration. Το κάνουν οι περισσότερες διανομές εδώ και χρόνια, ανεξάρτητα από το init system τους. Ο λόγος είναι απλός, γλιτώνει από πολλά προβλήματα.
Αυτό που κάνει το systemd διαφορετικά είναι να χρησιμοποιεί ένα αναγνωριστικό που είναι δεμένο με partition και όχι fs και να μπορεί να κάνει το mapping χωρίς να χρειάζεται το fstab. Η απουσία του τελευταίου δεν είμαι και πολύ σίγουρος ότι είναι θετική. Είναι ένα απλό αρχείο κειμένου, και μαζί με το mtab μπορείς να έχει εικόνα για το τι είναι mounted στο σύστημά σου, χωρίς την διαμεσολάβηση κάποιου εξειδικευμένου προγράμματος. Σχεδόν πάντα δημιουργείται αυτόματα με απλά scripts και δεν χρησιμοποιείται συνήθως πέρα από την εγκατάσταση για τα μόνιμα partitions - udisks γαρ :stuck_out_tongue: Για κάποια από τα άλλα χαρακτηριστικά, ισχύουν όροι ή προϋποθέσεις :stuck_out_tongue:

Απο το wiki του Arch

There are four different schemes for persistent naming: by-label, by-uuid, by-id and by-path. For those using disks with GUID Partition Table (GPT), two additional schemes can be used by-partlabel and by-partuuid

Στο GPT μπορείς να προσθέσεις αυτήν την πληροφορία, στο MBR θα υπολογιστεί αυτόματα μια τιμή. Οπότε μπορείς να προσθέσεις κάποιες τυποποιημένες τιμές σε GPT και αυτό κάνει το systemd. Το fdisk αυτές τις τιμές ξέρει (δεν τις έβαλα όλες, απλά κάποιες ενδεικτικά)

Command (m for help): l   
  1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
 14 Windows recovery environment   DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
 16 Microsoft Storage Spaces       E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D
 17 HP-UX data                     75894C1E-3AEB-11D3-B7C1-7B03A0000000
 18 HP-UX service                  E2A1E728-32E3-11D6-A682-7B03A0000000
 19 Linux swap                     0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
 21 Linux server data              3B8F8425-20E0-4F3B-907F-1A25A76F98E8
 22 Linux root (x86)               44479540-F297-41B2-9AF7-D131D5F0458A
 26 Linux root  (IA-64)             993D8D3D-F80E-4225-855A-9DAF8ED7EA97
 28 Linux home                     933AC7E1-2EB4-4F13-B844-0E14E2AEF915
 30 Linux extended boot            BC13C2FF-59E6-4262-A352-B275FD6F7172
 32 FreeBSD data                   516E7CB4-6ECF-11D6-8FF8-00022D09712B
 45 Apple Core storage             53746F72-6167-11AA-AA11-00306543ECAC
 52 Solaris /home                  6A90BA39-1DD2-11B2-99A6-080020736631
 59 NetBSD swap                    49F48D32-B10E-11DC-B99B-0019D1879648

Αν μια κατάτμηση έχει 933AC7E1-2EB4-4F13-B844-0E14E2AEF915 θα τις κάνει προσάρτηση στο /home. Αν έχει κάτι άλλο θα πρέπει να προσθέσεις μια γραμμή στο \etc\fstab οπότε δεν σε περιορίζει.

Δεν είναι ένα αρχείο κειμένου, είναι ένα αρχείο κειμένου με μια πολύπλοκη σύνταξη, όπου αν κάνεις κάποιο λάθος σου μένει το σύστημα στο χέρι. Όπως σήμερα κανένας δεν στενοχωριέται που δεν γράφει το αρχείο ρυθμίσεων του X11 αλλά απλά δουλεύει, έτσι δεν θα πρέπει να στενοχωριέται κανείς που δεν θα πρέπει να γράφει το αρχείο \etc\fstab.

Και κανένας σήμερα δεν θα καθίσει να δει το αρχείο \etc\mtab. Πότε το είδε κάποιος πρόσφατα; Ας σηκώσει το χέρι. Θα χρησιμοποιήσεις είτε την εντολή mount έιτε την εντολή lsblk, δηλαδή εξειδικευμένα προγράμματα :crazy_face:. Που θα πρέπει να τα ξέρεις.

Στο systemd θα χρησιμοποιήσεις την systemctrl που την ξέρεις από άλλες χρήσεις και θα δεις για τα [auto]mount units, όπως έκανες στο παρελθόν με άλλες χρήσεις ( systemctl list-units --type mount --all --no-pager).

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

Γενικά το systemd είναι ένα πολυεργαλείο για το Linux. Προσωπικά το χρησιμοποιώ αρκετά στο σύστημά μου, και κάνει την εγκατάσταση του Arch Linux (αλλά και όλων των υπόλοιπων μινιμαλιστικών διανομών γενικότερα) λίγο πιο εύκολη.

Μια λειτουργία του systemd την οποία χρησιμοποιώ στο σύστημά μου είναι το systemd-swap, το οποίο δημιουργεί αυτόματα ένα swap file για το σύστημα, χωρίς την ανάγκη για την ύπαρξη ενός παραπάνω partition στον δίσκο. Επιπλέον χρειάζεται πραγματικά ελάχιστες ρυθμίσεις για να δουλέψει σωστά.

Μα το είπα… δημιουργείται στην εγκατάσταση, δεν το πειράζει σχεδόν ποτέ κανείς (γιατί δεν χρειάζεται συνήθως). Όσο για το αν είναι πολύπλοκο, επέτρεψέ μου να έχω άλλη γνώμη :stuck_out_tongue:

To “κανένας δεν θα το δει” είναι προφανώς δική σου υπόθεση. Το ότι μπορεί να το δει και κάνει την δουλειά του είναι γεγονός. :wink:

Το UUID σε fs ορίζεται όντως αυτόματα στο format αν θυμάμαι καλά. Το label αναγκαστικά χειροκίνητα. Στην συνέχεις τα χρησιμοποιείς όπως θέλεις. Το θετικό είναι ότι είναι persistent και ανεξάρτητα από MBR/GPT (προτιμώ το δεύτερο χωρίς συζήτηση, αλλά κάποιες φορές το πρώτο είναι πρακτικά αναγκαστικό).

Ναι υπαρχει αυτη η παρανοηση. Ενα απο τα πολλα που δεν εχω καταλαβει εγω, ειναι αν οι αντιρησεις εστιαζουν το init ή αν αφορουν το ολο project πιο πολυ. Δηλαδη οκ, υπαρχουν οι αντιρησεις που εστιαζουν στο init και υπαρχουν και οι γενικοτερες, αλλά που πεφτει το βαρος; Και ειναι πιο πολυ τεχνικες οι αντιρησεις ή φιλοσοφικες; Αν εχει κανεις απαντηση για αυτο…

Η προσωπική μου γνώμη είναι πως οι αντιδράσεις είναι μάλλον θρησκευτικού τύπου. Κάποια άτομα αποφάσισαν πως το systemd είναι ο σατανάς και αναζητούν 10.000 λόγους για να το δικαιολογήσουν αυτό. Θα συμφωνήσω με τον παρακάτω κύριο, που η γνώμη του μετράει κάπως περισσότερο, μιας και είναι οπαδός μιας φιλοσοφίας αντίθετης με το systemd.

Με την σειρά των άρθρων δεν θέλω να πω ότι το systemd είναι το καλύτερο σύστημα και ότι τα άλλα είναι άχρηστα. Αλλά σαν τεχνικός θέλω να κρίνω με αντικειμενικά κριτήρια, και οι αντίπαλοι του δεν κάνουν την καλύτερη δυνατή δουλεία, στο να με βοηθήσουν.

Κατά τον ίδιο τρόπο, περισσότερο πριν αρκετά χρόνια παρά σήμερα, κάποιοι αποφάσισαν πως η Microsoft είναι ο σατανάς (που ήταν και ίσως και να είναι ακόμα). Τα άτομα προσπαθούσαν να σπρώξουν το Linux λέγοντας πόσο κακή ήταν η Microsoft και τα Windows. Όμοια οι οπαδοί της ομοιοπαθητικής “ιατρικής” λένε πόσο κακή είναι η “κλασσική” ιατρική.

Αυτή είναι μια λάθος προσέγγιση,γιατί ακόμα και αν ο κάθε σατανάς είναι σατανάς, δεν τεκμηριώνεις πως εσύ είσαι ο καλύτερος. Έχεις καλύτερα αποτελέσματα, κάτι που διαπίστωσα από πολύ νωρίς, αν λες και τεκμηριώνεις που εσύ είσαι καλύτερος. Και μη διστάζοντας να πεις πρώτος τα αρνητικά της λύσης σου: Όχι αν είσαι μηχανικός ή γραφίστας ή παίζεις παιγνίδια ή έχεις αυτό το υλικό, τότε το Linux δεν είναι η λύση για σένα, τουλάχιστον ακόμα. Μια τέτοιου τύπου επιχειρηματολογία δεν την έχω ακούσει ακόμα, από τους ερωτευμένους εχθρούς του systemd.

3 Likes