Бездисковая рабочая станция linux

MNorin.com

Блог про Linux, Bash и другие информационные технологии

Создание сети с бездисковыми станциями или новая жизнь старых компьютеров

Использование бездисковых станций или бездисковых терминалов уже не редкость. Сейчас достаточно просто можно купить миниатюрные бездисковые рабочие станции, они сейчас недороги.

Но есть и другие актуальные вопросы, ответом на которые могут быть бездисковые станции:

  • Использование старого оборудования, которое само по себе уже не может использоваться как полноценные рабочие станции, например, не хватает оперативной памяти для запуска всех необходимых для работы программ, но выбрасывать его жалко, потому что оно работает.
  • Экономия на закупках оборудования. Впрочем, этот пункт может пересекаться с предыдущим. Если оборудование уже есть, зачем покупать новое, если можно использовать старое?
  • Централизация хранения данных. Для обеспечения надежности можно использовать одно серьезное хранилище, обеспечивающее скорость и надежность за счет массива дисков, и исключить из работы диски пользовательских рабочих станций. Это также упростит создание резервных копий.
  • Простота установки. Система с уже установленными и сконфигурированными программами загружается на любой машине, и пользователь может войти под своим пользователем и продолжить работу над тем же самым, над чем закончил работать вчера.
  • Простота обновления. Обновляется только одна система, и программное обеспечение обновляется сразу у всех пользователей.

В общем, можно найти и другие причины, но даже этих уже достаточно для того, чтобы задуматься, а не организовать ли работу при помощи бездисковых станций, тем более, что в случае со старыми машинами, у нас есть неиспользуемые ресурсы, и мы можем их использовать, так как из рабочего процесса они уже выпали. Рассматривать, как это можно реализовать, мы будем на примере небольшой локальной сети.

Что нам понадобится?

  • Сервер для бездисковых станций. Это должна быть достаточно мощная машина с быстрым дисковым массивом или подключенным внешним хранилищем.
  • Сетевые коммуникации. Например, свитч и подключенные к нему провода. Желательно иметь скорость работы сети не менее 100 Мбит, а лучше 1 Гбит. Сетевые карты обязательно должны поддерживать загрузку по PXE. Подавляющее большинство сетевых карт, которые используются сейчас или использовались несколько лет назад, такую возможность имеют, поэтому это скорее всего проблемы не составит
  • Настройка необходимых сервисов. Какие сервисы нам потребуются, мы рассмотрим по мере необходимости.
  • Дистрибутив операционной системы на базе ядра Linux, на основе которой мы и будем создавать свою систему.

Подготовка сервера

В первую очередь надо подготовить аппаратную часть. Что надо учесть? Нам нужен будет достаточно большой объем оперативной памяти. Ее понадобится заметно меньше, чем для отдельных рабочих станций в таком же количестве, в котором у нас будут существовать бездисковые станции. Почему? Потому что у нас во-первых, будут совместно используемые библиотеки, во-вторых, память будет распределяться между приложениями, запущенными со всех станций, часть из которых будет скорее всего работать не на полной мощности.

Следующее, что необходимо,- это две сетевые карты. На одной сетевой карте будут подключаться рабочие станции, а второй будет выходить в сеть предприятия, либо в интернет, в зависимости от размеров сети вашего предприятия. Я уже оговаривал. что мы будем рассматривать пример для небольшого предприятия, поэтому пусть будет все-таки интернет.

Дисковая подсистема. Нам потребуется либо быстрый дисковый массив, либо внешнее хранилище, которое мы сможем использовать в качестве хранилища. Чем больше будет работать пользователей, тем более критичной будет скорость работы дисковой подсистемы. Про массивы, их конфигурацию, контроллеры и прочее можно рассказывать очень долго, информации по этим вопросам хватает. Но мы сейчас не об этом.

Читайте также:  System sleep c linux

Сколько оперативной памяти надо терминальному серверу? Создатели LTSP приводят следующую формулу:

То есть, для 20 пользователей по их подсчетам понадобится

Откуда такие цифры, почему так мало? Дело в том, что все клиенты будут использовать библиотеки общего доступа и другие компоненты системы, которые для них будут общими. Практически все современные операционные системы работают подобным образом.

Итак, аппаратная часть подготовлена. Теперь нам надо поставить операционную систему на сервер. Выбирайте ту, которая вам больше подходит, тут сложно сказать однозначно, какая вас больше устроит. Самое главное, чтобы все устройства подключились после установки системы. Один из сетевых интерфейсов мы делаем основным, это должен быть тот интерфейс, который будет выходить в Интернет, либо в сеть предприятия.

Пусть у нас это будет eth0 с адресом 192.168.0.50, это нам не особо важно, пусть на этом интерфейсе будет настроено получение адреса по DHCP, нам более важен второй сетевой интерфейс.

На втором интерфейсе мы будем создавать отдельную подсеть 192.168.2.0/255.255.255.0, в которой будут находиться бездисковые станции. Его надо сконфигурировать статически, поскольку именно на нем мы будем осуществлять загрузку бездисковых терминалов. Напишем его конфигурацию в /etc/network/interfaces

Теперь можно его поднять командой

И вот тут наступает очередь очередь LTSP.

LTSP — это Linux Terminal Server Project. Этот проект свободного программного обеспечения, обеспечивающего создание терминального решения для операционной системы на базе ядра Linux (Debian, Ubuntu, и т.д.). Это программное обеспечение позволяет использовать один, более мощный, компьютер, для обеспечения работы более слабых компьютеров, которые будут использоваться в качестве терминалов.

Какая конфигурация должна быть у терминалов? На официальном сайте LTSP указываются следующие рекомендуемые требования:

  • Процессор: 533 МГц и быстрее. Если процессор медленнее, от 233 МГц, то заставить работать его все-таки можно, но уровень безопасности при работе будет ниже
  • Оперативная память: 64 мегабайта для того, чтобы просто стартовать, но рекомендуется минимум 128 Мб. Естественно, можно и больше, 256 или 512.
  • Видеокарта: PCI-видеокарта с 16 Мб памяти. Встроенная тоже подойдет.
  • Сетевая карта: Желательно иметь поддержку PXE, но при ее отсутствии есть другие варианты, такие как Etherboot, gPXE и Yaboot (последний для Macintosh PowerPC, поэтому, возможно, не сильно актуально). Большинство более или менее современных сетевых карт имеют поддержку PXE.

Все рассматриваемое ниже приводится для Debian’а, но актуально также и для Ubuntu. Давайте приступим к установке. Дадим команду

Будет установлено достаточно большое количество пакетов, они все нужны для работы.

По окончании надо настроить DHCP, чтобы рабочие станции могли получать адреса, по умолчанию DHCP-сервер после настройки не сконфигурирован

Отредактируем файл /etc/ltsp/dhcpd.conf

После этого меняем в файле /etc/default/isc-dhcp-server строчку

И выполняем следующие команды:

Теперь нам надо создать окружение для тонких клиентов

После этого придется немного подождать, пока скачается все необходимое и будет собрано окружение для тонких клиентов.

После создания окружения необходимо добавить в файл /etc/exports строчку

И перезагруз ить NFS-сервер командой

Проверяем терминалы

Попробуем загрузить бездисковую станцию. Если появилась ошибка «NFS over TCP not available from 192.168.10.1″, проверяем, запущен ли сервер NFS

Если вы его там не видите, перезапустите NFS-сервер

Всё, теперь можно стартовать бездисковую станцию. И для того, чтобы убедиться, что все сервисы корректно работают после загрузки системы, обязательно надо перезагрузить сервер, а после загрузки проверить, загружаются ли бездисковые станции.

Установка программного обеспечения для клиентских терминалов сводится к установке этого программного обеспечения на терминальный сервер. Точно так же происходит обновление программного обеспечения.

Почему бездисковые станции работают так быстро? Потому что программы работают на сервере, а на самих терминалах происходит только взаимодействие с пользователем. Соответственно, быстродействие зависит в большей степени от сервера, а не от того, что у нас используется на тонких клиентах.

Читайте также:  Linux для 512 оперативной памяти

Фактически, на терминалах используется двойная загрузка. Одно окружение используется с сетевой файловой системой, которая монтируется локально, потом происходит загрузка терминала и переключение на окружение терминального сервера. Таким образом обеспечивается возможность выключать и перезагружать терминал.

Источник

Бездисковые рабочие станции. Загрузка по сети полноценного linux

Настройка сервера

Ставим Debian cdimage.debian.org/debian-cd/6.0.3/amd64/bt-cd
Для того чтобы система раздавала интернет пишем правило для iptables
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

и сохраняем их
iptables-save > /etc/iptables.up.rules

включаем форвардинг
echo «1» > /proc/sys/net/ipv4/ip_forward

редактируем
apt-get install mc
mcedit /etc/sysctl.conf
добавляем в него строчку:
net.ipv4.ip_forward = 1

Установка pureftpd в качестве DHCP сервера

apt-get install dnsmasq

настравиваем для загрузки по сети
mcedit /etc/apt-get install dnsmasq
раскомментируем строку
dhcp-boot=pxelinux.0

и задаём диапазон раздаваемых ip-адресов
dhcp-range=192.168.100.2,192.168.100.253,12h

Установка NFS

apt-get install nfs-kernel-server

если при запуске будет выдавать ошибку Permission denied — перезагрузить сервер
создаём каталог для клиентской ос
mkdir /kubuntu32
cd /kubuntu32

устанавливаем debootstrap
wget http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.38_all.deb
apt-get install binutils
ar -x debootstrap_1.0.38_all.deb
cd /
zcat /kubuntu32/data.tar.gz | tar xv
скачиваем клиентскую ОС
debootstrap —arch i386 oneiric /kubuntu32 http://mirrors.uaip.org/ubuntu/

настраиваем NFS
mcedit /etc/exports

дописываем путь к клиентской файловой системе и права клиента
/kubuntu32 192.168.100.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)

синхронизируем настройки
exportfs -rv

перегружаем NFS-сервер
/etc/init.d/nfs-kernel-server restart

корректируем список зеркал
mcedit /kubuntu32/etc/apt/sources.list
куда вписываем список зеркал которые будут доступны
пользователям клиентской Ubuntu

Настройка клиентской Ubuntu для загрузки по сети

Изменяем кореневой каталог
chroot /kubuntu32

выставляем пароль для root
passwd
настройка ядра
apt-get update
apt-get install mc
mcedit /etc/initramfs-tools/initramfs.conf

ставим
MODULES=netboot
BOOT=nfs

загружаем ядро linux (в окне при установке выбираем yes — продолжить установку без загрузчика)
apt-get install linux-image

создаём образ initramfs
mkdir /bootimg
mkinitramfs -o /bootimg/initrd.img 3.0.0-13-generic
cp /boot/vmlinuz-3.0.0-13-generic /bootimg/vmlinuz

редактируем сетевые интерфейсы
mcedit /etc/network/interfaces

добавляем
auto eth0
iface eth0 inet manual

редактируем разбивку диска
mcedit /etc/fstab
# /etc/fstab: static file system information.
#
# proc /proc proc defaults 0 0
/dev/nfs / nfs defaults 1 1

выходим из клиентской файловой системы
exit

Установка TFTP сервера

apt-get install tftpd-hpa

в появившемся диалоговом окне пишем /tftpboot
настраиваем TFTP сервер
mcedit /etc/default/tftpd-hpa

указываем кореть сервера
TFTP_DIRECTORY=»/tftpboot»

Настройка загрузки по сети

cd /tftpboot
wget http://mirrors.uaip.org/ubuntu/dists/oneiric/main/installer-i386/current/images/netboot/pxelinux.0
mkdir pxelinux.cfg
mcedit pxelinux.cfg/default

указываем пути к образам ядра и к корню подгружаемой файловой системы
DEFAULT linux
LABEL linux
KERNEL vmlinuz
APPEND root=/dev/nfs initrd=initrd.img nfsroot=192.168.100.1:/kubuntu32 ip=dhcp rw
PROMPT 0
TIMEOUT 0
скачиваем образы
cp /kubuntu32/bootimg/vmlinuz /tftpboot/vmlinuz
chmod 644 /tftpboot/vmlinuz
cp /kubuntu32/bootimg/initrd.img /tftpboot/initrd.img
chmod -R 777 /tftpboot

Настройка клиентов

в настройках BIOS выставляем загрузку по сети, мне нужная опция попадалась в таких местах:
Boot->Boot Settings Configuration->Boot From Onboard NAN=Enabled

Запускаем клиентский компьютер, заходим под root и указанным выше паролем
создаём тестового пользователя
adduser test

устанавливаем графическую среду KDE
apt-get install kubuntu-desktop

по желанию можно еще и GNOME поставить
apt-get install kubuntu-desktop

тогда пользователь при логине сможет выбрать в чём работать

Источник

Бездисковая загрузка по сети и жизнь после нее

История

Теория

По сути, для того, чтобы система загрузилась ей необходимо 3 компонента — ядро, начальное окружение initramfs и корневой каталог, в котором система будет работать.

Практика

Все действия проводятся на машине с ubuntu precise.

Для начала настроим PXE. Мануалов на эту тему уйма, поэтому я расскажу только самую суть.
Ставим ваш любимый dhcp сервер, например isc-dhcp-server, который будет раздавать машинкам ip адреса и указывать путь к файлу pxelinux.0, который будет отдавать tftp сервер (tftp-hpa или же atftp).

Пример конфига dhcp сервера. В примере pxe-сервер находится по адресу 10.0.0.1.

Запускаем tftp сервер (в ubuntu он имеет init-скрипт, но вполне вероятно, что вам придется запускать его и через inetd/xinetd).
Проверяем работоспособность. Кладем файл в каталог /var/lib/tftpboot и пробуем стянуть его tftp клиентом.

В принципе неважно, где вы возьмете файл pxelinux.0, так как он является просто начальным загрузчиком, в который мы передаем то, что надо грузить дальше.
Вы можете сделать красивую менюшку в загрузчике, но сейчас нам это не нужно, поэтому мой pxelinux.cfg/default выглядит так

Читайте также:  Readyboost для windows 10 не работает
rootfs

Образ rootfs собираем через debootstrap, чрутимся в него и ставим необходимые программы. Настраиваем сеть, hostname, фаервол и прочее, чем больше сделаем настроек, тем больше будет образ. Главное не забудьте сменить пароль на рута.

С нашим минимальным набором система получилась весом 200Мб.

Initramfs

В этом примере мы будем забирать образ корневой фс с веб-сервера, расположенного на нашем сервере сетевой загрузки, то есть на 10.0.0.1. Решение было таким просто потому, что в нашем initramfs была утилита wget. Чтобы не тянуть большой объем данных по сети, мы решили сжать образ. Это можно было бы сделать и обычным tar, но можно попробовать squashfs, тем более, что обычно в initramfs tar не встроен, с другой стороны, ничего не мешает его туда добавить.

Squashfs
Squashfs — это сжимающая файловая система, которая включена в ядро с версии 2.6.29. С ее помощью можно заархивировать каталог, примонтировать на loop устройство и читать с него, для записи же необходимо провести процедуру добавления файлов в архив. Так как при обращении к squashfs, вы читаете из архива, то это дает дополнительную нагрузку на cpu.

Для более эфферктивного сжатия вы можете использовать опцию -comp, чтобы установить тип сжатия, по умолчанию используется gzip.

Далее надо научить init из initramfs забирать образ корня и помещать его в оперативную память.

init в initramfs — это скрипт на sh, который производит разбор опций из cmdline, монтирует фс, делает switch_root и запускает гланый init-процесс системы.
Воспользуемся этим и допишем свои опции для cmdline. Напишем скрипт ram, который будет вызываться при значении опции boot=ram.

Через параметр rooturl можно указывать откуда качать образ корневой фс. Для работы со squashfs необходимо подгрузить ее модуль в ядро. Указываем в /etc/initramfs-tools/initramfs.conf BOOT=ram и пересобираем initramfs

Включаем машинку, на которой будем тестировать, и смотрим на происходящее. После успешной загрузки мы получили бездисковую систему, которая занимает в памяти около 300Мб, при этом мы может писать в нее, но после ребута, система вернется в свое первоначальное состояние.

В это примере, мы использовали squashfs просто для сжатия образа, но почему бы нам не попробовать примонтировать корневой раздел в squashfs и не посмотреть, что получится? Меняем наш скрипт, в функции do_rammount() оставляем только монтирование squashfs.

Пересобираем initramfs, запускаем, смотрим. Система загружается в режиме ro, но зато занимает в памяти всего около 180Мб.
В каких-то случаях монтирование в режиме ro это хорошо, но нас это не устраивает, но и просто так тратить оперативную память нам тоже не хочется. Выход же был найден при помощи Aufs.

Aufs
Aufs позволяет делать каскадно-объединённое монтирование файловых систем — одну в режиме только на чтение, а вторую в rw. Работает она в режиме copy-on-write, то есть все изменения записываются на rw систему и после этого чтение производится с нее же.
Опять переписываем наш скрипт.
В фукнцию mountroot() добавляем

А фукнцию do_rammount() приводим к следующему виду:

Пересобираем initramfs, запускаем, смотрим. Система занимает в памяти 181Мб, при этом мы можем менять ее, писать, читать. Все изменения хранятся отдельно в /mnt/rw, а сама система хранится в /mnt/ro.

В результате мы получили систему, которая грузится по сети, занимает небольшой объем в памяти, при этом после каждой перезагрузки пропадают все изменения (поэтому надо заранее собирать все нужные продукты жизнедеятельности системы в надежное место).

Все вышеперечисленные способы имеют право на жизнь. Надеюсь, что эта информация вам пригодится, а мне же будет интересно почитать/послушать ваши комментарии.
Спасибо за внимание.

Источник

Оцените статью