Açılış Ayarları
Önceki Temel Ayarlamalar Sonraki
Açılış Ayarları
Sistemi SBC üzerindeki sistemden başlatabilmek için yapmamız gereken bir takım ayarlamalar mevcut. Bunlar, SBC'ye özgün bir çekirdek oluşturma, açılışta init tarafından çalıştırılacak ilk programı hazırlama, sisteme girişleri düzenleme ve çekirdeği yükleyebilmek için bir önyükleyici ayarlamak olacaktır.
Çekirdeğin Oluşturulması
Sistemimizi disketlerin yardımı olmadan açabilmek için öncelikle sistemi düzgün bir şekilde başlatabilecek, istediğimiz özelliklere sahip bir çekirdeğin olması gereklidir. SBC sistemi üzerinde çalışacak olan Linux çekirdeğini derlemek için bir Linux makine kullanacağız. Derleme işlemini yapacağınız zamandaki kararlı son sürüm Linux çekirdeğini http://www.kernel.org adresinden indirip, SBC üzerindeki donanımlar ve SBC üzerinde kullanmak istediğiniz yapılar için gerekli olan çekirdek desteklerine sahip olacak şekilde bir derleme yapmalısınız. Linux çekirdeğinin derlenmesi hakkında örneğin Çekirdeğe Yama Uygulanması ve Çekirdeğin Derlenmesi NASIL belgesinden yararlanabilirsiniz.
Bu aşamada SBC üzerinde çalışacak olan Linux çekirdeğini derlediğinizi ve bir disket yardımı ile SBC üzerindeki /hedef/boot dizini altına linux adıyla kopyaladığınızı varsayıyoruz.
Not
Çekirdeğin derlenmesi sırasında en sık yapılan hata, SBC sisteminizde kullandığınızdan farklı bir işlemci ailesinin seçilmesi ve bu yüzden sistemin yüklenememesidir. SBC üzerindeki işlemciler aynı hızlardaki ağabeylerinin birebir aynısı değillerdir. 133 MHz hızındaki bir işlemci için 486 kipinde çekirdek derlemeniz gerekebilir, 586 ve üstü çalışmayabilir. Böyle bir durumla karşılaşırsanız çekirdeği yeniden derleyip, SBC'yi daha önce kullandığımız iki disket ile açıp kök bölümünü gene /hedef dizini altına bağladıktan sonra, yeni çekirdeği disket ile /hedef/boot dizini altına taşımalı ve ardından burada anlatılan lilo ayarlamalarının ilgili kısımlarını yeniden yapmalısınız.
Uyarı
Buradaki /hedef dizini, SBC'yi açarken kullandığımız iki disketin bellekte oluşturduğu geçici Linux sistemi altında yer almaktadır. DiskOnModule üzerinde /hedef adında bir dizin yoktur.
Init Ayarları
Linux çekirdeği bir önyükleyici programı tarafından açılış esnasında belleğe yüklenip çalışmaya başlar. Çekirdek donanımları tarar, sisteme yerleşir ve tüm yapması gereken işlemleri bitirdiğinde artık sistemi bize devretmek ister. İşte bu noktada çekirdeğin yaptığı iş /sbin/init programını çalıştırmaktır.
Çekirdek tarafından ilk olarak çalıştırılan init programının bu nedenle süreç numarası (PID) daima 1'dir. Geri kalan tüm süreçler için init ana süreç (parent) konumundadır.
Peki init neler yapar ve biz nerede devreye gireceğiz? init programı, çalıştığında öncelikle /etc/inittab ayar dosyasını okur. Buradan aldığı verilerle sisteminhangi çalışma seviyesinde (runlevel) açılacağına karar verir ve ilgili programı çalıştırır. Ayrıca sanal konsollardan sisteme girişleri sağlayabilmek için getty programını bu konsollarla ilişkilendirir.
init ile ilgili dikkat etmemiz gereken nokta, busyBox içerisinden çıkan yeniden yazılmış init sürümünün çalışma seviyelerini (runlevels) desteklemediğidir. Bu nedenle normal Linux bilgisayarınızdaki /etc/inittab dosyasını örnek olarak kullanamazsınız. Bunun yerine busyBox içersindeki init'in kullandığı dosya biçimini kullanmalısınız.
Not
Çoğu durumda gerekli olmamakla birlikte herhangi bir nedenden ötürü çalışma seviyelerine ihtiyaç duyan bir sistem geliştiriyorsanız busyBox ile gelen init'i değil, sysvinit'i kullanmalısınız.
Not
Eğer bir inittab dosyası ayarlamaz iseniz busyBox aşağıdaki gibi bir inittab içeriğini girmiş olduğunuzu varsayarak, bu içeriğe göre çalışır:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
Ayrıca /dev/console aygıtının erişilebilir olduğunu görürse aşağıdaki satırları da ekleyecektir:
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh
Şimdi örnek bir inittab dosyası hazırlayalım. İlk iki konsoldan doğrudan sisteme giriş yapılabilsin, üçüncü konsoldan ise /etc/passwd dosyasından kimlik doğrulama yapılarak sisteme girilebilsin. Bunun için aşağıdaki gibi bir inittab dosyasını vi /hedef/etc/inittab komutu ile oluşturalım:
Örnek 4.1. /etc/inittab içeriği
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init

#tty1::askfirst:/bin/sh
tty2::askfirst:/bin/sh
tty3::respawn:/sbin/getty 38400 tty3
Dosyayı bu şekilde oluşturup kaydettikten sonra şimdi dosyadaki satırları açıklayalım. İlk satırda init programının sistemin açılışı işlemini devredeceği program belirtilmektedir. İşte burası bizim sistem açılışında doğrudan müdahale etmemiz gereken yerdir. Örneğimizde bu değer /etc/init.d/rcS'dir. init kendi işini bitirince bu programı çalıştıracaktır. Bu programı birazdan hazırlayacağız.
İkinci satırda askfirst özel belirteci /bin/sh ile ilişkilendirilmiştir. askfirst ile ilişkilendirilmiş bir sanal konsola geçildiğinde <ENTER> tuşuna basmak suretiyle kabuğa düşülür (/bin/sh). Birinci konsol tty1 için askfirst elemanı öntanımlı olarak ayarlandığı için dosyanın 7. satırındaki ayar, önüne # getirilerek iptal edilmiştir. Etkinleştirseniz de bir problem olmaz, sadece birinci konsolda 2 defa giriş mesajını alırsınız:
Please press Enter to activate this console.
Please press Enter to activate this console.
3, 4 ve 5. satırda yapılan işlemler isimlerinden de anlaşılacağı üzere sistemdeki belirli olaylar karşısında çalıştırılacak olan uygulamaların seçilmesini sağlamaktadır. 8. satırda 2. sanal konsol da askfirst ile ilişkilendirilmekte, 9. satırda ise 3. sanal konsol getty programıyla ilişkilendirilmekte ve respawn yapılarak süreç öldüğü zaman getty'nin yeniden çalıştırılması gerektiği belirtilmektedir.
Şimdi /etc/init.d/rcS dosyamızı oluşturalım. Basit bir kabuk programı ile açılışta yapılmasını istediğimiz işlemleri burada gerçekleştireceğiz. Öncelikle sistemde init.d dizinini oluşturalım.
# mkdir /hedef/etc/init.d
Ardından vi /hedef/etc/init.d/rcS komutu ile dosyamızı yazmaya başlayalım. Bu dosyada neler yapmamız gerekiyor? rcS içerisinde teorik olarak sistemin açılırken yapmasını istediğimiz her türlü işlemi kendi keyfimize göre yaptırabiliriz (Linux'te bir işi yapmanın her zaman birden fazla yolu olduğuna göre keyif burada doğru bir tanımlama :). Ancak bu keyfi işlem adımlarının yanında bir de bazı özel durumlar haricinde yapmamız gereken bir işlem var: kök dosya sistemini oku-yaz kipinde yazılabilir olarak sisteme bağlamak. Linux çekirdeği sistemi açarken ve init programını çalıştırdığında kök dosya sistemi salt-okunur olarak sisteme bağlı durumdadır (Elbette bunu da değiştirmenin yolları var ille de ben bildiğimi yaparım diyorsanız). Bu yüzden rcS içerisinde kök dosya sistemi oku-yaz kipine geçirilmelidir. Ayrıca /proc sanal dosya sistemi de burada sisteme bağlanmalıdır. Bu işlemleri yapan dosya içeriği aşağıdaki gibi olup şu aşamada sistemin açılabilmesi için bize yeterlidir. İleride açılışta yapılacak yeni işlemler eklendiğinde (ağ ayarlarının yapılması gibi) bu dosyanın içeriğinde değişiklikler yapacağız.
Örnek 4.2. /etc/init.d/rcS
#!/bin/sh

## Sistemi read-write moduna geçirelim
mount -n -o remount,rw /

## Proc'u bağlayalım
mount /proc
Bu dosya mutlaka çalıştırılabilir olmalıdır, chmod 755 /hedef/etc/init.d/rcS komutuyla dosyaya çalıştırma hakları verilmelidir.
rcS içerisinde mount komutunu kullanma şeklimize bakacak olursanız dosya sistemi türü, aygıt ismi gibi ayrıntıların verilmediğini görmektesiniz. Bu da doğru ayarlanmış bir /etc/fstab dosyası sayesinde olabilmektedir. Şimdi bu dosyayı da gene vi /hedef/etc/fstab komutu ile aşağıdaki gibi oluşturalım:
Örnek 4.3. /etc/fstab
# Device                Point   Type    Options         Dump    Pass
/dev/hda1               /       minix   defaults,rw     1       0
proc                    /proc   proc    defaults        0       0
Artık rcS dosyamız çalışmaya hazır. Şimdi tek yapmamız gereken önyükleyici programımızı ayarlamak ve sistemi yeniden başlatmak olacak.
LILO Ayarları
Sistemimiz neredeyse kendi başına açılabilecek hale geldi. Şimdi çekirdeği yüklememizi sağlayacak bir önyükleyici kurmamız ve ayarlamamız gerekiyor. Ben burada önyükleyici olarak LILO kullandım, siz alternatif olarak aynı işlemleri GRUB ile de yapabilirsiniz.
Öncelikle lilo uygulaması bir disket ile normal Linux bilgisayarınızdan SBC üzerine taşınmalıdır. Bazı sistemlerde /sbin/lilo dosyası bir yönlendirici olup uygulamanın kendisi /sbin/lilo.real olarak kurulu olabilir. Benzeri bir durum sizin için de geçerli ise uygulamanın aslını (ismi farklı olsa da) diskete lilo adıyla kopyalayın. Disketi SBC'ye takıp bağlayın ve lilo'yu buradaki /hedef/sbin dizini altına kopyalayın.
LILO uygulamasının çalışabilmesi için gereken bir kaç dosya daha var. Bu dosyaları da her zaman olduğu gibi Linux yüklü bilgisayarımızdan disket yardımı ile SBC üzerine taşımalıyız. Aşağıdaki dosyaları Linux sisteminizden bir diskete kopyalayın:
  • /boot/boot-menu.b
  • /boot/boot.b
  • /boot/chain.b
  • /boot/map
Ardından bu disketi SBC üzerine takarak dosyaları /hedef/boot dizini altına kopyalayın.
Not
Hazırlamış olduğumuz Linux çekirdeğinin de bu aşamaya gelinene kadar /hedef/boot dizini altına kernel adıyla atılmış olduğunu varsayıyoruz.
Gerekli dosyaları bu şekilde SBC üzerine attıktan sonra şimdi bu ana kadar /hedef dizini altında oluşturduğumuz SBC sistemine chroot edelim (Bu işi busybox kurulumu bittikten sonra herhangi bir adımda yapabilirdik :).
# chroot /hedef


BusyBox v0.60.5 (2003.05.29-21:02+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

/ # 
Artık kök dizinimiz /, /hedef dizininin altına kaydırılmış durumdadır. Şimdi burada vi /etc/lilo.conf komutuyla aşağıdaki gibi bir ayar dosyası oluşturalım.
Dikkat
chroot> işleminden sonra zaten /hedef dizin yapısı içerisinde olduğumuzdan artık /hedef/etc/lilo.conf demek yerine doğrudan /etc/lilo.conf demeliyiz, çünkü bu noktada /hedef dizini bizim için erişilemez durumdadır (zaten biz oyuz, matrix :p) Eski sisteme dönmek için exit komutu kullanılmalıdır. Ayrıca burada kullandığımız vi programı öncekilerden farklı olarak gerçekte bizim derlediğimiz busybox içerisinden çıkan ve ilk açılışta kullandığımız sisteme göre /hedef/bin/vi yani /hedef/bin/busybox olan uygulamadır.
Örnek 4.4. /etc/lilo.conf
lba32
boot=/dev/hda
install=/boot/boot-menu.b
map=/boot/map
prompt
timeout=150
vga=normal
default=Linux

image=/boot/kernel
      root=/dev/hda1
      label=Linux
      read-only
Lilo formatıyla ilgili bilgi almak için Linux yüklü bilgisayarınızda man 5 lilo.conf komutunu verebilirsiniz. Şimdi artık son adım olarak lilo uygulamasını çalıştırıp diskimizin Ana Önyükleme Kaydının (MBR -Master Boot Record) açılışa uygun hale getirilmesini sağlayalım:
/ # /sbin/lilo -v
LILO version 22.2, Copyright (C) 1992-1998 Werner Almesberger
Development beyond version 21 Copyright (C) 1999-2001 John Coffman
Released 05-Feb-2002 and compiled at 20:57:26 on Apr 13 2002
MAX_IMAGES=27

Reading boot sector from /dev/hda
Merging with /boot/boot-menu.b
Boot image: /boot/kernel
Added Linux *

Backup copy of boot sector in /boot/boot.0300
Writing boot sector.
/ # 
Artık sistemin tek başına çalışabilmesi için her şey hazır. Şimdi sistemi yeniden başlatalım.
/ # exit
# reboot
Disket sürücüde disket olmadığından emin olunuz :) Sisteminiz açılmazsa karşılaştığınız sorunları eposta adresine gönderirseniz bu belgenin sonuna "Problemler ve Çözümler" bölümü ekleyebiliriz.
Önceki Üst Ana Başlık Sonraki
Tinylogin Kullanımı Başlangıç Sistem Kullanıcıları ve Gruplar
Bir Linux Kitaplığı Sayfası