Kernel Linux pada dasarnya adalah sebuah program C raksasa — dan seperti program lain, kernel perlu dikompilasi sebelum dijalankan. Perbedaannya, kernel membawa belasan ribu opsi yang menentukan potongan mana saja yang ikut terbangun: driver perangkat, dukungan filesystem, fitur keamanan, sampai kebijakan penjadwalan. Distribusi memilih mengaktifkan hampir semuanya demi kompatibilitas, tetapi administrator yang ingin kernel minimal, cepat boot, atau memuat patch khusus harus berkenalan dengan file konfigurasi bernama .config. Pada chapter ini kita bedah struktur opsi-opsi tersebut dan cara mengubahnya lewat menuconfig, sebelum benar-benar mengompilasi kernel sendiri pada chapter berikutnya.

File .config dan Tiga Nilainya #

Seluruh keputusan build kernel tersimpan dalam satu file teks bernama .config di akar pohon source kernel. Setiap barisnya menjawab satu pertanyaan: apakah dukungan untuk X diikutkan? Jawabannya salah satu dari tiga nilai:

NilaiArtiKode berada di
y (yes)built-in — dikompilasi menyatu ke dalam kernelimage vmlinuz
m (module)menjadi kernel module .ko, dimuat saat dibutuhkan/lib/modules/<versi>/
tidak disetelfitur dimatikan sama sekalitidak ada

Pilihan m adalah jalan tengah yang kita kenal dari chapter Kernel dan Kernel Modules : modul bisa dimuat dan dilepas tanpa reboot, tetapi fitur yang dibutuhkan sejak awal boot — seperti driver disk root — wajib y. Khusus untuk nilai “tidak disetel”, kconfig menuliskannya sebagai komentar # CONFIG_... is not set, bukan CONFIG_...=n; format komentar ini penting karena kconfig hanya mengenali dua penugasan resmi (=y dan =m). File config-potongan.txt pada bundle chapter ini berisi cuplikan .config hasil diringkas:

bash
cat config-potongan.txt

Output yang Dihasilkan:

text
#
# Potongan .config untuk latihan membaca nilai y/m/n
# (bentuk aslinya dihasilkan kconfig kernel, ini cuplikan)
#
CONFIG_64BIT=y
CONFIG_SMP=y
CONFIG_MODULES=y
CONFIG_PREEMPT_VOLUNTARY=y
CONFIG_HZ_250=y
CONFIG_EXT4_FS=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_BLK=y
CONFIG_XFS_FS=m
CONFIG_BTRFS_FS=m
CONFIG_NFS_FS=m
CONFIG_TUN=m
# CONFIG_EXT2_FS is not set
# CONFIG_BT is not set
# CONFIG_GAMEPORT is not set

Bacaan potongan di atas: CONFIG_EXT4_FS=y berarti driver ext4 menyatu di kernel — wajar karena ext4 adalah filesystem root di banyak distribusi; CONFIG_XFS_FS=m membuat dukungan XFS menjadi modul yang dimuat modprobe hanya saat filesystem XFS pertama kali dipasang; dan # CONFIG_BT is not set membuang stack Bluetooth sama sekali dari kernel mesin server.

Mengedit .config dengan editor teks nyaris mustahil karena dependensi antar opsi — menonaktifkan satu opsi bisa mematikan dua puluh opsi lain yang bergantung padanya. Kernel menyediakan alat resmi untuk itu; yang paling populer dijalankan dari akar source tree:

bash
make menuconfig

Antarmuka berbasis teks (ncurses) itu menampilkan opsi dalam pohon menu, menghitung dependensi otomatis, dan menolak kombinasi yang tidak sah. Berikut contoh tampilan menu utamanya:

text
                        Linux/x86 6.12.4 Kernel Configuration

    ┌──────────────────────────── Main Menu ────────────────────────────┐
    │  Arrow keys navigate the tree.  <Enter> selects submenus --->      │
    │                                                                    │
    │      ---> Processor type and features                              │
    │      ---> Power management and ACPI options                        │
    │           Networking support  --->                                 │
    │           Device Drivers  --->                                      │
    │           File systems  --->                                        │
    │                                                                    │
    │            <Select>    < Exit >    < Help >    < Save >             │
    └────────────────────────────────────────────────────────────────────┘

Tekan / untuk mencari opsi berdasarkan namanya — misalnya mengetik ext4 langsung melompat ke opsi CONFIG_EXT4_FS — lalu ubah nilainya dengan menekan spasi secara berulang: nilai berputar dari y, ke m, ke mati, dan kembali lagi. Saat keluar, menuconfig menawarkan menyimpan hasil ke .config; dua alat sepupunya make nconfig dan make xconfig (versi grafis) menghasilkan file yang sama. Seluruh bahasa opsi dan dependensinya (dipilih via menuconfig maupun olddefconfig) terdokumentasi di dokumentasi kbuild kernel .

Melihat Konfigurasi Kernel yang Sedang Berjalan #

Bagaimana dengan kernel yang sedang berjalan sekarang — opsi apa yang dipakainya? Kernel dapat menyimpan salinan .config miliknya ke /proc/config.gz (syaratnya CONFIG_IKCONFIG_PROC=y saat kernel itu dibangun):

bash
[ -f /proc/config.gz ] && zcat /proc/config.gz | head -4 || echo "config.gz tidak tersedia di kernel ini"

Output yang Dihasilkan:

text
config.gz tidak tersedia di kernel ini

Kernel di sistem latihan ini tidak menyediakan config.gz, sehingga blok di atas jatuh ke cabang || — pola fallback yang sama seperti pada chapter modul. Di distribusi, sumber yang lebih lazim adalah file /boot/config-$(uname -r): Debian dan Ubuntu menaruh salinan .config di /boot setiap kali kernel baru dipasang lewat manajer paket. Membandingkan file itu dengan .config baru adalah cara cepat mengetahui opsi mana saja yang Anda ubah dari bawaan distribusi.

Opsi yang Sering Dipertimbangkan Administrator #

Dari belasan ribu opsi, hanya segelintir yang benar-benar sering disentuh administrator:

OpsiEfeknya
CONFIG_PREEMPT_VOLUNTARY vs CONFIG_PREEMPTseberapa sering kernel mengalah kepada proses; mode PREEMPT penuh menurunkan latensi interaktif, sedikit menukar throughput
CONFIG_HZ_100 / _250 / _1000frekuensi timer kernel; 1000 memberi respons lebih halus untuk desktop dan audio, 100/250 lebih hemat untuk server
CONFIG_MODULESmengizinkan modul sama sekali; tanpa opsi ini semua driver wajib built-in
CONFIG_IKCONFIG_PROCmenyimpan .config ke /proc/config.gz untuk audit
CONFIG_SECURITY_APPARMOR / CONFIG_SECURITY_SELINUXmemilih LSM (Linux Security Module) yang tersedia bagi AppArmor atau SELinux

Opsi modul juga bisa menerima parameter runtime lewat /etc/modprobe.d/ sebagaimana dibahas pada chapter modul — nilai build time menentukan kemampuan yang tersedia, parameter runtime menentukan caranya dipakai.

Meringkas .config dengan Skrip Kecil #

Saat menerima .config dari orang lain, hitungan cepat komposisi y/m/nonaktif sering cukup untuk merasakan karakternya. Skrip awk berikut memproses potongan konfigurasi kita:

bash
awk -F= '
/^CONFIG_/ && $2 == "y" { y++ }
/^CONFIG_/ && $2 == "m" { m++ }
/^# CONFIG_/ && /is not set$/ { n++ }
END {
    printf "built-in (y): %d\n", y
    printf "module (m):   %d\n", m
    printf "nonaktif (n): %d\n", n
}
' config-potongan.txt

Output yang Dihasilkan:

text
built-in (y): 8
module (m):   4
nonaktif (n): 3

Bedah skrip di atas baris-per-baris:

  1. Baris 2–3 (/^CONFIG_/ && $2 == "y"): awk memotong tiap baris di tanda = karena opsi -F=; baris berawalan CONFIG_ yang nilainya y menambah penghitung y.
  2. Baris 4–5 ($2 == "m"): pola yang sama menangkap opsi modul ke penghitung m.
  3. Baris 6 (/^# CONFIG_/ ... is not set$/): opsi yang dimatikan ditulis sebagai komentar, jadi polanya mencocokkan awalan # CONFIG_ sekaligus akhiran is not set.
  4. Blok END: setelah seluruh baris habis dibaca, printf mencetak ketiga penghitung dengan format rapi.

Angka hasil — delapan built-in, empat modul, tiga nonaktif — persis mengikuti isi config-potongan.txt yang kita baca di awal. Pada .config kernel sungguhan, angka built-in dan modul ratusan kali lebih besar.

Kini kita paham cara membaca dan mengubah konfigurasi kernel. Langkah berikutnya adalah perjalanan paling menantang sekaligus paling mendidik di section ini: mengunduh source kernel dari kernel.org, mengompilasinya sendiri, dan memasangnya berdampingan dengan kernel lama — semua itu dibedah tuntas pada chapter berikutnya.