FreeBSD 10.1’de Çekirdeğinizi Özelleştirme ve Yeniden Derleme Rehberi
FreeBSD, güçlü ve esnek bir işletim sistemi olmasının yanı sıra, kullanıcılara sistemlerinin en derin katmanlarına kadar inme ve özelleştirme imkanı sunar. Bu özelleştirmelerin başında çekirdek (kernel) derleme gelir. Kendi çekirdeğinizi derlemek, sisteminizin performansını optimize etmek, belirli donanım desteğini eklemek veya kaldırmak, güvenlik özelliklerini güçlendirmek ve hatta hata ayıklama yeteneklerini geliştirmek için güçlü bir yöntemdir. Bu rehberde, FreeBSD 10.1 üzerinde çekirdeğinizi nasıl özelleştireceğinizi ve yeniden derleyeceğinizi adım adım öğreneceksiniz.
Önemli Not: FreeBSD 10.1, 31 Mart 2017 tarihinde kullanım ömrünü (End-of-Life – EOL) tamamlamıştır. Bu, artık bu sürüm için güvenlik güncellemeleri veya hata düzeltmeleri yayınlanmadığı anlamına gelir. Üretim ortamlarında güncel ve desteklenen bir FreeBSD sürümü kullanmanız şiddetle tavsiye edilir. Ancak, bu rehber talebiniz doğrultusunda FreeBSD 10.1 spesifikasyonlarına uygun olarak hazırlanmıştır.
Neden Kendi Çekirdeğinizi Derlemelisiniz?
FreeBSD, varsayılan olarak “GENERIC” adlı bir çekirdek ile gelir. Bu çekirdek, geniş bir donanım yelpazesini desteklemek ve çoğu kullanıcı için “kutudan çıktığı gibi” çalışmak üzere tasarlanmıştır. Ancak, kendi çekirdeğinizi derlemek size şu avantajları sunar:
* Performans Optimizasyonu: Kullanmadığınız sürücüleri ve özellikleri çekirdekten çıkararak çekirdeğin boyutunu küçültebilir ve bellekte daha az yer kaplamasını sağlayabilirsiniz. Bu, özellikle kaynakları kısıtlı sistemlerde veya yüksek performans gerektiren uygulamalarda fark yaratabilir.
* Özel Donanım Desteği: Varsayılan GENERIC çekirdeğinde bulunmayan veya özel ayarlamalar gerektiren belirli bir donanım (örneğin, eski bir ağ kartı, özel bir RAID denetleyici) için destek ekleyebilirsiniz.
* Gelişmiş Güvenlik: İhtiyaç duymadığınız modülleri ve özellikleri devre dışı bırakarak potansiyel güvenlik açıklarının sayısını azaltabilirsiniz.
* Hata Ayıklama Yetenekleri: Çekirdek hata ayıklayıcı (DDB/KDB) gibi özel hata ayıklama seçeneklerini etkinleştirerek sistem sorunlarını daha derinlemesine inceleyebilirsiniz.
* Özel Özellikler: VIMAGE (sanal ağ yığınları), ALTQ (gelişmiş kuyruk yönetimi) gibi özel FreeBSD özelliklerini etkinleştirebilirsiniz.
Hazırlık Aşaması: Gerekli Araçlar ve Ön Gereksinimler
Çekirdek derleme işlemine başlamadan önce, sisteminizin hazır olduğundan emin olmanız gerekir.
1. Sistem Kaynak Kodlarını Edinme
Çekirdeği derlemek için öncelikle FreeBSD kaynak kodlarına ihtiyacınız vardır. Bu kodlar genellikle /usr/src dizininde bulunur. Eğer bu dizin boşsa veya eksikse, kaynak kodlarını indirmeniz gerekecektir. FreeBSD 10.1 için svn (Subversion) kullanmak yaygın bir yöntemdir:
# İlk kez indiriyorsanız:
svn checkout https://svn.freebsd.org/base/release/10.1.0 /usr/src
Eğer daha önce indirdiyseniz ve güncellemek istiyorsanız:
cd /usr/src
svn update
Alternatif: Eğer sisteminiz zaten freebsd-update ile düzenli olarak güncelleniyorsa, kaynak kodlarını da bu yolla indirebilirsiniz:
freebsd-update fetch install
Bu komut, /usr/src dizinini sisteminizle eşleşen kaynak kodlarıyla doldurur.
Kaynak kodlarının doğru sürüm olduğundan emin olmak için, indirdikten sonra cat /usr/src/sys/conf/newvers.sh komutu ile kontrol edebilirsiniz. Çıktıda 10.1-RELEASE gibi bir ifade görmelisiniz.
2. Gerekli Derleme Araçları
FreeBSD’nin temel kurulumu genellikle çekirdek derlemek için gerekli tüm araçları (gcc, make, vb.) içerir. Ek bir yazılıma nadiren ihtiyaç duyulur. Ancak emin olmak için pkg install build-essential gibi bir komut (bu sadece Linux’ta var, FreeBSD’de genelde gerekmez) yerine, temel sistemin güncel olduğundan emin olmalısınız.
3. Mevcut Çekirdeği Yedekleme
Herhangi bir sorun yaşamanız durumunda geri dönebileceğiniz bir yol olması kritik öneme sahiptir. FreeBSD, yeni bir çekirdek kurduğunuzda otomatik olarak eski çekirdeği yedekler, ancak manuel bir yedekleme yapmak her zaman iyi bir alışkanlıktır:
cp -R /boot/kernel /boot/kernel.bak
Bu, mevcut çekirdek dizininizi /boot/kernel.bak olarak yedekler. Eğer yeni çekirdeğiniz önyükleme yapmazsa, önyükleyici (boot loader) üzerinden bu yedek çekirdeğe geri dönebilirsiniz.
Çekirdek Yapılandırma Dosyasının Özelleştirilmesi
Çekirdek derlemenin kalbi, yapılandırma dosyasıdır. Bu dosya, çekirdeğinizin hangi özellikleri, sürücüleri ve seçenekleri içereceğini belirler.
1. Yapılandırma Dosyasını Bulma ve Kopyalama
Varsayılan GENERIC çekirdek yapılandırma dosyası, sistem mimarinize (örneğin amd64 veya i386) bağlı olarak /usr/src/sys/ARCH/conf/GENERIC yolunda bulunur.
# Örnek olarak AMD64 mimarisi için:
cd /usr/src/sys/amd64/conf
ls
Çıktıda GENERIC dosyasını görmelisiniz.
Şimdi bu dosyayı kopyalayarak kendi özelleştirilmiş yapılandırma dosyanızı oluşturun. Bu dosyaya anlamlı bir isim verin, örneğin MYKERNEL:
cp GENERIC MYKERNEL
2. Yapılandırma Dosyasını Düzenleme
Şimdi MYKERNEL dosyasını favori metin düzenleyicinizle (örneğin vi veya ee) açın:
vi MYKERNEL
İçinde birçok device, options ve ident satırı göreceksiniz. İşte bazı yaygın düzenleme örnekleri:
* ident Satırı: Bu, çekirdeğinizin adıdır. Varsayılan olarak GENERIC yazar. Kendi çekirdeğiniz olduğunu belirtmek için bunu değiştirebilirsiniz:
ident MYKERNEL
* CPU Desteği: Sadece kendi işlemcinizin desteğini dahil ederek çekirdek boyutunu azaltabilirsiniz. Örneğin, sadece AMD K8 veya Intel Core 2 işlemci desteği için:
cpu AMD
#cpu INTEL_PPRO
#cpu INTEL_CORE2
Veya daha spesifik işlemci türleri için:
#cpu I486_CPU
#cpu I586_CPU
#cpu I686_CPU
cpu HAMMER # AMD Opteron/Athlon64
#cpu K8 # AMD K8 family
#cpu CORE2 # Intel Core 2 family
Eğer hangi CPU’ya sahip olduğunuzdan emin değilseniz, sysctl hw.model komutunu kullanabilirsiniz. Genel olarak, GENERIC bırakmak en güvenlisidir.
* Cihaz Sürücülerini Ekleme/Kaldırma (device, nodevice):
* Kullanmadığınız eski donanım sürücülerini kaldırabilirsiniz. Örneğin, eski paralel port veya IDE denetleyicileri:
#device ppc # Parallel port
#device atp # ATAPI tape (old, rarely used)
#device ata # ATA/ATAPI disk and CDROM drivers
nodevice kullanarak da bir cihazı kesin olarak dışarıda bırakabilirsiniz:
nodevice ata # ATA/ATAPI disk ve CDROM sürücülerini devre dışı bırak
* Özel bir donanım için destek eklemek isteyebilirsiniz. Örneğin, belirli bir Ethernet kartı (em veya igb gibi):
device em # Intel PRO/1000 Gigabit Ethernet
#device re # Realtek 8169/8168/8101E/8111/8168/8411/8118
Hangi ağ kartınız olduğunu pciconf -lv komutu ile görebilirsiniz.
* Seçenekleri Ekleme/Kaldırma (options, nooptions):
* Hata Ayıklama: Geliştirme veya sorun giderme için çekirdek hata ayıklayıcıyı (DDB) etkinleştirebilirsiniz:
options DDB # Kernel debugger
* Güvenlik: Bazı güvenlik seçeneklerini etkinleştirebilirsiniz:
options MAC # Mandatory Access Control framework
* Performans/Özellikler: Örneğin, ALTQ (gelişmiş kuyruk yönetimi) desteği:
options ALTQ # Alternative Queueing for bandwidth management
options ALTQ_CBQ # Class Based Queueing
options ALTQ_RED # Random Early Detection
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Fair Service Curve
options ALTQ_CDNR # Diffserv Compliant Differentiated Services
options ALTQ_PRIQ # Priority Queueing
* Gereksiz Seçenekleri Kapatma: Örneğin, eski SCSI aygıtları veya disket sürücüleri için seçenekleri kapatabilirsiniz:
#options SCSI_DELAY # Delay for SCSI devices to come ready
#options FD_DEBUG # Floppy drive debugging
Yapılandırma dosyasını düzenlerken dikkatli olun. Neyi değiştirdiğinizden emin değilseniz, o satırı yorum satırı yapın (# ile başlatın) veya olduğu gibi bırakın. Başlangıçta sadece ident satırını değiştirmek ve birkaç belirgin, kullanılmayan sürücüyü yorum satırı yapmak iyi bir başlangıç olabilir.
Yeni Çekirdeği Derleme ve Kurma
Yapılandırma dosyanızı özelleştirdikten sonra, yeni çekirdeği derleme ve sisteminize kurma zamanı gelmiştir.
1. Çekirdeği Derleme
root kullanıcısı olarak /usr/src dizinine gidin ve derleme işlemini başlatın:
cd /usr/src
make buildkernel KERNCONF=MYKERNEL
* make buildkernel: Çekirdeği ve modüllerini derler.
* KERNCONF=MYKERNEL: Hangi yapılandırma dosyasını kullanacağınızı belirtir. Kendi dosyanızın adı ne ise onu yazın.
Bu işlem, sisteminizin donanımına ve işlemcinizin gücüne bağlı olarak biraz zaman alabilir (genellikle birkaç dakikadan bir saate kadar). İşlem sırasında birçok derleme çıktısı göreceksiniz. Eğer bir hata oluşursa, çıktı size nerede bir sorun olduğunu gösterecektir.
2. Çekirdeği Kurma
Derleme işlemi başarıyla tamamlandıktan sonra, yeni çekirdeği sisteminize kurabilirsiniz:
make installkernel KERNCONF=MYKERNEL
Bu komut:
* Mevcut /boot/kernel dizinini /boot/kernel.old olarak yedekler.
* Yeni derlenmiş çekirdeği ve modüllerini /boot/kernel dizinine kopyalar.
Kurulum işlemi genellikle hızlıdır.
3. Sistemi Yeniden Başlatma
Yeni çekirdeğinizin etkinleşmesi için sisteminizi yeniden başlatmanız gerekir:
reboot
Sistem yeniden başladıktan sonra, uname -a komutunu kullanarak yeni çekirdeğinizin yüklendiğinden emin olabilirsiniz. Çıktıda MYKERNEL adını görmelisiniz:
uname -a
Örnek çıktı: FreeBSD myhost.example.org 10.1-RELEASE-pXX FreeBSD 10.1-RELEASE-pXX #0: Mon Jan 1 12:00:00 EST 2024 root@myhost.example.org:/usr/src/sys/amd64/compile/MYKERNEL amd64
Sorun Giderme ve İpuçları
Çekirdek derleme işlemi bazen sorunlarla karşılaşabilir. İşte karşılaşabileceğiniz bazı durumlar ve çözümleri:
1. Derleme Hataları
* Eksik Kaynak Kodları: /usr/src dizininin eksik veya bozuk olması. Kaynak kodlarını tekrar indirmeyi veya güncellemeyi deneyin.
* Yapılandırma Dosyası Hataları: MYKERNEL dosyasında yazım hataları veya geçersiz device/options satırları. Hata mesajını dikkatlice okuyun, genellikle hangi satırda sorun olduğunu belirtir.
* Temiz Bir Başlangıç: Bazen önceki derleme artıkları sorunlara neden olabilir. Temiz bir başlangıç için:
cd /usr/src
make clean
make cleandepend
# Sonra tekrar make buildkernel KERNCONF=MYKERNEL
2. Sistem Önyükleme Yapmıyor
Bu, en korkulan senaryodur. Ancak endişelenmeyin, bir çözüm yolu var:
* Önyükleyici Menüsü: Sisteminiz açılırken, genellikle 1-2 saniye süren bir geri sayım görürsünüz. Bu sırada herhangi bir tuşa (genellikle boşluk tuşu) basarak önyükleyici menüsüne girebilirsiniz.
* Eski Çekirdeği Yükleme: Önyükleyici menüsünde, genellikle “Escape to loader prompt” veya “Boot [K]ernel” gibi bir seçenek bulunur. Buradan komut satırına düşerek eski çekirdeği yükleyebilirsiniz:
# loader> komut istemindeyken
unload
set kernel="kernel.old"
boot
Bu komutlar, sistemin /boot/kernel.old dizinindeki yedek çekirdeği kullanarak önyükleme yapmasını sağlayacaktır. Sistem açıldıktan sonra, MYKERNEL dosyanızı tekrar kontrol edebilir ve sorunları giderebilirsiniz.
* Tek Kullanıcılı Mod (Single-User Mode): Önyükleyici menüsünde “Boot Single User” seçeneğini seçerek tek kullanıcılı moda geçebilirsiniz. Burada dosya sistemleri genellikle salt okunur olarak bağlanır. mount -u / ve mount -a -t ufs komutlarıyla yazılabilir hale getirip MYKERNEL dosyanızı düzenleyebilirsiniz.
3. Hangi Sürücüleri Kaldıracağımı Nasıl Bilirim?
* pciconf -lv: PCI aygıtlarınızın listesini ve kullandıkları sürücüleri gösterir.
* dmesg: Önyükleme sırasında çekirdek tarafından tanınan aygıtları ve yüklenen modülleri listeler.
* kenv: Çekirdek ortam değişkenlerini gösterir.
* man : Bir sürücünün manuel sayfasını okuyarak ne işe yaradığını öğrenebilirsiniz.
Başlangıçta, emin olmadığınız hiçbir şeyi kaldırmayın. Yorum satırı yaparak test edin.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Kendi FreeBSD çekirdeğinizi derlemek, sisteminiz üzerinde tam kontrol sağlamanın ve onu özel ihtiyaçlarınıza göre optimize etmenin en etkili yollarından biridir. Bu süreç, ilk başta karmaşık görünse de, adım adım ilerlediğinizde oldukça yönetilebilir olduğunu göreceksiniz. Unutmayın, her zaman bir yedekleme bulundurmak ve değişiklikleri küçük adımlarla yapmak, olası sorunları minimize etmenin anahtarıdır.
Sıkça Sorulan Sorular (SSS)
1. Neden freebsd-update ile çekirdeği güncellemiyorum?
freebsd-update aracı, sisteminize resmi FreeBSD çekirdeğini (genellikle GENERIC) kurar ve sizin özelleştirilmiş çekirdeğinizin üzerine yazar. Eğer özel bir çekirdek kullanıyorsanız, freebsd-update sonrası çekirdeğinizi yeniden derlemeniz ve kurmanız gerekir.
2. Çekirdek derleme ne kadar sürer?
Bu, sisteminizin CPU gücüne, bellek miktarına ve depolama hızına bağlıdır. Modern bir sistemde birkaç dakika sürebilirken, eski veya zayıf bir sistemde bir saatten fazla sürebilir.
3. Hangi CPU seçeneklerini seçmeliyim?
sysctl hw.model komutu size işlemcinizin modelini verecektir. Genellikle cpu AMD veya cpu INTEL gibi daha genel seçenekler yeterlidir. Emin değilseniz, GENERIC dosyasındaki varsayılan ayarları bırakmak en güvenlisidir.
4. Tüm gereksiz sürücüleri kaldırsam ne olur?
Eğer sisteminizin önyükleme yapması için gerekli olan bir sürücüyü kaldırırsanız, sisteminiz önyükleme yapmayabilir. Bu yüzden, başlangıçta sadece emin olduğunuz ve kullanmadığınızı bildiğiniz (örneğin eski IDE veya disket sürücüsü) sürücüleri kaldırmanız önerilir.
5. Çekirdeğimi ne sıklıkla yeniden derlemeliyim?
Genellikle, önemli bir freebsd-update sonrası veya /usr/src dizinini güncelledikten sonra, ya da yeni bir donanım eklediğinizde veya belirli bir özelliği etkinleştirmek istediğinizde çekirdeği yeniden derlemeniz önerilir.
6. Yeni çekirdek önyükleme yapmazsa ne yapmalıyım?
Önyükleyici menüsünden unload, set kernel="kernel.old", boot komutlarını kullanarak eski çekirdeğinize geri dönebilirsiniz. Sistem açıldıktan sonra MYKERNEL dosyanızı kontrol edip hataları düzeltebilirsiniz.
