Вариант создания собственного терминального клиента. (xterm linux dhcp initrd boot diskless pxe)
 
Ключевые слова:  xterm , linux , dhcp , initrd , boot , diskless , pxe ,  (найти похожие документы )From: Андрей <sandysandy at rambler.ru> 
Newsgroups: opennews 
Date: Mon, 27 Apr 2004 14:31:37 +0000 (UTC) 
Subject: Вариант создания собственного терминального клиента. http://andrek.ipsp.ru/ 
            Вариант создания собственного терминального клиента.
1. Ядро, минимум опций которые я использовал:
   - тип процессора 386
   - Networking support
   - шина PCI
   - тип бинарников ELF
   - RAM диск
   - initrd
   Сетевые опции
    - packet socket
    - socket filtering
    - unix domain sockets
    - tcp networking
    - ip kernel level autoconfiguration
    - ip dhcp support
   Драйвера сетевых адаптеров
   - Virtual terminal
   - Support for console on virtual terminal
   - Standart generic serial port
   - Mouse support
   - PS/2 mouse
   - /proc file system support
   - second extended fs support
   - vga text console
2. В сети настроены и работают сервисы dhcp и dns.
   Так же необходимы работающие сервер шрифтов xfs и tftp для загрузки
   образа ядра по сети.
   Дополнительная настройка dhcpd.conf, добавляем параметры:
       allow booting;
       allow bootp;
       filename "pxelinux.0";
   Файл pxelinux.0 берется из пакета syslinux.
   Настройка xfs сводится к закоментированию параметра no-listen = tcp в
   файле /etc/X11/fs/config и перезапуска сервиса.
   Этапы процесса загрузки:
   - инициализация PXE
   - подключение к DHCP
   - загрузка загрузка pxelinux.0 чтение конфига и загрузка ядра и образа initrd
   - инициализация сетевого интерфейса
   - монтирование root фс
   - запуск /sbin/init
   - запуск скрипта инициализации rc.sysinit (http://andrek.ipsp.ru/rc.sysinit )
       * монтирование /proc
       * установка hostname (term-ip address)
       * определение системных параметров через /proc/cmdline
       * генерация  /etc/resolv.conf
       * определение видеокарты через /proc/pci
       * генерация /etc/X11/XF86Config
       * запуск X + rdesktop
3. Образ корневой фс собран на базе RedHat72, glibc-2.2.4.
   Стандартный набор XFree86 был слишком раздут. Пришлось собирать, в
   исходниках был только XFree86-4.4.0.
   Использовался host.def
       #define LinuxDistribution LinuxRedHat
       #define XF86CardDrivers nv sis s3 s3virge trident via vesa
       #define DefaultCCOptions -O2 -mcpu=i386 -march=i386
       #define BuildFontServer no
       #define BuildFonts no
       #define BuildXKB no
       #define BuildDPMS no
       #define BuildServersOnly yes
   При компиляции, пару раз вылетало с ошибками, но достаточно
   заккоментировать строки с номерами ошибок, там в основном определения
   которые мы запретили.
   Cобрано со следующими драйверами (nv, riva128, s3, s3virge, sis,
   trident, via, vesa)
   Так же присутствует поддержка мыши и PS/2 и COM1.
   Поддержка сетевых адаптеров, выбирается при сборке ядра исходя из
   потребностей.
   Загрузить образ можно здесь http://andrek.ipsp.ru/initrd.gz  (4 Mb).
   Посмотреть список всех файлов (http://andrek.ipsp.ru/list.txt ).
   Следующие опции определены:
   NSERVER - ip адрес DNS сервера в сети, по умолчанию 192.168.1.100
   DOMAIN  - домен, по умолчанию domain
   XFSERVER - сервер шрифтов, по умолчанию xfs.$DOMAIN
   TSERVER - сервер терминалов, по умолчанию tserver.$DOMAIN
   VIDEODRIVER - принудительное выставление драйвера
   HSYN - параметр HorizSync, по умолчанию "31-55"
   VREF - параметр VertRefresh, по умолчанию "50-160"
   MODES - разрешение экрана, по умолчанию "800x600"
   Настройка PXE загрузчика сводится к определению файла для каждого
   сетевого адреса либо default.
   Пример 1.
   файл tftpboot/pxelinux.cfg/default
   label linux
   kernel bzImage
   append ramdisk_size=11000 initrd=initrd.gz root=/dev/ram0 NSERVER=192.168.1.1 DOMAIN=runet.ru
   ipappend 1
   Пример 2.
   файл tftpboot/pxelinux.cfg/С0A801B4 для клиента с адресом 192.168.1.180
   label linux
   kernel bzImage
   append ramdisk_size=11000 initrd=initrd.gz root=/dev/ram0 NSERVER=192.168.1.1 DOMAIN=runet.ru MODES=1024x768 HSYN=31-57 VREF=55-190
   ipappend 1
   С успехом загружался и работал на клиенте с 24Мб оперативной памяти.
   В собственном варианте добавил загрузку smbd и доступ по сети к
   дисководу.
   Вопросы и рекомендации можно отправлять на icq 62270603.
   Иркутск. 2004г.
[email protected] 
#
echo -n "Mounting /proc filesystem..."
mount -t proc /proc /proc
mount -o remount,rw /
echo "Ok"
CONFIG='/etc/X11/XF86Config'
if [ "`cat /proc/cmdline | grep NSERVER`" ]; then
    NSERVER="`cat /proc/cmdline | sed 's/.* NSERVER=\(\S*\) .*/\1/'`"
else
    NSERVER='192.168.1.100'
fi
if [ "`cat /proc/cmdline | grep DOMAIN`" ]; then
    DOMAIN="`cat /proc/cmdline | sed 's/.* DOMAIN=\(\S*\) .*/\1/'`"
else
    DOMAIN='domain'
fi
if [ "`cat /proc/cmdline | grep TSERVER`" ]; then
    TSERVER="`cat /proc/cmdline | sed 's/.* TSERVER=\(\S*\) .*/\1/'`"
else
    TSERVER="tserver.$DOMAIN"
fi
echo $TSERVER > /etc/TSERVER
if [ "`cat /proc/cmdline | grep TSERVER`" ]; then
    XFSERVER="`cat /proc/cmdline | sed 's/.* XFSERVER=\(\S*\) .*/\1/'`"
else
    XFSERVER="xfs.$DOMAIN"
fi
# resolv.conf
cat > /etc/resolv.conf << EOF
search $DOMAIN
nameserver $NSERVER
EOF
# up localhost
/sbin/ifconfig lo 127.0.0.1 up
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
# up hostname
A="`ifconfig eth0 | grep inet | cut -d: -f2 | cut -d' ' -f1 | cut -d. -f4`"
HOSTNAME="term-$A"
echo "Setting up hostname - $HOSTNAME"
hostname $HOSTNAME
VGA="`cat /proc/pci | grep VGA`"
echo 'Configure XFree86 Server'
echo -n '     Detecting video card - '
if [ "`echo $VGA | grep -i virge`" ]; then
   echo 'found S3 Virge driver.'
   VIDEODRIVER=s3virge
elif [ "`echo $VGA | grep -i savage`" ]; then
   echo 'found S3 Savage driver.'
   VIDEODRIVER=savage
elif [ "`echo $VGA | grep -i trio`" ]; then
   echo 'found S3 Trio driver.'
   VIDEODRIVER=s3
elif [ "`echo $VGA | grep -i trident`" ]; then
   echo 'found Trident driver.'
   VIDEODRIVER=trident
elif [ "`echo $VGA | grep -i sis`" ]; then
   echo 'found SIS driver.'
   VIDEODRIVER=sis
elif [ "`echo $VGA | grep -i via`" ]; then
   echo 'found VIA driver.'
   VIDEODRIVER=via
elif [ "`echo $VGA | grep -i nvidia`" ]; then
   echo 'found Nvidia driver.'
   VIDEODRIVER=nv
else
   echo 'not found. Use default - Vesa driver.'
   VIDEODRIVER=vesa
fi
if [ "`cat /proc/cmdline | grep VIDEODRIVER`" ]; then
    VIDEODRIVER="`cat /proc/cmdline | sed 's/.* VIDEODRIVER=\(\S*\) .*/\1/'`"
fi
if [ "`cat /proc/cmdline | grep MODES`" ]; then
    MODES="`cat /proc/cmdline | sed 's/.* MODES=\(\S*\) .*/\1/'`"
else
    MODES="800x600"
fi
if [ "`cat /proc/cmdline | grep HSYN`" ]; then
    HSYN="`cat /proc/cmdline | sed 's/.* HSYN=\(\S*\) .*/\1/'`"
else
    HSYN="31-55"
fi
if [ "`cat /proc/cmdline | grep VREF`" ]; then
    VREF="`cat /proc/cmdline | sed 's/.* VREF=\(\S*\) .*/\1/'`"
else
    VREF="50-160"
fi
# XF86Cofig
cat > $CONFIG << EOF
Section "Files"
	FontPath     "tcp/$XFSERVER:7100"
	RgbPath      "/usr/X11R6/lib/X11/rgb"
EndSection
Section "ServerLayout"
	Identifier     "Default Layout"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Mouse1" "AlwaysCore"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection
Section "InputDevice"
	Option	"XkbDisable"
	Identifier  "Keyboard0"
	Driver      "keyboard"
EndSection
Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "IntelliMouse"
	Option	    "Device" "/dev/ttyS0"
EndSection
Section "InputDevice"
	Identifier  "Mouse1"
	Driver      "mouse"
	Option	    "Protocol" "IMPS/2"
	Option	    "Device" "/dev/psaux"
	Option	    "ZAxisMapping" "4 5"
	Option	    "Emulate3Buttons" "no"
EndSection
Section "Monitor"
	Identifier   "Monitor0"
	HorizSync    $HSYN
	VertRefresh  $VREF
EndSection
Section "Device"
	Identifier  "Videocard0"
	Driver      "$VIDEODRIVER"
EndSection
Section "Screen"
	Identifier "Screen0"
	Device     "Videocard0"
	Monitor    "Monitor0"
	DefaultDepth   16
	SubSection "Display"
		Depth    16
		Modes    "$MODES"
	EndSubSection
EndSection
EOF
 
1 , andrek  (? ), 05:36, 17/11/2004  [ответить ]  
+ – 
ссылка http://andrek.ipsp.ru/term/ 
rdesktop из CVS умеет делать редирект дисков.