Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  CVSup
  начальная настройка
  Установка FreeBSD
  DUMMYNET
  Сборка ядра
  IPFW
  portupgrade
  обновление
  portsnap
  CP1251 на FreeBSD
  loader.conf
  defaults/rc.conf
  jail
  Ntpdate/Ntpd
  diskless
  Обновление мира ("world")
  PBR & PF
  bsnmpd
  newsyslog
  if_bridge
  make.conf
  PBR & IPFW
  Работа с HDD
  sshd & AD
  Удаленное разбиение HDD
  Заметки об IPFW
  FreeBSD на VDS
  CVSUP и софт через Proxy
  i386=>amd64
  ALTQ в IPFW
  Виртуальный свитч
  VPN сервер по средствам mpd5.
  NTP
  sysupdate
  mpd5 L2TP
  freebsd + webcamera
  IPFW policy (PBR)
  RAID1 via LAN
  зеркальный RAID1 на ОС FreeBSD
  4.x => 7.x
  portdowngrade
  Быстрое обновление портов
  Подробное руководство по ipfw nat
  ng_bridge
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco
www.lissyara.su —> статьи —> FreeBSD —> настройка —> diskless

Тонкие клиенты под FreeBSD

Автор: lissyara.


    Почти три года назад, я написал статью о создании тонких клиентов (бездисковые машины с загрузкой по сети) под FreeBSD. С той поры утекло много воды, из той организации я уволился, на новом месте этого не потребовалось. А вот на старом - первые-вторые пеньки продолжали работать, и есть не просили =)
   Так получилось, что в ту контору я вернулся, приходящим админом - между моими приходами там успело смениться три или четыре администратора - раскурочили всё что смогли, не считая пары серверов, в том числе и того с которого грузились тонкие клиенты. Стрёмно, видать - на нём висела почти вся контора =) После нескольких месяцев разгребания, восстановления и обновления добрался и до тонких клиентов. За прошедшее время появилось много новых и хороших идей у меня, ещё больше хорошего воплотили разработчики FreeBSD.

   Немного теории. Дано - куча старых тазиков, типа пни первые-вторые-третьи, без хардов, с количеством RAM около 64Mb (+64/-16). На первых пеньках стоят сетевухи с поддержкой загрузки по сети - PXE (fxp/xl). В BIOS вторых-третьих пней зашит загрузчик для сетеых карт типа RTL8139[a/b/c/d]. Машинки будут стягивать по TFTP загрузчик, он, уже по NFS будет вытаскивать ядро, модули и параметры. После загрузки ОС, запускаются иксы и rdesktop - подключаемся к виндовому терминал-серверу.
   Дополнительные задачи, которые не были реализованы вообще, или реализованы криво в предыдущей версии - корректное монтирование/отмонтирование флэшек на ходу, проброска звука из терминальной сессии на локальную машину, и, самое главное - возможность запуска X-сервера без конфигурационного файла - ибо именно прописывание разрешения, частоты развёртки, и т.п. для Win-админов было самым сложным.

   Итак, собирать будем на базе FreeBSD 7.2. Особенных требований к машине, откуда всё это грузиться будет, нет. Тока чтоб сама смогла загрузиться, да и всё =)) Чтоб меньше елозила диском, при работе и раздаче по сети файловых систем - побольше рамы (хотя бы 256Mb) - всё влезет в кэш, и к диску будет минимум обращений.
   Готовим машину для раздачи файловых систем по NFS и TFTP. Прописываем запуск NFS-сервера:
router$ grep --after-context=4 NFS /etc/rc.conf
# NFS
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 40"
rpcbind_enable="YES"
nfs_client_enable="YES"
router$  

   Прописываем файловые системы, расшаренные по сети:
router$ cat /etc/exports
# То, что расшариваем по NFS
#/usr/ports/distfiles -maproot=root -network 192.168 -mask 255.255.0.0
/usr/ports /usr/src  -maproot=root -network 192.168 -mask 255.255.0.0
#/pxeroot -maproot=root -network 192.168 -mask 255.255.0.0
#/usr/src -maproot=root -network 192.168 -mask 255.255.0.0
/shares/tftp/7.2/eliron -maproot=root -ro -network 192.168 -mask 255.255.0.0

router$  

   Раскомментируем, и немного подправляем строки запуска tftpd через inetd:
router$ grep shares /etc/inetd.conf
tftp dgram  udp wait   root /usr/libexec/tftpd tftpd -l -s \
/shares/tftp/7.2/eliron -u root
tftp stream tcp nowait root /usr/libexec/tftpd tftpd -l -s \
/shares/tftp/7.2/eliron -u root
router$

   Не забываем запустить сам inetd:
router$ grep inetd /etc/rc.conf
inetd_enable="YES"

   Прописываем запуск DHCP-сервера (у меня DHCP сервер (isc-dhcp30-server) находиться на этой же машине, у вас может находиться на другой):
router$ grep --after-context=5 DHCPd /etc/rc.conf
# DHCPd
dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
#dhcpd_ifaces="fxp0 dc0 sk0"
dhcpd_ifaces="fxp0 sk0"
#dhcpd_flags="-d "
router$

   У меня, настройки для заданной сети выглядят в dhcpd.conf примерно так:
subnet 192.168.110.0 netmask 255.255.255.0 {
        range 192.168.110.1 192.168.110.199;
        option routers 192.168.110.254;
        option subnet-mask 255.255.255.0;
        option netbios-name-servers 192.168.0.19, 192.168.0.251;
        option netbios-dd-server 192.168.110.253;
        option netbios-node-type 8;
        option broadcast-address 192.168.110.255;
        option ntp-servers 192.168.0.253;
        next-server 192.168.110.254;
#       option root-path "192.168.130.254:/shares/tftp/4.11/gp";
        option root-path "192.168.110.254:/shares/tftp/7.2/eliron";
        filename "/boot/pxeboot";
        option domain-name-servers 192.168.0.19;
        option domain-name "grand-prix";
        option domain-name-servers 192.168.0.251, 192.168.0.19;
        }

   Заливаем сорцы (csup) выбранного релиза, и собираем мир и ядро в директорию, которая будет расшарена по NFS/TFTP, устанавливаем системные конфиги:
router$ mkdir -p /shares/tftp/7.2/eliron
router$ cd /usr/src/
router$ make buildworld && make buildkernel && make installworld \
? DESTDIR=/shares/tftp/7.2/eliron && make installkernel \
? DESTDIR=/shares/tftp/7.2/eliron && \
? make distribution DESTDIR=/shares/tftp/7.2/eliron

   После сборки мира и ядра, монтируем по nullfs порты и исходные коды ядра, относительно корневой директории будущих тонких клиентов:
router$ mount -t nullfs /usr/ports /shares/tftp/7.2/eliron/usr/ports
mount: /shares/tftp/7.2/eliron/usr/ports: No such file or directory
router$ mkdir -p /shares/tftp/7.2/eliron/usr/ports
router$ mount -t nullfs /usr/ports /shares/tftp/7.2/eliron/usr/ports
router$ mount -t /usr/src /shares/tftp/7.2/eliron/usr/src/

   Также, монтируем файловую систему устройств (понадобиться при сборке некоторых портов):
router$ mount -t devfs devfs /shares/tftp/7.2/eliron/dev

   Сразу же, копируем некоторые файлы, которые нам понадобяться при дальнейшей работе - или для удобства дальнейшей работы:
router$ cp /root/.cshrc  /shares/tftp/7.2/eliron/root/

   И рисуем конфиги - резольвера:
router$ cat /shares/tftp/7.2/eliron/etc/resolv.conf
search  grand-prix
nameserver 192.168.0.251
nameserver 192.168.0.19

router$   

   Системного файла сборочной информации - make.conf:
router$ cat /shares/tftp/7.2/eliron/etc/make.conf

# kernel config
KERNCONF=NFSBOOT

# added by lissyara 2007-07-19 in 01:08
PORTSDIR?=      /usr/ports

.if ${.CURDIR} == ${PORTSDIR}/mail/exim
# Дефолтовая кодировка заголовков
WITH_DEFAULT_CHARSET?=  koi8-r
# Отключаем IPv6
WITHOUT_IPV6=           yes
# Версия BDB - в чём ведёт свои БД подсказок
WITH_BDB_VER=           1
# Подержка перекодировки (для заголовков)
WITH_ICONV=             yes
.endif

# vim
.if ${.CURDIR} == ${PORTSDIR}/editors/vim
WITHOUT_X11=yes
NO_GUI=yes
.endif

# GD
.if ${.CURDIR} == ${PORTSDIR}/graphics/gd
WITH_ICONV=yes
.endif

# rdesktop
.if ${.CURDIR} == ${PORTSDIR}/net/rdesktop
WITH_ICONV=     yes
.endif

router$

   Собственно, на этом моменте я попробовал загрузить одну машину с новой фрёй, но - обломался =) Я собрал GENERIC ядро, а оно по сети не грузиться =) Поэтому, чуть ниже будет ещё одна пересборка ядра, уже из chroot.

   Теперь можно делать chroot в корневую директорию тонких клиентов, и собирать необходимый софт:
router$ chroot /shares/tftp/7.2/eliron
router$

   Ставим rdesktop - для подключения клиента к виндовому серверу терминалов:
router$ setenv BATCH yes
router$ cd /usr/ports/
router$ make -C net/rdesktop install clean

   Иксы - полностью:
router$ make -C x11/xorg install clean

   Ставим monitord - он будет отслеживать падения rdesktop и перезапускать его при необходимости:
router$ make -C sysutils/monitord install clean

   Где-то между делом - пока собираются порты - пересобираем ядро (это я пересобирал - а вы могли просто не собирать на этапе инсталляции клиента). Рисуем конфиг для ядра - оно мало отличается от GENERIC:
router$ mkdir -p /root/scripts
router$ cd /usr/src/sys/i386/conf/
router$ ln -s /root/scripts/NFSBOOT
router$ cat /root/scripts/NFSBOOT
# thin clients kernel config

include GENERIC

ident           NFSBOOT-GENERIC

# цвет консоли - кому как удобней, и буфер консоли
options         SC_NORM_ATTR=(FG_GREEN|BG_BLACK)
options         SC_KERNEL_CONS_ATTR=(FG_RED|BG_BLACK)
options         SC_HISTORY_SIZE=2022
# как раз опции для поддержки бездисковых клиентов
options BOOTP
options BOOTP_NFSROOT
options BOOTP_COMPAT

router$   

   Также, пишем такие конфигурационные файлы/скрипты - для старта/работы тонкого клиента. Для начала реализуем монтирование/отмонтирование флэшек в тонких клиентах - через devd:
router$ diff -Nru /etc/devd.conf  /etc/devd.by.lissyara.conf
--- /etc/devd.conf      2009-07-22 18:01:02.000000000 +0000
+++ /etc/devd.by.lissyara.conf  2009-07-22 21:01:02.000000000 +0000
@@ -325,3 +325,16 @@
        action                  "/etc/acpi_ac $notify";
 };
 */
+
+# added by lissyara 2009-07-02 in 10:45 MSK
+# if inserted flash - mount it
+attach 100 {
+       device-name "umass[0-9]+";
+       action "/root/scripts/mount.da0.sh &";
+};
+# if usb flash removed - force umount it
+detach 100 {
+       device-name "umass[0-9]+";
+       action "/root/scripts/umount.da0.sh &";
+};
+
router$   

   Собственно, скрипт монтирования - не забываем сделать исполняемым:
router$ more /root/scripts/mount.da0.sh
#!/bin/sh

# ждём устаканивания системы
sleep 2
# опции монтирования - шоп русские имена файлов показало
# и запись была синхронной
options="-o sync -L ru_RU.KOI8-R -D CP866"

# c флэшкой возможны два варианта - da0s1 и da0 - смотря как
# оно форматировалось. чаще всего первый, но попадается и второй
# добавлено через пару недель: попался и третий вариант =))
if test -r /dev/da0s1
then
        device="/dev/da0s1"
else
        if test -r /dev/da0s2
        then
                device="/dev/da0s2"
        else
                device="/dev/da0"
        fi
fi

# запускаем fsck - чтоб не материлось
/sbin/fsck_msdosfs -y -p $device
# монтируем флэшку
/sbin/mount_msdosfs $options $device /mnt
# через пару секунд рестартуем hald - бывает виснет =(
sleep 2 && /usr/local/etc/rc.d/hald restart &
# запускаем sync раз в секунду
/root/scripts/sync.sh &

router$  

   Кладём файл делающий sync раз в секунду:
router$ more /root/scripts/sync.sh
#!/bin/sh

echo $? > /tmp/sync.pid

while true
do
        sync
        sleep 1
done

router$  

   Скрипт выполняющий отмонтирование:
router$ more /root/scripts/umount.da0.sh
#!/bin/sh

# на всякий случай
sync
# принудительно отмонтируем флэшку
umount -f /mnt &
# ждём пару секунд
sleep 2
# убиваем скрипт выполняющщий синхронизацию
kill `cat /tmp/sync.pid`
# рестартуем hald
/usr/local/etc/rc.d/hald restart

router$   

   Рисуем главный конфигурационный файл системы - rc.conf:
router$ cat /etc/rc.conf
# rc.conf

# Русский язык в консоли
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"
scrnmap="koi8-r2cp866"

# Убираем запуск sendmail (я вообще поставил на тонких клиентов exim :))
sendmail_enable="NONE"
sendmail_submit_enable="NO"
exim_enable="YES"
exim_flags="-q60m -oP /var/run/exim.pid"

# имя хоста
hostname="thin-client"

# rootfs in read-only
root_rw_mount="NO"
# чтоб не пытался сохранять энтропию в файл
entropy_file="NO"
# файл с hostid
hostid_file="/tmp/hostid"
# чтоб не обновляло сообщение дня
update_motd="NO"
# нет устройств для дампа
dumpdev="NO"

# мышь
moused_enable="YES"
# var on memory
varmfs="YES"
varsize="2m"
populate_var="YES"
# tmp on memory
tmpmfs="YES"
tmpsize="1m"

# ssh
sshd_enable="YES"
# на всякий случай - вдруг хард подключу =)
fsck_y_enable="YES"

# hald and other
gnome_enable="YES"
hald_enable="YES"
#hald_flags="--verbose=yes --daemon=no"
dbus_enable="YES"
polkitd_enable="YES"

# start X trough monitord(8)
#monitord_enable="YES"

# указываем свой конфиг вместо штатного
devd_flags="-f /etc/devd.by.lissyara.conf"

# пара задумок на будущее. ещё года через три реализую =)
# BlueTooth
#hcsecd_enable="YES"
#
#fusefs_enable="YES"


# bugs =)
mkdir -p /var/cache/hald/                               >/dev/null 2>&1
mkdir -p /var/run/PolicyKit                             >/dev/null 2>&1
/usr/sbin/chown :polkit /var/run/PolicyKit              >/dev/null 2>&1
/bin/mkdir -p /var/lib/misc                             >/dev/null 2>&1
/usr/bin/touch -f /var/lib/misc/PolicyKit.reload        >/dev/null 2>&1
/usr/sbin/chown :polkit /var/lib/misc/PolicyKit.reload  >/dev/null 2>&1
/bin/chmod 0664 /var/lib/misc/PolicyKit.reload          >/dev/null 2>&1
mkdir -p /var/log/exim                                  >/dev/null 2>&1
/usr/sbin/chown 26:6 /var/log/exim                      >/dev/null 2>&1

   По последней секции - пара пояснений. Все указанные директории, права, и владельцы выдернуты из инсталляционных скриптов 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://forum.lissyara.su/viewtopic.php?t=19300.

размещено: 2009-08-18,
последнее обновление: 2010-01-08,
автор: lissyara

оценить статью:




Хостинг HOST-FOOD


2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3

Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2

Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP.
2010-03-01, BlackCat
Шлюз: Часть 1

Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat

Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat

Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills

Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS

Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs

Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD

Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC

Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
Подробное руководство по ipfw nat

Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot

Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless

Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение

Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга

Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff

Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа

Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
2009-06-16, DNK
Exim+PgSQL

Установка почтовой системы exim+pgsql на FreeBSD 7.1
2009-05-30, mvalery
HDD(mbr) -> HDD(gpt)

Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
2009-05-22, Cancer
SendXMPP

Отправка сообщений на Джаббер сервер по средствам SendXMPP
2009-05-11, Raven2000
Network UPS Tools

Network UPS Tools представляет собой набор программ, которые обеспечивают общий интерфейс для мониторинга и администрирование UPS оборудования.
2009-04-29, m0ps
IPSEC over GRE with RIP

Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
2009-04-24, WhiteBear777
qemu network

Появилась необходимость поставить на БСД эмулятор(qemu) и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локалку и в сеть internet...
2009-04-22, vp
freebsd + huawei 162 gsm modem

В статье описывается простой способ подключения модема huawei 162 к freebsd + первичная настройка smstools
2009-04-12, mvalery
Мониторинг RAID

Мониторинг из командной строки RAID компаний AMCC 3ware, HighPoint, Dell (Perc 5/i и PERC 6/i) и LSI (MegaRAID SAS 8408E и SAS1078)
2009-04-09, texnotronic
RAID1 via LAN

Функциональности DRBD во FreeBSD можно добиться примонтировав блочное устройство по сети при помощи GEOM Gate (ggate) и добавив его в зеркало с локальным диском средствами gmirror.
2009-04-03, Raven2000
Оптимизация хоста для CMS

В последнее время на старый и не очень быстрый ПК (Celeron 800 RAM 256) мною было навешано с десяток сайтов и некоторые были из серии тяжелых CMS. И так нам дано FreeBSD 7.1 и ~10 сайтов/CMS.
2009-04-01, atrium
VSFTPD + AD && MySQL

Настройка самого безопасного сервера FTP - vsftpd.
2009-03-31, Dron
Peoplenet + C-motech (3G)

Описание подключения к сети Peoplenet посредством 3G модема С-motech CCu-650U на FreeBSD
2009-03-25, lissyara
mod_auth_external

mod_auth_external - авторизация пользователей в apache c помощью внешней программы - например, системных пользователей.
2009-03-24, gx_ua
Lightsquid

Частично lightsquid может заменить sams: быстрая и простая инсталляция, быстрый парсер, cgi скрипт для динамической генерации отчета, нет привязки к БД, различные графические отчеты, мультиязычный инт
2009-03-18, LHC
Установка Zabbix-1.6

Установка и первоначальная настройка системы мониторинга Zabbix (версия 1.6)
2009-03-16, Cancer
Принт-Сервер Samba+LPD & AD

Простейшая настройка Принт-Сервера на FreeBSD используя Samba+LPD & AD
2009-03-04, Mad_caterpillar
ipsec_vpnc

Настройка VPN IPSec концентратора на FreeBSD 6.2 для клиента cisco с использованием ipsec-tools и авторизацией в активной директории
2009-02-24, OzZy
Exilog

Exilog инструмент который позволяет красиво визуализировать, просматривать по разным фильтрам логи Exim через симпатишную веб-морду. Использует mysql (или postgresql при желании). Написан на perl.
2009-02-18, Andy
Free-SA

Программа анализирует log файлы Squid'а и формирует по ним отчет.
2009-02-02, Cancer
Openfire Jabber Server

Установка Jabber сервера на примере Openfire
2009-01-28, Cancer
mpd5 + сжатие и шифрование

Установка VPN сервера mpd5 + сжатие и шифрование
2009-01-26, vp
freebsd + webcamera

Подключение и настройка вебмкамеры для работы с freebsd на примере Logitech QCam STX
2009-01-10, Grishun_U_S
конфиг для офисов

В статье разбирается конфиг для офиса, пользователи которого имеют строгие ограничения по портам. Заворачиваем www трафик на транспарентный прокси, а остальное NAT'им. Эффективно делим канал интернет
2008-12-27, Storoge
sftp+chroot

Возникла необходимость дать возможность нескольким пользователям заливать на сервер контент для своих сайтов через sftp, чтобы при этом не страдала безопасность.
2008-12-13, Morty
PurefFTPd

Администрирование pureftpd-сервера с помощью вэб интерфейса Usermanager
2008-12-11, lissyara
termlog

Небольшая простая утилита, использующаяся для записи в файл всего что происходит на терминалах системы. Полезно, когда есть доступ по ssh у тех, кому не очень доверяете. Паранойя - это не плохо =)
2008-11-26, Cancer
SQUID+SAMS +Rejik-(LDAP)

Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
2008-11-22, dvg_lab
php5-oci8

Решение проблем segmentation fault (core dumped) при работе с oracle8-client и php5-oci8
2008-11-21, m0ps
NTP

Пример настройки NTP сервера для локальной сети и клиента, для синхронизации времени с локальный NTP сервером. Обновление ntpd из портов.
2008-11-20, Cancer
SQUID+SAMS +Rejik-(NTLM)

Установка Прокси сервера SQUID с аутентификацией по NTL с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf, РЕЖИК собственно рубит банеры и запрещает пользователям хо
2008-11-20, mak_v_
Hotspot

Настройка безпроводной точки доступа (WiFi) на freebsd
2008-11-12, Shaman
Enemy Territory

Появилась у меня такое желание поднять сервер Enemy Territory. Поискал погуглил, ничего толкового не нашел пришлось все самому делать. И вот решил поделиться опытом. Начинаем......
2008-11-11, lissyara
Samba+ NT ACL

Использование vfs самбы - модули full_audit и recycle. Настройка для использования в качестве файлопомойки с 500+ одновременно работающих юзеров. Раздача прав через нативный виндовый интерфейс.
2008-11-11, Raven2000
Upgrading OpenBSD

Сегодня мы будем обновлять OpenBSD. Систему необходимо поддерживать в актуальном виде и следить, чтобы все работало, как часы и все дырки были залатаны до прихода врага =)
2008-11-10, lexy
SMSTools 3

Как автоматизировать отправку и обработку входящих сообщений при помощи мобильного телефона, датакабеля и компа
2008-11-06, Cancer
Asterisk IP PBX

Установка VoiP сервера Asterisk IP PBX для соединения двух шлюзов и АТС
2008-10-30, atrium
Samba & CUPS & AD & ACL

Настройка Samba в роли доменного файл-сервера, и CUPS в роли принт-сервера для Windows клиентов
2008-10-17, Raven2000
src & ports

Конечно, в OpenBSD система портов никогда не сможет быть полной сравнение с той же системой во FreeBSD. Связано это с тем, что разработчики включают в порты лишь те приложение которые протестированн
2008-10-13, Morty
Mysql - базовое описание

Базовое описание и принципы работы с MySQL
2008-10-10, Cancer
exim&dovecot + fetchmail + SSL

Exim & Dovecot + Postfixadmin & Roundcube + Fetchmail & smtp_relay С возможностью отправлять письма через смтп релей провайдера. С использование SSL шифрование: POP3s IMAPs sSMTP
2008-10-09, m0ps
Дополнительные порты для роутера

Увеличение количества Ethernet портов маршрутизатора за счет свободных портов коммутатора пробросив vlan с сабинтерфейса роутера на интерфейс коммутатора.
2008-10-06, princeps
Bacula

Настройка сервера системы резервного копирования Bacula на FreeBSD для бэкапов FreeBSD и Windows машин
2008-10-02, zheromo
Postfix + DBMail

Создание почтовой системы на основе Postfix + DBMail + SASL2 + TLS + DSpam + ClamAV + RoundCubeWebMail
2008-10-02, Cancer
SugarForge CRM

SugarForge CRM предоставляет подавляющее большинство функциональных возможностей CRM систем
2008-09-12, arksu
ng_ipacct + squid

Подсчет трафика с помощью ng_ipacct. Связка ng_ipacct + squid + парсер логов + авторизатор + nginx + mysql и куча служебных скриптов для работы всей системы.
2008-09-03, Raven2000
GLPI

Мне надо было найти замену существующей программы инвентаризации, чтобы за компьютерами, принтерами, картриджами, лицензиями и тп был учет. Желательно с дополнительными бонусами типа системы подачи...
2008-09-03, salimk
POWERDNS

Статья о том как мигрировать с DNS сетвера ISC Bind на POWERDNS
2008-09-03, DNK
Rinetd

Редирект TCP портов с помощью утилиты rinetd - просто до безобразия - само прилодение простое, конфиг в одну строчку - что ещё надо для счастья? =)
2008-09-03, L!Ner
eGroupWare

Это сервер групповой работы. Он укомплектован собственным веб-интерфейсом, который обеспечивает доступ к вашим данным с любой платформы по всей планете.
2008-08-30, jafff
MAC адрес

У девайса VoIP Planet VIP-000 слетел MAC адрес и стал FF-FF-FF-FF-FF-FF, как я его востанавливал
2008-08-30, Morty
clonehdd

Перенесение, бэкапирование HDD,легко и просто
2008-07-31, Raven2000
Proxy Auto Configuration

Возникла необходимость автоматически настраивать прокси для всех компов и не бегать например если поменялось что-то на сервере прокси. Для этого давно существует технология Proxy Auto Configuration.
2008-07-29, f0s
NNTP сервер

Конфигурирование собственного NNTP-сервера.
2008-07-28, Al
spamooborona

настройка yandex spamooborona в качестве smtp-proxy для работы с exim
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 51 чел.
За последние 30 мин было: 300 человек
За сегодня было
23211 показов,
3000 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.3555 секунд
Из них PHP: 53%; SQL: 47%; Число SQL-запросов: 81 шт.
Исходный размер: 195927; Сжатая: 36939