Hyper-v üzerinde çalışan linux virtual sistemler de (Redhat,Suse,Centos) time sekronizasyon problemi oluşmaktaydı.Uzun süre önce Microsoft, bu durumu düzeltmek adına Linux Integration Services isimli bir patch yayınlandı.Belirttiğim güncelleme linux sisteme geçilip reboot edildikten sonra host ve linux virtual makinalar arasındaki saat sekronizasyonu sync edilebiliyordu.Vmware sanallaştırma teknolojilerini kullanmak varken neden Hyper-V üzerinde linux sanallaştırayım diyebilirsiniz.Açıkcası, hyper-v üzerinde çalışan linux sistemler için sık sık time sekronizasyonu ve diğer servislerin uyumsuz çalıştığını görüyorum.Bu sebeple benzeri bir problemin çözümünü detaylıca bu sayfa üzerinde anlatmak istedim. “Linux Integration Services” ayarları yapıldıktan sonra “seth0″ ismin de bir sync interface ve kernel’e eklenen bir kaç adet modül geliyor ki içlerinde gereksiz olanlar da mevcut.Eğer eklenilen modüller build edilmemişse update veya upgrade edilmiş kernel, reboot edildikten sonra time sekronizasyonu için eklenenmiş modulleri load edemiyor dolayısıyla filesystem boot olamayıp operating sistem de açılamıyor.(Kernal Hard Panic)
En azından operating sistemin tekrar açılıp kaldığı yerden devam etmesi için ilgili virtual sistemin reboot edilip bir önceki kernel(eski olan) ile boot edilmesi durumu ortaya çıkıyor.Microsoft, ilgili problemin çözümü için DKMS(Dynamic Kernel Module Support) ile daha evvel linux integration services ile gelen modüllerin yukarıda bahsettiğimiz gibi build edilmesi gerektiğini belirtmiş.Bize düşen, ilgili modullere ait libraryleri compile edip güncel olan kernel ile problemsiz çalışmasını ve sistemin doğal haliyle boot olmasını sağlamaktır.
Not: Aşağıda anlatılan bilgiler, Redhat 5.x ve Centos 5.x isletim sistemlerini kapsıyor.
Öncelikle rpm komutu ile kernel-devel paketinin kurulu olup olmadığını kontrol ediyoruz.
rpm -qa kernel-devel | grep devel kernel-devel-2.6.18-238.9.1.el5 kernel-devel-2.6.18-238.12.1.el5
Şuanda core yapınız için uygun olan DKM paketini sistem üzerine kurmanız gerekli. Aşağıdaki rpm arsivlerinde uygun olan dkm’yi wget komutu ile herhangi bir dizine cekip gpg key’ini doğruladıktan sonra rpm -i komutu ile install etmelisiniz.
Centos 6: i686 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm x86_64 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
Centos 5:
i386 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
x86_64 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
Örnek:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
Doğrulama anahtarını import ettikten sonra indirilen paketi check edelim.
rpm -K rpmforge-release-0.5.2-2.el5.rf.*.rpm && echo $?
rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm: (sha1) dsa sha1 md5 gpg OK
0
Şuanda dkm’yi edineceğimiz rpm deposu yüklenip gereksimim duyulan paket kurulacak.
rpm -i rpmforge-release-0.5.2-2.el5.rf.*.rpm
Eğer herhangi bir problem oluşmadıysa repository bölümüne “rpmforge.repo” isimli yeni bir repo eklendiğini görmelisiniz.
ls -l /etc/yum.repos.d/rpmforge.repo
-rw-r--r-- 1 root root 1113 Nov 13 2010 /etc/yum.repos.d/rpmforge.repo
Yum ile dkms’yi install ediyoruz.
yum install dkms -y
Dkms yüklendiği için kendisine ait konfigurasyon dosyalarını rpm -qcl komut seçeneği ile listelenebilir.
rpm -qcl dkms /etc/bash_completion.d/dkms
/etc/dkms/framework.conf
/etc/dkms/template-dkms-mkrpm.spec
/etc/kernel/postinst.d/dkms
/etc/kernel/prerm.d/dkms
/etc/rc.d/init.d/dkms_autoinstaller
/usr/src/ altında linuxic-2.1 isimli bir dizi oluşturup daha evvel cdrom’un mount edildiği dizindeki dosyaları yeni klasör altına kopyalıp ilgili dizin altına geçiyoruz.
[root@x01 ~]# mkdir /usr/src/linuxic-2.1 [root@x01 ~]# cp -R /opt/linux_ic_v21_rtm/ /usr/src/linuxic-2.1
[root@x01 ~]# cp /usr/src/linuxic-2.1/scripts/dkms.conf /usr/src/linuxic-2.1/
Yukarıdaki işlemler sonrası herhangi bir text editörü ile /etc/modprobe.conf isimli dosyayı açıp içerisine aşağıdaki satırları girmelisiniz.
alias scsi_hostadapter1 vmbus alias scsi_hostadapter2 blkvsc alias scsi_hostadapter3 storvsc alias scsi_hostadapter4 netvsc
Şimdi sırasıyla aşağıdaki komutlaro çalıştırılip ilgili modullerin built edilmesini sağlayacağız.
[root@x01 ~]# dkms add -m linuxic -v 2.1 Creating symlink /var/lib/dkms/linuxic/2.1/source -> /usr/src/linuxic-2.1 DKMS: add Completed.
[root@x01 ~]# dkms build -m linuxic -v 2.1 Kernel preparation unnecessary for this kernel. Skipping... Building module: cleaning build area... /usr/bin/env make install....................... cleaning build area... DKMS: build Completed.
[root@x01 ~]# dkms install --force -m linuxic -v 2.1 vmbus.ko: Running module version sanity check. - Original module - Found /lib/modules/2.6.18-238.9.1.el5/kernel/drivers/vmbus/vmbus.ko - Storing in /var/lib/dkms/linuxic/original_module/2.6.18-238.9.1.el5/x86_64/ - Archiving for uninstallation purposes - Installation - Installing to /lib/modules/2.6.18-238.9.1.el5/extra/ netvsc.ko: Running module version sanity check. - Original module - Found /lib/modules/2.6.18-238.9.1.el5/kernel/drivers/vmbus/netvsc.ko - Storing in /var/lib/dkms/linuxic/original_module/2.6.18-238.9.1.el5/x86_64/ - Archiving for uninstallation purposes - Installation - Installing to /lib/modules/2.6.18-238.9.1.el5/extra/ storvsc.ko: Running module version sanity check. - Original module - Found /lib/modules/2.6.18-238.9.1.el5/kernel/drivers/vmbus/storvsc.ko - Storing in /var/lib/dkms/linuxic/original_module/2.6.18-238.9.1.el5/x86_64/ - Archiving for uninstallation purposes - Installation - Installing to /lib/modules/2.6.18-238.9.1.el5/extra/ blkvsc.ko: Running module version sanity check. - Original module - Found /lib/modules/2.6.18-238.9.1.el5/kernel/drivers/vmbus/blkvsc.ko - Storing in /var/lib/dkms/linuxic/original_module/2.6.18-238.9.1.el5/x86_64/ - Archiving for uninstallation purposes - Installation - Installing to /lib/modules/2.6.18-238.9.1.el5/extra/ Adding any weak-modules Modulefile is /etc/modprobe.conf Modulefile is /etc/modprobe.conf Modulefile is /etc/modprobe.conf Modulefile is /etc/modprobe.conf depmod..... DKMS: install Completed.
İşlemler bittiğine göre yapılan işlemleri test etmek adına operating sistem reboot edilebir.
[root@x01 ~]#init 6
Reboot sonrasi yeni kernel’ın normal şekilde boot olduğunu görmelisiniz.Tekrar shell aldıktan sonra built edilen 4 adet module ait detaylı bilfiyi görüntülemek için aşağıdaki komutu kullanabilirsiniz.
modinfo vmbus blkvsc storvsc netvsc filename: /lib/modules/2.6.18-238.9.1.el5/extra/vmbus.ko version: 2.1.25 license: GPL srcversion: 3C1899C419665CB2514F2D0 depends: vermagic: 2.6.18-238.9.1.el5 SMP mod_unload gcc-4.1 parm: vmbus_irq:int parm: vmbus_loglevel:int filename: /lib/modules/2.6.18-238.9.1.el5/extra/blkvsc.ko version: 2.1.25 license: GPL srcversion: F83F5BFB642CF459920A9F5 depends: scsi_mod,vmbus vermagic: 2.6.18-238.9.1.el5 SMP mod_unload gcc-4.1 parm: blkvsc_ringbuffer_size:int filename: /lib/modules/2.6.18-238.9.1.el5/extra/storvsc.ko version: 2.1.25 license: GPL srcversion: E4EE20F8B5ABE2FBCF8C7D7 depends: scsi_mod,vmbus vermagic: 2.6.18-238.9.1.el5 SMP mod_unload gcc-4.1 parm: storvsc_ringbuffer_size:int filename: /lib/modules/2.6.18-238.9.1.el5/extra/netvsc.ko version: 2.1.25 license: GPL srcversion: 0C185C24BD58FAC714FC7A3 depends: vmbus vermagic: 2.6.18-238.9.1.el5 SMP mod_unload gcc-4.1 parm: promisc_mode:Set network to 0 (normal mode) or 1 (promiscuous mode) (short) parm: netvsc_ringbuffer_size:int
Ek bilgi: Hardware clock’un time ayarını sistemin time dilimi ile aşağıdaki komutu kullanarak set edebilirsiniz.
hwclock --systohc && hwclock --show Wed 06 Jul 2011 01:09:27 AM EEST -0.316175 seconds Refaranslar: http://support.microsoft.com/kb/2387594 http://wiki.centos.org/HowTos/BuildingKernelModules Yazan: Uğur EnginShare on Facebook
