sas.lantip.info

Kompilasi Ulang Kernel di GNU/Linux Debian

by salman

Apakah anda pernah bertemu masalah dalam jaringan komputer berbasis GNU/Linux yang hanya dapat diselesaikan dengan melakukan patch kernel? Misalnya, untuk melakukan filtering paket berdasarkan protokol pada lapisan OSI ke-7.

Meskipun tulisan ini ditulis menggunakan distribusi Debian Sarge, namun saya yakin bisa juga diterapkan pada versi setelahnya.

Pertama siapkan lingkungan untuk proses kompilasi. Pastikan daftar repository dari alamat yang benar. Dalam kasus ini beberapa mirror di Indonesia sudah tidak mempunyai arsip untuk Debian Sarge, maka saya menggunakan mirror dari situs resmi Debian.

Masukkan repository ke dalam file /etc/apt/sources.list, menggunakan editor favorit Anda. Saya menggunakan vi.

proxy:~# vi /etc/apt/sources.list

Tambahkan baris berikut,

deb http://archive.debian.org/debian/ sarge main
deb-src http://archive.debian.org/debian/ sarge main

Sesuaikan lokasi repository di atas sesuai dengan distribusi yang Anda gunakan.

Kemudian update database sistem.

proxy:~# apt-get update

Install paket kernel-package.

proxy:~# apt-get install kernel-package
Reading Package Lists... Done
Building Dependency Tree... Done
Suggested packages:
  kernel-source libdb3-dev docbook-utils
The following NEW packages will be installed:
  kernel-package
0 upgraded, 1 newly installed, 0 to remove and 49 not upgraded.
Need to get 357kB of archives.
After unpacking 1888kB of additional disk space will be used.
Get:1 http://archive.debian.org sarge/main kernel-package 8.135 [357kB]
Fetched 357kB in 5s (69.7kB/s)
Selecting previously deselected package kernel-package.
(Reading database ... 36072 files and directories currently installed.)
Unpacking kernel-package (from .../kernel-package_8.135_all.deb) ...
Setting up kernel-package (8.135) ...

Install source code kernel yang sedang berjalan.

proxy:~# apt-get install kernel-source-`uname -r|cut -f1 -d"-"`
Reading Package Lists... Done
Building Dependency Tree... Done
Suggested packages:
  tk8.4-dev tk-dev
The following NEW packages will be installed:
  kernel-source-2.4.27
0 upgraded, 1 newly installed, 0 to remove and 49 not upgraded.
Need to get 31.0MB of archives.
After unpacking 31.2MB of additional disk space will be used.
Get:1 http://archive.debian.org sarge/main kernel-source-2.4.27 2.4.27
-10sarge5 [31.0MB]
Fetched 31.0MB in 4m29s (115kB/s)
Selecting previously deselected package kernel-source-2.4.27.
(Reading database ... 36183 files and directories currently installed.)
Unpacking kernel-source-2.4.27 (from .../kernel-source-2.4.27_2.4.27
-10sarge5_all.deb) ...
Setting up kernel-source-2.4.27 (2.4.27-10sarge5) ...

Download patch yang diinginkan dari situs terkait.

proxy:~# cd /usr/src/
proxy:/usr/src# wget http://biznetnetworks.dl.sourceforge.net\
/project/l7-filter/l7-filter%20kernel%20version/2.22
/netfilter-layer7-v2.22.tar.gz

Uraikan kode sumber kernel.

proxy:/usr/src# tar -xjvf kernel-source-2.4.27.tar.bz2 > /dev/null

Lakukan hal yang sama untuk patch jika perlu.

proxy:/usr/src# tar -xzvf netfilter-layer7-v2.22.tar.gz

Buat link untuk kode sumber kernel agar mudah.

proxy:/usr/src# ln -s kernel-source-2.4.27 linux

Lakukan proses patch kernel dengan menjalankan perintah seperti berikut,

proxy:/usr/src# cd linux
proxy:/usr/src/linux# patch -p1 < ../netfilter-layer7-v2.22
/kernel-2.4-layer7-2.22.patch

Sebelum kernel dikompilasi, harus dibuat konfigurasi untuk menentukan fitur dan modul yang akan diaktifkan. Agar mempercepat proses konfigurasi lebih baik menggunakan konfiguras kernel yang sudah berjalan dengan membuat perubahan pada bagian yang diperlukan untuk menggunakan patch kernel.

proxy:/usr/src/linux# cp /boot/config-`uname -r` .config

Melakukan konfigurasi bisa dilakukan dengan beberapa cara, tapi gunakan saja perintah di bawah paragraf ini. Karena menurut saya yang paling mudah.

proxy:/usr/src/linux# make menuconfig
make menuconfig

Gambar 1: make menuconfig.

Muat konfigurasi dari kernel lama dengan memilih menu “Load an Alternate Configuration File”.

Gambar 2: Load an Alternate Configuration File.

Kemudian pilih urutan menu di bawah untuk mengaktifkan layer 7 match support.

Networking options  --->
IP: Netfilter Configuration  --->
Layer 7 match support (EXPERIMENTAL) (NEW)
Layer 7 debugging output (EXPERIMENTAL)

GAmbar 3: Layer7 Match Support.

Proses kompilasi kernel dan pembuatan paket .deb sesungguhnya dilakukan dengan perintah.

proxy:/usr/src/linux# /usr/bin/make-kpkg --initrd --revision=1\
 --append-to-version=-netfilter-l7 buildpackage

Setelah selesai, pada direktori /usr/src akan dihasilkan file-file:

kernel-doc-2.4.27-netfilter-l7_1_all.deb
kernel-headers-2.4.27-netfilter-l7_1_i386.deb
kernel-image-2.4.27-netfilter-l7_1_i386.deb
kernel-source-2.4.27-netfilter-l7_1_all.deb
kernel-source-2.4.27-netfilter-l7_1_i386.changes

Seperti biasa untuk menginstal paket software di Debian, digunakan perintah dpkg.

proxy:/usr/src# dpkg -i kernel-image-2.4.27-netfilter-l7_1_i386.deb
Selecting previously deselected package kernel-image-2.4.27-netfilter-l7.
(Reading database ... 27360 files and directories currently installed.)
Unpacking kernel-image-2.4.27-netfilter-l7 (from kernel-image-2.4.27
-netfilter-l7_1_i386.deb) ...
Setting up kernel-image-2.4.27-netfilter-l7 (1) ...
/initrd.img does not exist. Installing from scratch, eh?
Or maybe you don't want a symbolic link here. Hmm? Lets See.
/vmlinuz does not exist. Installing from scratch, eh?
Or maybe you don't want a symbolic link here. Hmm? Lets See.
Searching for GRUB installation directory ... found: /boot/grub .
Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
Searching for splash image... none found, skipping...
Found kernel: /vmlinuz-2.4.27-netfilter-l7
Found kernel: /vmlinuz-2.4.27-2-386
Updating /boot/grub/menu.lst ... done

Proses instalasi akan melakukan beberap perubahan pada sistem, salah satunya adalah penambahan baris-baris pada file konfigurasi grub boot loader. File tersebut adalah /boot/grub/menu.lst.

title		Debian GNU/Linux, kernel 2.4.27-netfilter-l7
root		(hd0,0)
kernel		/vmlinuz-2.4.27-netfilter-l7 root=/dev/hda2 ro
initrd		/initrd.img-2.4.27-netfilter-l7
savedefault
boot

title		Debian GNU/Linux, kernel 2.4.27-netfilter-l7 (recovery mode)
root		(hd0,0)
kernel		/vmlinuz-2.4.27-netfilter-l7 root=/dev/hda2 ro single
initrd		/initrd.img-2.4.27-netfilter-l7
savedefault
boot

Selesai sudah proses kompilasi ulang kernel setelah dilakukan proses patch. Untuk menguji dan menggunakan kernel baru ini silahkan reboot mesin dan pilih kernel baru Anda dari menu boot loader.

E.O.A