Update kernel di ZeroShell-1.0.Beta12
Zeroshell-1.0.Beta12 dapat dijalankan dengan baik dari USB flash. Dukungan kernel-2.6.25.20 (yang release 15 Nov 2008) sudah mencukupi untuk mengenal device yang ada di motherboard terbaru. Hanya saja, GigaBit ethernet dari RealTek R8169 intermittent, kadang terdeteksi (namun tidak bisa berfungsi) kadang tidak. Device ethernet tersebut menggunakan modul kernel gigabit ethernet r8169, sehingga kemungkinannya adalah masih ada bug atau ada fungsi dari device terbaru yang belum diimplementasikan di modul r8169 ini.
Di sisi lain, dengan menggunakan kernel-2.6.30.5, card ethernet ini berfungsi dengan baik. Hal ini dapat dimaklumi karena driver r8169 ini telah mengalami banyak perbaikan, terutama fitur dan bugfixed. Jadi, agar ethernet (yang mandatory) dan device lain (yang mungkin belum disupport) di Zeroshell versi ini bisa berfungsi dengan baik, kernel harus diupdate. Bagaimana caranya?
Apakah ada solusi lain? Misalnya, kernel tetap sama, hanya driver r8169.c yang direkompile. Tapi sayangnya, struktur net_device_ops sudah berbeda sejak 2008-11-20. Menggunakan driver r8169 di kernel tree versi ini akan lebih susah, karena perubahan struktur ini.
Tidak ada artikel yang menjelaskan langkah-langkah mengupdate kernel di Zeroshell.
Update kernel Linux ini berarti harus mengupdate kernel image (bzImage/vmlinuz) dan kernel modules. Kernel modules ini bisa terletak di initial ramdisk image (initrd.gz) dan root filesystem (di direktori /lib/modules/). Jadi, setidaknya ada 4 langkah yang perlu dilakukan: 1) kompilasi kernel terbaru untuk menghasilkan bzImage dan modul kernel, 2) mengganti bzImage dengan yang baru, 3) mengganti modul kernel di initrd.gz dan 4) mengganti modul-modul kernel di root filesystem. Dan opsional, kalau ada modul kernel eksternal (yang tidak masuk di tree source Linux), maka modul ini harus direkompile dengan referensi kernel source terbaru. Lumayan repot yah…
Yang pertama dilakukan adalah kompilasi kernel. Pekerjaan ini memerlukan 3 komponen, yaitu:
- paket-paket devel (kompiler dan linker): gcc, ld, libraries, dan headers. Saya menggunakan Puppy Linux-4.20 dan paket development devx.sfs. Ini tidak menjadi masalah, walaupun beda versi gcc, binutils dan glibc
- linux source terbaru: linux-2.6.31.4. Ambil yang terbaru saja
- konfigurasi kernel: file .config. Ini diperlukan saat kompilasi kernel, apakah modul-modul kernel akan terinstall dalam kernel atau sebagai modul kernel. Konfigurasi ini hendaknya sama dengan konfigurasi Zeroshell. Dimana mendapatkannya? dari kernel source Zeroshell
Saya menggunakan kernel source original, tanpa patch. Konfigurasi kernel menggunakan konfigurasi ZeroShell. Modul baru yang ada di kernel ini saya install saja. Kemudian kernel dikompile untuk menghasilkan bzImage (dengan ‘make bzImage’) dan modul kernel (dengan ‘make modules’). Image kernel untuk arsitektur x86 yang dihasilkan adalah arch/x86/boot/bzImage. Module akan terinstall ke direktori INSTALL_MOD_PATH dengan ‘make modules_install’.
Setelah image kernel dihasilkan, langkah kedua dilakukan dengan memindahkan bzImage ke direktori root partisi 1 flashdisk. File tersebut perlu direname menjadi vmlinuz, agar comply dengan konfigurasi bootloader grub ZeroShell. Partisi 1 tersebut berformat ext3, rw ini berisi kernel image, initrd dan bootloader grub. Karena modenya rw, maka file yang lama bisa langsung dioverwrite saja dengan ‘cp -f’.
Selanjutnya, initrd.gz perlu diupdate. Yang diupdate adalah hanya modul kernelnya saja, yaitu loopback fs, sata driver, usb host driver, usb-storage driver, dan modul dependensinya. Pertama, initrd.gz diekstrak dengan ‘gunzip initrd.gz’, kemudian di mount loopback ‘mount -o loop,rw initrd /mnt/initrd’. Update kernel modul yang ada di inird tersebut dengan modul yang baru. Kemudian, initrd di-unmount, dikompress dengan gzip dan dikokikan ke flashdisk.
Langkah terakhir ini yang cukup repot. Root filesystem terinstall di partisi 2 dengan format iso9660 yang readonly (seperti format CD). Modul kernel terinstall di sana. Dan besar partisinya sudah fix, yaitu sebesar 160 MB, yang hanya menyisakan sedikit space kosong. Sekarang, bagaimana cara menggantinya dengan modul yang baru dan bagaimana agar bisa cukup masuk ke partisi tersebut?



Komentar Terakhir