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