+++
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).

