Ποιος linuxας δεν έχει ονειρευτεί να κάνει build τον δικό του linux kernel? Ευτυχώς τα πράγματα δεν είναι τόσο δύσκολα όσο παλιότερα και με μερικές εντολές μπορούμε να κάνουμε το όνειρο πραγματικότητα!
χρειαζόμαστε καταρχήν τα παρακάτω
apt-get install libncurses5-dev gcc make git exuberant-ctags
φτιάχνουμε έναν φάκελο στο /usr/src ή όπου θέλουμε και κάνουμε clone το kernel tree κατευθείαν από τον linus
git clone https://github.com/torvalds/linux.git
μπορούμε να δούμε πληροφορίες για τα τελευταία commits και τα περιεχόμενα του tree με τις παρακάτω git εντολές
git tag -l | less
git show
σε περίπτωση που χρειαστεί να ενημερώσουμε το tree, αρκεί να κάνουμε ένα pull ενώ είμαστε στον φάκελο που φτιάξαμε
git pull
με το git log, βλέπουμε τις τελευταίες αλλαγές πχ το τελευταίο commit που έγινε
git log
χρειάζεται τώρα να κάνουμε ένα checkout στην έκδοση του kernel που θέλουμε να ετοιμάσουμε ώστε να μη γίνει compile όλο το tree :)
git checkout -v3.15-rc4
οι επιλογές για το compilation του kernel είναι..1652(!!) οπότε μπορούμε να αντιγράψουμε το υπάρχον working configuration από το σύστημά μας. Καταρχήν εάν είναι ρυθμισμένος ο kernel να κάνει output στο proc το configuration, εύκολα μπορούμε να το πάρουμε κάνοντας:
zcat /proc/config.gz > .config
αν τώρα αυτό δεν υπάρχει, μπορούμε πάντα να το πάρουμε από το /boot/
cp /boot/config-`uname -r` .config
το uname -r το χρησιμοποιούμε για να δούμε την έκδοση kernel που τρέχουμε και το όνομα του config αρχείου είναι απαραίτητα το
.config
σε περίπτωση που θέλουμε να αλλάξουμε ρυθμίσεις όπως πχ να προσθέσουμε μια custom string στο όνομα του kernel, πατάμε nconfig και εξερευνούμε τις ρυθμίσεις
make nconfig
για να γίνει το compilation αρκεί ένα απλό make. Αν τώρα έχουμε πολυπύρηνο επεξεργαστή, μπορούμε να αφιερώσουμε παραπάνω πυρήνες με το -jX όπου Χ o αριθμός πυρήνων. Αν έχουμε 4-πύρηνο επεξεργαστή μπορούμε να βάλουμε οποιονδήποτε αριθμό μεταξύ 2 και 5 (ναι είναι +1 το maximum). Φυσικά αν ταυτόχρονα έχουμε σχέδια όπως να σερφάρουμε για περάσει η ώρα, βάζουμε μικρότερο αριθμό από τον διαθέσιμο.
make -jX
αφού το compilation τελειώσει και το οποίο θα πάρει κάποια ώρα οπότε φτιάξτε κανένα καφέ, φάτε τίποτα κ.ο.κ, ήρθε η στιγμή να κάνουμε στο σύστημα install τα modules του kernel στο /lib/modules/.
Ευτυχώς είναι πολύ εύκολο:
make modules_install
και μετά κάνουμε install τον kernel που περιλαμβάνει αντιγραφή του στο /boot/ αντιγραφή του config, update τον grub και πάει λέγοντας. Μπορείτε να το κάνετε manual όλο αυτό αλλά καλύτερα να πατήσετε:
make install
θα δείτε διάφορα όπως:
sh /media/shared/linux/kernel/linus/linux/arch/x86/boot/install.sh 3.15.0-rc4gdimi-2bab43e2528f arch/x86/boot/bzImage \ System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.15.0-rc4gdimi-2bab43e2528f /boot/vmlinuz-3.15.0-rc4gdimi-2bab43e2528f
run-parts: executing /etc/kernel/postinst.d/dkms 3.15.0-rc4gdimi-2bab43e2528f /boot/vmlinuz-3.15.0-rc4gdimi-2bab43e2528f
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.15.0-rc4gdimi-2bab43e2528f /boot/vmlinuz-3.15.0-rc4gdimi-2bab43e2528f
update-initramfs: Generating /boot/initrd.img-3.15.0-rc4gdimi-2bab43e2528f
κλπ κλπ
Είμαστε έτοιμοι, κάνουμε reboot και παρακολουθούμε χαροπά τον kernel μας να φορτώνει κατά την εκκίνηση :D