top
logo


Вариант создания собственного терминального клиента. (xterm linux dhcp initrd boot diskless pxe) PDF Печать E-mail
07.12.10 14:31

Вариант создания собственного терминального клиента. (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г.



rc.sysinit:

#!/bin/sh
#
# Terminal Linux
# Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
#
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

источник:
http://www.kumanov.com/software/terminal_client.html
Последнее обновление 08.12.10 11:00
 
Интересная статья? Поделись ей с другими:

bottom

 

Unreal Commander PfSense по русски Яндекс.Метрика