112 γραμμές
8,1 KiB
Markdown
112 γραμμές
8,1 KiB
Markdown
+++
|
||
title = 'Διαδικασία εκκίνησης του Υπολογιστή.'
|
||
date = '1999-11-01T00:00:00Z'
|
||
description = ''
|
||
author = 'DJ Art(mailto:djart@freemail.gr)'
|
||
issue = ['Magaz 19']
|
||
issue_weight = 4
|
||
+++
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
*Το άρθρο αυτό αποτελεί συνέχεια του αντίστοιχου άρθρου του τεύχους 13. Έχει σκοπό να εμβαθύνει περισσότερο στο εσωτερικό και στη λειτουργία του αρχείου
|
||
/etc/inittab και του καταλόγου /etc/rc.d/*
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
**1. init και /etc/inittab**
|
||
---------------------------------------------------
|
||
|
||
**2. Τα αρχεία /etc/inittab και /etc/rc.d/rc.sysinit**
|
||
-----------------------------------------------------------------------------
|
||
|
||
**3. Το αρχείο /etc/rc.d/rc.local**
|
||
----------------------------------------------------------
|
||
|
||
**4. Οι κατάλογοι rcX.d**
|
||
------------------------------------------------
|
||
|
||
|
||
### [1. init και /etc/inittab]{#s1}
|
||
|
||
Η man page του init αναφέρει: \"Το init είναι ο πατέρας όλων των processes\". Ο πρωταρχικός του ρόλος είναι να δημιουργήσει processes από τις οδηγίες που του
|
||
δίνει το /etc/inittab. Ο τρόπος με τον οποίο το Linux εκκινεί τα processes μετά από το boot του kernel, προέρχεται από μία άλλη έκδοση του UNIX, την System V.
|
||
Στην πραγματικότητα η εντολή init είναι συμβατή με την System V init εντολή. Παρόλο που η init χαρακτηρίζεται ως το τελευταίο βήμα της διαδικασίας του boot του
|
||
kernel, είναι η πρώτη εντολή που ρυ θμίζει και προετοιμάζει το σύστημά σας για χρήση. Η init δουλεύει διαβάζοντας το /etc/inittab και τρέχοντας τα scripts του
|
||
καταλόγου /etc/rc.d σύμφωνα βέβαια με το επιθυμητό runlevel. Κάθε script μπορεί να σταματήσει ή να ξεκινήσει μια υπηρεσία, όπως π.χ. την υπηρεσία για το mail,
|
||
τα news ή το Web.
|
||
|
||
Αυτή είναι μιά άποψη του καταλόγου /etc/rc.d (προσέξτε ότι από διανομή σε διανομή, τα runlevels δεν είναι ίδια):
|
||
|
||
init.d/
|
||
rc*
|
||
rc.local*
|
||
rc.sysinit*
|
||
rc0.d/
|
||
rc1.d/
|
||
rc2.d/
|
||
rc3.d/
|
||
rc4.d/
|
||
rc5.d/
|
||
rc6.d/
|
||
|
||
Στον κατάλογο /etc/rc.d/init.d θα βρείτε έναν αριθμό από scripts που χρησιμεύουν στο να σταματούν ή να ξεκινούν τις διάφορες υπηρεσίες.
|
||
|
||
|
||
### [2. Τα αρχεία /etc/inittab και /etc/rc.d/rc.sysinit]{#s2}
|
||
|
||
Το σπουδαιότερο script είναι το rc.sysinit, καθώς είναι το πρώτο script που εκτελείται στο Linux. Οι λειτουργίες του script αυτού είναι οι εξής:
|
||
|
||
- Ορίζει το PATH (κάνει export τη μεταβλητή PATH)
|
||
- Ρυθμίζει το networking
|
||
- Ξεκινάει το swapping για τη virtual memory
|
||
- Ορίζει το hostname του συστήματος
|
||
- Ελέγχει το root partition για πιθανές επιδιορθώσεις (fsck)
|
||
- Ελέγχει τα quotas του root filesystem
|
||
- Ενεργοποιεί τα user και group quotas για το root filesystem
|
||
- Ξανακάνει mount το root filesystem, αλλά αυτήν την φορά read/write
|
||
- Ελέγχει τον πίνακα των mounted filesystems, τον /etc/mtab
|
||
- Ετοιμάζει το σύστημα για το φόρτωμα των modules
|
||
- Βρίσκει τα modules dependencies
|
||
- Ελέγχει τα υπόλοιπα filesystems για πιθανές επιδιορθώσεις
|
||
- Κάνει mount όλα τα υπόλοιπα filesystems
|
||
- Σβήνει πολλά /etc αρχεία, όπως π.χ. το /etc/fastboot
|
||
- Σβήνει τα UUCP lock αρχεία
|
||
- Ρυθμίζει την ώρα του συστήματος
|
||
- Ξεκινάει το swap partition
|
||
- Ετοιμάζει τις serial ports
|
||
- Φορτώνει τα modules
|
||
|
||
Το rc.sysinit script εκτελείται από την init δια μέσου του /etc/inittab. Το inittab περιέχει την εξής γραμμή:
|
||
|
||
# System initialization.
|
||
si::sysinit:/etc/rc.d/rc.sysinit
|
||
|
||
|
||
### [3. Το αρχείο /etc/rc.d/rc.local]{#s3}
|
||
|
||
Μέχρι τώρα είδαμε ότι μετά το boot του kernel, η εντολή τρέχει το script rc.sysinit. Στη συνέχεια, η εντολή init εκτελεί το script rc.local. Αν κοιτάξετε το
|
||
περιεχόμενο του rc.local, θα διαπιστώσετε ότι αυτό το script μαζεύει πληροφορίες για το όνομα της διανομής σας και για την αρχιτεκτονική του υπολογιστή σας και
|
||
τοποθετεί αυτές τις πληροφορίες στο αρχείο /etc/issue. Το περιεχόμενο του αρχείου αυτού αναδεικνύεται κατά τη διαδικασία του login από το χρήστη.
|
||
|
||
Αναλυτικότερα, σε ένα RedHat σύστημα, το rc.local διαβάζει το αρχείο /etc/redhat-release, που περιέχει την έκδοση της διανομής, και στη συνέχεια εκτελεί τις
|
||
εντολές **uname -r**, που εμφανίζει την έκδοση του kernel, και **uname -m**, που εμφανίζει τον τύπο του επεξεργαστή (π.χ. 686). Στο τέλος, τοποθετεί όλες αυτές
|
||
τις πληροφορίες στο αρχείο /etc/issue (με echo \>\> ).
|
||
|
||
**Σημείωση:** Ο σκοπός του rc.local δεν είναι να αποτελεί ένα μέρος για να βάζει κανείς εντολές για τη ρύθμιση (initialization) του συστήματος, παρόλο που
|
||
μερικοί το κάνουν. Στο BSD UNIX, το rc.local χρησιμοποιείται για τον έλεγχο των δικτυακών υπηρεσιών. Το Linux δεν χρησιμοποιούσε πάντα τα ίδια initialization
|
||
scripts, οπότε μπορεί να βρείτε διαφορές μεταξύ των RedHat, SuSE, Slackware και των άλλων διανομών.
|
||
|
||
|
||
### [4. Οι κατάλογοι rcX.d]{#s4}
|
||
|
||
Η επόμενη εργασία που κάνει η εντολή init είναι η εκτέλεση των ειδικών scripts για κάθε runlevel. Μέσα στον κατάλογο /etc/rc.d, όπως είδαμε, υπάρχουν οι
|
||
κατάλογοι rcX.d, όπου X είναι ο αριθμός του αντίστοιχου runlevel (από 0 έως 6). Αν κοιτάξετε τα περιεχόμενα ενός από αυτούς του καταλόγους, θα δείτε οτι
|
||
περιέχουν links στα διάφορα scripts του καταλόγου /etc/rc.d/init.d. Η μορφή των links είναι κάπως έτσι:
|
||
|
||
S10network ή
|
||
K10network
|
||
|
||
Το γράμμα S ή K αντιστοιχεί στην εκκίνηση ή στον τερματισμό μιάς υπηρεσίας (S από το Start και K από το Kill). Ο αριθμός δίπλα από το γράμμα χρησιμεύει για να
|
||
τρέχουν τα scripts στη σωστή σειρά (για παράδειγμα να μην κάνει unmount τα partitions πριν κλείσει το network file-sharing).
|
||
|