RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
По последней секции - пара пояснений. Все указанные директории, права, и владельцы выдернуты из инсталляционных скриптов dbus, hald и прочей хиромантии. На тонком клиенте раздел /var создаётся в памяти, и, разумеется, там указанные директори отсутствуют. Конечно, можно было поправить файл /etc/mtree/BSD.var.dist. Тока лениво, да и при обновлениях придётся его снова править. Так проще и надёжней =) Создаём файл монтирования файловых систем - fstab следующего содержания:
Опять же - пара пояснений - 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$
Пишем скрипт инициализации тонкого клиента, и делаем его исполняемым:
# Если завершение работы - ничё не делаем. 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
# рисуем конфиг иксов, если надо . /root/scripts/create.xorg.conf.sh # стартуем иксы sleep 3 && /usr/bin/nice -n -20 /usr/local/bin/startx &
Пишем скрипт для создания конфигурационнго файла X-сервера - если есть необходимость вручную выставить параметры (как уже упоминалось - в большинстве случаев, он сам корректно всё определяет):
# 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
# 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
Для корректной работы 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 - но записать ничё не получается. Бага задокументирована. Ждём ответа.
Вроде всё. Ушло - вечер на работу - скрипты писал пока компилялось, полчаса на отладку, и два дня на написание статьи =)