Κεφάλαιο 13. Η Διαδικασία Εκκίνησης του FreeBSD

13.1. Σύνοψη

Η διαδικασία της εκκίνησης ενός υπολογιστή και φόρτωσης του λειτουργικού συστήματος αναφέρεται ως "διαδικασία bootstrap", ή απλώς "booting". Η διαδικασία εκκίνησης του FreeBSD μπορεί να προσαρμοστεί πολύ εύκολα στις απαιτήσεις σας, επιτρέποντας σάς να επιλέξετε είτε διαφορετικά λειτουργικά συστήματα που είναι εγκατεστημένα στον ίδιο υπολογιστή, ή ακόμα και διαφορετικές εκδόσεις του ίδιου λειτουργικού συστήματός ή του εγκατεστημένου πυρήνα.

Το κεφάλαιο αυτό περιγράφει λεπτομερώς τις επιλογές ρυθμίσεων που μπορείτε να κάνετε και πως να φέρετε στα μέτρα σας τη διαδικασία εκκίνησης του FreeBSD. Η διαδικασία εκκίνησης περιλαμβάνει οτιδήποτε συμβαίνει από την εκκίνηση του πυρήνα του FreeBSD, την ανίχνευση των συσκευών, μέχρι και την εκκίνηση της init(8). Η εκκίνηση της init(8) σηματοδοτείται από την αλλαγή χρώματος του κειμένου από φωτεινό λευκό σε γκρι.

Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε:

  • Ποια είναι τα τμήματα του συστήματος εκκίνησης του FreeBSD, και πως αλληλεπιδρούν μεταξύ τους.

  • Τις επιλογές που μπορείτε να δώσετε στα τμήματα της εκκίνησης του FreeBSD για να ελέγξετε τη διαδικασία εκκίνησης.

  • Τα βασικά του device.hints(5).

Μόνο για υπολογιστές αρχιτεκτονικής x86

Το κεφάλαιο αυτό περιγράφει τη διαδικασία εκκίνησης του FreeBSD μόνο σε συστήματα αρχιτεκτονικής Intel x86.

13.2. Το Πρόβλημα της Εκκίνησης

Η ενεργοποίηση ενός υπολογιστή και η εκκίνηση του λειτουργικού συστήματος, μας φέρνει αντιμέτωπους με ένα ενδιαφέρον δίλημμα. Εξ' ορισμού, ο υπολογιστής δεν ξέρει να κάνει τίποτα μέχρι την εκκίνηση του λειτουργικού συστήματος. Αυτό περιλαμβάνει και την εκτέλεση προγραμμάτων από το δίσκο. Έτσι, αν ο υπολογιστής δεν μπορεί να εκτελέσει προγράμματα από το δίσκο χωρίς το λειτουργικό σύστημα, αλλά και τα προγράμματα του λειτουργικού συστήματος είναι επίσης στο δίσκο, πως είναι δυνατή η εκκίνηση του λειτουργικού;

Το πρόβλημα μοιάζει με αυτό στο βιβλίο Οι Περιπέτειες του Βαρώνου Μινχάουζεν. Ένας χαρακτήρας έχει πέσει σε ένα πηγάδι, και βγαίνει πιάνοντας και τραβώντας τα κορδόνια του (bootstraps). Στις πρώτες μέρες των υπολογιστών, χρησιμοποιούνταν ο όρος bootstrap για το μηχανισμό φόρτωσης του λειτουργικού συστήματος, το οποίο συντομεύτηκε σε "booting".

Στην αρχιτεκτονική x86, το Βασικό Σύστημα Εισόδου Εξόδου (BIOS) είναι υπεύθυνο για τη φόρτωση του λειτουργικού συστήματος. Για να το επιτύχει αυτό, το BIOS ανιχνεύει το σκληρό δίσκο για την Κεντρική Εγγραφή Εκκίνησης (Master Boot Record, MBR), η οποία πρέπει να βρίσκεται σε συγκεκριμένο σημείο στο δίσκο. Το BIOS γνωρίζει αρκετά για να φορτώσει και να εκτελέσει το MBR, και υποθέτει ότι το MBR μπορεί κατόπιν να εκτελέσει την υπόλοιπη διαδικασία φόρτωσης του λειτουργικού συστήματος, ενδεχομένως και με τη βοήθεια του BIOS.

Ο κώδικας μέσα στο MBR συνήθως αναφέρεται ως διαχειριστής εκκίνησης (boot manager), ειδικά όταν αλληλεπιδρά με το χρήστη. Στην περίπτωση αυτή, ο διαχειριστής εκκίνησης έχει συνήθως περισσότερο κώδικα στην πρώτη τροχιά (track) του δίσκου ή μέσα σε κάποιο σύστημα αρχείων του λειτουργικού. (Μερικές φορές ο διαχειριστής εκκίνησης αποκαλείται και φορτωτής εκκίνησης (boot loader), αλλά στο FreeBSD ο όρος αυτός χρησιμοποιείται σε μεταγενέστερο στάδιο της εκκίνησης.) Στους δημοφιλείς διαχειριστές εκκίνησης περιλαμβάνονται το boot0 (γνωστό και ως Boot Easy, ο στάνταρ διαχειριστής εκκίνησης του FreeBSD), το Grub, το GAG, και το LILO. (Μόνο το boot0 χωράει μέσα στο MBR.)

Αν έχετε εγκατεστημένο ένα μόνο λειτουργικό σύστημα στους δίσκους σας, το τυποποιημένο MBR για PC είναι επαρκές. Αυτό το MBR ψάχνει για το πρώτο εκκινήσιμο (ή ενεργό) διαμέρισμα (slice) στο δίσκο, και εκτελεί τον κώδικα που υπάρχει σε αυτό για να φορτώσει το υπόλοιπο του λειτουργικού συστήματος. Ένα MBR αυτού του τύπου, είναι αυτό που εγκαθίσταται από προεπιλογή με την fdisk(8). Βασίζεται στο /boot/mbr.

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

Το υπόλοιπο του συστήματος εκκίνησης του FreeBSD είναι χωρισμένο σε τρία στάδια. Το πρώτο στάδιο εκτελείται από το MBR, το οποίο γνωρίζει απλώς ότι απαιτείται για να φέρει τον υπολογιστή σε μια συγκεκριμένη κατάσταση και να εκτελέσει το δεύτερο στάδιο. Το δεύτερο στάδιο μπορεί να κάνει λίγα περισσότερα πράγματα πριν την εκτέλεση του τρίτου σταδίου. Το τρίτο στάδιο ολοκληρώνει τη διαδικασία φόρτωσης του λειτουργικού συστήματος. Η εργασία γίνεται σε τρία στάδια, γιατί το πρότυπο του PC επιβάλλει περιορισμούς στο μέγεθος των προγραμμάτων που μπορούν να εκτελεστούν στα στάδια ένα και δύο. Η συνένωση αυτή των εργασιών επιτρέπει στο FreeBSD να παρέχει ένα πιο ευέλικτο σύστημα φόρτωσης.

Έπειτα ξεκινάει ο πυρήνας και αρχίζει την ανίχνευση και αρχικοποίηση των συσκευών ώστε να μπορούν να χρησιμοποιηθούν. Μέτα την ολοκλήρωση της διαδικασίας εκκίνησης του πυρήνα, ο έλεγχος περνάει στη διαδικασία χρήστη init(8), η οποία και επιβεβαιώνει ότι οι δίσκοι είναι σε λειτουργική (χωρίς λάθη) κατάσταση. Η init(8) ξεκινάει έπειτα την ρύθμιση πόρων (επίπεδο χρήστη), με την οποία προσαρτώνται τα συστήματα αρχείων, ρυθμίζονται οι κάρτες δικτύου για επικοινωνία με το δίκτυο, και γενικά εκκινούν όλες οι διαδικασίες που εκτελούνται τυπικά κατά την εκκίνηση ενός FreeBSD συστήματος.

13.3. Ο Διαχειριστής Εκκίνησης και τα Στάδια Εκκίνησης

13.3.1. Ο Διαχειριστής Εκκίνησης (boot manager)

Ο κώδικας στο MBR ή διαχειριστής εκκίνησης αναφέρεται μερικές φορές και ως στάδιο μηδέν (stage zero) της διαδικασίας εκκίνησης. Το τμήμα αυτό περιγράφει δύο από τους διαχειριστές εκκίνησης που αναφέραμε προηγουμένως: Το boot0 και το LILO.

Ο Διαχειριστής Εκκίνησης boot0: Το MBR που εγκαθίσταται από το πρόγραμμα εγκατάστασης του FreeBSD ή το boot0cfg(8), βασίζεται από προεπιλογή στο /boot/boot0. (Το πρόγραμμα boot0 είναι πολύ απλό, καθώς ο κώδικας στο μπορεί να έχει μέγεθος ως 446 bytes, εξαιτίας του πίνακα κατατμήσεων (slice table) και του αναγνωριστικού 0x55AA που βρίσκεται στο τέλος του MBR.) Αν έχετε εγκαταστήσει το boot0 και πολλαπλά λειτουργικά συστήματα στους σκληρούς δίσκους σας, θα δείτε κατά την εκκίνηση, μια οθόνη παρόμοια με την παρακάτω:

Παράδειγμα 1. boot0 Screenshot
F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1

Default: F2

Άλλα λειτουργικά συστήματα, και ειδικότερα τα Windows®, είναι γνωστό ότι γράφουν το δικό τους MBR πάνω σε κάποιο ήδη υπάρχον. Αν σας συμβεί αυτό, ή αν θέλετε να αντικαταστήσετε το υπάρχον MBR σας με αυτό του FreeBSD, χρησιμοποιήστε την ακόλουθη εντολή:

# fdisk -B -b /boot/boot0 device

όπου device είναι η συσκευή από την οποία γίνεται εκκίνηση, όπως π.χ. το ad0 για τον πρώτο δίσκο IDE, το ad2 για τον πρώτο IDE δίσκο στο δευτερεύοντα ελεγκτή, το da0 για τον πρώτο SCSI δίσκο κ.ο.κ. Αν πάλι θέλετε προσαρμοσμένη ρύθμιση του MBR, χρησιμοποιήστε το boot0cfg(8).

Ο Διαχειριστής Εκκίνησης LILO Για να εγκαταστήσετε αυτό το διαχειριστή εκκίνησης ώστε να μπορεί να εκκινεί το FreeBSD, εγκαταστήστε πρώτα το Linux και προσθέστε την ακόλουθη καταχώρηση στο υπάρχον αρχείο ρυθμίσεων /etc/lilo.conf:

other=/dev/hdXY
table=/dev/hdX
loader=/boot/chain.b
label=FreeBSD

Στο παραπάνω, καθορίστε το πρωτεύον διαμέρισμα και το δίσκο του FreeBSD αντικαθιστώντας το X με το γράμμα δίσκου και το Y με τον αριθμό του πρωτεύοντος διαμερίσματος, χρησιμοποιώντας όμως την ονοματολογία του Linux. Αν χρησιμοποιείτε οδηγό SCSI θα χρειαστεί να αλλάξετε το /dev/hd σε κάτι αντίστοιχο με /dev/sd. Η γραμμή loader=/boot/chain.b μπορεί να παραλειφθεί αν έχετε και τα δύο λειτουργικά συστήματα στον ίδιο δίσκο. Εκτελέστε τώρα την εντολή /sbin/lilo -v για να καταχωρήσετε τις νέες αλλαγές σας στο σύστημα. Μπορείτε να τις επιβεβαιώσετε ελέγχοντας τα μηνύματα που θα εμφανιστούν στην οθόνη σας.

13.3.2. Το Στάδιο Ένα, /boot/boot1, και το Στάδιο Δύο, /boot/boot2

Ουσιαστικά, το πρώτο και δεύτερο στάδιο είναι τμήματα του ίδιου προγράμματος, στην ίδια περιοχή του δίσκου. Λόγω περιορισμών χώρου έχουν χωριστεί σε δύο, αλλά εγκαθίστανται πάντα μαζί. Αντιγράφονται από το συνδυασμένο αρχείο /boot/boot από το πρόγραμμα εγκατάστασης ή το bsdlabel (δείτε παρακάτω).

Βρίσκονται έξω από συστήματα αρχείων, στην πρώτη τροχιά (track) του slice εκκίνησης, ξεκινώντας από τον πρώτο τομέα. Είναι το σημείο όπου το boot0, ή οποιοσδήποτε άλλος διαχειριστής εκκίνησης, αναμένει να βρει πρόγραμμα προς εκτέλεση με το οποίο θα συνεχιστεί η διαδικασία εκκίνησης. Ο αριθμός των τομέων που χρησιμοποιούνται μπορεί να βρεθεί εύκολα από το μέγεθος του αρχείου /boot/boot.

Το boot1 είναι πολύ απλό, μια και μπορεί να είναι μόνο 512 bytes σε μέγεθος, και γνωρίζει όσα χρειάζεται για το bsdlabel του FreeBSD, το οποίο αποθηκεύει πληροφορίες σχετικά με το slice, ώστε να βρει και να εκτελέσει το boot2.

Το boot2 είναι ελαφρά πιο πολύπλοκο και κατανοεί επαρκώς το σύστημα αρχείων του FreeBSD ώστε να μπορεί να βρει αρχεία σε αυτό, και μπορεί επίσης να παρέχει μια απλή διεπαφή με το χρήστη ώστε να μπορεί να γίνει η επιλογή του πυρήνα ή του προγράμματος φόρτωσης που θα εκτελεστεί.

Το boot2 συνήθως εκτελεί τον loader (φορτωτής εκκίνησης) ο οποίος είναι εξαιρετικά πιο πολύπλοκος, αλλά παρέχει ένα ωραίο και εύκολο τρόπο ρύθμισης της εκκίνησης. Παλιότερα το boot2 αναλάμβανε να φορτώσει απευθείας τον πυρήνα.

Παράδειγμα 2. Εικόνα από το boot2
>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:

Αν χρειαστεί ποτέ να αντικαταστήσετε τα εγκατεστημένα boot1 και boot2 χρησιμοποιήστε το bsdlabel(8):

# bsdlabel -B diskslice

όπου το diskslice είναι ο δίσκος και το slice από το οποίο γίνεται η εκκίνηση, όπως π.χ. ad0s1 για το πρώτο slice στον πρώτο IDE δίσκο.

Επικίνδυνα Αφοσιωμένη Κατάσταση (Dangerously Dedicated Mode)

Αν χρησιμοποιήσετε μόνο το όνομα του δίσκου, όπως π.χ. ad0, στην εντολή bsdlabel(8) θα δημιουργήσετε ένα επικίνδυνα αφοσιωμένο δίσκο, χωρίς slices. Είναι σχεδόν σίγουρο ότι δεν θέλετε να το κάνετε αυτό, γι' αυτό σιγουρευτείτε ότι ελέγξατε την εντολή bsdlabel(8) πριν πιέσετε Return.

13.3.3. Στάδιο Τρία, /boot/loader

Ο loader, ή φορτωτής εκκίνησης, είναι το τελικό στάδιο του συστήματος εκκίνησης τριών σταδίων, και βρίσκεται στο σύστημα αρχείων, συνήθως ως /boot/loader.

Προορισμός του loader είναι να παρέχει μια μέθοδο ρύθμισης φιλική προς το χρήστη, και χρησιμοποιεί ένα εύκολο σύνολο εντολών, το οποίο υποστηρίζεται από ένα ισχυρό μεταφραστή εντολών με ένα πολυπλοκότερο σύνολο εντολών.

13.3.3.1. Ροή του Προγράμματος Loader

Κατά την αρχικοποίηση, ο loader θα ανιχνεύσει την κονσόλα και τους δίσκους και θα καθορίσει από ποιο δίσκο γίνεται η εκκίνηση. Θα ρυθμίσει κατάλληλα τις αντίστοιχες μεταβλητές και θα ξεκινήσει ένα πρόγραμμα μετάφρασης εντολών (interpreter) στο οποίο μπορεί ο χρήστης να δίνει εντολές, είτε απευθείας, είτε μέσω κάποιου script.

Ο loader κατόπιν θα διαβάσει το αρχείο /boot/loader.rc, το οποίο με τη σειρά του διαβάζει, από προεπιλογή, το /boot/defaults/loader.conf. Μέσα από το αρχείο αυτό τίθενται λογικές προεπιλεγμένες τιμές για κάποιες μεταβλητές. Έπειτα, διαβάζεται το αρχείο /boot/loader.conf για τυχόν τοπικές αλλαγές στις μεταβλητές αυτές. Κατόπιν το loader.rc χρησιμοποιεί αυτές τις μεταβλητές, φορτώνοντας τα αρθρώματα (modules) και τον πυρήνα που έχει επιλεγεί.

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

13.3.3.2. Εντολές Ενσωματωμένες στο Loader

Παρακάτω θα δείτε τις πιο συχνά χρησιμοποιούμενες εντολές του loader. Για περισσότερες λεπτομέρειες σχετικά με όλες τις διαθέσιμες εντολές, παρακαλούμε να δείτε το loader(8).

autoboot seconds

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

boot [-options] [kernelname]

Προχωράει άμεσα στην εκκίνηση του πυρήνα, χρησιμοποιώντας όποιες τυχόν επιλογές έχουν δοθεί και το όνομα του πυρήνα που θα εκτελεστεί αν έχει επίσης δοθεί. Για να δώσετε διαφορετικό όνομα πυρήνα στην γραμμή εντολής, θα πρέπει πρώτα να χρησιμοποιήσετε την εντολή unload. Διαφορετικά, θα χρησιμοποιηθεί ο πυρήνας που έχει φορτωθεί ήδη.

boot-conf

Διατρέχει την αυτόματη ρύθμιση των αρθρωμάτων (module) που βασίζεται σε μεταβλητές, με τον ίδιο τρόπο που γίνεται και σε κανονική εκκίνηση. Αυτό έχει νόημα μόνο αν χρησιμοποιήσετε πρώτα το unload και αλλάξετε κάποιες μεταβλητές, συνήθως το kernel.

help [topic]

Δείχνει μηνύματα βοήθειας, τα οποία διαβάζονται από το /boot/loader.help. Αν το topic (θέμα) που δόθηκε είναι η λέξη index, θα δείτε μια λίστα με τα διαθέσιμα θέματα βοήθειας.

include filename …​

Επεξεργάζεται το αρχείο με το όνομα αρχείου που δόθηκε (filename). Γίνεται ανάγνωση και γραμμή προς γραμμή μετάφραση του αρχείου. Η εντολή include σταματάει άμεσα αν εντοπιστεί κάποιο λάθος.

load [-t type] filename

Φορτώνει τον πυρήνα, το άρθρωμα πυρήνα ή ένα αρχείο του τύπου που καθορίστηκε, με βάση το όνομα αρχείου που δόθηκε. Αν μετά το όνομα αρχείου υπάρχουν παράμετροι, περνιούνται ως παράμετροι στο αρχείο που φορτώνεται.

ls [-l] [path]

Δείχνει ένα κατάλογο των αρχείων της διαδρομής που δόθηκε, ή αν δεν καθορίστηκε διαδρομή, του ριζικού καταλόγου. Αν δοθεί και η επιλογή -l θα εμφανίζονται επίσης και τα μεγέθη των αρχείων.

lsdev [-v]

Εμφανίζει όλες τις συσκευές από τις οποίες είναι δυνατή η φόρτωση αρθρωμάτων. Αν δοθεί με την επιλογή -v, εμφανίζονται περισσότερες λεπτομέρειες.

lsmod [-v]

Εμφανίζει τα αρθρώματα που έχουν φορτωθεί. Αν δοθεί η επιλογή -v, εμφανίζονται περισσότερες λεπτομέρειες.

more filename

Εμφανίζει το αρχείο που καθορίζεται, με παύσεις κάθε LINES αριθμό γραμμών.

reboot

Επανεκκινεί άμεσα το σύστημα.

set variable

Καθορίζει μεταβλητές περιβάλλοντος για τον loader.

unload

Αποφορτώνει όλα τα αρθρώματα.

13.3.3.3. Παραδείγματα για τον Loader

Εδώ θα βρείτε μερικά πρακτικά παραδείγματα σχετικά με την χρήση του loader:

  • Για να ξεκινήσετε το συνηθισμένο πυρήνα σας, αλλά σε κατάσταση ενός χρήστη:

     boot -s
  • Για να αποφορτώσετε το συνηθισμένο πυρήνα σας και να φορτώσετε τον παλιό σας (ή κάποιο άλλο):

     unload
     load kernel.old

    Μπορείτε να χρησιμοποιήσετε το όνομα kernel.GENERIC για να αναφερθείτε στον αρχικό (generic) πυρήνα ο οποίος υπάρχει στο CD της εγκατάστασης, ή το kernel.old για να αναφερθείτε στον πυρήνα που είχατε εγκατεστημένο πριν (για παράδειγμα, τον παλιό σας πυρήνα αν κάνατε πρόσφατα ρύθμιση και εγκατάσταση νέου δικού σας προσαρμοσμένου πυρήνα).

    Χρησιμοποιήστε το παρακάτω για να φορτώσετε τα συνηθισμένα σας αρθρώματα σε κάποιο άλλο πυρήνα:

    unload
    set kernel="kernel.old"
    boot-conf
  • Για να φορτώσετε ένα script ρύθμισης πυρήνα (ένα αυτοματοποιημένο πρόγραμμα το οποίο εκτελεί τις λειτουργίες που κανονικά θα κάνατε μέσω κάποιου προγράμματος ρύθμισης πυρήνα κατά την εκκίνηση):

     load -t userconfig_script /boot/kernel.conf

13.3.3.4. Γραφική Οθόνη Εκκίνησης

Η γραφική οθόνη εκκίνησης (splash screen) δημιουργεί ένα πιο ευχάριστο περιβάλλον σε σχέση με την απλή απεικόνιση των μηνυμάτων εκκίνησης σε μορφή κειμένου. Η γραφική οθόνη εκκίνησης εμφανίζεται ως ότου το σύστημα φτάσει στην προτροπή εισόδου (login), είτε στην κονσόλα, είτε στο γραφικό περιβάλλον.

Το FreeBSD διαθέτει δύο βασικά περιβάλλοντα. Το πρώτο είναι το προεπιλεγμένο περιβάλλον κειμένου γραμμής εντολών (κονσόλα). Μετά το τέλος της εκκίνησης, εμφανίζεται στην κονσόλα μια προτροπή εισόδου. Το δεύτερο, είναι το γραφικό περιβάλλον που παρέχεται από το σύστημα Χ11. Μετά την εγκατάσταση του X11 και ενός από τους γραφικούς διαχειριστές παραθύρων ή desktop, όπως είναι τα GNOME, KDE ή XFce, μπορείτε να ξεκινήσετε το γραφικό περιβάλλον με την εντολή startx.

Μερικοί χρήστες προτιμούν να συνδέονται στο σύστημα μέσω γραφικής οθόνη εισόδου, αντί να χρησιμοποιούν την προτροπή εισόδου της κονσόλας. Η δυνατότητα αυτή παρέχεται απο διαχειριστές οθόνης, όπως ο XDM για το Xorg, o gdm για το GNOME και ο kdm για το KDE (καθώς και άλλους που διατίθενται στη Συλλογή των Ports). Μετά από μια επιτυχημένη είσοδο, παρουσιάζεται άμεσα στο χρήστη το γραφικό περιβάλλον της επιλογής του.

Στο περιβάλλον της γραμμής εντολών, η γραφική οθόνη εκκίνησης θα αποκρύψει όλα τα μηνύματα ανίχνευσης των συσκευών και υπηρεσιών, μέχρι την εμφάνιση της προτροπής εισόδου. Με απευθείας εκκίνηση σε περιβάλλον X11, η εμπειρία εκκίνησης θα είναι ακόμα πιο καθαρή, και θα μοιάζει περισσότερο με την αντίστοιχη σε ένα περιβάλλον Microsoft® Windows® ή άλλου μη-UNIX συστήματος.

13.3.3.4.1. Λειτουργία της Γραφικής Οθόνης Εκκίνησης

Η γραφική οθόνη εκκίνησης υποστηρίζει εικόνες bitmap (.bmp), ZSoft PCX (.pcx) ή TheDraw (.bin) 256 χρωμάτων. Επιπρόσθετα, οι εικόνες που χρησιμοποιούνται πρέπει να έχουν ανάλυση 320x200 ή μικρότερη για να λειτουργήσουν σε τυπικούς προσαρμογείς οθόνης VGA.

Για να χρησιμοποιήσετε μεγαλύτερες εικόνες, μέχρι την μέγιστη ανάλυση των 1024x768 pixels, ενεργοποιήστε την υποστήριξη VESA που περιλαμβάνεται στο FreeBSD. Μπορείτε να την ενεργοποιήσετε φορτώνοντας το άρθρωμα VESA κατά την εκκίνηση του συστήματος, η προσθέτοντας την επιλογή VESA στο αρχείο ρυθμίσεων του πυρήνα, και δημιουργώντας ένα νέο προσαρμοσμένο πυρήνα (Ρυθμίζοντας τον Πυρήνα του FreeBSD). Η υποστήριξη VESA δίνει στους χρήστες την δυνατότητα να χρησιμοποιήσουν μια εικόνα που να καλύπτει όλη την οθόνη.

Μπορείτε να δείτε τα κανονικά μηνύματα εκκίνησης όσο εμφανίζεται η γραφική οθόνη εκκίνησης, πιέζοντας απλώς οποιοδήποτε πλήκτρο.

Η οθόνη εκκίνησης γίνεται επίσης η προεπιλεγμένη προφύλαξη οθόνης, όσο το σύστημα λειτουργεί σε περιβάλλον κονσόλας. Μετά από κάποιο χρονικό διάστημα αδράνειας, η οθόνη αλλάζει, απεικονίζοντας την εικόνα που χρησιμοποιήθηκε στην εκκίνηση, με κυκλική εναλλαγή της φωτεινότητας από πολύ φωτεινή ως πολύ σκοτεινή. Μπορείτε να αλλάξετε αυτή την προεπιλεγμένη προφύλαξη οθόνης, προσθέτοντας μια γραμμή saver= στο αρχείο /etc/rc.conf. Για την επιλογή saver=, υπάρχουν αρκετές ενσωματωμένες προφυλάξεις οθόνης για να επιλέξετε. Μπορείτε να δείτε την πλήρη λίστα στη σελίδα manual του splash(4). Η προεπιλεγμένη προφύλαξη οθόνης ονομάζεται "warp". Σημειώστε ότι η προφύλαξη οθόνης που καθορίζεται στο αρχείο /etc/rc.conf μέσω της επιλογής saver= έχει επίδραση μόνο στις εικονικές κονσόλες. Δεν επηρεάζει καθόλου το γραφικό περιβάλλον X11.

Κάποια μηνύματα εκκίνησης εξακολουθούν να εμφανίζονται, ακόμα και μετά την εφαρμογή της γραφικής οθόνης εκκίνησης. Τα μηνύματα αυτά περιλαμβάνουν το μενού επιλογών εκκίνησης και την αντίστροφη μέτρηση χρόνου που το συνοδεύει.

Μπορείτε να κατεβάσετε υποδείγματα εικόνων για χρήση στην εκκίνηση, από τη συλλογή εικόνων στην τοποθεσία http://artwork.freebsdgr.org. Αν εγκαταστήσετε το Port sysutils/bsd-splash-changer, θα έχετε τυχαία εναλλαγή εικόνων (που θα επιλέγονται από μια έτοιμη συλλογή) σε κάθε εκκίνηση του συστήματος.

13.3.3.4.2. Ενεργοποίηση της Γραφικής Οθόνης Εκκίνησης

Το αρχείο που θα χρησιμοποιηθεί για την γραφική οθόνη εκκίνησης (τύπου .bmp, .pcx ή .bin) θα πρέπει να τοποθετηθεί στην ριζική (root) κατάτμηση, για παράδειγμα στον κατάλογο /boot/.

Για την προεπιλεγμένη ανάλυση οθόνης (320x200 ή μικρότερη, 256 χρώματα), επεξεργαστείτε το αρχείο /boot/loader.conf ώστε να περιέχει τα παρακάτω:

splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Για μεγαλύτερες αναλύσεις, μέχρι την μέγιστη 1024x768, επεξεργαστείτε το αρχείο /boot/loader.conf ώστε να περιέχει το παρακάτω:

vesa_load="YES"
splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Το παραπάνω υποθέτει ότι θα χρησιμοποιήσετε το αρχείο /boot/splash.bmp για την γραφική οθόνη εκκίνησης. Αν θέλετε να χρησιμοποιήσετε εικόνα τύπου PCX, χρησιμοποιήστε τις παρακάτω επιλογές, καθώς και την επιλογή vesa_load="YES", ανάλογα με την ανάλυση:

splash_pcx_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.pcx"

Στην έκδοση 8.3, μια ακόμα επιλογή είναι η χρήση ascii art σε μορφή The Draw.

splash_txt="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bin"

Το όνομα αρχείου δεν είναι απαραίτητο να είναι "splash" όπως φαίνεται στο παραπάνω παράδειγμα. Μπορεί να είναι οτιδήποτε, αρκεί να πρόκειται για αρχείο των τύπων που αναφέραμε παραπάνω, για παράδειγμα splash_640x400.bmp ή blue_wave.pcx.

Παρακάτω φαίνονται μερικές ακόμα ενδιαφέρουσες επιλογές που μπορείτε να χρησιμοποιήσετε στο /boot/loader.conf:

beastie_disable="YES"

Η επιλογή αυτή καταργεί την εμφάνιση του μενού επιλογών εκκίνησης. Παραμένει ωστόσο η αντίστροφη μέτρηση με την προτροπή εισαγωγής επιλογών εκκίνησης. Ακόμα και όταν δεν εμφανίζεται το μενού επιλογών, αν ο χρήστης κάνει μια επιλογή στη διάρκεια του προεπιλεγμένου χρόνου αναμονής, η επιλογή αυτή θα ισχύσει για την εκκίνηση.

loader_logo="beastie"

Η επιλογή αυτή αλλάζει το κείμενο "FreeBSD" που εμφανίζεται στο δεξιό μέρος του μενού επιλογών εκκίνησης, με ένα έγχρωμο λογότυπο του beastie, όπως εμφανιζόταν στις παλαιότερες εκδόσεις.

Για περισσότερες πληροφορίες, παρακαλούμε ανατρέξτε στις σελίδες manual splash(4), loader.conf(5) και vga(4).

13.4. Αλληλεπίδραση με τον Πυρήνα κατά την Εκκίνηση

Από τη στιγμή που ο πυρήνας φορτωθεί, είτε μέσω του loader (όπως συνήθως) είτε μέσω του boot2 (παρακάμπτοντας τον loader), εξετάζει τις παραμέτρους εκκίνησης (boot flags), αν υπάρχουν, και προσαρμόζει ανάλογα τη συμπεριφορά του.

13.4.1. Παράμετροι Εκκίνησης Πυρήνα (Boot Flags)

Παρακάτω θα βρείτε τις πιο συνηθισμένες παραμέτρους εκκίνησης:

-a

κατά τη διάρκεια της εκκίνησης, θα γίνει ερώτηση για την συσκευή από την οποία θα γίνει η προσάρτηση του ριζικού (root) συστήματος αρχείων.

-C

εκκίνηση από το CDROM.

-c

εκτέλεση του UserConfig, του προγράμματος ρύθμισης πυρήνα κατά την εκκίνηση.

-s

εκκίνηση σε κατάσταση λειτουργίας ενός χρήστη (single user).

-v

εμφάνιση περισσότερων πληροφοριών κατά τη διάρκεια εκκίνησης του πυρήνα.

Υπάρχουν και άλλες παράμετροι εκκίνησης, διαβάστε τη σελίδα boot(8) για περισσότερες πληροφορίες σχετικά με αυτές.

13.5. Device Hints

Κατά τη διάρκεια της αρχικής εκκίνησης του συστήματος, το πρόγραμμα του boot loader(8) διαβάζει το αρχείο device.hints(5). Το αρχείο αυτό περιέχει πληροφορίες εκκίνησης για τον πυρήνα, γνωστές ως μεταβλητές, οι οποίες μερικές φορές αναφέρονται επίσης και ως "device hints". Αυτά τα "device hints" χρησιμοποιούνται από προγράμματα οδήγησης συσκευών για ρύθμιση των αντίστοιχων συσκευών.

Μπορούμε επίσης να ορίσουμε Device hints στην προτροπή του Σταδίου 3 του boot loader. Οι μεταβλητές μπορούν να οριστούν με χρήση της εντολής set, και να αφαιρεθούν με την unset. Μπορούμε επίσης να τις εμφανίσουμε με την εντολή show. Ακόμα, μπορούμε εδώ να παρακάμψουμε και να αλλάξουμε την τιμή μεταβλητών που έχουν οριστεί στο αρχείο /boot/device.hints. Τα Device hints που ορίζουμε στο boot loader δεν παραμένουν μόνιμα και δεν θα ισχύσουν στην επόμενη εκκίνηση.

Μετά την εκκίνηση του συστήματος, μπορεί να χρησιμοποιηθεί η εντολή kenv(1) για να εμφανιστούν οι τιμές όλων των μεταβλητών.

Το συντακτικό του αρχείου /boot/device.hints είναι μια μεταβλητή ανά γραμμή, και χρησιμοποιείται το τυποποιημένο "#" για γραμμές που δηλώνονται ως σχόλια. Οι γραμμές δημιουργούνται όπως φαίνεται παρακάτω:

 hint.driver.unit.keyword="value"

Η σύνταξη για το Στάδιο 3 του boot loader είναι:

 set hint.driver.unit.keyword=value

όπου driver είναι το όνομα του οδηγού συσκευής, unit είναι ο αριθμός μονάδας της συσκευής, και keyword είναι η λέξη-κλειδί για το συγκεκριμένο hint. Η λέξη-κλειδί μπορεί να αποτελείται από τις ακόλουθες επιλογές:

  • at: καθορίζει το δίαυλο (bus) στον οποίο προσαρτάται η συσκευή.

  • port: καθορίζει την αρχική διεύθυνση της θύρας I/O που θα χρησιμοποιηθεί.

  • irq: καθορίζει τον αριθμό της αίτησης διακοπής (interrupt request) που θα χρησιμοποιηθεί.

  • drq: καθορίζει τον αριθμό του καναλιού DMA.

  • maddr: καθορίζει τη φυσική διεύθυνση μνήμης που καταλαμβάνεται από τη συσκευή.

  • flags: ορίζει διάφορα bits παραμέτρων για την συσκευή.

  • disabled: Αν οριστεί σε τιμή 1, η συσκευή απενεργοποιείται.

Οι οδηγοί συσκευών μπορεί να δέχονται (ή να απαιτούν) περισσότερα hints τα οποία δεν φαίνονται εδώ, και σας συνιστούμε να δείτε την αντίστοιχη σελίδα manual του κάθε οδηγού. Για περισσότερες πληροφορίες συμβουλευθείτε επίσης τις σελίδες manual των device.hints(5), kenv(1), loader.conf(5), και loader(8).

13.6. Init: Αρχικοποίηση Ελέγχου Διαδικασιών

Μόλις ολοκληρωθεί η εκκίνηση του πυρήνα, ο έλεγχος μεταφέρεται στην διαδικασία χρήστη init(8), η οποία βρίσκεται στο αρχείο /sbin/init, ή στη διαδρομή που καθορίζεται στην μεταβλητή init_path του loader.

13.6.1. Ακολουθία Αυτόματης Επανεκκίνησης

Η ακολουθία αυτόματης επανεκκίνησης εξασφαλίζει ότι τα συστήματα αρχείων είναι σε κανονική, σταθερή κατάσταση. Αν δεν είναι, και η fsck(8) δεν μπορεί να διορθώσει τα προβλήματα, τότε η init(8) θα μεταφέρει το σύστημα σε κατάσταση λειτουργίας ενός χρήστη ώστε να μπορέσει άμεσα ο διαχειριστής συστήματος να επιληφθεί των προβλημάτων αυτών.

13.6.2. Κατάσταση Λειτουργίας Ενός Χρήστη

Μπορείτε να εισέλθετε στην κατάσταση αυτή μέσω της ακολουθίας αυτόματης επανεκκίνησης, ή μέσω της επιλογής -s κατά την εκκίνηση ή ακόμα και θέτοντας τη μεταβλητή boot_single στον loader.

Μπορείτε επίσης να εισέλθετε σε αυτή εκτελώντας την εντολή shutdown(8) χωρίς την επιλογή επανεκκίνησης (-r) ή τερματισμού (-h), ενώ είστε σε κατάσταση λειτουργίας πολλών χρηστών (multi-user).

Αν η κονσόλα του συστήματος έχει τεθεί ως insecure (ανασφαλής) στο /etc/ttys, το σύστημα θα ζητήσει τον κωδικό του root πριν εισέλθει σε κατάσταση λειτουργίας ενός χρήστη.

Παράδειγμα 3. Ανασφαλής Κονσόλα στο /etc/ttys
# name  getty                           type    status          comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                            unknown off insecure

Μια insecure (ανασφαλής) κονσόλα σημαίνει ότι δεν θεωρείτε ασφαλή την κονσόλα όσο αφορά τη φυσική της πρόσβαση και θέλετε να είστε βέβαιος ότι μόνο όποιος γνωρίζει τον κωδικό του root θα μπορεί να χρησιμοποιήσει τη λειτουργία ενός χρήστη. Η επιλογή αυτή δεν σημαίνει ότι θέλετε η κονσόλα σας να λειτουργεί χωρίς ασφάλεια. Αν θέλετε ασφάλεια, θα πρέπει να επιλέξετε insecure, όχι secure.

13.6.3. Κατάσταση Λειτουργία Πολλαπλών Χρηστών (multi-user)

Αν η init(8) δεν βρει προβλήματα στα συστήματα αρχείων σας, ή μόλις ο χρήστης τερματίσει την κατάσταση λειτουργίας ενός χρήστη, το σύστημα εισέρχεται σε λειτουργία πολλαπλών χρηστών, όπου και ξεκινά πλέον η ρύθμιση πόρων (resources) του συστήματος.

13.6.3.1. Ρύθμιση Πόρων (rc)

Το σύστημα ρύθμισης πόρων, διαβάζει τις προεπιλεγμένες επιλογές από το /etc/defaults/rc.conf, και επιλογές για το συγκεκριμένο μηχάνημα από το /etc/rc.conf, και προχωρεί στην προσάρτηση των συστημάτων αρχείων που αναγράφονται στο /etc/fstab, ξεκινά τις υπηρεσίες δικτύου, εκκινεί διάφορους δαίμονες, και τέλος εκτελεί τα scripts εκκίνησης των τοπικά εγκατεστημένων πακέτων (εφαρμογών).

Η σελίδα manual rc(8) παρέχει μια καλή αναφορά στο σύστημα ρύθμισης πόρων, καθώς εξετάζει τα ίδια τα scripts εκκίνησης.

13.7. Ακολουθία Τερματισμού

Κατά τον ελεγχόμενο τερματισμό, μέσω της shutdown(8), η init(8) θα αποπειραθεί να εκτελέσει το script /etc/rc.shutdown, και ακολούθως θα στείλει σε όλες τις διεργασίες το σήμα TERM, και τέλος το σήμα KILL σε όποια διεργασία δεν τερματίσει σε εύλογο χρονικό διάστημα.

Για να γίνει και διακοπή της τροφοδοσίας σε ένα σύστημα FreeBSD με αρχιτεκτονική που υποστηρίζει διαχείριση ενέργειας, απλώς χρησιμοποιήστε την εντολή shutdown -p now για απενεργοποίηση μετά τον τερματισμό. Για να κάνετε απλώς επανεκκίνηση σε ένα σύστημα FreeBSD χρησιμοποιήστε την εντολή shutdown -r now. Θα πρέπει να είστε root ή μέλος της ομάδας operator για να εκτελέσετε την shutdown(8). Μπορείτε επίσης να χρησιμοποιήσετε τις εντολές halt(8) και reboot(8), κοιτάξτε τις αντίστοιχες σελίδες manual καθώς και τη σελίδα manual της shutdown(8) για περισσότερες πληροφορίες.

Η διαχείριση ενέργειας απαιτεί την υποστήριξη του acpi(4), είτε στον πυρήνα, είτε φορτωμένη ως άρθρωμα (module).


Last modified on: 11 Δεκεμβρίου 2021 by Sergio Carlavilla Delgado