Документация по ОС FreeBSD Суббота, 18.05.2024, 20:13
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

thin2 Часть 2 [2009]

По последней секции - пара пояснений. Все указанные директории, права, и владельцы выдернуты из инсталляционных скриптов dbus, hald и прочей хиромантии. На тонком клиенте раздел /var создаётся в памяти, и, разумеется, там указанные директори отсутствуют. Конечно, можно было поправить файл /etc/mtree/BSD.var.dist. Тока лениво, да и при обновлениях придётся его снова править. Так проще и надёжней =)
   Создаём файл монтирования файловых систем - fstab следующего содержания:
router$ cat /etc/fstab
# fstab for diskless clients
# Device Mountpoint FStype Options Dump Pass#
192.168.110.254:/shares/tftp/7.2/eliron / nfs ro 0 0
#192.168.110.254:/usr/ports /usr/ports nfs rw 0 0
proc /proc procfs rw 0 0
tmpfs /etc/X11 tmpfs rw 0 0

router$

   Опять же - пара пояснений - procfs используется monitord(8), для отслеживания работы приложений. Файловая система в памяти - tmpfs, с любопытной точкой монтирования, используется для хранения конфигурационного файла X-сервера - когда его приходиться запускать с ним (последние иксы достаточно умные, чтобы в 80% случаев работать вообще без конфигурационного файла).
   Создаём конфиг для monitord, следующего содержания:
router$ more /usr/local/etc/monitord.conf
#
# my email (only for test, after - to /dev/null)
#email = root
#smtp-server = localhost

# user options delay service start script parameters
# up X
root auto 10 rdesktop /root/scripts/rdesktop.sh

router$

   Пишем скрипт инициализации тонкого клиента, и делаем его исполняемым:
router$ cat /usr/local/etc/rc.d/start.thin.client.sh
#!/bin/sh

# conf
domain="grand-prix"
mac_addr_file="/tmp/mac.addr.txt"
user_settings_dir="/root/scripts/thin_configs"


PATH="/sbin:/bin:/usr/sbin:/usr/bin:\
/usr/local/bin:/usr/local/sbin"


# Если завершение работы - ничё не делаем.
case "$1" in
stop)
# нихрена не делаем :)
# Просто, без этого пункта, при остановке тонкого клиента,
# снова запускаются иксы
;;

# Если старт - запускаем rdesktop
start)
# start monitord
sleep 5 && /usr/local/etc/rc.d/monitord forcestart &
# start dhclient
# for iface in `ifconfig -l`
# do
# /etc/rc.d/dhclient start $iface
# done
# синхронизация времени
ntpdate -b $domain &
# get user MAC adderess
client_mac=`ifconfig | grep ether | awk '{print $2}' | \
tr -d ":" | tail -1`
# save MAC to /tmp - for configuration X server
echo $client_mac > $mac_addr_file
# достаём персональный конфиг пользователя - если он есть.
if [ -s ${user_settings_dir}/${client_mac}.conf ]
then
. ${user_settings_dir}/${client_mac}.conf
else
. ${user_settings_dir}/defaults.conf
fi

# set hostname
hostname ${user_name}.${domain}

# set volume to maximum
for mix in `mixer | grep currently | awk '{print $2}'`
do
mixer $mix 100:100
done

;;

# справка по использованию
*)
echo ""
echo "Usage: `basename $0` { start | stop }"
echo ""
exit 64
;;
esac

router$

   Создаём стартовый скрипт для rdesktop - его задача - запуск иксов с нужными параметрами:
router$ cat /root/scripts/rdesktop.sh
#!/bin/sh

# conf
domain="grand-prix"
mac_addr_file="/tmp/mac.addr.txt"
user_settings_dir="/root/scripts/thin_configs"
usb_flash="NO"

PATH="/sbin:/bin:/usr/sbin:/usr/bin:\
/usr/local/bin:/usr/local/sbin"

client_mac="`cat $mac_addr_file`"

# достаём конфиги юзера
if [ -s ${user_settings_dir}/${client_mac}.conf ]
then
. ${user_settings_dir}/${client_mac}.conf
else
. ${user_settings_dir}/defaults.conf
fi

# проверка - надо ли флэшку
if [ $usb_flash = "YES" ]
then
part="-r disk:flash=/mnt"
else
part=""
fi

export DISPLAY=:0

# пишем конфиг .xinitrc
echo "exec sleep 5 && /usr/local/bin/setxkbmap \
-layout us,ru -variant ,winkeys -option grp:ctrl_shift_toggle &
exec /usr/local/bin/rdesktop -c /tmp -d $domain -n `hostname -s`-bsd \
-k en-us -f -L koi8-r -N \
-r sound:local $part -u `hostname -s` $ts" > /tmp/.xinitrc
# создаём конфиг для клавы
echo "-layout us,ru -variant ,winkeys \
-option grp:ctrl_shift_toggle" > /tmp/.Xkbmap
# назначаем хомяком /tmp
export HOME=/tmp

# рисуем конфиг иксов, если надо
. /root/scripts/create.xorg.conf.sh
# стартуем иксы
sleep 3 && /usr/bin/nice -n -20 /usr/local/bin/startx &

   Пишем скрипт для создания конфигурационнго файла X-сервера - если есть необходимость вручную выставить параметры (как уже упоминалось - в большинстве случаев, он сам корректно всё определяет):
router$ cat /root/scripts/create.xorg.conf.sh
#!/bin/sh

# set defaults, if not set
horiz_sync=${horiz_sync:-no}
vert_refresh=${vert_refresh:-no}
vga_driver=${vga_driver:-no}
resolution=${resolution:-no}

# need or not wrote config
if [ "$horiz_sync" != "no" \
-o "$vert_refresh" != "no" \
-o "$vga_driver" != "no" \
-o "$resolution" != "no" ]
then
# reset defaults
if [ "$horiz_sync" = "no" ]
then
horiz_sync="30.0 - 81.0" # for 1280x1024, LCD
fi

if [ "$vert_refresh" = "no" ]
then
vert_refresh="56.0 - 75.0" # for 1280x1024, LCD
fi

if [ "$vga_driver" = "no" ]
then
vga_driver="vesa"
fi

if [ "$resolution" = "no" ]
then
resolution='"1024x768"'
fi

cat /root/scripts/xorg.conf.tpl |\
sed -e "s/__horiz__/$horiz_sync/g" |\
sed -e "s/__vert__/$vert_refresh/g" |\
sed -e "s/__driver__/$vga_driver/g" |\
sed -e "s/__modes__/$resolution/g" > /etc/X11/xorg.conf

fi

router$

   Кладём шаблон конфигурационного файла иксов:
router$ cat /root/scripts/xorg.conf.tpl
#
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
ModulePath "/usr/local/lib/xorg/modules"
FontPath "/usr/local/lib/X11/fonts/misc/"
FontPath "/usr/local/lib/X11/fonts/TTF/"
FontPath "/usr/local/lib/X11/fonts/OTF"
FontPath "/usr/local/lib/X11/fonts/Type1/"
FontPath "/usr/local/lib/X11/fonts/100dpi/"
FontPath "/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
Load "extmod"
Load "record"
Load "dbe"
Load "glx"
Load "dri"
Load "dri2"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/sysmouse"
Option "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
#DisplaySize 340 270 # mm
Identifier "Monitor0"
HorizSync __horiz__ #30.0 - 81.0
VertRefresh __vert__ #56.0 - 75.0
# Option "DPMS"
EndSection

Section "Device"
Identifier "Card0"
Driver "__driver__"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
# SubSection "Display"
# Viewport 0 0
# Depth 15
# Modes __modes__
# EndSubSection
# SubSection "Display"
# Viewport 0 0
# Depth 16
# Modes __modes__
# EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
Modes __modes__
EndSubSection
EndSection

router$

   Кладём дефолтовый конфиг для тонких клиентов:
router$ mkdir -p /root/scripts/thin_configs/
router$ cat /root/scripts/thin_configs/defaults.conf
# thin clients configurations

# user name
user_name="change_user_name_in_config"
# terminal server
ts="TS2"

# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# use next variable only if incorrect display size, or no screen
# need set all options!
#
# Настройки иксов.
# Горизонтальная развёртка
# horiz_sync="30-200"
# Частота обновления кадров
# vert_refresh="60-100"
# Драйвер видеокарты
# vga_driver="vesa"
# Разрешение моника (именно в одинарных и двойных кавычках!!)
# resolution='"1024x768"'

router$

 Ну, и, наконец, кладём конфигурационный файл лоадера:
router$ cat /boot/loader.conf
# loader configuration

loader_logo="beastie"
autoboot_delay="2"

libiconv_load="YES"
#cd9660_iconv_load="YES"
msdosfs_iconv_load="YES"
#ntfs_iconv_load="YES"
#udf_iconv_load="YES"

tmpfs_load="YES"

drm_load="YES"

# sound
snd_driver_load="YES"
sound_load="YES"

router$

   Для корректной работы sshd необходимо сгенерить ключи. Проще всего это сделать прям в chroot:
router$ chroot /shares/tftp/7.2/eliron
router$ /etc/rc.d/sshd start; /etc/rc.d/sshd stop
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
ff:f8:5c:c7:20:02:c1:4f:0f:61:f0:51:25:7d:c6:eb root@router.local
The key's randomart image is:
+--[RSA1 1024]----+
| .o.+ooo.. |
| .+o. .. +|
| .o.o o.|
| .. . . |
| S . . o |
| . . . E |
| . . o|
| + . . |
| ..+ |
+-----------------+
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
9a:f7:6d:63:a3:d2:cb:5b:75:f0:f6:dd:0d:e1:8d:ea root@router.local
The key's randomart image is:
+--[ DSA 1024]----+
| |
| |
| o |
| . * |
| S = =|
| o o +=|
| o .. o =|
| ..o.+= |
| .**Eo |
+-----------------+
Generating public/private rsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
48:28:1d:27:8f:57:89:72:4d:0e:7c:78:ea:41:4c:f7 root@router.local
The key's randomart image is:
+--[ RSA 2048]----+
| o++=+. |
| ..BB==. |
| . ++++. E |
| . oo. |
| ...S |
| . |
| |
| |
| |
+-----------------+
Starting sshd.
sshd not running? (check /var/run/sshd.pid).
router$

   Вот и всё. Для работы машинке (тонкому клиенту) требуется около 64 метров памяти (у меня работали на 64+16 - на 64Mb иксы стартуют, но сразу же убиваются ядром - памяти мало, а иногда нормально запускались и работали на 64. Думаю, зависит памяти ушедшей на диски в памяти), процессор - наверно не важно какой - из тех тазиков что выжили есть первый пень на 233 чтоли мегагерца - загружается и работает. Грузиться чуть медленней, чем предыдущая версия, на базе 4.11 и XFree - но, это операция разовая. Перезапуск осуществляется быстрей, monitord в течение 10-15 секунд подымает иксы при падении. Если на тазике есть звуковушка - то звук с сервера пробрасывается на локальную машину, можно музычку послушать =))). За работу флэшек отвечает параметр
usb_flash="YES"

в конфигурационном файле каждого конкретного клиента. Без него - флэшка всё равно монтируется, но - в терминальную сессию диск не пробрасывается.

   Принцип работы - на старте системы запускается rc.d скрипт start.thin.client.sh. Он задёт имя хоста, запускает monitord (ну, до кучи выставляет звук на полную - бывает тихо он стоит и из терминалки это не поправишь).
   Далее, уже запущенный monitord видит, что приложение rdesktop не запущщено - соответсвенно, выполянет скрипт /root/scripts/rdesktop.sh. Он, считывает конфигурационный файл конкретной машины (имя файла состоит из MAC-адреса, типа 00c0265c5c15.conf), создаёт конфигурационные файлы - для запуска иксов - если надо, файл .xinitrc - c указанием что именно запускать X-серверу, и файл с указанием языковой раскладки клавиатуры - .Xkbmap. После всех подготовительных операций, запускаются иксы.
   При втыкании флэшки, происходит следующее - devd, заметив что что-то воткнули, и оно совпало с условием в его конфигурационном файле, выполняет указанный там скрипт - /root/scripts/mount.da0.sh. Скрипт проверяет флэшку при помощи fsck_msdosfs и монтирует её. При выдёргивании, всё тот же devd выполняет скрипт отмонтирвоания /root/scripts/umount.da0.sh. Юзеров лучше приучить чтоб ждали секунд несколько после того как записали чего-то. Данные целей будут.

   Ну, и, о грустном - куда ж без этого.
1. Забраковалось несколько старых машинок - после загрузки ядра, перед монтированием по NFS корневой файлвоой системы, лезет в консоль такое:
rl0: watchdog timeout

Никакие бубны с ручной раздачей прерываний и прочего непомогают. Помогает отключение acpi через лоадер - но, тогда теряется некоторый функционал, который тоже хотелось окучить - отключение в 10 вечера всех тазиков по планировщику =( Решается установкой нормальной сетевухи - типа fxp, xl, em и прочия. Все машины, на которых была такая бага, с материнками под SLOT1.
2. Кушают много рамы - старая версия требовала мегабайт 40 для работы. Впрочем - это расплата за возможность использовать USB мышки/клавы, и не париться с конфигурацией иксов - в подавляющем большинстве случаев. Минимум, на котором у меня заводилось (настройки по статье, вернее - статья с тех настроек =)) - это ~58 мегабайт (на машине 64 рамы, 8 отдано встроенной видеокарте).
3. Не получилось смонтировать корневую файловую систему в read-only режиме. Хоть ты тресни - пытается в rw монтировать, и монтирует. При этом не понимает что по NFS оно расшарено в режиме тока чтения - на клиентах показывает что оно якбы rw - но записать ничё не получается. Бага задокументирована. Ждём ответа.

   Вроде всё. Ушло - вечер на работу - скрипты писал пока компилялось, полчаса на отладку, и два дня на написание статьи =)



Источник: http://www.lissyara.su/?id=1264
Категория: Net | Добавил: oleg (12.08.2009) | Автор: lissyara
Просмотров: 523 | Рейтинг: 5.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024