Artik Yeni kernel derledigimde Rebot etmiyorum
From Lapis Wiki
Bu makale NASIL bölümü serisinin bir parçasıdır
|
| MasaÜstü • Donanım • Ağ • Dağıtımlar |
| Tarayıcılar• Programlama • Linux ve Oyunlar |
Konu başlıkları |
Giriş
Yeni kernel 2.6.14 serisinde KEXEC diye bir opsiyon var. Bu nedir, ne işe yarar diye araştırma yaparken, çok ilginç seyler kesfettim. KEXEC sayesinde bir Sunucuyu veya Linux bilgisayarı reboot etmenize gerek kalmıyor (muş). Mesela yeni bir kernel derlediniz, acaba çalışır mı çalışmaz mı diye de dert etmenize gerek kalmıyor. Aşağıdaki anlatacağım şekilde basitce yeni derlediğiniz kerneli test edebilir ve istediğiniz gibi ise kullanabilirsiniz.
| Uyarı: Bu belge daha önceden kernel derlemiş ve ileri düzeydeki Linux kullanıcılara hitap eder. Yapacağınız yanlış bir işlem, sisteminiz boot etmemesine neden olabilir. |
| Uyarı: Bu kısa belgedeki anlatılanlar sadece X86 yapısında geçerlidir. AMD64 veya diğer mimarilerde çalışmadığını belirten yazılar mevcuttur ve şahsen AMD64 sahibi olmadigim icin deneme imkanımda olmadı |
Gerekli Olanlar
Eğer yeni bir kernel sürümü kullanıyorsanız, yukarda da dediğim gibi, fazla bir şey ayarlamanıza gerek yok. Kexec tahmin ediyorum 2.6.14 den büyük bütün kernellerin içinde mevcut. En azından bendeki 2.6.14 ve 2.6.15 de mevcut.
Çalışma prensibi basitce şöyle:
İlk önce alışıla gelmiş şekilde kernelimizi derliyeceğiz. Sonra bu yeni kerneli KEXEC üzerinden boot edeceğiz (tabiki reboot felan etmeden). Kexec ilk önce yeni kerneli RAM da tutuyor. Sonra kexec kendi içinde bir reboot iilemi gerçekleştiriyor ve eski etkin kernel kodu üstüne yeni kerneli çağırıyor. Yeni kernel yüklendikten sonra bütün kontrolu yeni kernele devrediyor. Basitce teorisi bu kadar.
Kernel Ayarları
Kernel dizini içindeki .config dosyasında aşağıdaki değerlerin olup olmadığını kontrol edin. Yoksa eliniz ile kendiniz ilave edin. Bu işlemi malesef make menuconfig ile yapamıyoruz, çünkü gizlenmiş durumda, sebebini bende şahsen bilmiyorum. Bu yuzden muhakkak .config dosyasını bir editor yardımı ile açıp, elimiz ile düzeltmemiz gerekiyor.
.config dosyasında düzenlenecekler şunlar:
CONFIG_KEXEC=y >>Prozessor type and features<< altında
CONFIG_PHYSIKAL_START=0x100000 >>Prozessor type and features<< altında fakat menuconfig de gorunmuyor.
CONFIG_SYSFS=y >>Pseudo filesystems<< altinda fakat menuconfig ile gorunmuyor
Gerekli olan Paketler
Harici olarak bize sadece KEXEC-TOOLS paketi gerekli. Gentoo kullananlar,
emerge kexec-tools
ile kurabilir. Gentoo kullanmıyorsanız aşağıdaki adresden indirip kurmanız gerekli:
Homepage: http://www.xmission.com/~ebiederm/files/kexec/ Description: Load another kernel from the currently executing Linux kernel
Kerneli Durdurmak
Şimdi gerekli olan paketleri kurduk ve yeni kernelimizi de hazırladık. İl könce kernelimizi hafızada tutmamız gerekli fakat ilk önce grub.conf dosyasından bazı önbilgileri almanız gerekli.
Bildiginiz gibi, yeni bir kernel derledikten sonra grub.conf dosyasına yeni kerneli ilave etmemiz gerekli. Farz edelim ki yeni kernelimizi grub.conf dosyasına aşağıdaki şekilde ilave etmemiz gerekecekti (fakat ilave etmiyoruz, farzi misal yani)
kernel (hd0,0)/kernel-2.6.14 root=/dev/hda3 gentoo=nodevfs devfs=nomount
İste bu satır bize lazım. Yani yukardaki satiri KEXEC yardımı ile şöyle çalıştırıyoruz:
kexec -l /boot/kernel-2.6.14 --append="root=/dev/hda3 gentoo=nodevfs devfs=nomount"
| Uyarı: Eger initrd satırı kullanıyorsanız --initrd=/boot/initrd.img-2.6.14 olarak, yukardaki komut satırının sonuna ekleyebilirsiniz. |
Yukardaki kexec satırından sonra yeni kernelimiz şuanda RAM da yerini aldı ve bekliyor.
Şimdi RAM a kayıt ettiğimizi yeni kernelimizin imagesini start edebiliriz. Yani eski kernelin bulundugu KOD sayfalarının yerine yeni kernelimizi yükleyeceğiz. Bunun için aşağıdaki komutu veriyoruz:
kexec -e
Bu sayede reboot etmeden, sunucuyu kapatmadan yeni kernelimiz boot edecek.
Ipucu: Eger olurda konsol donarsa veya garip garip sekiller cikarsa, CTRL ALT Fx tuslarini kullanarak donmayi engelleyebilirsiniz.İ
Ipucu: Tabiki bu isi basit bir skript ilede yapabiliriz. Bunun icin asagidaki skripti kullanabilirsiniz:
kexec.sh dosyasi
boot=$(</proc/cmdline) kexec -l /usr/src/linux/arch/i386/boot/bzImage --append="$boot" kexec -e
Bu skript, herzaman bzImage dosyasini (yeni derlenen kernelin imagesi) otomatikman yukleyecektir. Dosyaza gerekli çalıştırma izni vermezi unutmayın (chmod 755 kexec.sh)
Son Olarak
Eger yeni kerneliniz tam sizin istediginiz gibi ise, grub.conf dosyaniza ilave edebilirsiniz.
Bu yazi Linux Magazin dergisindeki bir yazinin özetidir ve benim tarafimdan test edilmistir. Ben yukarda yaziyi kisaca özetledim ve sahsen test ettim.
Konu hakkinda asagidaki IBM sayfasinda detayli bir anlatim bulabilirsiniz:
http://www-128.ibm.com/developerworks/linux/library/l-kexec.html
