|
|
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 секунд подымает иксы при падении. Если на тазике есть звуковушка - то звук с сервера пробрасывается на локальную машину, можно музычку послушать =))). За работу флэшек отвечает параметр
в конфигурационном файле каждого конкретного клиента. Без него - флэшка всё равно монтируется, но - в терминальную сессию диск не пробрасывается.
Принцип работы - на старте системы запускается 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 корневой файлвоой системы, лезет в консоль такое:
Никакие бубны с ручной раздачей прерываний и прочего непомогают. Помогает отключение 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,
последнее обновление: 2011-07-20,
автор: lissyara
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
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-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-(ADLDAP)
Установка Прокси сервера 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, UA
Hotspot
Настройка безпроводной точки доступа (WiFi) на freebsd
|
Комментарии пользователей [32 шт.]