SysVinit (Ελληνικά)
Η διεργασία init είναι η πρώτη διεργασία που εκτελείται μόλις ολοκληρωθεί η φόρτωση του πυρήνα Linux. Το προκαθορισμένο πρόγραμμα init που χρησιμοποιεί το Arch είναι το /sbin/init
και παρέχεται απο το sysvinitAUR. Η λέξη init εφεξής θα αναφέρεται στο sysvinit για το παρόν άρθρο.
Το inittab είναι το αρχείο ρυθμίσεων εκκίνησης για το init και βρίσκεται στον κατάλογο /etc. Περιέχει οδηγίες για την διεργασία init σχετικές με το ποιά προγράμματα και δέσμες εντολών θα πρέπει να εκτελεστούν κατα την είσοδο σε ένα συγκεκριμένο "επίπεδο εκκίνησης" (runlevel).
man 5 inittab
και το man 8 init
για μια πιο επίσημη και πληρέστερη περιγραφή.Επισκόπηση των 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.
Μετά την εκκίνηση
Αφού το σύστημα έχει εκκινήσει, μπορείτε να εισάγετε την εντολή 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
- Automatic login to virtual console
- Disable clearing of boot messages
- Start X at login
- xinitrc
- Display manager
- SLiM