Αποστολέας Θέμα: Αναζητώντας νέο init για το voidlinux – Μέρος Α´  (Αναγνώστηκε 1663 φορές)

mobinmob

  • Global Moderator
  • *****
  • Μηνύματα: 30
    • Προφίλ
Αναζητώντας νέο init για το voidlinux – Μέρος Α´
« στις: Μαΐου 23, 2021, 02:00:08 μμ »
Πριν αρκετό καιρό ξεκίνησε η διαδικασία ετοιμασίας – προσαρμογής ενός νέου init system για την διανομή που χρησιμοποιώ, το Void Linux. Η προσπάθεια, προϊόν δουλειάς μια μικρής ομάδας, δεν είναι σε καμία περίπτωση επίσημη, ούτε θα ενταχθεί απαραίτητα στην διανομή. Είναι όμως μια ωραία αφορμή για αναζήτηση στο πεδίο των σύγχρονων init systems για linux, ενώ σίγουρα αξίζει η αναφορά  στα πρακτικά προβλήματα που έπρεπε να επιλυθούν, στο τι έχει υλοποιηθεί μέχρι στιγμής και τι μπορεί ακόμα να βελτιωθεί.

Ο τομέας των init systems ήταν για πολλά χρόνια ένα πεδίο που με ενδιέφερε ιδιαίτερα. Μου φαινόταν εντελώς παράδοξο το γεγονός, ότι ενώ σε άλλα σημεία του λειτουργικού υπήρχαν συνεχείς εξελίξεις, σε αυτό το επίπεδο παρουσιαζόταν – επιφανειακά τουλάχιστον – μια στασιμότητα. Οι περισσότερες διαδεδομένες διανομές χρησιμοποιούσαν το sysvinit, το gentoo είχε εξελίξει τα δικά του rc scripts στο OpenRC με κάποιες ενδιαφέρουσες δυνατότητες, ενώ η Ubuntu είχε το δικό της upstart το οποίο υιοθέτησαν και άλλες διανομές, μεταξύ των οποίων και η RH. Αυτή η εικόνα συνήθως προβάλλεται πριν την έλευση του systemd. Φαίνεται πλήρης, αλλά δεν είναι.

Πέρα από τα παραπάνω συστήματα υπάρχει μια ολόκληρη οικογένεια init systems, με εντελώς διαφορετικό τρόπο λειτουργίας και προέλευση. Πρόκειται για να συστήματα που προήλθαν από τους process supervisors, με πατέρα όλων τα daemontools. Τα τελευταία ήταν μια σουίτα προγραμμάτων που χρησιμοποιώντας αποκλειστικά posix interfaces παρείχαν αποτελεσματική παρακολούθηση για τους daemons – υπηρεσίες του προγράμματος και αξιόπιστο logging.
Χρησιμοποιώντας τις ίδιες τεχνικές δημιουργήθηκαν και supervisors που μπορούσαν να χρησιμοποιηθούν σαν init systems (runit, s6) ή και ολοκληρωμένα init systems (minit, cinit, ninit). Τα περισσότερα από αυτά πριν την εμφάνιση του systemd. Κανένα όμως δεν υιοθετήθηκε σε κάποια διανομή με σημαντική βάση χρηστών. Τo runit προτάθηκε με POC στο fedora και δημιουργήθηκε το ignite [1] [2] βασισμένο σε αυτό για το archlinux. Το ignite αποτέλεσε τη βάση για το init του voidlinux και τα services του void με την σειράς του χρησιμοποιούνται και στο artix.

Όταν ξεκίνησα να σκέφτομαι  και να πειραματίζομαι όμως για την αλλαγή συστήματος εκκίνησης για την διανομή που χρησιμοποιώ (περίπου το 2018), αυτή χρησιμοποιούσε ήδη ένα από αυτά (runit). Για να έχει νόημα η μετάβαση σε κάτι άλλο, αυτό θα έπρεπε να είναι σημαντικά καλύτερο από το ταχύτατο και απλούστατο runit, κάτι όχι ιδιαίτερα εύκολο.


Προϋποθέσεις

Πέρα από το ότι θα έπρεπε να είναι ανώτερο του runit – κάτι που έχει ήδη αναφερθεί, ένα νέο init για το voidlinux θα έπρεπε να έχει κατά τη γνώμη μου συγκεκριμένα χαρακτηριστικά:
α) Να αναπτύσσεται ενεργά. Το τελευταίο commit για το runit είναι το 2014, ενώ τα περισσότερα από όσα έχουν αναφερθεί δεν αναπτύσσονται πλέον. Δεν θα είχε νόημα κάτι για το οποίο δεν υπάρχει ενεργό upstream.
β) Να λειτουργεί σε όλες τις αρχιτεκτονικές και τις πλατφόρμες τις οποίες υποστηρίζει η διανομή. Αυτό σημαίνει πως θα έπρεπε να μπορεί να γίνει cross-compile σε arm6l, arm7l, aarch64, σε glibc και musl, πέρα από τις δεδομένες i686 και x86_64.
γ) Να έχει τον ίδιο βασικό τρόπο λειτουργίας με το runit – process supervision αν αυτό είναι δυνατόν.

Τα β) και γ) απέκλειαν τα systemd και OpenRC, τα οποία όμως δεν ήταν ποτέ σοβαρές επιλογές για μένα, για διαφορετικούς λόγους. Το systemd δεν δουλεύει εκτός glibc, ενώ έχω και σοβαρές αντιρρήσεις για πως έχει υλοποιηθεί και τι περιλαμβάνει. Τo OpenRC δεν είναι χτισμένο γύρω από το process supervision και κατά τη γνώμη μου δεν αποτελεί σημαντική βελτίωση αν συγκριθεί με το runit.

Επιλογές

Τις τρεις (+1) προϋποθέσεις τις κάλυπταν 2 διαφορετικά project. To s6-rc και το nosh.


Nosh

To nosh είναι ένα project που επιχειρεί να δημιουργήσει ένα σύγχρονο init βασισμένο σε process supervision, το οποίο θα τρέχει σε linux και BSDs και θα μπορεί να χρησιμοποιήσει τα ιδιαίτερα χαρακτηριστικά κάθε λειτουργικού (έχει για παράδειγμα δικά του utilities για χρήση cgroups κ.α.). Το project περιλαμβάνει πλήθος έτοιμων scripts για services και έτοιμα πακέτα για debian και freebsd. Κάποια στιγμή προτάθηκε στο FreeBSD και στο PCBSD αλλά δεν υιοθετήθηκε.  Ένα πλεονέκτημα του nosh απέναντι σε άλλες λύσεις είναι ότι περιέχει ένα mini “framework” για να χρησιμοποιεί τα υπάρχοντα εργαλεία ρυθμίσεων κάθε λειτουργικού. Αυτό, σε συνδυασμό με την διάθεση αρκετών services έκανε για μένα το nosh μια εξαιρετικά ενδιαφέρουσα επιλογή.
Δυστυχώς το nosh έχει ένα σοβαρό μειονέκτημα και αυτό δεν είναι άλλο από το build system που χρησιμοποιεί, το redo. Δεν είναι άσχημο, είναι απλό και δυνατό, αλλά είναι πολύ διαφορετικό από οτιδήποτε άλλο. Και αυτό έκανε το πακετάρισμα (και επομένως την συντήρηση των σχετικών πακέτων) δύσκολη.


s6-rc


Το s6-rc είναι μια πολύ διαφορετική υλοποίηση των ίδιων ιδεών. Αποτελεί ένα επίπεδο εφαρμογών πάνω στο s6. Το τελευταίο μοιάζει αρκετά με το runit σε χαρακτηριστικά, αλλά είναι πιο σύγχρονο και έχει σημαντικές επεκτάσεις. Οι πιο σημαντικές ίσως είναι το πρωτόκολλο για readiness notification και η δυνατότητα για γενικό notification χωρίς polling.
Το s6-rc δεν διαχειρίζεται απομονωμένες διεργασίες όμως, όπως το s6. Διαχειρίζεται συνολικά την κατάσταση των services σε ένα σύστημα. Αν δοθεί εντολή για ενεργοποίηση ενός daemon, θα το φροντίσει να εκκινήσει τις εξαρτήσεις του (αν υπάρχουν), θα περιμένει μέχρι να είναι έτοιμες και στην συνέχεια θα εκκινήσει αυτό που έχει ζητηθεί. Υποστηρίζει επιπλέον socket activation κ.α.
Όλα τα παραπάνω υλοποιούνται με την συνεργασία ανεξάρτητων μεταξύ τους προγραμμάτων.
Το s6-rc όμως είναι service manager, όχι init system. Για να γίνει init system χρειάζεται το s6-linux-init-maker το οποίο δημιουργεί/αποτελεί το πρώτο στάδιο της εκκίνησης. Με την χρήση του μπορεί κάποιος να έχει όλα τα θετικά του process supervision πολύ νωρίς στην διαδικασία εκκίνησης και αξιόπιστο logging.
Τα παραπάνω, σε συνδυασμό με την επιμονή του δημιουργού του να παρέχει “mechanisms, not policy” και να αποφεύγει όσο μπορεί το parsing, δημιουργούν μια εξαιρετική βάση, αλλά όχι ιδιαίτερα… φιλική για τον τελικό χρήστη ή για κάποιον που θέλει να το ενσωματώσει σε μια διανομή. Για να λυθούν αυτά τα προβλήματα δημιουργήθηκαν δύο ξεχωριστά projects, το slew και το 66.
To slew εστίασε στην παροχή μια βάσης για χρήση του s6-rc στις διανομές και ενός framework για ευκολότερη δημιουργία services. Παρέμεινε πολύ κοντά στο s6-rc και ενώ αποτελεί για εξαιρετική κατά τη γνώμη μου δουλειά, με απώθησε γιατί α) δεν πρόσφερε αρκετά περισσότερα από το “σκέτο” s6-rc και β) χρησιμοποιούσε εκτενώς στην υλοποίηση και τα service scripts το rc του plan9.
Τίποτα από τα δύο δεν είναι τεχνικά άσχημο ή προβληματικό. Ήταν όμως αρκετά για να μην πειραματιστώ με αυτό.
Τελικά, κατέληξα να επενδύσω χρόνο και προσπάθεια στο 66, που προέρχεται από το obarun. Θεωρώ ότι αποτελεί την πληρέστερη λύση σήμερα σε αυτό τον χώρο, έχει καταπληκτικό upstream και μεγάλα σχέδια για το μέλλον. Η περιγραφή του όμως και ο τρόπος που ενσωματώνεται στο void linux είναι ιστορία για άλλη φορά :)
« Τελευταία τροποποίηση: Ιουνίου 09, 2021, 11:13:46 μμ από mobinmob »
friendly
0
funny
0
informative
0
agree
0
disagree
0
pwnt
0
like
4
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
Members reacted like:
akounadis,linuxer,rhtoras,tkor,
No reactions

obar66

  • Author
  • *****
  • Μηνύματα: 43
    • Προφίλ
Απ: Αναζητώντας νέο init για το voidlinux – Μέρος Α´
« Απάντηση #1 στις: Μαΐου 23, 2021, 05:06:54 μμ »
ενδιαφέρον, θα το κοιτάξω  :P
friendly
0
funny
1
informative
0
agree
0
disagree
0
pwnt
0
like
1
dislike
0
No reactions
Members reacted funny:
mobinmob,
No reactions
No reactions
No reactions
No reactions
Members reacted like:
rhtoras,
No reactions

rhtoras

  • Newbie
  • *
  • Μηνύματα: 35
    • Προφίλ
    • ΟΝΕΙΡΟΦΩΝΟ
Απ: Αναζητώντας νέο init για το voidlinux – Μέρος Α´
« Απάντηση #2 στις: Μαΐου 23, 2021, 07:53:25 μμ »
Φίλε μου εξαιρετικός. Περιμένω με ανυπομονησία το δεύτερο μέρος. Είναι καλό να ακουστεί και αυτή η πλευρά. Η αλήθεια είναι πως τώρα θέλω να κοιτάξω πιο σοβαρά το 66 γιατί από αυτά που διαβάζω και με όσα μπορώ να καταλάβω έχει τρομερό potential. Χθες btw διάβαζα σε έναν χρήστη unix/bsd που ήθελε να χρησιμοποιήσει το linux subsystem στο freebsd του και συνάντησε κάποιες μικρές ασυμβατότητες. Πιστεύω είναι σημαντικό το init να είναι posix και να μπορεί να χρησιμοποιηθεί και από bsd. Παράδειγμα το openrc που υπάρχει αν δεν κάνω λάθος στο ghost bsd.
friendly
0
funny
1
informative
0
agree
0
disagree
0
pwnt
0
like
0
dislike
0
No reactions
Members reacted funny:
mobinmob,
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
Mέλος του oneirofono.gr ραδιοteam
Mixcloud.com/rhtoras

mobinmob

  • Global Moderator
  • *****
  • Μηνύματα: 30
    • Προφίλ
Απ: Αναζητώντας νέο init για το voidlinux – Μέρος Α´
« Απάντηση #3 στις: Μαΐου 24, 2021, 12:02:41 μμ »
To s6-rc τρέχει σίγουρα σε bsds (υπάρχουν άνθρωποι που το χρησιμοποιούν). Το s6-linux-init-maker δεν λειτουργεί φυσικά για το freebsd, καθώς το πρώτο στάδιο της εκκίνησης είναι os-specific αναγκαστικά. Πριν λίγο καιρό, εμφανίστηκε κάποιος στην mailing list του project -δεν θυμάμαι αν ήταν στην supervision ή στην skaware- ο οποίος δοκίμασε να αντικαταστήσει το init με s6-rc και ρωτούσε πως. Ο δημιουργός του s6-rc προσφέρθηκε να βοηθήσει, δεν ξέρω όμως πόσο έχουν προχωρήσει.
Το OpenRC μπορεί να χρησιμοποιηθεί πάνω από το init των BSDs σαν service manager χωρίς πρόβλημα, όπως και το s6-rc. Δεν ξέρω αν όσοι το χρησιμοποιούν εκεί έχουν αντικαταστήσει και το init...
Tο 66 απ ότι ξέρω δεν έχει δοκιμαστεί σε BSDs. Ο δημιουργός του ενδιαφέρεται πάντως. Λογικά αν υπάρχει πρόβλημα δεν θα είναι θέμα posix compatibility, αλλά διαφορών πολύ νωρίς στην διαδικασία εκκίνησης (όπως και στο s6-rc δλδ :) ).
friendly
0
funny
0
informative
0
agree
0
disagree
0
pwnt
0
like
1
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
Members reacted like:
rhtoras,
No reactions

mobinmob

  • Global Moderator
  • *****
  • Μηνύματα: 30
    • Προφίλ
Απ: Αναζητώντας νέο init για το voidlinux – Μέρος Α´
« Απάντηση #4 στις: Μαΐου 24, 2021, 12:06:48 μμ »
H συζήτηση για το freebsd αρχίζει από αυτό το mail:
https://www.mail-archive.com/skaware@list.skarnet.org/msg01547.html
friendly
0
funny
0
informative
0
agree
0
disagree
0
pwnt
0
like
1
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
Members reacted like:
rhtoras,
No reactions

tkor

  • Author
  • *****
  • Μηνύματα: 19
    • Προφίλ
Απ: Αναζητώντας νέο init για το voidlinux – Μέρος Α´
« Απάντηση #5 στις: Μαΐου 25, 2021, 08:41:38 μμ »
Μπράβο @mobinmob πολύ καλό το άρθρο και ευκολονόητο.   
friendly
0
funny
0
informative
0
agree
0
disagree
0
pwnt
0
like
0
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions

mobinmob

  • Global Moderator
  • *****
  • Μηνύματα: 30
    • Προφίλ
Απ: Αναζητώντας νέο init για το voidlinux – Μέρος Α´
« Απάντηση #6 στις: Ιουνίου 04, 2021, 03:34:46 μμ »
Η πρόταση του runit για την Fedora (2007):
friendly
0
funny
0
informative
0
agree
0
disagree
0
pwnt
0
like
1
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
Members reacted like:
linuxer,
No reactions

Tags: