Next Previous Contents

7. Μερικές παγίδες

7.1 make clean

Αν ο πυρήνας σας κάνει τρελά πράγματα μετά από μιά συνηθισμένη αναβάθμιση, πιθανότατα έχετε ξεχάσει το make clean πριν κάνετε compile τον νέο πυρήνα. Τα συμπτώματα μπορεί να είναι οποιαδήποτε, από κρέμασμα του Η/Υ και παράξενη συμπεριφορά του I/O, μέχρι πεσμένη απόδοση. Επίσης, θυμηθείτε να κάνετε και make dep.

7.2 Τεράστιοι ή αργοί πυρήνες

Αν ο πυρήνας σας απορροφά πολλή μνήμη, είναι πολύ μεγάλος, και/ή κάνει αιώνες γιά compile ακόμη και στο νέο σας Quadbazillium-III/4400, πιθανότατα ρυθμίζετε τόνους από άχρηστα πράγματα (drivers συσκευών, filesystems, κλπ). Αν δεν χρησιμοποιείτε κάτι, μην το ρυθμίζετε, επειδή καταλαμβάνει πόρους του Η/Υ. Το προφανέστερο σύμπτωμα παραφουσκώματος του πυρήνα είναι η υπερβολική ανταλλαγή δεδομένων (swapping) από - προς μνήμη και δίσκο. Αν ο δίσκος σας κάνει πολύ θόρυβο, και δεν είναι από κείνους τους παλιούς Fujitsu Eagles, που κατά το κλείσιμο κάνουν σαν αεριωθούμενο που προσγειώνεται, ψάξτε το στήσιμο του πυρήνα σας.

Μπορείτε να βρείτε πόση μνήμη χρησιμοποιεί ο πυρήνας, παίρνοντας το ολικό ποσό μνήμης του Η/Υ σας, και αφαιρώντας το ποσό της "total mem" (ολικής μνήμης) στο αρχείο /proc/meminfo, ή το ποσό που δίνει η εντολή free.

7.3 Δεν δουλεύει η παράλληλη θύρα, ή ο εκτυπωτής μου

Οι επιλογές ρύθμισης γιά τα PCs είναι : Πρώτα, στην κατηγορία "General Setup" (γενικές ρυθμίσεις), διαλέξτε "Parallel port support" (υποστήριξη παράλληλης θύρας) και "PC-style hardware" (hardware τύπου PC). Μετά, στις "Character devices" (συσκευές χαρακτήρων) διαλέξτε "Parallel printer support" (υποστήριξη παράλληλου εκτυπωτή).

Μετά, υπάρχουν και οι ονομασίες. Το Linux 2.2 ονομάζει τον εκτυπωτή διαφορετικά απ' ό,τι οι προηγούμενες εκδόσεις. Το συμπέρασμα είναι ότι αν είχατε lp1 με τον παλιό πυρήνα σας, τώρα πιθανότατα έχετε lp0 με τους καινούργιους. Γιά να βρείτε το όνομα του εκτυπωτή, δώστε την εντολή dmesg, ή ψάξτε τα αρχεία καταγραφής (logs) στο dir /var/log.

7.4 Δεν γίνεται compile στον πυρήνα

Αν δεν γίνεται compile, τότε πιθανότατα απέτυχε η προσθήκη ενός patch, ή κατά κάποιο τρόπο δεν είναι σωστός ο source κώδικας. Επίσης, μπορεί να είναι παλιά ή όχι σωστή η έκδοση της gcc που έχετε (πχ τα αρχεία include). Βεβαιωθείτε ότι οι συμβολικοί δεσμοί (symbolic links) που περιγράφει ο Linus στο README, είναι στημένοι σωστά. Γενικά, αν δεν μπορούμε να κάνουμε compile έναν στάνταρ πυρήνα, τότε κάτι δεν πάει καθόλου καλά με το Linux, και είναι αναγκαία η επανεγκατάσταση μερικών εργαλείων.

Σε μερικές περιπτώσεις, η gcc κρασάρει εξ αιτίας προβλημάτων στο hardware. Το μήνυμα λάθους είναι κάτι σαν "xxx exited with signal 15" ( = το xxx έπαψε να λειτουργεί με μήνυμα 15), και γενικά αυτά τα μηνύματα έχουνε μυστηριώδη εμφάνιση. Πιθανότατα δεν θα μίλαγε γιά κάτι τέτοιο, αλλά είναι κάτι που μου συνέβη κάποτε - είχα χαλασμένη μνήμη cache, και ο compiler κρεμούσε σε τυχαίες στιγμές. Αν έχετε προβλήματα, πρώτα προσπαθήστε να επανεγκαταστήσετε την gcc. Πρέπει να γίνετε καχύποπτοι μονάχα αν κάνετε απροβλημάτιστα compile στον πυρήνα σας με off την εξωτερική cache, με περιορισμένη ποσότητα RAM, κλπ.

Ενοχλεί τους χρήστες, όταν τους λες ότι το hardware τους είναι προβληματικό, αλλά δεν βγάζω τα πράγματα αυτά απ' το μυαλό μου. Υπάρχει ένας σχετικός κατάλογος με συχνές ερωτήσεις (FAQs), που βρίσκεται στο http://www.bitwizard.nl/sig11/.

7.5 Η νέα έκδοση του πυρήνα δεν bootάρει

Δεν τρέξατε το LILO, ή δεν το ρυθμίσατε σωστά. Ένα πράγμα που με "διέλυσε" κάποτε, ήταν ένα πρόβλημα στο αρχείο ρυθμίσεων, όπου έγραφε boot = /dev/hda1, αντί boot = /dev/hda. (Αυτό μπορεί να είναι πολύ ενοχλητικό στην αρχή, αλλά αν έχετε ένα αρχείο ρυθμίσεων που δουλεύει, δεν χρειάζεται να το αλλάξετε.)

7.6 Ξεχάσατε να τρέξετε το LILO, ή ο Η/Υ δεν bootάρει καθόλου

Ούπς! Το καλύτερο πράγμα που μπορείτε να κάνετε εδώ είναι boot από δισκέτα ή CDROM, και να ετοιμάσετε μιά ακόμη δισκέτα εκκίνησης (όπως πχ θα την έφτιαχνε η εντολή make zdisk). Πρέπει να γνωρίζετε που να βρείτε το root filesystem σας (/), και τί τύπος είναι (δηλ. second extended, minix). Στο παρακάτω παράδειγμα, πρέπει επίσης να γνωρίζετε επάνω σε ποιό filesystem βρίσκεται το δέντρο του source κώδικά σας (/usr/src/linux), τον τύπο του, και πού το κάνουμε mount συνήθως.

Στο ακόλουθο παράδειγμα, το / είναι το /dev/hda1, και το filesystem που κρατάει το /usr/src/linux βρίσκεται στο /dev/hda3, που συνήθως το κάνουμε mount στο /usr. Και τα δύο είναι filesystems τύπου second extended. Το image του ενεργού πυρήνα στο /usr/src/linux/arch/i386/boot ονομάζεται bzImage.

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

Πρώτα, κάντε boot από συνδυασμό boot/root δισκετών (ή δισκέτα διάσωσης - rescue disk), και κάντε mount το filesystem που περιέχει το image του ενεργού πυρήνα :

    mkdir /mnt
    mount -t ext2 /dev/hda3 /mnt

Αν η mkdir σας πει ότι το dir αυτό υπάρχει ήδη, απλά αγνοήστε την. Τώρα, πάτε με cd στο dir όπου βρισκότανε το image του ενεργού πυρήνα. Σημειώστε πως

/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot

Βάλτε μιά φορμαρισμένη δισκέτα στο drive "A:" (όχι τη δισκέτα boot ή τη root!), ρίξτε το image επάνω της, και ρυθμίστε το γιά το root filesystem σας :

    cd /mnt/src/linux/arch/i386/boot
    dd if=bzImage of=/dev/fd0
    rdev /dev/fd0 /dev/hda1

Μετά, γυρίστε με cd στο / και κάντε unmount το κανονικό filesystem /usr :

    cd /
    umount /mnt

Τώρα, λογικά πρέπει να μπορείτε να επανεκκινήσετε τον Η/Υ σας κανονικά απ' αυτή τη δισκέτα. Μην ξεχάσετε να τρέξετε το lilo (ή να κάνετε σωστά ό,τι κάνατε πριν λάθος) μετά την επανεκκίνηση!

Όπως προαναφέραμε, υπάρχει και μιά άλλη συνηθισμένη εναλλακτική λύση. Αν συμβεί να έχετε ένα αντίγραφο του ενεργού πυρήνα στο / (πχ το /vmlinuz), μπορείτε να το χρησιμοποιήσετε γιά μιά δισκέτα εκκίνησης. Υποθέτοντας όλα τα παραπάνω ως σωστά, και ότι το image του πυρήνα ονομάζεται /vmlinuz, αλλάξτε τα εξής στο παραπάνω παράδειγμα : Αλλάξτε το /dev/hda3 σε /dev/hda1 (στο filesystem /), το /mnt/src/linux σε /mnt, και το if=bzImage σε if=vmlinuz. (Αγνοήστε τη σημείωση που λέει πώς να φτιάξετε το /mnt/src/linux.)

Η χρήση του LILO με μεγάλους δίσκους (πάνω από 1024 κυλίνδρων) μπορεί να προξενήσει προβλήματα. Διαβάστε το LILO mini-HOWTO, ή οποιοδήποτε σχετικό κείμενο.

7.7 Λέει "warning: bdflush not running"

(Δηλ. "προειδοποίηση : δεν τρέχει το bdflush".) Αυτό μπορεί να είναι σοβαρό πρόβλημα. Με αρχή κάποια έκδοση του πυρήνα μεταγενέστερη της 1.0 (γύρω στις 20 Απριλίου 1994), αναβαθμίσθηκε και αντικαταστάθηκε το πρόγραμμα update (το οποίο αδειάζει σε περιοδική βάση τα βοηθητικά αρχεία του filesystem). Πάρτε τον source κώδικα του bdflush (μπορείτε να τον βρείτε εκεί, όπου υπάρχει και ο source κώδικας του πυρήνα), και εγκαταστήστε τον. (Όσο κάνετε την εγκατάσταση, πιθανότατα να θέλετε να τρέχει ο παλιός πυρήνας σας.) Το πρόγραμμα αυτό εγκαθίσταται ως update, και μετά την επανεκκίνηση ο νέος πυρήνας δεν θα παραπονεθεί ξανά.

7.8 Δεν μπορώ να βάλω το IDE/ATAPI CD-ROM να δουλέψει

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

Εάν το CD-ROM σας είναι η μόνη συσκευή επάνω σ' ένα καλώδιο IDE, πρέπει να το κάνετε (με τους jumpers - βραχυκυκλωτήρες - στο σασί του) "master" ή "single". Αυτό είναι το πλέον συνηθισμένο λάθος - αλλά εντελώς υποθετικά.

Γιά παράδειγμα, η εταιρία Creative Labs έχει βάλει διασυνδέσεις IDE επάνω στις κάρτες ήχου που παράγει. Ωστόσο, αυτό οδηγεί στο ενδιαφέρον πρόβλημα ότι, ενώ μερικοί χρήστες έχουνε μόνο μία διασύνδεση IDE, αρκετοί έχουνε δύο απ αυτές επάνω στη motherboard τους (συνήθως στην IRQ15), άρα η διασύνδεση στις κάρτες SoundBlaster γίνεται η τρίτη IDE (πολλές φορές στην IRQ11).

Αυτό προξενεί προβλήματα στο Linux, επειδή οι εκδόσεις 1.2.x δεν υποστηρίζουν τρίτη διασύνδεση IDE. (Η σχετική υποστήριξη ξεκινάει κάπου στις εκδόσεις 1.3.x , αλλά θυμηθείτε ότι αυτές είναι εκδόσεις ανάπτυξης, και δεν κάνουν αυτόματη ανίχνευση περιφερειακών.) (Σ.τ.μ. : Το Linux έχει βελτιωθεί πολύ από τότε που γράφτηκε το παρόν HowTo, αλλά στην πράξη εξακολουθεί να παραμένει πολύ σπάνια η ανάγκη γιά 3η IDE.) Γιά να ξεπεράσετε αυτόν τον σκόπελο, έχετε κάποιες επιλογές :

Αν ήδη έχετε δεύτερη IDE, πιθανότατα ή δεν την χρησιμοποιείτε, ή δεν έχει δύο μονάδες δίσκου - cdrom επάνω της. Πάρτε τη μονάδα ATAPI από την κάρτα ήχου, και βάλτε την επάνω στη δεύτερη IDE. Μετά, απενεργοποιείστε την IDE της κάρτας ήχου (και εξοικονομήστε έτσι μία IRQ).

Αν δεν έχετε δεύτερη IDE, καλωδιώστε με τους jumpers την IDE της κάρτας ήχου (όχι το μέρος που έχει να κάνει με τις λειτουργίες ήχου!) στην IRQ15, ώστε να γίνει δεύτερη IDE. Αυτό το σχήμα πρέπει να δουλεύει κανονικά.

7.9 Λέει παράξενα πράγματα γιά καταργημένες αιτήσεις routing

Βρείτε τις νέες εκδόσεις του προγράμματος route, καθώς και όποιου άλλου προγράμματος χειρίζεται το routing. Έχει αλλάξει το /usr/include/linux/route.h (το οποίο είναι ένα αρχείο στο /usr/src/linux).

7.10 Το firewalling δεν δουλεύει στην έκδοση 1.2.0

Αναβαθμιστείτε τουλάχιστον στην έκδοση 1.2.1 .

7.11 "Not a compressed kernel Image file"

(Δηλ. "Δεν πρόκειται γιά συμπιεσμένο image του πυρήνα".) Μην χρησιμοποιήσετε γιά bootάρισμα το αρχείο vmlinux που δημιουργήθηκε στο /usr/src/linux. Το σωστό είναι το [..]/arch/i386/boot/bzImage.

7.12 Προβλήματα με το τερματικό κονσόλας (console terminal) μετά την αναβάθμιση σε 1.3.x

Στη γραμμή γιά την console termcap του αρχείου /etc/termcap, αλλάξτε τη λέξη dumb σε linux. Ίσως χρειαστεί να δώσετε και μία σχετική γραμμή terminfo.

7.13 Δεν μπορώ να κάνω compile, αφού αναβάθμισα τον πυρήνα

Ο source κώδικας του πυρήνα του Linux περιλαμβάνει κάμποσα αρχεία include (αυτά που έχουν κατάληξη .h) στο dir /usr/include, στα οποία και αναφέρονται τα υπόλοιπα. Η τυπική κλήση των αρχείων αυτών γίνεται ως εξής (όπου xyzzy.h είναι οποιοδήποτε αρχείο include μέσα στο /usr/include/linux) :

    #include <linux/xyzzy.h>

Κανονικά, υπάρχει στο /usr/include το link linux προς το directory include/linux του source κώδικα του πυρήνα σας (συνήθως /usr/src/linux/include/linux). Αν αυτό το link δεν βρίσκεται εκεί, ή δείχνει προς λάθος μέρος, τα περισσότερα αρχεία δεν μπορούν να γίνουν compile. Αν αποφασίσατε ότι ο source κώδικας του πυρήνα τρώει χώρο στον δίσκο, και τον σβήσατε, αυτό πιθανότατα θ' αποτελέσει πρόβλημα. Μιά ακόμη αιτία προβλημάτων, είναι οι άδειες χρήσης των αρχείων. Εάν το dir root έχει εξ ορισμού umask, που δεν επιτρέπει σε άλλους χρήστες να δούνε τα περιεχόμενά του, και ανοίξατε τον source κώδικα του πυρήνα χωρίς την παράμετρο p (preserve filemodes - διατήρηση του τρόπου λειτουργίας των αρχείων), αυτοί οι συγκεκριμένοι χρήστες δεν θα μπορέσουν να χρησιμοποιήσουν μετά τον compiler της γλώσσας C. Αν και μπορείτε να δώσετε την εντολή chmod γιά να διορθώσετε αυτή την κατάσταση, είναι μάλλον ευκολότερο να ξανανοίξετε τα αρχεία include. Αυτό γίνεται με τον ίδιο τρόπο που ανοίξατε όλον τον source κώδικα του πυρήνα στην αρχή, μόνο που έχει μιά παράμετρο παραπάνω :

    blah# tar zxvpf linux.x.y.z.tar.gz linux/include

Σημείωση : Η "make config" θα ξαναφτιάξει το link προς το /usr/src/linux, εάν αυτό δεν υπάρχει.

7.14 Αυξάνοντας τα όρια

Οι ακόλουθες, ως παράδειγμα εντολές, μπορεί να φανούν χρήσιμες σ' όσους ρωτάνε πώς αυξάνονται κάποια όρια, που βάζει ο πυρήνας από μόνος του :

echo 4096 > /proc/sys/kernel/file-max
echo 12288 > /proc/sys/kernel/inode-max
echo 300 400 500 > /proc/sys/vm/freepages


Next Previous Contents