SysVinit (Ελληνικά)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Η διεργασία init είναι η πρώτη διεργασία που εκτελείται μόλις ολοκληρωθεί η φόρτωση του πυρήνα Linux. Το προκαθορισμένο πρόγραμμα init που χρησιμοποιεί το Arch είναι το /sbin/init και παρέχεται απο το sysvinitAUR. Η λέξη init εφεξής θα αναφέρεται στο sysvinit για το παρόν άρθρο.

Το inittab είναι το αρχείο ρυθμίσεων εκκίνησης για το init και βρίσκεται στον κατάλογο /etc. Περιέχει οδηγίες για την διεργασία init σχετικές με το ποιά προγράμματα και δέσμες εντολών θα πρέπει να εκτελεστούν κατα την είσοδο σε ένα συγκεκριμένο "επίπεδο εκκίνησης" (runlevel).

Συμβουλή: Δείτε το man 5 inittab και το man 8 init για μια πιο επίσημη και πληρέστερη περιγραφή.
Συμβουλή: Παρόλο που το Arch χρησιμοποιεί το init, Ο περισσότερος φόρτος εργασίας επιτελείται απο τα #Κύριες Δέσμες Εντολών Εκκίνησης. Το παρόν άρθρο επικεντρώνεται στα init και inittab; αν ενδιαφέρεστε για μια επισκόπηση της διαδικασίας εκκίνησης του Arch's, δείτε το Arch boot process.

Επισκόπηση των init και inittab

Το init είναι πάντα η διεργασία με αναγνωριστικό αριθμό 1 και, πέρα απο την διαχείριση κάποιου χώρου swap, είναι η γονική διεργασία όλων των άλλων διεργασιών. Μπορείτε να πάρετε μια ιδέα σχετικά με το που είναι η θέση της διεργασίας init στην ιεραρχία των διεργασιών του συστηματός σας χρησιμοποιώντας το pstree:

$ pstree -Ap
init(1)-+-acpid(3432)
        |-crond(3423)
        |-dbus-daemon(3469)
        |-gpm(3485)
        |-mylogin(3536)
        |-ngetty(3535)---login(3954)---zsh(4043)---pstree(4326)
        |-polkitd(4033)---{polkitd}(4035)
        |-syslog-ng(3413)---syslog-ng(3414)
        `-udevd(643)-+-udevd(3194)
                     `-udevd(3218)

Εκτός της συνήθους αρχικοποίησης του συστήματος (όπως υποδηλώνει το όνομα του), το init χειρίζεται επίσης την επανεκκίνηση, τον τερματισμό και την εκκίνηση σε λειτουργία ανάκτησης (κατάσταση ενός χρήστη). Για να υποστηρίξει τα παραπάνω, το inittab ομαδοποιεί τις καταχωρήσεις σε διαφορετικά επίπεδα εκκίνησης (runlevels). τα επίπεδα εκκίνησης που χρησιμοποιεί το Arch είναι 0 για τερματισμό, 1 (με προσονύμιο το S) για κατάσταση ενός χρήστη, 3 για κανονική εκκίνηση (κατάσταση πολλών χρηστών), 5 για X (παραθυρικό περιβάλλον X) και 6 για επανεκκίνηση. Άλλες διανομές μπορεί να υιοθετούν άλλες συμβάσεις, αλλά η σημασία των 0, 1 και 6 είναι καθολική.

Κατα την εκτελεσή του, το init σαρώνει το inittab και εκτελέι τις κατάλληλες ενέργειες. Μια καταχώρηση στο inittab έχει την μορφή

id:runlevels:action:process

Όπου το id είναι το μοναδικό αναγνωριστικό της καταχώρησης (απλά ένα όνομα, δεν έχει ουσιαστικό αντικτυπο στο init), και το runlevels είναι ένα (μη οριοθετημένο) αλφαριθμητικό το οποίο περιέχει τα runlevels. Εαν το runlevel στο οποίο εισέρχεται το init εμφανίζεται στο runlevels, το action διεκπεραιώνεται, εκτελώντας την process αν κριθεί σκόπιμο. κάποιες ειδικές action θα είχαν ως αποτέλεσμα το init να αγνοήσει τα runlevels και να υιοθετήσει μια ειδική αντίστοιχη μέθοδο. Περισσότερη επεξήγηση ακολουθεί στο επόμενο τμήμα.

Αλλάζοντας runlevel

Μέσω GRUB

Για να αλλάξετε το runlevel στο οποίο εκκινεί το σύστημα, απλά προσθέστε τον αναγνωριστικό αριθμό του εκάστοτε runlevel n στην γραμμή ορισμού πυρήνα (kernel) του GRUB. Μια συνήθης εφαρμογή της τεχνικής αυτής είναι #inittab. Στο αρχείο /boot/grub/menu.lst βρείτε το τμήμα που αναφέρεται στο Arch (το προκαθορισμένο είναι '# (0) Arch Linux'):

# (0)  Arch Linux
title  Arch Linux
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/sda3 ro
initrd /initramfs-linux.img

Για εκκίνιση στο runlevel 3, αλλάξτε την γραμμή kernel σε

kernel /vmlinuz-linux root=/dev/sda3 ro 3

Για εκκίνιση στο runlevel 5, αλλάξτε την γραμμή kernel σε

kernel /vmlinuz-linux root=/dev/sda3 ro 5

Το run-level προστέθηκε στο τέλος ώστε να γνωρίζει το kernel σε ποιό run-level να εκκινήσει το σύστημα. Για να χρησιμοποιήσετε κάποιο άλλο πρόγραμμα init (π.χ. systemd), προσθέστε το init=/bin/systemd η κάτι ανάλογο στην γραμμή kernel.

Σημείωση: Αν χρησιμοποιήσετε κάποιο άλλο προγραμμα init διαφορετικό απο το sysvinit, η παράμετρος runlevel μπορεί να αγνοηθεί.

Μετά την εκκίνηση

Αφού το σύστημα έχει εκκινήσει, μπορείτε να εισάγετε την εντολή telinit n ώστε να ζητήσετε το init να αλλάξει το runlevel στο n. Τότε το init διαβάζει το inittab και "διαφοροποιεί" το runlevel n και το τρέχον runlevel - τερματίζοντας τις διεργασίες που δεν εμφανίζονται στο νέο runlevel διεκπεραιώνοντας τις ενέργειες οι οποίες δεν εμφανίζονται στο "παλαιό" runlevel. Οι διεργασίες που εμφανίζονται και στα δύο runlevels μένουν ανέπαφες. Οι διαδικασία τερματισμού είναι στην πραγματικότητα λίγο πολύπλοκη, σε αυτό το σημείο, πρέπει να σημειωθεί οτι τεχνικές λεπτομέρειες μπορούν να βρεθούν στο εγχειρίδιο (manpage) του init.

Το init δεν παρακολουθεί το inittab. Θα πρέπει να καλέσετε ρητά το telinit ώστε να εφαρμοστούν οποιεσδήποτε παραμετροποιήσεις στο. Η εντολή telinit q έχει σαν αποτέλεσμα την επανεξέταση του inittab απο το init αλλά όχι την αλλαγή runlevel.

inittab

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

Προσοχή: Πάντα ελέγξτε ένα παραμετροποιημένο /etc/inittab με την εντολή telinit q πρίν επανεκκινήσετε το σύστημα, ειδάλλως ένα μικρό συντακτικό λάθος μπορεί να εμποδίσει την εκκίνηση του συστήματος σας.

Προκαθορισμένο Runlevel

Το προκαθορισμένο runlevel είναι το 3. Αποσχολιάστε ή αν προτιμάτε προσθέστε τα ακόλουθα για να εκκινήσετε το σύστημα στο runlevel 5 (το οποίο χρησιμοποιείται για το παραθυρικό περιβάλλον X κατα σύμβαση) εκ προοιμίου:

id:5:initdefault:

Κύριες Δέσμες Εντολών Εκκίνησης

Τα ακόλουθα αποτελούν τις κύριες δέσμες εντολών εκκίνησης του Arch.

rc::sysinit:/etc/rc.sysinit
rs:S1:wait:/etc/rc.single
rm:2345:wait:/etc/rc.multi
rh:06:wait:/etc/rc.shutdown

Εκκίνηση με έναν Χρήστη

Μερικές φορές ο πυρήνας μπορεί να μην καταφέρει να εκκινήσει εντελώς, λόγω ενός μη συνεπούς ως προς τα δεδομένα ή κατεστραμμένου σκληρου δίσκου ή συστήματος αρχείων, ελλειπή ή κατεστραμμένα αρχεία ζωτικής σημασίας, κ.τ.λ.. Σε αυτήν την περίπτωση η εικόνα init σας μπορεί να μπεί αυτομάτως σε κατάσταση ενός χρήστη η οποία επιτρέπει την είσοδο στο σύστημα μόνο του χρήστη root και κάνει χρήση του /sbin/sulogin αντί του /sbin/login ώστε να ελέγξει την διεργασία εισόδου. Μπορείτε επίσης να εκκίνήσετε σε κάσταση ενός χρήστη προσθέτοντας το γράμμα S στην γραμμή ορισμού πυρήνα των ρυθμίσεων του GRUB, LILO, ή syslinux. Εάν επιθυμείτε να εκτελεστεί κάτι άλλο αντί του sulogin, ορίστε το εδώ.

su:S:wait:/sbin/sulogin -p

Gettys και Είσοδος στο σύστημα

Υπάρχουν καταχωρήσεις ζωτικής σημασίας που εκτελούν τα gettys στα τερματικά σας. Τα περισσότερα σύνολα προκαθορισμένων ρυθμίσεων που θα συναντήσετε θα ορίζουν την εκτέλεση αρκετών gettys στα ttys1-6 τα οποία συνιστούν οτιδήποτε εμφανίζεται στην οθόνη σας κατά την προτροπή εισόδου. Επίσης δείτε τα openvt, chvt, stty, και ioctl.

c1:234:respawn:/sbin/agetty 9600 tty1 xterm-color
c5:5:respawn:/sbin/agetty 57600 tty2 xterm-256color

Ctrl+Alt+Del

Όταν μια ειδική ακολουθία πλήκτρων Ctrl+Alt+Del πατηθεί, η παρακάτω καταχώρηση ορίζει τι θα συμβεί.

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Προγράμματα X

Εάν δεν φοβάστε την αποσφαλμάτωση(debug), μπορείτε να κατανοήσετε πώς να εκκινήσετε όλων των ειδών τα προγράμματα μέσω του inittab. Ένα χρήσιμο είδος προγράμματος είναι η εκκίνηση του διαχειριστή εισόδου σας όταν το runlevel είναι το 5, κατάσταση πολλών χρηστών x. Στο ακόλουθο παράδειγμα μπορείτε να δείτε πώς να εκκινήσετε το SLiM κατά την είσοδο στο runlevel 5.

x:5:respawn:/usr/bin/slim >/dev/null 2>&1
#x:5:respawn:/usr/bin/xdm -nodaemon -confi /etc/X11/xdm/archlinux/xdm-config

Δέσμες ενεργειών Ανίχνευσης Ισχύος

Το Init μπορεί να επικοινωνήσει με την συσκευή UPS σας και να εκτελέσει διεργασίες βάσει της κατάστασης του. Ακολουθούν κάποια παραδείγματα:

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

Προσαρμοσμένο Αίτημα πληκτρολογίου

Η ακόλυθη γραμμή προσθέτει μια προσαρμοσμένη λειτουργία η οποία εκτελείτε με το πάτημα μιας ακολουθίας πλήκτρων. Μπορείτε να τροποποιήσετε αυτήν την ακολουθία πλήκτρων ωστε να είναι οποιαδήποτε εσείς επιθυμείτε, παρόμια με την Ctrl+Alt+Del.

kb::kbrequest:/usr/bin/wall "Keyboard Request -- edit /etc/inittab to customize"

Ενεργοποίηση του αιτήματος πληκρολογίου

Μπορείτε να ενεργοποιήσετε την ειδική ακολουθία πλήκτρων kbrequest στέλνοντας το σήμα WINCH στην διεργασία init (1) ως root (μέσω sudo). Σε αυτό το παράδειγμα, η εντολή:

kill -WINCH 1

έχει ως αποτέλεσμα η διεργασία wall να γράψει σε όλα τα ttys:

Broadcast message from root@askapachehost (console) (Wed Oct 27 14:02:26 2010):  
Keyboard Request -- edit /etc/inittab to customize

See also

External Links