Pada chapter sebelumnya kita belajar membaca dan mengubah file .config. Sekarang kita jalankan perjalanan lengkapnya: mengunduh source kernel dari kernel.org, mengompilasi kernel sendiri, memasangnya berdampingan dengan kernel lama, lalu memilihnya saat boot. Proses ini butuh waktu berjam-jam dan ruang disk belasan gigabyte — tetapi tidak butuh keahlian khusus, hanya disiplin mengikuti urutan langkah. Perjalanan ini juga cara terbaik memahami bagaimana kernel benar-benar terbentuk dari source menjadi file yang dimuat bootloader.
Mengapa Mengompilasi Kernel Sendiri #
Untuk kebanyakan kebutuhan, kernel bawaan distribusi sudah lebih dari cukup. Alasan yang sah untuk mengompilasi sendiri biasanya salah satu dari ini:
- Belajar — tidak ada cara lebih cepat memahami struktur kernel daripada melihat proses bangunnya baris demi baris.
- Kernel minimal — perangkat embed atau container dengan ruang sangat terbatas membuang ribuan driver yang tak terpakai agar image kecil dan boot cepat.
- Patch khusus — patch real-time, hardening khusus, atau fitur eksperimental yang belum masuk kernel rilis distribusi.
- Debugging — mengaktifkan opsi debug seperti KASAN untuk menelusuri galat driver.
Perlu dicatat bahwa jalur lama berbasis paket kernel-package dan fakeroot sudah lama ditinggalkan; prosedur modern cukup memakai make bawaan kernel, dan itulah yang kita ikuti di sini.
Menyiapkan Perangkat dan Kode Sumber #
Di Debian dan turunannya, perangkat build disiapkan sekali dengan manajer paket:
sudo apt install build-essential libncurses-dev flex bison \
libssl-dev libelf-dev dwarvesDaftar lengkap versi minimal tiap alat dipelihara di dokumentasi kebutuhan build kernel
. Selanjutnya unduh rilis stabil dari kernel.org
— file linux-6.x.y.tar.xz berukuran sekitar 140 MB — lalu ekstrak ke direktori kerja:
tar -xf linux-6.12.4.tar.xz
cd linux-6.12.4Perintah di atas memerlukan unduhan dan root sehingga tidak bisa dijalankan di lingkungan latihan; urutan prosesnya tetap kita ikuti tuntas di bawah.
Prosedur Kompilasi Langkah demi Langkah #
Seluruh proses berlangsung dari dalam direktori source kernel. Setiap langkah dijabarkan beserta perannya:
- Salin konfigurasi lama:
cp /boot/config-$(uname -r) .config— mengambil opsi kernel yang sedang berjalan sebagai titik awal, sehingga kernel baru hampir pasti tetap bisa boot di hardware kita. - Perbarui ke skema opsi baru:
make olddefconfig— versi kernel baru menambah dan membuang opsi; langkah ini menjawab semua pertanyaan baru dengan nilai bawaan tanpa interaksi. - Sesuaikan opsi:
make menuconfig— buka antarmuka dari chapter kernel configuration lalu ubah opsi yang diperlukan. - Beri nama versi lokal: isi
Local versiondi menu General setup (atauscripts/config --set-str LOCALVERSION "-budi") — akhiran-budimemisahkan kernel buatan sendiri dari kernel distro, terlihat padauname -rdan seluruh nama file di/bootserta/lib/modules. - Kompilasi:
make -j$(nproc)— membangun kernel dan modul secara paralel sebanyak jumlah core CPU;nprocmenghitung core secara otomatis. - Pasang modul:
sudo make modules_install— menyalin semua.koke/lib/modules/6.12.4-budi/sehinggamodprobemenemukannya. - Pasang kernel:
sudo make install— menyalinvmlinuz,System.map, danconfigke/boot, lalu di Debian otomatis menjalankanupdate-initramfsdanupdate-grub; kita tidak perlu mengedit bootloader secara manual. - Boot kernel baru:
sudo reboot, lalu pilih entri kernel baru di menu GRUB; verifikasi denganuname -ryang kini berakhiran-budi.
Waktu kompilasi berjalan 20 menit pada mesin 16 core hingga beberapa jam pada laptop tua; ruang kerja yang dibutuhkan source, object file, dan modul mencapai 15–25 GB. Sambil menunggu, log build bisa diikuti untuk melihat bagaimana kernel terbentuk.
Membaca Log Kompilasi #
File log-build.txt pada bundle chapter ini berisi potongan log make yang disederhanakan:
cat log-build.txtOutput yang Dihasilkan:
UPD include/config/kernel.release
GEN Makefile
CALL scripts/checksyscalls.sh
CC init/main.o
CC init/version.o
LD init/built-in.a
CC kernel/fork.o
CC kernel/sched/core.o
LD vmlinux
SORTTAB vmlinux
OBJCOPY arch/x86/boot/compressed/vmlinux.bin
Kernel: arch/x86/boot/bzImage is readyBaris-baris di atas menceritakan tahap akhir pembentukan kernel. Prefix CC berarti satu file C selesai dikompilasi menjadi object; LD merangkai object-object menjadi arsip built-in.a; saat baris LD vmlinux muncul, kernel utuh (belum terkompresi, bisa ratusan MB) sudah terhubung menjadi satu. Tahap OBJCOPY kemudian memotong dan menyalinnya menjadi vmlinux.bin, dan baris pamungkas — Kernel: arch/x86/boot/bzImage is ready — menandakan image kernel terkompresi siap dipakai. Inilah file yang oleh prosedur make install disalin ke /boot dengan nama vmlinuz.
Artefak yang Muncul di /boot #
Proses make install menaruh empat file di /boot. Karena langkah tersebut membutuhkan root yang tidak tersedia di lingkungan latihan, kita buat replika namanya untuk mempelajari skemanya:
mkdir -p boot-latihan
touch "boot-latihan/vmlinuz-6.12.4-budi" "boot-latihan/System.map-6.12.4-budi" \
"boot-latihan/config-6.12.4-budi" "boot-latihan/initrd.img-6.12.4-budi"
ls boot-latihanOutput yang Dihasilkan:
System.map-6.12.4-budi
config-6.12.4-budi
initrd.img-6.12.4-budi
vmlinuz-6.12.4-budiPeran tiap file pada pola nama <nama>-<versi>-<akhiran lokal>:
| File | Isi |
|---|---|
vmlinuz-6.12.4-budi | image kernel terkompresi (bzImage) yang dimuat GRUB ke memori |
System.map-6.12.4-budi | tabel alamat simbol kernel — rujukan alat debugging seperti klogd |
config-6.12.4-budi | salinan .config yang dipakai membangun kernel ini — sumber audit |
initrd.img-6.12.4-budi | initramfs awal yang memuat driver sebelum root filesystem aktif |
Initramfs dan cara kerjanya saat boot sudah kita bahas tuntas pada chapter initramfs , dan mekanisme GRUB memilih entri pada chapter bootloader dan GRUB .
Mengompilasi kernel menuntun kita menyentuh titik paling dalam sistem operasi. Selanjutnya kita kembali ke level proses dengan pertanyaan operasional sehari-hari: bagaimana mencegah satu layanan aplikasi memakan seluruh CPU dan memori server? Jawabannya adalah cgroups, yang kita bedah pada chapter berikutnya.