FreeBSD ile Terminal sunucu uygulaması

Kullanım amaçları

Eski bilgisayarları değerlendirmek
Disksiz bilgisayarları değerlendirmek
Maliyet avantajı
Yönetim ve bakım kolaylığı

Kullanım alanları

1. X terminali
2. Süper bilgisayarlara (cluster) üye eklemek için
3. Windows lab'ı unix lab'a çevirmek için
4. Windows'tan vazgeçemeyenlerin unixe alışmaları için

Örnek sunucu donanımı

P4 2.66 işlemci, 512 MB RAM, 40 GB disk, 2 tane ethernet kartı, S3 Savage 2000 ekran kartı

Sunucuda gereken programlar

DHCP (Dynamic Host Configuration Protocol), veya BOOTP (Internet Boot Protocol server)
TFTP (Trivial File Transfer Protocol) veya NFS,
NFS (Network File System), XDM (X Display Manager), Mozilla, OpenOfis

Örnek terminal donanımı

P2 266 işlemci, 64 MB RAM, Ethernet kartı realtek, S3 Virge GX2 ekran kartı, Disket veya eprom

Terminal yazılımı

Etherboot: Bu yazılım network üzerinden TFTP veya NFS ile program (çekirdek) çekip bu programı x86 işlemcilerde çalıştırmaya yarayan ROM imajı oluşturur.

http://etherboot.sourceforge.net/
http://www.etherboot.org/

Terminal disketi oluşturma

FreeBSD sisteminde:

# cd /usr/ports/net/etherboot/

# make

# cd work/etherboot-VERSION/src           
Buradaki VERSION 5.0.8

# cat bin/boot1a.bin bin32/rtl8139.lzrom > /dev/fd0
Terminaldeki ethernet realtek olduğu için rtl8139 yazıldı.

Sunucu ayarları

1. DHCP

2. TFTP veya NFS (FreeBSD öntanımlı olarak NFS kullanır.)

3. NFS

4. Çekirdek oluşturma

5. Terminal servisleri

6. X ayarları

DHCP kurulumu ve ayarları

Kurulum:
# cd /usr/ports/net/isc-dhcp3-server/
# make install

Ayarlar:
/usr/local/etc/rc.d/isc-dhcpd.sh
dosyasında hangi ethernete hizmet verecekse
dhcpd_enable="YES"
dhcpd_ifaces=rl0
yazılır.

dhcpd.conf dosyası

######## Burada başlıyor ##########

default-lease-time            21600;
max-lease-time                21600;
ddns-update-style none;
option subnet-mask            255.255.255.0;
option broadcast-address      192.168.0.255;
option routers                192.168.0.254;
option domain-name-servers    192.168.0.254;
option domain-name            "mini.deu.edu.tr";
#option root-path              "192.168.0.254:/opt/ltsp/i386";
option root-path                "192.168.0.254:/usr/diskless_root/";
shared-network WORKSTATIONS {
    subnet 192.168.0.0 netmask 255.255.255.0 {
    }
}

group   {
    use-host-decl-names       on;
    option log-servers        192.168.0.254;

    host ws001 {
        hardware ethernet     00:50:fc:8d:c8:17;
        fixed-address         192.168.0.1;
        filename              "/tftpboot/kernel_1067";
        next-server 192.168.0.254;
    }
    host ws002 {
        hardware ethernet     00:50:fc:8d:cc:dc;
        fixed-address         192.168.0.2;
        filename              "/tftpboot/kernel.diskless_min";
        next-server 192.168.0.254;
    }
    host ws003 {
        hardware ethernet     00:C0:26:8B:A8:83;
        fixed-address         192.168.0.3;
        filename              "/tftpboot/kernel.diskless_min";
        next-server 192.168.0.254;

}

######## Burada bitiyor ##########

TFTP:

/etc/inetd.conf      dosyasında

#tftp   dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -s /tftpboot

satırının başındaki # kaldırılıp inet programı yeniden başlatılır.

Hazırlanmış özel çekirdek (kernel.diskless) /tftpboot dizinine kopyalanır.

NFS:

Başlatmak için /etc/rc.conf dosyasına
portmap_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"
satırlarını eklemek gerekir.

Hangi dizinlerin kimlere nasıl paylaştırılacağı /etc/exports
dosyasına yazılır.
#/etc/exports dosyasi icerigi

######## Burada başlıyor ##########

/tftpboot -maproot=root -network 192.168.0.0 -mask 255.255.255.0
/usr -maproot=root:0 -alldirs -network 192.168.0.0 -mask 255.255.255.0
/home -maproot=root:0 -alldirs -network 192.168.0.0 -mask 255.255.255.0

Bu dosyadaki birdeğişiklikten sonra mountd programı yeniden
başlatılmalıdır.

######## Burada bitiyor ##########


Çekirdek oluşturma

Disksiz bir çekirdekde aşağıdaki özellikler mutlaka olmalıdır.

options MFS                                                #Memory File System
options BOOTP                                            # Use BOOTP to obtain IP address/hostname
options BOOTP_NFSROOT                          # NFS mount root filesystem using BOOTP info
options BOOTP_COMPAT                            # Workaround for broken bootp daemons

İsteğe bağlı olarak harddisk desteği çıkartılabilir.

Çekirdek derleme

# cd /usr/src/sys/i386/conf
# cp GENERIC DISKLESS

DISKLESS dosyasında ilgili değişiklikler yapılır

# config DISKLESS
# cd ../../compile/DISKLESS
# make depend
# make
#cp kernel /tftpboot/kernel.diskless


Terminal dosyalarını hazırlama

Bununla ilgili örnek dosya
/usr/share/examples/diskless/clone_root
dosyasıdır.
Bu dosyadaki DEST değişkenine terminallerin kök dizini yazılır.
DEST=/usr/diskless_root

# sh clone_root all
komutu ile gerekli dosyalar bu dizine kopyalanır.
clone_root seçenekleri:
# sh clone_root all   
Varolan dizin silinir ve yeniden kopyalanır.
# sh clone_root update
Aygıt dosyaları (devices) ve bağlama noktaları güncellenir.
# sh clone_root     
password dosyaları güncellenir.

# sh clone_root all
komutu sunucudaki /etc/dizininin kopyasını alır.
Dolayısıyla terminal ayarları sunucu ile aynı olur.
 
# cd /usr/diskless_root/conf/
# mv etc.cpio.gz etc.cpio.gz.old

Terminallerdeki ortak ayarlar için dizin oluşturulur.

 # cd /usr/diskless_root/conf/
 # mkdir -p default/etc/

 Teminallerin göreceği dizinler

/usr/diskless_root                  dizinini nfs kök dizin olarak alırsak
/conf/base/                              ayarlar için bakılacak ilk dizin
/conf/default                           ayarlar için bakılacak ikinci dizin
/conf/${ipba}                          yayın adresine göre değiştirilebilir
/conf/${ip}                               IP adresine göre bakılacak dizin

Terminal açılırken sırayla bu dizinlere bakar. Enson bakılan ayar geçerlidir.

fstab dosyası ayarı:

Bulunacağı dizin:
/usr/diskless_root/conf/default/etc/

İçeriği:

proc                                      /proc       procfs      rw     0 0
192.168.0.254:/usr               /usr         nfs            ro     0 0
192.168.0.254:/home           /home      nfs           rw     0 0


olmalıdır.

rc.conf ayarları:

/usr/diskless_root/conf/default/etc/rc.conf
dosyasında

sendmail_enable="NONE"

satırı ile sendmail çalıştırılmaz.

local_startup=""

satırı ile
/usr/local/etc/rc.d/  
dizinde yeralan uygulamaların çalışması engellenir.


X terminal ayarları

Terminallerin ekran kartı, monitor, mouse gibi aygıtları aynı olmayabilir.

Her terminal için ayrı bir XF86Config dosyasına ihtiyaç duyulur.
Bu dosyanın bulunacağı dizin:

/usr/diskless_root/conf/${ip}/etc/X11/

Örnek:
/usr/diskless_root/conf/192.168.0.1/etc/X11

XDM ayarları:
/usr/X11R6/lib/X11/xdm/ dizinindeki
xdm-config dosyasında

DisplayManager.requestPort: 0

satırının başına ! konur.
Xaccess dosyasında

#*                                  #any host can get a login window
#*   CHOOSER BROADCAST   #any indirect host can get a chooser

satırlarının başındaki # kaldırılır.


KDM ayarları

KDM için:

/usr/local/share/config/kdm/default/kdmrc

 dosyasında

Enable=true
Port=177

değişiklikleri yapılır.

GDM için benzeri değişiklikler
/usr/X11R6/etc/gdm/gdm.conf
dosyasında yapılabilir.

X sunucuyu başlatmak

/etc/ttys dosyasındaki

ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off  secure
satırı
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   on  secure

ile değiştirilir.
sistem ya kapatılıp açılır,
ya da
init programına yeniden başla sinyali gönderilir.
# kill -s HUP 1

X terminallerin bağlanması

Terminaller açıldıktan sonra X sunucuya bağlanmak için:

$ /usr/X11R6/bin/X -query the.remote.host
$ /usr/X11R6/bin/X -indirect the.remote.host
$ /usr/X11R6/bin/X -broadcast

komutlarından biri kullanılır.
İlk komut ile doğrudan bağlanılır.
İkincisi ile belirtilen bakine isimlerine dolaylı olarak bağlanılır.
Üçüncüsü ile ilk cevap verene bağlanılır.

Güvenlik

Bu amaçla kullanılacak bir sunucuda en az iki ethernet olmalı, biri terminallere diğeri de Internete bağlanmalıdır.
Üzerinde bir firewall (ipfw, ipfilter, pf) çalışmalı ve
terminallere hizmet amacıyla açılmış portlar Internete kapatılmalıdır.
Bu portlar:
dhcp:67, 68
tftp: 69
nfs: 2049
portmap: 111
mountd: 603, 796
rpc.stat: 656, 743
xdm: 177, 3685
Xfree86: 6000

Kaynaklar:

1. man diskless
2. more /usr/share/examples/diskless/clone_root
3. more /etc/rc.diskless1
4. more /etc/rc.diskless2
5. FreeBSD Handbook
/usr/share/doc/handbook/index.html
6. Etherboot
http://www.etherboot.org/

NOT: Bu dökümana
http://www.tasarruf.net/dokuman/terminal_server.html
http://www.enderunix.org
http://izmirunix.deu.edu.tr/seminer/terminal_server.html
adreslerinden ulaşabilirsiniz.

Devrim Sipahi
devrim@tasarruf.net