Ключевые слова:freebsd, x, xterm, (найти похожие документы)
From: Харун Даниил <[email protected]>
Subject: Создание бездисковых терминалов Windows RDP (Citrix ICA) на базе FreeBSD 5.0
Создание бездисковых терминалов Windows RDP (Citrix ICA) на базе
FreeBSD 5.0
Харун Даниил
[email protected]
28 апреля 2003 г.
Не секрет, что для любой организации, где используется большое
количество персональных компьютеров с операционной системой Microsoft
Windows, головной болью является поддержка программного обеспечения на
персональных компьютерах, восстановление после сбоев, вызванных
вирусами или неумелыми действиями пользователей, резервное копирование
пользовательских документов. Также высоки расходы на постоянную
модернизацию компьютеров под возростающие требования новых
операционных систем. В моем случае - это учебное заведение с
компьютерными классами и "дырявой" операционной системой Windows 95.
Выходом из создавшейся ситуации может стать перевод персональных
компьютеров в режим графических терминалов - тонкие клиенты.
В системе с использованием тонкого клиента по сети на сервер
передаются сигналы, отражающие нажатие на ту или иную клавишу либо то
или иное движение мыши. А сервер отображает соответствующие изменения
на дисплее. В роли клиента может выступать любой ПК, но, поскольку на
нем почти не выполняются операции по обработке данных, в качестве
тонких клиентов можно применять и недорогие терминалы, не содержащие
компоненты с движущимися частями (жесткие диски), оснащенные, как
правило, устройствами с весьма ограниченным объемом памяти (ОЗУ).
А если каждый клиент представляет собой обычный терминал, все данные и
параметры настройки - и даже прикладные программы - хранятся на
сервере, т. е. для того, чтобы скопировать все данные, имеющие
отношение к пользователям, достаточно сделать резервную копию
содержимого сервера. При восстановлении потерянных данных в такой
среде легче выполнять сеансы резервного копирования и управлять ими
централизованно.
Некоторые прикладные программы плохо приспособлены для типичной среды
клиент-сервер, но обычно это не самые важные для бизнеса и образования
программы, скажем потоковое видео и игры. В общем следует избегать
приложений, предполагающих интенсивные операции по перерисовке экрана,
таких, как Adobe Photoshop. То же можно сказать и о прикладных
программах с интенсивным использованием памяти и процессора. Как
правило, они снижают производительность системы до неприемлемого
уровня, ибо претендуют на те же ресурсы ЦП и памяти, что и другие
выполняемые на сервере приложения.
Существует немало готовых терминальных решений. Главенствующее
положение на рынке средств для платформы тонких клиентов по-прежнему
занимают фирмы Citrix (http://www.citrix.com/) и Microsoft - их совокупная доля
составляет 90% от общего объема продаж. Особенно сильны позиции этих
поставщиков в сегменте изделий для Microsoft Windows 2000. В качестве
терминалов можно применять оборудование Wyse (http://www.wyse.com/) или Acer.
(~350 $ без дисплея). В Массачусетсском Технологическом Институте разработана
клиент-серверная многооконная система X Window System (часто именуемую
X), работаюшая в UNIX-подобных системах. Компания Sun Microsystems (http://www.sun.ru/)
предлагает свое решение - Sun Ray (http://ru.sun.com/win/products/sunray/).
Но надо исходить из реалей. Благодаря Министерству Образования,
Министерству Путей Сообщения и российским "пиратам", повсюду засилье
Microsoft и смысл использования Sun Ray или X Window пропадает.
Стоимость лицензирования Citrix Metframe XP составляет 14 500 $ за 50
пользовательских лицензий. Причем приобретение лицензий не отменяет
необходимость приобретения лицензий Microsoft Windows CAL и Terminal
Service CAL.
Приемлемый вариант - использование терминального сервиса Microsoft
Windows 2000 Server по протоколу RDP 5. Стоимость лицензирования
составит примерно 1 200$ за 30 Open License CAL and terminal service
CAL. Но Microsoft предлагает только 32-х и 16-ти разрядные клиенты для
Windows, что увеличивает стоимость лицензирования. Существует
бесплатный неоффициальный клиент с открытыми исходниками для
Unix-систем - rdesktop (http://www.rdesktop.org/).
В моем случае уже были в наличии классы с устаревшими компьютерами, и
я остановился на ПК с сервером FreeBSD 5.0 и Windows 2000 Server.
В принципе, есть красивое решение на базе Linux - LTSP (http://www.ltsp.org/).
Но у меня уже был сервер с FreeBSD 5.0 и FreeBSD я знаю лучше, чем Linux.
В этой статье я не предендую на полноту и правильность изложения,
возможны ошибки. В работе я опирался на статью Олега Мухутдинова
(http://www.freebsd.org.ru/how-to/diskless/diskless.html) на
сайте http://www.freebsd.org.ru/ . Все описанное ниже касается
операционной системы FreeBSD версии 5.0.
Итак, начнем с клиентского оборудования. Если используем старые
персоналки - то это компьютеры с процессором не ниже i486 и с
оперативной памятью не ниже 16Мб. Все оборудование должно быть в
списке совместимости (файл HARDWARE.TXT на диске с дистрибутивом
FreeBSD). Сетевые адаптеры должны поддерживать спецификацию PXE.
FreeBSD поддерживает громадный список оборудования, поэтому я
понадеялся на "авось" и список совместимости даже не смотрел (это
неправильный подход). Также необходимо удостовериться, что X Server
будет работать с установленной видеоплатой.
В моем распоряжении были классы с компьютерами двух типов
конфигурации:
* Intel Pentium 150 МГц, ОЗУ 16 Мб, интегрированная видеоплата SiS
5598 (видеопамять адресует из системной), сетевая плата CNet Pro
200 (на чипе Davicom DM9102).
* Вторая конфигурация - персоналка на базе материнской платы VIA
EPIA mini-ITX с процессором VIA Eden≥ ESP 5000, интегрированный
сетевой адаптер VIA 10/100 Ethernet LAN, интегрированная AGP2X
графика с 2D/3D акселерацией (как оказалось, на чипе Trident Blade
3d). Плата устанавливалась в миниатюрный корпус VIA Cubic с
внешним импульсным источником питания. Этот компьютер абсолютно
бесшумен, так как в нем отсутсвуют вентиляторы и жесткий диск.
Встроенный сетевой адаптер поддерживает спецификацию PXE. На
компьютере было установлено 32 Мб оперативной памяти.
Настройка бездисковой станции
Сетевые адаптеры должны поддерживать спецификацию PXE. С VIA EPIA
проблем не возникло, т.к. адапер уже имеет поддержку PXE. Практически
любая сетевая плата имеет DIP-панельку для установки ПЗУ, на котором
прошивается программа для поддержки сетевой загрузки и программу можно
получить у саппорта производителя. В моем случае я просто приобрел
микросхемы ППЗУ с электрическим стиранием Winbond 27512 (емкостью 512
кбит) и прошил их на программаторе. Подробнее о бездисковой загрузке
можно прочитать на сайте http://remoteboot.narod.ru . Настройка
бездисковой станции сводится к установке сетевой карты с поддержкой
PXE, выбора метода загрузки в BIOS'е и установке параметров в
программе конфигурирования сетевой карты. В зависимости от реализации
тип загрузки можно выбирать либо из меню очередности загрузки BIOS
(выбирать LAN первой), либо в меню конфигурирования сетевой платы (для
CNet Pro 200 необходимо было в момент работы POST нажать две клавиши
shift одновременно). В любом случае тип загрузки запоминается в КМОП
памяти компьютера. Желательно MAC-адрес адаптера записать, он затем
понадобиться при конфигурировании сервиса DHCP.
Построение ядра для бездисковых терминалов
Необходимо собрать специальное ядро. Перейдем в каталог
/usr/src/sys/i386/conf, скопируем файл GENERIC в DISKLESS. Для
экономии памяти можно убрать поддержку неиспользуемых устройств и
ненужные опции. Уберем поддержку протокола IPV6, поддержку NFSSERVER,
MSDOSFS,CD9660. FFS необходимо оставить для работы виртуального диска
в ОЗУ. Добавим опции:
options BOOTP #Use BOOTP to obtain IP address/hostname
options BOOTP_NFSROOT #NFS mount root filesystem using BOOTP info
options BOOTP_NFSV3 #Use NFS v3 to NFS mount rootoptions
options BOOTP_COMPAT #Workaround for broken bootp daemons.
options NULLFS #nullfs
Т. к. терминалы бездисковые, то уберем поддержку ATA, SCSI,
RAID-контроллеров, флоппи-дисководов. Также можно убрать поддержку
PCMCIA-устройств, ISA сетевых адаптеров, беспроводных адаптеров, шины
USB.
Пример конфигурации ядра FreeBSD 5.0 для бездисковых станций:
machine i386
cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
ident DISKLESS
maxusers 0
options INET #InterNETworking
options FFS #Berkeley Fast Filesystem
options SOFTUPDATES #Enable FFS soft updates support
options UFS_ACL #Support for access control lists
options UFS_DIRHASH
options MD_ROOT #MD is a potential root device
options NFSCLIENT #Network Filesystem Client
options NFS_ROOT #NFS usable as root device
options PROCFS #Process filesystem
options PSEUDOFS #Pseudo-filesystem framework
options COMPAT_43 #Compatible with BSD 4.3
options COMPAT_FREEBSD4 #Compatible with FreeBSD4
options KTRACE #ktrace(1) support
options SYSVSHM #SYSV-style shared memory
options SYSVMSG #SYSV-style message queues
options SYSVSEM #SYSV-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
options BOOTP #Use BOOTP to obtain IP address/hostname
options BOOTP_NFSROOT #NFS mount root filesystem using BOOTP info
options BOOTP_NFSV3 #Use NFS v3 to NFS mount rootoptions
options BOOTP_COMPAT #Workaround for broken bootp daemons.
options NULLFS #nullfs
options INVARIANT_SUPPORT
device isa
device eisa
device pci
device atkbdc # AT keyboard controller
device atkbd # AT keyboard
device psm # PS/2 mouse
device vga # VGA video card driver
device splash
device sc
device agp # support several AGP chipsets
device npx
device pmtimer
device sio # 8250, 16[45]50 based serial ports
device ppc
device ppbus # Parallel port bus (required)
device lpt # Printer
device plip # TCP/IP over parallel
device ppi # Parallel port interface device
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
device miibus # MII bus support
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc
')
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570xx Gigabit Ethernet
device random # Entropy device
device loop # Network loopback
device ether # Ethernet support
device tun # Packet tunnel.
device pty # Pseudo-ttys (telnet etc)
device md # Memory "disks"
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)
device bpf # Berkeley packet filter
Создание файловой системы
Создадим файловую систему и файлы конфигурации бездисковых станций.
Размещать все будем в каталоге /usr/diskless . Скопируем в
/usr/diskless каталоги
/bin /boot /sbin /stand /usr/bin /usr/sbin /usr/lib
/usr/libdata /usr/libexec /usr/sbin
В каталок /boot поместим новое ядро. Создадим пустые каталоги в
/usr/diskless:
./conf ./conf/default ./dev ./etc ./mnt ./proc ./usr/X11R6 ./usr/compat
./usr/home ./usr/share ./usr/local
Создадим мягкие ссылки
#ln -s /usr/home /usr/diskless/home
#ln -s usr/compat /usr/diskless/home
#ln -s /etc/tmp /usr/diskless/tmp
#ln -s /etc/tmp/var /usr/diskless/var
В каталог /usr/diskless/etc скопируем из /etc следующие файлы
-rw-r--r-- 1 root wheel disktab
-rw-r--r-- 1 root wheel hosts
-rw-r--r-- 1 root wheel inetd.conf
-rw-r--r-- 1 root wheel pwd.db
-rw-r--r-- 1 root wheel rc
-rw-r--r-- 1 root wheel rc.diskless1
-rw------- 1 root wheel spwd.db
lrwxr-xr-x 1 root wheel termcap -> /usr/share/misc/termcap
-rw-r--r-- 1 root wheel ttys
Файл intetd.conf сделаем пустым. Монифицируем файл rc.diskless1. В
этом файле содержится скрипт, создающий RAM диск емкостью 4 Мб и
монтирующий его в /etc. Также скрипт копирует содержимое каталога
/conf/default/etc в /etc, а затем содержимое каталога
/conf/x.x.x.x/etc в /etc, где x.x.x.x - IP адрес текущей бездисковой
станции (например, /conf/10.242.82.10/etc). То есть специфичные
настройки конкретной рабочей станции отменяют настройки по умолчанию
(естественно, мы должны сделать закрепление IP адресов за конкретными
бездисковыми компьютерами в натройках сервиса DHCP). Таким образом мы
можем поддерживать разнородное оборудование и настройки для
бездисковых станций. Ищем в rc.diskless1 следующие стороки и меняем
их:
mount_md() {
/sbin/mdconfig -a -t malloc -s $1 -u $3
/sbin/disklabel -r -w md$3 auto
/sbin/newfs -i 2048 /dev/md$3c
/sbin/mount /dev/md$3c $2
}
Теперь скрипт будет выделять 2 Мб под /etc . Создадим каталоги в
/usr/diskless/conf/default
./etc ./etc/X11 ./etc/defaults ./etc/mtree ./etc/pam.d ./etc/rc.d
./etc/tmp ./etc/tmp/var
Скопируем следующие файлы из каталога /etc соответственно. Содержание
каталога /usr/diskless/conf/default/etc/defaults :
-rw-r--r-- 1 root wheel pccard.conf
-rw-r--r-- 1 root wheel periodic.conf
-rw-r--r-- 1 root wheel rc.conf
Содержание каталога /usr/diskless/conf/default/etc/mtree :
-r--r--r-- 1 root wheel BSD.include.dist
-r--r--r-- 1 root wheel BSD.local.dist
-r--r--r-- 1 root wheel BSD.root.dist
-r--r--r-- 1 root wheel BSD.sendmail.dist
-r--r--r-- 1 root wheel BSD.usr.dist
-r--r--r-- 1 root wheel BSD.var.dist
-r--r--r-- 1 root wheel BSD.x11-4.dist
-r--r--r-- 1 root wheel BSD.x11.dist
Содержание каталога /usr/diskless/conf/default/etc/pam.d :
-rw-r--r-- 1 root wheel ftp
-rw-r--r-- 1 root wheel ftpd
-rw-r--r-- 1 root wheel gdm
-rw-r--r-- 1 root wheel imap
-rw-r--r-- 1 root wheel kde
-rw-r--r-- 1 root wheel login
-rw-r--r-- 1 root wheel other
-rw-r--r-- 1 root wheel passwd
-rw-r--r-- 1 root wheel pop3
-rw-r--r-- 1 root wheel rexecd
-rw-r--r-- 1 root wheel rsh
-rw-r--r-- 1 root wheel sshd
-rw-r--r-- 1 root wheel su
-rw-r--r-- 1 root wheel telnetd
-rw-r--r-- 1 root wheel xdm
-rw-r--r-- 1 root wheel xserver
Содержание каталога /usr/diskless/conf/default/etc/rc.d:
-r-xr-xr-x 1 root wheel accounting
-r-xr-xr-x 1 root wheel addswap
-r-xr-xr-x 1 root wheel adjkerntz
-r-xr-xr-x 1 root wheel amd
-r-xr-xr-x 1 root wheel archdep
-r-xr-xr-x 1 root wheel bootparams
-r-xr-xr-x 1 root wheel ccd
-r-xr-xr-x 1 root wheel cleanvar
-r-xr-xr-x 1 root wheel cleartmp
-r-xr-xr-x 1 root wheel devd
-r-xr-xr-x 1 root wheel devdb
-r-xr-xr-x 1 root wheel devfs
-r-xr-xr-x 1 root wheel diskless
-r-xr-xr-x 1 root wheel dmesg
-r-xr-xr-x 1 root wheel dumpon
-r-xr-xr-x 1 root wheel inetd
-r-xr-xr-x 1 root wheel initdiskless
-r-xr-xr-x 1 root wheel initrandom
-r-xr-xr-x 1 root wheel kadmind
-r-xr-xr-x 1 root wheel kerberos
-r-xr-xr-x 1 root wheel keyserv
-r-xr-xr-x 1 root wheel ldconfig
-r-xr-xr-x 1 root wheel local
-r-xr-xr-x 1 root wheel localdaemons
-r-xr-xr-x 1 root wheel lomac
-r-xr-xr-x 1 root wheel lpd
-r-xr-xr-x 1 root wheel motd
-r-xr-xr-x 1 root wheel mountcritlocal
-r-xr-xr-x 1 root wheel mountcritremote
-r-xr-xr-x 1 root wheel mountd
-r-xr-xr-x 1 root wheel moused
-r-xr-xr-x 1 root wheel msgs
-r-xr-xr-x 1 root wheel nfsclient
-r-xr-xr-x 1 root wheel nfsd
-r-xr-xr-x 1 root wheel nfslocking
-r-xr-xr-x 1 root wheel ntpdate
-r-xr-xr-x 1 root wheel othermta
-r-xr-xr-x 1 root wheel pcvt
-r-xr-xr-x 1 root wheel pwcheck
-r-xr-xr-x 1 root wheel random
-r-xr-xr-x 1 root wheel rarpd
-r-xr-xr-x 1 root wheel root
-r-xr-xr-x 1 root wheel 1rtadvd
-r-xr-xr-x 1 root wheel rwho
-r-xr-xr-x 1 root wheel savecore
-r-xr-xr-x 1 root wheel securelevel
-r-xr-xr-x 1 root wheel swap1
-r-xr-xr-x 1 root wheel syscons
-r-xr-xr-x 1 root wheel sysctl
-r-xr-xr-x 1 root wheel 1syslogd
-r-xr-xr-x 1 root wheel timed
-r-xr-xr-x 1 root wheel ttys
-r-xr-xr-x 1 root wheel vinum
Содержание каталога /usr/diskless/conf/default/etc :
drwxr-xr-x 2 root wheel X11
-rw-r--r-- 1 root wheel auth.conf
-rw-r--r-- 1 root wheel csh.login
drwxr-xr-x 2 root wheel defaults
-rw-r--r-- 1 root wheel devd.conf
-rw-r--r-- 1 root wheel disktab
-rw-rw-r-- 1 root operator dumpdates
-rw-r--r-- 1 root wheel fstab
-rw-r--r-- 1 root wheel ftpusers
-rw-r--r-- 1 root wheel gettytab
-rw-r--r-- 1 root wheel group
-rw-r--r-- 1 root wheel hosts
-r--r--r-- 1 root wheel localtime
-rw-r--r-- 1 root wheel login.conf
-rw-r--r-- 1 root wheel mac.conf
-rw-r--r-- 1 root wheel make.conf
-rw-r--r-- 1 root wheel manpath.config
-rw------- 1 root wheel master.passwd
-rw-r--r-- 1 root wheel motd
drwxr-xr-x 2 root wheel mtree
-rw-r--r-- 1 root wheel netconfig
-rwxr-xr-x 1 root wheel netstart
-rw-r--r-- 1 root wheel networks
-rw-r--r-- 1 root wheel newsyslog.conf
drwxr-xr-x 2 root wheel pam.d
-rw-r--r-- 1 root wheel passwd
-rw-r--r-- 1 root wheel profile
-rw-r--r-- 1 root wheel protocols
-rw-r--r-- 1 root wheel pwd.db
-rw-r--r-- 1 root wheel rc
-rw-r--r-- 1 root wheel rc.conf
drwxr-xr-x 2 root wheel rc.d
-rw-r--r-- 1 root wheel rc.devfs
-rw-r--r-- 1 root wheel rc.diskless2
-rw-r--r-- 1 root wheel rc.i386
-rw-r--r-- 1 root wheel rc.network
-rwxr-xr-x 1 root wheel rc.resume
-rw-r--r-- 1 root wheel rc.shutdown
-rw-r--r-- 1 root wheel rc.subr
-rwxr-xr-x 1 root wheel rc.suspend
-rw-r--r-- 1 root wheel rc.syscons
-rw-r--r-- 1 root wheel rc.sysctl
-rw-r--r-- 1 root wheel remote
-rw-r--r-- 1 root wheel resolv.conf
lrwxr-xr-x 1 root wheel rmt -> /usr/sbin/rmt
-rw-r--r-- 1 root wheel rpc
-rw-r--r-- 1 root wheel services
-rw-r--r-- 1 root wheel shells
-rw------- 1 root wheel spwd.db
-rw-r--r-- 1 root wheel sysctl.conf
-rw-r--r-- 1 root wheel syslog.conf
lrwxr-xr-x 1 root wheel termcap -> /usr/share/misc/termcap
drwxr-xr-x 3 root wheel tmp
-rw-r--r-- 1 root wheel ttys
В каталоге /usr/diskless/conf/default/etc находятся общие файлы
конфигурации для всех бездисковых станций.
Модифицируем файл /usr/diskless/conf/default/etc/rc.diskless2 . По
умолчанию этот скрипт создает RAM диски емкостью 32 Мб для /var и 64
Мб для /tmp . Конечно, это для нас непозволительная роскошь и эти
каталоги мы размещаем в /etc/tmp и /etc/tmp/var , куда ссылаются
созданные нами ссылки. Модифицируем этот скрипт, закоментировав строки
и ветвления, где встречается использование функии mount_md(). Теперь
этот скрипт будет создавать подкаталоги в /tmp без создания
дополнительных RAM дисков.
Примерное содержимое файла fstab (freebsd - имя хоста, которое должно
резольвиться через DNS либо прописано в файле host):
# Device Mountpoint FStype Options Dump Pass#
freebsd:/usr/diskless / nfs rw 0 0
freebsd:/usr/X11R6 /usr/X11R6 nfs ro 0 0
freebsd:/usr/local /usr/local nfs ro 0 0
freebsd:/usr/share /usr/share nfs ro 0 0
freebsd:/usr/compat /ust/compar nfs ro 0 0
proc /proc procfs rw 0 0
Примерное содержание файла rc.conf:
backgrounf_fsck="NO"
syslogd_enable="NO"
cron_enable="NO"
local_startup="/etc/rc.d.local"
inetd_enable="NO"
kern_securelevel_enable="NO"
linux_enable="NO"
sendmail_enable="NO"
sshd_enable="NO"
usbd_enable="NO"
keymap="ru.koi8-r"
keychange="61 ^[[K"
scrnmap="koi8-r2cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
Создадим файлы подкачки для бездисковых станций в каталоге /usr/swap .
# mkdir /usr/swap
# dd if=/dev/zero bs=1024 count=16384 of=/home/swap/swap.10.242.82.10
# chmod 0600 /usr/swap/swap.10.242.82.10
Настройка экспорта файловой системы NFS (сетевая файловая система)
Добавим в файл /etc/rc.conf следующие строки:
rpcbind_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 40 -h 10.242.82.4 -h 10.242.85.4"
Ключ -n определяет количество подключений, ключ -h определяет, какие
интерфейсы демон nfsd будет обслуживать, ключ -t включает поддержку
TCP соединений. Создадим файл /etc/exports и добавим в него описания
экспорта файловой системы:
/usr/diskless /usr/swap -maproot=0 -network 10.242.0.0 -mask 255.255.0.
0
/usr/local /usr/share /usr/compat /usr/X11R6 -ro -network 10.0.0.0 -mask 255.0.
0.0
После этого (необходимо перезагрузить сервер) нужно проверить,
правильно ли экспортировались файловые системы:
# showmount -e
Exports list on localhost:
/usr/swap 10.242.0.0
/usr/share 10.0.0.0
/usr/local 10.0.0.0
/usr/diskless 10.242.0.0
/usr/compat 10.0.0.0
/usr/X11R6 10.0.0.0
Настройка сервиса DHCP
DHCP сервер будет использовать реализацию isc-dhcp для FreeBSD. В
принципе, можно использовать любой другой сервер DHCP, но у меня
почему-то не получилось заставить понимать бездисковую станцию опции
на сервере Microsoft DHCP, указывающие на каталог начальной загрузки.
Для установки isc-dhcp обновим порты и сделаем установку порта
/usr/ports/net/isc-dhcp3 . Создадим файл конфигурации
/usr/local/etc/dhcpd.conf :
default-lease-time 600;
max-lease-time 7200;
option swap-path code 128 = string;
option swap-size code 129 = integer 32;
authoritative;
#ddns-update-style ad-hoc;
ddns-update-style none;
subnet 10.242.82.0 netmask 255.255.255.0 {
option domain-name "terminals.company.ru";
option routers 10.242.82.1;
range 10.242.82.100 10.242.82.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.242.82.255;
option domain-name-servers 10.242.82.2;
option netbios-name-servers 10.242.82.2;
next-server 10.242.82.4;
filename "pxeboot";
option root-path "10.242.82.4:/usr/diskless";
option swap-path "10.242.82.4:/usr/swap";
option swap-size 16384;
host term00.terminals.company.ru {
hardware ethernet 00:80:AD:00:0B:0A;
fixed-address 10.242.82.10;
option host-name "term00.terminals.company.ru";
}
host term01.terminals.company.ru {
hardware ethernet 00:80:ad:00:11:d7;
fixed-address 10.242.82.11;
option host-name "term01.terminals.company.ru";
}
host term02.terminals.company.ru {
hardware ethernet 00:80:ad:00:07:a0;
fixed-address 10.242.82.12;
option host-name "term02.terminals.company.ru";
}
}
Запустим демон dhcpd :
#/usr/local/etc/rc.d/isc-dhcpd.sh start
Также желательно для каждой бездисковой станции создать запись A в
соответствующей зоне DNS и запись PTR в обратной зоне.
Настроим также сервер TFTP. По протоколу TFTP бездисковая станция
получит загрузчик pxeboot . Добавим в /etc/inetd следующую строку:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot
Создадим каталог в корне /tftpboot и скопируем туда файл /boot/pxeboot
. Пошлем процессу inetd сигнал HUP.
Конфигурирование пользователей
Теперь, если нет никаких ошибок, запустим бездисковую станцию.
Дальнейшее конфигурироване продолжим с консоли бездисковой станции.
Войдем под именем root и изменим пароль. Теперь пароль
суперпользователя на сервере и на бездисковых станциях будет разный,
так как для бездисковой станции используются файлы
passwd,master.passwd, spwd.db и pwd.db, отличные от серверных.
Создадим пользователя терминалов коммандой adduser :
# adduser
Username: tuser
Full name: Terminal User
Uid (Leave empty for default):1015
Login group [tuser]:
Login group is tuser. Invite tuser into other groups? []:
Login class [default]:
Shell (sh csh tcsh) [sh]:
Home directory [/home/tuser]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]: yes
Lock out the account after creation? [no]:
Username : tuser
Password :
Full Name : Terminal User
Uid : 1005
Class :
Groups : tuser
Home : /home/tuser
Shell : /bin/sh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (tuser) to the user database.
Необходимо использовать uid отличный от пользователей сервера. Новый
пользователь имеет пустой пароль и домашний каталог. Теперь настроим
автоматический логин, чтобы при включении бездискового компьютера
выполнялся автоматический вход пользователя tuser . Создадим тип
терминалла getty, добавив следующие строки в файл /etc/gettytab :
#
# autologin - automatically log in as Terminal user
#
tuserlogin|tu.9600:\
:al=tuser:tc=std.9600:
Теперь отредактируем файл /etc/ttys, задав вход на нулевой консоли и
отключим лишиние консоли для экономии памяти:
ttyv0 "/usr/libexec/getty tuserlogin" cons25r on secure
#ttyv0 "/usr/libexec/getty Pc " cons25r on secure
# Virtual terminals
ttyv1 "/usr/libexec/getty Pc" cons25r on secure
ttyv2 "/usr/libexec/getty Pc" cons25r off secure
ttyv3 "/usr/libexec/getty Pc" cons25r off secure
ttyv4 "/usr/libexec/getty Pc" cons25r off secure
ttyv5 "/usr/libexec/getty Pc" cons25r off secure
ttyv6 "/usr/libexec/getty Pc" cons25r off secure
ttyv7 "/usr/libexec/getty Pc" cons25r off secure
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
Не забываем, что все настройки в /etc после перезагрузки забудутся так
как файловая система /etc размещается в оперативной памяти, поэтому
необходимо содержимое каталога скопировать в /conf/default/etc .
Настройка X Window
После перезагрузки зайдем на консоль ttyv1 под именем root. На сервере
система X Window уже должна быть установлена. Настройку X Window
делаем обычным способом (можно воспользоваться командой xf86cfg,
xf86cfg -textmode, xf86config). Желательно использовать 16-битный
цветовой режим. Так как файловая система /etc размещается в
оперативной памяти, после настройки и проверки командой XFree86
скопируем файл /etc/X11/XF86Config в каталог/conf/default/etc/X11/ или
/conf/10.242.82.10/etc/X11/ для того, чтобы он не был утерян при
следующей загрузке. В качестве терминального клиента Microsoft Windows
RDP будем использовать программу rdesktop (http://www.rdesktop.org/).
На текущий момент стабильная версия - 1.2.0.
Установим ее на сервере из обновленных портов /usr/ports/net/rdesktop.
Снова пересядем на консоль бездисковой станции, зайдем в каталог /home/tuser
и создадим там скрипт .xinitrc, не забыв сделать его исполняемым:
while true
do
rdesktop -f server.company.ru
done
exit0
, где server.company.ru - имя терминальнго сервера Windows. Затем
командой vipw изменим шелл пользователя tuser на
/usr/X11R6/bin/startx. Снова не забываем, что все настройки в /etc
после перезагрузки забудутся так как файловая система /etc размещается
в оперативной памяти. Перезагружаем бездисковую станцию. Если ошибок
нет, то вместо шелла пользователя загрузится X Windows и автоматически
запустится rdesktop . Также можно использовать клиент Citrix ICA для
Linux. Его можно установить из портов на сервере. Для его работы нужно
включить поддержку бинарного кода Linux, изменить файл .xinitrc и
создать необходимые настройки клиента Citrix ICA.