Bu adımda, Linux terminalimizin DHCP sunucusundan IP adresi almasını, yani sunucu makinaya bağlanmasını sağlayacağız. Bunu yapmadan önce, istemci makina üzerinde bulunan ağ kartı için hangi çekirdek modülünün gerektiğini öğrenmemiz lazım. Bunu yapmışken, X yapılandırması ile ilgili dosyaları da alacağız. Nasıl mı? Hani belgenin başında elinizin altında bir Knoppix CD'si olsun demiştim. Şimdi onu kullanacağız. Knoppix, tamamen CD'den başlatılıp, sabit diske kurulmadan doğrudan CD'den çalışan bir Linux dağıtımıdır. Eğer bir ağ bulur ve bu ağda da bir DHCP sunucusu algılarsa kendine bir IP adresi alıp ağa bağlanır. Biz bu özelliğinden yararlanarak, onun çalışmak için oluşturduğu yapılanmayla ilgili dosyaları bu ağ bağlantısı üzerinden sunucumuza aktarabiliriz. Bunu yapabilmek için önce sunucu makina üzerinde SSH sunucusunu başlatmamız lazım. SSH bağlantısı kuracağız, çünkü telnet öntanımlı ayarlarıyla root kullanıcısının sisteme bağlanmasına izin vermez. SSH için böyle bir sorun yok. Sunucu makina üzerinde şu komutları girin:
# /sbin/chkconfig sshd on
# /sbin/service sshd start
Böylece sshd'nin her sistem açılışında çalışmasını da sağlamış olduk. İstemci makinanın CD sürücüsündeki Knoppix CD'sinden açılmasını sağlayın. İstemci makina benimki gibi yavaş bir makinaysa (P133) Knoppix'in açılması biraz zahmetli olacaktır. Böylece neden bir Knoppix CD'si alıp kullanın demediğimi daha iyi anlayacaksınız. Bizim oluşturacağımız sistem Knoppix'e göre sürat rekoru kıracak.
Knoppix'in masaüstü açıldığında CTRL-ALT-F1 tuşu ile konsola düşün. Bu konsol bizim konsol gibi, yani parola filan sormuyor ve sistem root yetkileri ile kullanılıyor. mc var, isterseniz çalıştırın. Şu komutu girin:
# scp /proc/modules root@10.10.10.1:/a3/ramdisk/
Bu komuttan sonra scp size parola soracak. Sunucu makinadaki root kullanıcısı için kullandığınız parolayı girin. /proc/modules dosyası sunucu makina üzerindeki /a3/ramdisk dizinine kopyalanacak. XF86Config dosyası ile XFree86.0.log dosyasını da alalım:
# scp /etc/X11/XF86Config root@10.10.10.1:/a3/ramdisk/
# scp /var/log/XFree86.0.log root@10.10.10.1:/a3/ramdisk/
Bu komutları girmeden önce /etc/X11 ve /var/log dizinlerine bakmayı ihmal etmeyin. Dosyaların isimleri biraz farklı olabilir, bu takdirde komutlardaki dosya isimlerini değiştirmelisiniz. Bu işlemden sonra Knoppix ile işimiz bitti. Bize gerekli bilgileri topladık. Sunucu makinaya geçip, yeni sistemi hazırlayabiliriz.
Knoppix'den kopyaladığımız modules dosyası, istemci makinadaki donanım için gerekli çekirdek modüllerini içerir. Bunlardan biri de ağ kartını sisteme tanıtan modüldür. modules dosyasındaki modül isimlerini makinanızdaki ağ kartları ile ilgili modül dosyalarının (/lib/modules/2.4.22-x/kernel/drivers/net dizinindeki modüller) isimleriyle karşılaştırın. En az bir eşleşme bulacaksınız, bazı modüller bir ek modüle daha ihtiyaç duyar, örneğin 8139too.o modülü mii.o modülüne ihtiyaç duyar ve modules dosyasında bir modül bir başka modüle bağımlıysa bu bilgi dosyada vardır. Bunu göz önüne alarak modules dosyasını önce bir inceleyin. Ağ kartı ilk algılanan donanımlardan biri olduğundan onunla ilgili modül ya da modüller modules dosyasının son satırlarındadır. Dosyayı sondan başa tararsanız işiniz çabuk biter.
Bu modül benim istemci makinam için dmfe.o ve ek bir modül gerektirmiyor. /lib/modules/2.4.22-x/kernel/drivers/net/dmfe.o dosyasını /a3/ramdisk/initrd/lib/modules/2.4.22-x/kernel/drivers/net/ dizinine kopyalıyorum, siz de kendi modül ya da modülleriniz için aynı işlemi yapın:
# cp /lib/modules/2.4.22-x/kernel/drivers/net/dmfe.o \
> /a3/ramdisk/initrd/lib/modules/2.4.22-x/kernel/drivers/net/
Ağ kartının çekirdeğe tanıtılmasını sağlayacak modülü sistemimize yerleştirdiğimize göre sistemi ağa bağlayacak işlemlere başlayabiliriz. /etc/init.d/baslat dosyasını aşağıdaki biçime getirin:
#!/bin/sh
# Bu betik sistemi ilklendirir
PATH="/bin"
umask 022
# Biraz yer acalim
rmdir /lost+found
# modulleri yoklarken cekirdek birsey basmasin
echo "0" > /proc/sys/kernel/printk
depmod -a
modprobe -a -q *
# Saatimiz dogru kalsin
hwclock -s
echo "lo arayuzu etkinlestiriliyor"
ip link set lo up
ip addr add 127.0.0.1 dev lo
ip route add 127.0.0.0/8 dev lo
echo "eth0 arayuzu etkinlestiriliyor"
udhcpc -i eth0 -s /etc/init.d/dhcpc.sh
exit 0
Önceki baslat betiğiyle karşılaştırıldığında hangi satırların eklendiğini gördünüz. depmod komutuyla modül bağımlılıkları tespit ediliyor ve hemen altındaki modprobe komutuyla gerekli modüller çekirdeğe ekleniyor. depmod ve modprobe komutlarını bin dizinimize eklemeliyiz. Ayrıca bir /etc/modules.conf dosyası oluşturup ağ kartı için gereken modülü bu dosyada belirtmeliyiz.
Dosyanın sonundaki udhcpc komutu ise busybox içindeki yerleşik komutlardan biri. DHCP sunucusundan ağ kartımız için IP adresinin alınmasını bu komut gerçekleştiriyor. Komut parametrelerinde -i seçeneği ile ağ arayüzünün ismini, -s seçeneği ile de komutun dönemsel olarak çalıştıracağı betiğin yerini belirtiyoruz. Bu betiği de biz yazacağız.
Şimdi bu işlemleri sırayla yapalım. depmod ve modprobe komutlarını sistemde bulunduğu yeri whereis ile tespit ettikten sonra bu dizine girip bu komutların dosyalarını buluyoruz. modprobe genelde insmod dosyasına bir sembolik bağdır. insmod dosyasına sembolik bağ olarak çalışan başka komutlar da var. Hepsini initrd/bin dizinine kopyalıyoruz:
# cd /a3/ramdisk/initrd/bin
# cp /sbin/depmod ./
# cp /sbin/insmod ./
# cp -d /sbin/kallsyms ./
# cp -d /sbin/ksyms ./
# cp -d /sbin/lsmod ./
# cp -d /sbin/modprobe ./
Sembolik bağları kopyalarken -d seçeneğini kullandığımıza dikkat edin. Bu seçeneği kullanmazsanız bağ dosyası değil, bağın hedefindeki dosya kopyalanır ki, bu bizim istemediğimiz bir durum.
depmod ve insmod komutlarının bağımlı olduğu kütüphanelerin neler olduğuna da bakmamız lazım:
# ldd ./insmod
libc.so.6 => /lib/i686/libc.so.6 (0x40030000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
# ldd ./depmod
libc.so.6 => /lib/i686/libc.so.6 (0x40030000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Bu dosyaları busybox için sistemimize dahi etmiştik. Farklı bir kütüphaneye ihtiyaç duymadıklarından birşey yapmamıza gerek yok.
Şimdi etc dizinine geçip oradaki işlemleri yapalım. Önce etc dizininde modules.conf dosyasını oluşturun ve içine aşağıdaki satırı sizin ağ kartınızın modül ismini .o uzantısız olarak içerecek şekilde yazın (benimki dmfe):
init.d dizinine geçip dhcpc.sh dosyasını oluşturacağız ve dosyayı çalıştırılabilir yapacağız:
# touch dhcpc.sh
# chmod +x dhcpc.sh
Dosyanın içine aşağıdaki satırları kopyalayın:
#!/bin/sh
RESOLV_CONF="/etc/resolv.conf"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"
case "$1" in
deconfig)
ifconfig $interface 0.0.0.0
;;
renew|bound)
ifconfig $interface $ip $BROADCAST $NETMASK
if [ -n "$router" ] ; then
while ip route del default scope global nexthop dev $interface ; do
:
done 2>/dev/null
for i in $router ; do
ip route add default via $i dev $interface
done
fi
echo -n > $RESOLV_CONF
[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
for i in $dns ; do
echo nameserver $i >> $RESOLV_CONF
done
;;
esac
exit 0
Bu betik tek başına çalışmaz, betiği udhcpc komutu bazı parametreler aktararak çalıştırır. Bu konu hakkında daha fazla bilgi almak için busybox paketindeki networking/udhcp dizinindeki README dosyalarındaki açıklamalara bakabilirsiniz.
initrdyap betiğini çalıştırıp initrd.img dosyasını oluşturduktan sonra istemci makinaya geçip, netlogon dizinindeki betiği çalıştırıp dosyaları windows'a aktarın ve LINUX OL simgesine tıklayıp yaptıklarınızı deneyin.
İstemci makinadaki Linux sistemi açıldığında ifconfig komutunu vererek eth0 yapılandırmasını görebilir. Sunucu makinaya ping atabilir (ping 10.10.10.1), böylece ağ bağlantınızı sınayabilirsiniz.
İstemci makinanın Linux ile ağa bağlanmasını gerçekleştirdiğimize göre son adıma geçebilir, X terminalimizi oluşturmaya başlayabiliriz.