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

Μέχρι στιγμής η σειρά οδηγών που έχουμε καλύψει για την βελτιστοποίηση της διανομής Ubuntu, έχουν ως εξής :

  1. Μεταγλώττιση του κώδικα
  2. Δημιουργία Minimal διανομής
  3. 10 απλά βήματα για μεταγλώττιση του πυρήνα
  4. Παρουσίαση του βιβλίου Kernel in Nutshell

Σήμερα θα δούμε μια μέθοδο την οποία επιθυμούν σίγουρα πολύ από αυτούς που διάβασαν τα προηγούμενα άρθρα. Να σημειώσω εδώ ότι το μόνο άρθρο που χρειάζεται να διαβάσετε είναι το 3o, διότι ο σημερινός οδηγός είναι ουσιαστικά μια επέκταση του 5του βήματος. Με άλλα λόγια η τεχνική που θα περιγράψω εδώ έχει εφαρμογή αμέσως μετά το
cd linux-x.x.x

cp -vi /boot/config-uname -r .config
Η τεχνική έχει να κάνει με ένα μαγικό εργαλείο που είναι ενσωματωμένο στον πυρήνα :

  • make localmodconfig

Μια μικρή Ιστοριούλα…

Επιτρέψτε μου να σας μεταφέρω την ιστορία του εργαλείου, την οποία έμαθα από τον προγραμματιστή τους:
Έγραψα το streamline_config.pl πριν πολλά χρόνια (2005) καθώς ανέπτησσα τον πυρήνα linux σε πολλούς υπολογιστές και έπρεπε να μειώσω τον χρόνο μεταγλώττισης του. Δεν είχα χρόνο να ψάχνω ποιους drivers (modules) χρειάζομαι για κάθε μηχάνημα και ποια όχι οπότε το να τα απενεργοποιώ από το xconfig ήταν χρονοβόρα διαδικασία.

Κάπου το 2008, στο συνέδριο “Kernel Summit” ( Σύνοδο Κορυφής Linux Kernel ), προέκυψε μια συζήτηση σε ένα βασικό θέμα που μας προβλημάτιζε για χρόνια. Το θέμα λοιπόν ήταν ότι όταν κάποιος αναφέρει ένα bug σε κάποιο κομμάτι του πυρήνα και ο κύριος προγραμματιστής του συγκεκριμένου έργου ζητάει από το χρήστη που αναφέρει το bug να εκτελέσει μια ανασκόπηση στο git  για να βρει την αλλαγή στον κώδικα που προκαλούσε το πρόβλημα, ο χρήστης ήταν απρόθυμος. Πως να μην ήταν άλλωστε αφού διέθετε μόνο ένα αρχείο config που προερχόταν από την διανομή του και δεν γνώριζε αρκετά για το πως να του αφαιρέσει όσα module δεν είναι απαραίτητα. Σκεφτείτε ότι μια ανασκόπηση στο git  συνήθως διαρκεί 13 πλήρεις μεταγλωττίσεις του πυρήνα !. Αυτό θα μπορούσε να πάρει μια εβδομάδα για κάποιον με ένα παλιό μηχάνημα και ένα config που έρχεται από μια διανομή.
Τότε είναι που ο Linus Torvalds τα’χασε και άρχισε να ουρλιάζει στους προγραμματιστές, ρωτώντας γιατί δεν έχουμε κάτι που μπορεί να τακτοποιήσει και να πετσοκόψει το config για να επιταχύνει την μεταγλώττιση του πυρήνα για τους απλούς χρήστες. Ένας από τους προγραμματιστές τότε, που χρησιμοποιεί το streamline_config.pl που είχα γράψει, απάντησε λέγοντας «Εμείς το κάνουμε με το streamline_config  του Steve Rostedt». Ο Linus, στη συνέχεια εκνευρισμένος, ρώτησε γιατί δεν είναι ήδη ενσωματωμένο στον πυρήνα. Έτσι κατέληξε στον πυρήνα…

Τι μας προσφέρει το LocalModConfig;

Οι περισσότεροι δεν θέλουν να αρκεστούν με το να δηλώσουν απλά τον επεξεργαστή τους και να επωφεληθούν πλήρως από τις δυνατότητες του. Πολλοί θέλουν να εξειδικεύσουν μέχρι “αηδίας” τον πυρήνα τους σύμφωνα με τις προδιαγραφές του υπολογιστή τους. Με άλλα λόγια θέλουν ο πυρήνας τους να είναι κομμένος και ραμμένος αλλά και να διαθέτει drivers μόνο για τις συσκευές που διαθέτει ο υπολογιστής τους.

Αν δείτε με το xconfig για πόσα πράγματα διαθέτει το Linux drivers θα εκπλαγείτε. Χιλιάδες  modules τα οποία ποτέ δεν θα τα χρειαστείτε. Βέβαια αυτά τα modules δεν πρόκειται να ενεργοποιηθούν ποτέ αν δεν έχετε συσκευές που τις χρειάζονται οπότε και έτσι να τα αφήσετε δεν θα έχετε κανένα πρόβλημα.

Όμως, επειδή είμαστε ανήσυχα μυαλά και θέλουμε το Linux να διαθέτει μόνο στοιχεία που υπάρχουν στον υπολογιστή μας αλλά και να μειώσουμε τον χρόνο μεταγλώττισης του σε μερικά λεπτά (όχι 2 ώρες), τότε θα πρέπει να αφαιρέσουμε ότι είναι περιττό.

Αν όμως το προσπαθήσετε να το κάνετε χειροκίνητα στο xconfig και βγάζετε ένα-ένα τα στοιχεία που δεν υπάρχουν στον υπολογιστή σας τότε θα έρθει η Δευτέρα Παρουσία και ακόμα δεν θα έχετε τελειώσει!
Εδώ λοιπόν θα επιστρατεύσουμε το εργαλείο που θα σκανάρει τον υπολογιστή μας, θα δει ποιες συσκευές διαθέτουμε, ποιες περιφερικές συσκευές έχουμε συνδεδεμένες και έτσι θα ενεργοποιήσει μόνο αυτά τα στοιχεία στον πυρήνα μας. Το αποτέλεσμα θα είναι:

  • Δραματική μείωση του χρόνου μεταγλώττισης
  • Ένας πυρήνας αποκλειστικά φτιαγμένος για τον υπολογιστή μας

Προϋποθέσεις επιτυχίας

Υπάρχει μόνο μια προϋπόθεση για να έχετε έναν απροβλημάτιστο πυρήνα. Πριν κάνετε οτιδήποτε

  • Συνδέστε στον υπολογιστή σας όλες τις συσκευές που έχετε (usb stick, εξωτερικοί σκληροί, webcam, scanner, εκτυπωτές κλπ…. )
  • Σιγουρευτείτε ότι όλα δουλεύουν.
  • Μην ξεχάσετε καμία συσκευή !

Το τελευταίο είναι σημαντικό… γιατί και εγώ την έπαθα… ξέχασα να συνδέσω ένα μικρό usb stick που είχα (2GB FAT32) με αποτέλεσμα όταν τελείωσα με την μεταγλώττιση και εγκατάσταση του πυρήνα, όταν σύνδεσα το usb stick (το χρειάστηκα κάποια στιγμή) δεν το αναγνώριζε ο πυρήνας μου. Γιατί συνέβη αυτό;

Μα πολύ απλά διότι το LocalMod κοιτάει μόνο τα module που είναι φορτωμένοι την στιγμή που το τρέχετε και έτσι ενεργοποιεί τα αντίστοιχα στον πυρήνα πριν την μεταγλώττιση. Άρα συμβουλή

  • Μην ξεχάσετε καμία συσκευή
  • Ελέγξτε στο xconfig ότι δεν ξέφυγε κάποιος driver ( module ) που χρειάζεστε (όπως π.χ έπρεπε να ελέγξω την υποστήριξη για fat/fat32 συστήματα αρχείων)

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

Αν λοιπόν είστε σίγουροι ότι ΔΕΝ πρόκειται να αγοράσετε νέα συσκευή τότε συνεχίστε. Αν όμως πρόκειται να συνδέσετε κάποια συσκευή στο άμεσο μέλλον ή δεν είστε σίγουροι αν θα συνδέσετε ποτέ κάποια συσκευή τότε
παραμείνετε σε αυτά που μάθατε στο άρθρο 10 βήματα για να μεταγλωττίσετε τον πυρήνα

Όσοι είστε σίγουροι λοιπόν ξεκινάμε…

Είμαστε στο 5 βήμα και έχουμε αντιγράψει το .config απο τον πυρήνα της διανομής μας. Η εντολή που θα τρέξουμε είναι :

make localmodconfig

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

Αυτό ήταν, πλέον έχετε ένα νέο .config αρχείο και συνεχίζετε στο Βήμα 6 όπου τρέχετε

make xconfig

Κάποιες τελευταίες σκέψεις…

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

  1. Ξανακάνετε τα 10 βήματα με τον αναβαθμισμένο πυρήνα
  2. Δεν κάνετε τα βήματα αλλά κλειδώνετε (από το Synaptic Package Manger) την έκδοση του πυρήνα που έχετε φτιάξει για να μην λαμβάνετε αναβαθμίσεις
  3. Παρατάτε τα όπλα και συνεχίζετε να χρησιμοποιείτε τον αναβαθμισμένο πυρήνα της διανομής σας και δεν ξανά ασχολείσθε με το άθλημα.

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

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