30 Aralık 2006

FreeBSD için bilgiler


Paket kurmak için:
# pkg_add -r paketismi
sysinstall ile birçok ayar yapabilirsiniz.

NIC device isimleri modül ismine göre adlandırılır.

Hangi modülün ne işe yaradığını görmek için whatis modülismi komutunu verebiliriz. Modülün dosya ismi, kategori_modülismi.ko şeklindedir. Modüller /boot/kernel altında bulunurlar.
Yüklü modülleri listelemek için(Linuxteki lsmod):
$ kldstat
Modül yüklemek için(Linuxteki insmod):
# kldload modül
Modülü çıkarmak için(Linuxteki rmmod):
# kldunload modül
Başka bilgiler:
$ devinfo
$ swapinfo

Bu komutlar sysctl'den bilgi alır tıpkı linuxteki araçların /proc tan bilgi alması gibi.
/proc yok ama linux compability yi yüklediyseniz /usr/compat/linux/proc u görebilirsiniz.
Sistemden bilgi almak için sysctl yi kullancağız ve aynı zamanda bazı ayarları modifiye etmek için de burayı kullanacağız aynı linuxteki /proc gibi.
Herşeyi gösterir:
$ sysctl -a
İstediğimiz şeyi görmek için grep kullanacağız(Bunu zaten linux kullanıcıları bilirler).
$ sysctl -a | grep -i memory
gibi.

Değer değiştirip okumak için:
# sysctl -w net.inet.ip.ttl=100
net.inet.ip.ttl: 64 -> 100

# sysctl net.inet.ip.ttl
net.inet.ip.ttl: 100

28 Aralık 2006

Linux ve kolay wireless ağ bağlantıları

Eskiden wireless ağ bağlantısı pratik değildi. Ama artık network manager ve nm-applet sayesinde çok kolay.
Wireless bir network e bağlanmak kullanıcı bazlı olması gerektiği için gerçekten çok iyi bir çözüm ayrıca. Çünkü root olarak ağ ayarlarını yapmak sıkıcı olabiliyor her seferinde. Kurmak için biz debiancılar:
apt-get install network-manager-gnome
komutunu veriyoruz. Sistemi başlattığımızda "The NetworkManager applet could not find some required resources. It cannot continue." hatasını alıyorsak. Root olarak:
gtk-update-icon-cache -f /usr/share/icons/hicolor/
veriyoruz. Artık o hatadan kurtulduk ancak yine de açılmıyorsa appletimiz, netdev grubunda değilizdir. Netdev grubuna bu appleti kullanabilmesini istediğimiz kullanıcıları ekliyoruz.

Bunun dışında netwok manager sadece önceden konfigürasyonu yapılmamış ağları yönetir. Yani /etc/network/interfaces dosyasındaki lo0 dışındaki interfaceleri kaldırın ya da auto yapın.

27 Aralık 2006

PC-BSD

PC-BSD 1.2 kurdum gecen gun. FreeBSD tabanli, grafik arayuzlu kurulumu olan, kolay bir sistem. PBI denilen kurulum sistemi gercekten cok zahmetsiz ve kolay. Tek dosyadan kurulum yapiliyor Windows kurulum dosyalari gibi. Ama boot manager i boyle kolay ve guzel bir sisteme uymuyor bence. Gorsel acidan da kotu islevsel acidan da. Ama guclu bir boot loader oldugu belli her seyi acabiliyor. Bu yazimi da PC-BSD sistemime pbi ile kurdugum Firefox 2 den yaziyorum :)

21 Aralık 2006

vmware kurulurken hata

Eğer vmware modüllerini derlerken şöyle bir hatayla karşılaşıyorsanız:
The directory of kernel headers (version @@VMWARE@@ UTS_RELEASE) does not match...
Linux header'larınızda include/linux/version.h dosyasına
#define UTS_RELEASE "2.6.19-alp1"
ekleyin. 2.6.19-alp1 benim çekirdeğim için tabiki. uname -r ile ne yazmanız gerektiğini görebilirsiniz.

18 Aralık 2006

linux bluetooth

Bluetooth cihazımız linux sistemimize takılı ve tanınıyor diyelim. Ama kbluetooth veya gnome-bluetooth yok ve dosya almamız gerekiyor. Bunun için önce kullanacağımız kanalı bilmemiz gerekiyor. Nokia telefonlar için 10, genel olarak öyledir heralde.
sdptool add --channel=10 OPUSH
Bunu bir kere yaptıktan sonra sdpd çalıştığı sürece bi daha yapmamıza gerek yok. Şimdi dosya alacak bir programa ihtiyaç var. Ben obexserver ı kullanışlı buldum. Her dosya alışınız için çalıştırmanız gerekir.
obexserver

17 Aralık 2006

modül parametreleri

Yüklenmiş bir modülün hangi parametrelerle yüklenmiş olduğu nasıl öğrenilir?
/sys/module/xxx/parameters/
Bazı modüller için buradan bakılabiliyor ama çoğu modül için burası yok. Başka nereden bakıldığını biliyorsanız bana da söyleyin :)

16 Aralık 2006

Linux çekirdeğiyle ilgili birkaç şey

Linux ü boot ederken verdiğimiz parametreleri görmek için naparız? En basitinden:
cat /proc/cmdline
ya da
dmesg | grep "Kernel command line"
Bu ikinci dediğim linux kodunun neresinde basılıyor sizce? Bunun için hemen koda daldım ve buldum :-)
init/main.c dosyasındaki start_kernel fonksiyonunun içinde:
printk(KERN_NOTICE "Kernel command line: %s\n", saved_command_line);
printk: kernel space'de kod yazmış olanlar bilirler, bu fonksiyonla dış dünyaya bilgi veririz loglevel ımıza göre (KERN_NOTICE).

Bu arada hemen söyleyeyim kernel space'de kod yazabilmek için illa kernel a yazıp derlemek gerekmez. Tam bu iş içindir işte modüller. Modül derleyip dinamik olaral kernel a yüklediğimizde artık kernel deyizdir. Neyse bu işler gerçekten zevkli :)

15 Aralık 2006

NVIDIA 1.0-9631 sürücüsünü kurdum



NVidia 1.0-9631 driver'ını yükledim(Linux 2.6.19). Çok sorunsuz yükleniyor ve AIGLX gerçekten iyi çalışıyor.
Uzun süredir üşeniyordum yüklemeye çünkü kullandığım Debian testing sistemle gelen çekirdek nvidiafb modülü ile geliyor bu yüzden Nvidia driver'ının sağladığı nvidia modülü yüklenemiyor. Neyse son çekirdeğimi derlerken bunu aklımda bulundurdum ve frame buffer ı devre dışı bıraktım yani nvidiafb modülünü. Sonra Nvidia sürücüsü çok sorunsuz bir şekilde yüklendi ve harika çalışıyor.
NVIDIA X Server Settings' den bir kaç görüntü.


Yukarıda AIGLX'den bahsetmişken açıklayayım: GLX'ten farklı olarak AIGLX'te DRI etkin. Yani grafik hızlandırmalı çalıştırabiliyoruz uygulamalarımızı. Teknik olarak da XGL modifiye edilmiş ayrı bir x server iken öteki standart xorg server. Xorg 7.1 sürümünden sonra AIGLX xorg ile iç içe.

Sağ alttaki resimde "Direct Rendering (DRI): Yes" olarak görünüyor. Bu resmi AIGLX + Compiz kullanırken çektim :)


Sürücüyü yükleyebilmek için ipuçları:
  • GCC kurulu olmalı. (Çünkü modül derlenecek).
  • Kernel header'ları kurulu olmalı (apt-get install linux-headers-2.6.18-3-686 2.6.18-3-686 yerine sizin çekirdek sürümünüz uname -r ile bakabilirsiniz). Ya da çekirdeği kendiniz derlediyseniz zaten source vardır kernel header'larına gerek kalmaz.
  • CTRL+ALT+F1 ile metin tabanlı ortama geçin. /etc/init.d/gdm stop ile x server ı durdurun. Root olarak kurulum dosyanızı çalıştırın. /etc/init.d/gdm start ile tekrar x server ı çalıştırın.
  • NVIDIA logosu belirir, gdm açılır ve artık hızlandırıcılısınız :)

Ati 8.32.5 Kernel 2.6.19

Ati Mobility Radeon driver ı 8.32.5, 13 Aralık'ta çıktı. Linux 2.6.19 kullanan ben tabi hemen driver ı kurmayı denedim ama modülleri derleyemedi. Çünkü çekirdek 2.6.19 da kaldırılan config.h (include/linux/config.h) yi bulamıyor. Bunun için eski sürümünüzden bu dosyayı alıp kopyalayın 2.6.19 da derleyebilmek için.

Bunu yaptıktan sonra kurulum yaparsanız sorunsuz olacaktır tabi modül derleme için uygun ortam(gcc, kernel header veya source...) varsa.

Bir başka konu olarak, ben bu versiyonda AIGLX için gerekli olan composite extension'ının destekleneceğini umuyordum ama bu extension yüklendiğinde DRI gidiyor malesef :(

12 Aralık 2006

Debian kernel / çekirdek derleme

Debian testing ya da unstable ile gelen kernel in yeniliği size yetmiyorsa, en güncelinden daha güncel olsun diyorsanız :) kendi çekirdeğinizi kendiniz derleyeceksiniz demektir. Şahsen ben öyle yapıyorum :)

http://www.kernel.org

Oradan istediğiniz çekirdeği seçin ama yanlışlıkla patch ini indirmeyin. Orada bir F harfi var. Ona tıklayıp full source u indirin. Indirdikten sonra arşivi açın. Bilmeyenler için adım adım komutları yazıyorum:

Mesela indirdiğimiz dosyanın adı linux-2.6.19.tar.bz2 olsun. Dosyayı /usr/src nin içine atın şart değil ama source un orda bulunması iyi olur.

cp linux-2.6.19.tar.bz2 /usr/src
cd
/usr/src

bunzip2 linux-2.6.19.tar.bz2
tar -xf linux-2.6.19.tar
cd
linux-2.6.19
make menuconfig

menuconfig i kullanabilmeniz için libncurses5-dev paketinin sisteminizde kurulu olması gerekiyor (apt-get install libncurses5-dev). menuconfig yerine xconfig veya config de kullanabilirsiniz.
Çıkınca .config dosyası oluşturulur. Neyse o dosyayla işiniz olmayacak.

make-kpkg -rev xxx.N kernel_image

xxx yerine bir isim ve N yerine bir sayı girin ben alp.1 yapmıştım. Tabi make-kpkg yi kullanabilmeniz için kernel-package paketinin kurulu olması gerekiyor (apt-get install kernel-package).
Bu adımdan sonra çekirdeğimiz başlıyor derlenmeye. Yaklaşık bir saat alabilir. Derleme sırasında arkanıza yaslanın ve geçen yazıları izleyin :p

Çekirdeğimiz derlendikten sonra bir deb paketi oluşmuş olacak.

cd ..
dpkg --install linux-image-2.6.19-alp1_alp.1_i386.deb

Sizin oluşan deb dosyanızın ismi neyse(benimki yukardaki gibi oldu) kuruyoruz. Çekirdeğimiz /boot a yerleşti ama henüz initramdisk imiz yok sistem açılamaz bu durumda. Bunun için update-initramfs komutuyla yeni çekirdeğimiz için oluşturuyoruz.

update-initramfs -k 2.6.19 -c

-k parametresinden sonra gelen sayı yeni çekirdeğimizin vereceği uname -r çıktısıdır. Ben menuconfig de çekirdeğin sonuna alp1 eklemiştim o yüzden benim komutum şöyle oldu:

update-initramfs -k 2.6.19-alp1 -c

Evet bu komuttan sonra işimiz bitti sayılır. Son olarak boot loader ınızın ayarlarını kontrol edin ki yeni derlediğimiz çekirdek ve yeni initrd imiz açılabilsin restart edince. Grub için genelde /boot/grub/menu.lst dir.

İyi derlemeler :)

Çalışma ortamımı seviyorum :)


İşte şimdi çektiğim screenshot. Debian etch(testing) sistemimde çalışanlar: amsn, matlab, eclipse, gaim, skype, vmware player, google earth, amarok, firefox. Programların hepsi tamamen sorunsuz çalışıyor. Bu resmi çektiğimde amarok'ta last.fm den müzik dinliyordum (live stream). Vmware Player'da kubuntu çalışıyordu. Firefox'ta da webde geziniyordum ve hepsini yaparken kullanılan memory sadece 600mb ve performans iyiydi.

10 Aralık 2006

Linux 2.6 sys_call_table

System call dediğimizde kernel tarafından user-space programlarına sunulan fonksiyonları anlarız. En basitinden C' de bir program yazdığımızda printf kullanarak ekrana basarız. Bu printf standart c library sinde geliyor ve kendi içinde o da system call(printf, write system call unu çağırıyordur herhalde) yapıyor. Bunu strace adlı tool ile görebilirsiniz.

Çalışan sisteminizde hangileri var ve hangi modüle ait olduğunu görmek için /proc/kallsyms e bakabilirsiniz.

Bu system call lar sys_call_table'ında tutulur. Mesela "open" system call unu değiştirmek istiyoruz, naparız? Yeni bir modül yazıp kendi open fonksiyonumuzu yazdıktan sonra sys_call_table a yeni yazdığımız open fonksiyonunu göstermek yeterlidir. Bundan sonra her open çağırıldığında(c de fopen çağırınca çağırılır mesela) bizim fonksiyonumuz çağırılacak. Herşey ne güzel değil mi? Ama Linux 2.6 dan itibaren sys_call_table export edilmiyor bu yüzden böyle şeyler yapamıyoruz artık. Tabi kernel i patch edersek o ayrı :)

Bunun kaldırılma nedeni elbette güvenlik değil, çünkü modül yükleyebiliyorsak zaten root kullanıcısıyız demektir ve herşeyi yapabiliriz. Bunun kaldırılma nedeni iyi yazılmayan modüller veya birbirinden habersiz aynı şeyi değiştirmeye kalkan farklı modüller gibi daha bir çok neden üretilebilir. Sistemimizin unstable bir duruma girmesini istemeyiz değil mi? :-)