Οδηγός: Φτιάξτε τα δικά σας kernel packages

By | 24 Σεπτεμβρίου, 2013

Για να ξεκινήσουμε καλά… 🙂

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

 

Και τώρα μπορούμε να συνεχίσουμε!

Καταρχάς, πρέπει να κατεβάσουμε τα απαραίτητα πακέτα:
~$ sudo aptitude install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge build-dep linux git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev

kernel_orgΜετά, να πάρουμε το επιθυμητό kernel από το kernel.org. Μπορούμε να δούμε ότι έχουμε πολλές επιλογές, τόσο για το format των αρχείων που θα κατεβάσουμε (git, rsync, tar.xz…), όσο και για το πόσο “περιπετειώδης” θέλουμε να είναι ο πυρήνας μας. Γενικά, το πιο πρόσφατο stable release είναι μια καλή επιλογή για τα περισσότερα νέα features που μπορεί να θέλουμε και τα longterm releases είναι αρκετά σταθερά και θα συνεχίσουν να έχουν bugfixes για αρκετό καιρό.

Αφού διαλέξουμε ένα kernel ανάλογο με τις ανάγκες μας, το κατεβάζουμε και το αποσυμπιέζουμε:
~$ tar xvf linux-3.10.12.tar.xz

Στη συνέχεια πρέπει να κάνουμε το config του πυρήνα πριν τη μεταγλώττιση, δίνοντας:

~$ cd linux-3.10.12

~/linux-3.10.12$ make menuconfig
Αν δεν θέλουμε να κάνουμε όλο το config από την αρχή, και εμπιστευόμαστε πάνω-κάτω το kernel της διανομής μας, μπορούμε να χρησιμοποιήσουμε ένα ήδη υπάρχον (και σχετικά πρόσφατο) config από τα ήδη εγκατεστημένα kernel στον υπολογιστή μας. Αρκεί να αντιγράψουμε ένα config στο φάκελο σαν .config, το οποίο είναι και το αρχείο όπου τα “make {menu}config” targets κρατάνε την cache τους. Έτσι, στην επόμενη κλήση του config, θα επιλεγούν αμέσως οι επιλογές που ξέρουμε ότι δουλεύουν στα stock kernels της διανομής μας. Τα config είναι παρέα μαζί με τα kernel images στον κατάλογο /boot:

~/linux-3.10.12$ cp /boot/config-3.8.0-30-generic .config

~/linux-3.10.12$ make menuconfig

Αφού φτιάξουμε το νέο μας config, μπορούμε τώρα να δοκιμάσουμε τη μεταγλώττιση! Για να φτιάξουμε τα νέα μας πακέτα ένα-ένα, δίνουμε:
~/linux-3.10.12$ fakeroot make-kpkg -j 4 --initrd --revision=1 --arch_in_name --append_to_version=-1-vagos --arch=amd64 kernel_source
~/linux-3.10.12$ fakeroot make-kpkg -j 4 --initrd --revision=1 --arch_in_name --append_to_version=-1-vagos --arch=amd64 kernel_headers
~/linux-3.10.12$ fakeroot make-kpkg -j 4 --initrd --revision=1 --arch_in_name --append_to_version=-1-vagos --arch=amd64 kernel_image

Για να εξηγήσουμε λίγο τι σημαίνουν οι παραπάνω εντολές, ας τα πάρουμε ένα ένα:

  • fakeroot: Για να εγκαταστήσουμε ένα καινούριο kernel χρειαζόμαστε να πακετάρουμε αρχεία με permissions που να αντιστοιχούν σε αυτές του root, για προφανείς λόγους ασφαλείας, μιας και οι χρήστες δεν πρέπει να έχουν πρόσβαση στον πηρύνα. H εντολή fakeroot τρέχει μια εντολή σε ένα περιβάλλον στο οποίο φαίνεται ότι έχει root permissions για την επεξεργασία αρχείων. Έτσι, μπορούμε να φτιάξουμε αρχεία στο πακέτο που φαίνονται να έχουν root permissions.
  • make-kpkg: Η καθαυτό εντολή που παράγει τα πακέτα. Στην ουσία, είναι επέκταση του απλού make με βελτιώσεις και extra scripts τα οποία η διανομή χρησιμοποιεί για τα πακέτα του πυρήνα της. Οι επιλογές που δίνουμε κατά σειρά είναι:
    • -j 4: Ο αριθμός των παράλληλων threads που θα χρησιμοποιηθούν για τη μεταγλώττιση. Αν είμαστε σε πολυπύρηνο μηχάνημα, όσο περισσότερα threads/cores δώσουμε, τόσο πιο γρήγορη η μεταγλώττιση!
    • –initrd: Αν θέλουμε να δημιουργήσουμε ramdisk (ΑΝ ΔΕΝ ΕΧΟΥΜΕ ΠΟΛΥ ΚΑΛΟ ΛΟΓΟ, ΤΟ ΑΦΗΝΟΥΜΕ).
    • –revision=1 –arch_in_name –append_to_version=-1-vagos: Ονοματοδοσία και έλεγχος εκδόσεων. Το revision και append_to_version θα προσθέσουν τα ορίσματά τους εσωτερικά στο όνομα του πυρήνα και στο τέλος του ονόματος του πακέτου. Το arch_in_name θα βάλει τον τύπο της αρχιτεκτονικής για την οποία μεταγλωττίζουμε τον πυρήνα στο όνομα των πακέτων που παράγουμε. Έτσι θα έχουμε πακέτα με όνομα: linux-image-3.10.12-1-vagos_1_amd64.deb, και όταν τρέχουμε το kernel ο πυρήνας θα αναγνωρίζεται σαν: 3.10.12-1-vagos, τρέχοντας την εντολή: uname -r.
    • –arch=amd64: Προφανώς, η αρχιτεκτονική για την οποία θα μεταγλωττίσουμε των πυρήνα.
  • kernel_{source,headers,image}: Οι στόχοι που παράγουν τα αντίστοιχα πακέτα. Αν θέλουμε να δημιουργήσουμε όλα τα debian πακέτα, μπορούμε να τρέξουμε τον target “binary” που μετά τρέχει σε σειρά τους υπόλοιπους.  Για μια πλήρη περιγραφή των targets, δείτε και το man make-kpkg.

Και τώρα, αφού περιμέναμε αρκετά μέχρι να τελειώσει η μεταγλώττιση, έχουμε τα ολοκαίνουρια πακέτα μας, τα οποία μπορούμε και να εγκαταστήσουμε με:
~/linux-3.10.12$ cd ..
~/$ dpkg -i *.deb

Επιτυχία! Και τώρα μπορούμε να δοκιμάσουμε το καινούριο μας kernel στην επόμενη επανεκκίνηση.

Υ.Γ. Γνωστά προβλήματα με τους παλαιότερους drivers της Nvidia και καινούρια kernel μπορεί να σας αναγκάσουν να κατεβάσετε τους επίσημους drivers από εδώ. Good hacking!

 

Αφήστε μια απάντηση

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

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