Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Сейчас мы попробуем создать сервер терминалов LTSP на базе AstraLinux Special Edition "Смоленск" с загрузочным образом для бездисковых  станций с пробросом usb устройств и.

Информация
iconfalse

Оглавление
outlinetrue
indent15px

Конфигурация стенда


Стенд состоит из двух виртуальных машин:

  1. ВМ с Astra Linux SE "Смоленск" 1.6 с обновлением 20181229se16
  2. ВМ без ОС  - тонкий клиент

На первой машине используются 2 сетевых интерфейса:

  • eth0 смотрит в интернет,
  • eth1  - во внутреннюю сеть, в которой находятся тонкие клиенты


Информация

Данная статья применима к:

  • ОС СН Смоленск 1.6


Предупреждение
Для создания сервера терминалов необходим диск со средствами разработки Astra Linux SE 1.6


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


Обновление системы

Обновим систему по статье: https://wiki.astralinux.ru/x/e410Ag

Проверим:

Command
Titlecat /etc/astra_update_version

Update 1

Bulletin 20181229SE16

Включение удаленного доступа

Разрешим удаленный вход в систему:

Панель управления → Система → Вход в систему → Дополнительно - Разрешить удаленный вход в систему (Не забываем перезапустить fly-dm)

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

Сеть настраиваем любым предпочтительным способом. Например, с помощью Network Manager. Первый интерфейс eth0 смотрит в интернет, настройки получает автоматически. Второму, eth1, прописываем статический адрес 192.168.56.100 с маской 24.

eth0 - DHCP
eth1 - static
ip: 192.168.56.100
mask: 255.255.255.0


При настройке сетевых подключений следует помнить, что имя домена, задаваемое в настройках службы DHCP и настройках подключения должно быть одно и  тоже:

  • В файле /etc/dhcp/dhcpd.conf:
    ...option domain-name "example.com"...
  • /opt/ltsp/amd64/usr/local/bin/rdp.sh
    .../d:example.com..

В настройках интерфейса eth1 в network-manager поле "DNS servers" должно оставаться либо пустым, либо его значение должно совпадать совпадать с этими двумя вышеупомянутымис вышеупомянутым именем домена. Если сетевые подключения настраиваются посредством /etc/network/interfaces, то там также либо указать такое же значениеимя домена, либо не указывать никакое. При несовпадении имён подключение по XDMCP   XDMCP  НЕВОЗМОЖНО.

Установка ПО

Для сервера терминалов необходимы следующие пакеты:

  • isc-dhcp-server - DHCP сервер. ;
  • tftpd-hpa - сервер tftpd.;
  • ltsp-server - скрипты для создания сервера терминалов;
  • xfreerdp - реализация протокола доступа к удалённому рабочему столу;

Установить эти пакеты можно командой:

Command

sudo apt install isc-dhcp-server ltsp-server tftpd-hpa xfreerdp

На ошибкиОшибки, выводимые при установке dhcp сервера, не обращаем внимание, мы займемся настройкой dhcp в игнорируем: настройка dhcp будет осуществлена на следующем шаге.

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

В файле /etc/default/isc-dhcp-server в строке INTERFACECv4="" указать интерфейс: eth1

Блок кода
title/etc/default/isc-dhcp-server
INTERFACECv4="eth1"

Создадим конфигурацию для DHCP сервера:

Command
whoRoot

sudo ltsp-config --overwrite isc-dhcp-server


Command
whoRoot

sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.bak


Command
whoRoot

sudo cp /etc/ltsp/dhcpd.conf /etc/dhcp/dhcpd.conf

Заменим адреса в dhcpd.conf на нужные:

Блок кода
title/etc/dhcp/dhcpd.conf
#
# Default LTSP dhcpd.conf config file.
#

authoritative;

subnet 192.168.56.0 netmask 255.255.255.0 {
    range 192.168.56.20 192.168.56.250;
    option domain-name "example.com";
    option broadcast-address 192.168.56.255;
    option routers 192.168.56.100;
    next-server 192.168.56.100;
    # get-lease-hostnames true;
    option subnet-mask 255.255.255.0;
    option root-path "/opt/ltsp/amd64";
    if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
        filename "/ltsp/amd64/pxelinux.0";
    } else {
        filename "/ltsp/amd64/nbi.img";
   }
}

Перезапустим dhcp:

Command
whoRoot

sudo systemctl restart isc-dhcp-server

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

В файле /etc/default/tftpd-hpa изменим путь к корню тфтп сервера:

Блок кода
title/etc/default/tftpd-hpa
TFTP_DIRECTORY="/var/lib/tftpboot"

Перезапустим:

Command
sudo systemctl restart tftpd-hpa

Настройка LTSP

Скопируем конфигурацию Debian:

Command
sudo cp -r /usr/share/ltsp/plugins/ltsp-build-client/Debian /usr/share/ltsp/plugins/ltsp-build-client/AstraLinuxSE

Директория должна называться именно AstraLinuxSE

Поправим файл:

 /usr/share/ltsp/plugins/ltsp-build-client/AstraLinuxSE/010-debootstrap

Строку       

Блок кода
 LC_ALL=C ${DEBOOTSTRAP:-"debootstrap"}  $DEBOOTSTRAPOPTS --arch $ARCH $DIST $ROOT $MIRROR

  меняем на 

Блок кода
LC_ALL=C ${DEBOOTSTRAP:-"debootstrap"} --components "main, contrib, non-free" $DEBOOTSTRAPOPTS --arch $ARCH $DIST $ROOT $MIRROR

Настройка LTSP образа


Монтирование установочного диска

Для создания образа необходимо примонтировать установочный диск (или образ диска) Astra Linux Special Edition релиз "Смоленск" версии 1.6. 

Например мы имеем установочный образ smolensk-1.6-20.06.2018_15.56.iso

Монтируем:

Command

sudo mount -o loop smolensk-1.6-20.06.2018_15.56.iso /media/cdrom

Сборка образа LTSP

Соберем образ командой:

Command

sudo ltsp-build-client --dist smolensk --purge-chroot --security-mirror none --updates-mirror none --mirror "file:///media/cdrom" --components "contrib, main, non-free" --kernel-packages linux-image-generic --early-packages vim

Разберем опции:

--dist smolensk - собрать образ с системой "Смоленск"

--purge-chroot - очищать директорию с файлами образа 

--security-mirror none и --updates-mirror none - говорим сборщику не использовать зеркала с обновлениями (если нужно, обновим систему после сборки образа)

--mirror "file:///media/cdrom" - указываем репозиторий, откуда ставить систему. В нашем случае это директория с примонтированным установочным диском.

--components "contrib, main, non-free" - используем все компоненты

--kernel-packages linux-image-generic - установить ядро generic по-умолчанию

--early-packages vim - установить редактор vim на стадии сборки

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

Образ системы появится в /opt/ltsp/images

Распакованная система в /opt/ltsp/amd64 - она то нам и нужна. Займемся ее настройкой.

Настройка образа системы

Для работы с образом будущей системы будем использовать команду ltsp-chroot.

Зададим пароль root:

Command

sudo ltsp-chroot passwd root

Примонтируем репозитории:

Command

sudo mkdir /opt/ltsp/amd64/opt/{main,devel}
sudo mount -o loop smolensk-1.6-20.06.2018_15.56.iso /opt/ltsp/amd64/opt/main
sudo mount -o loop devel-smolensk-1.6-20.06.2018_15.56.iso /opt/ltsp/amd64/opt/devel

в  /opt/ltsp/amd64/etc/apt/sources.list пропишем путь к репам:

Блок кода
title/opt/ltsp/amd64/etc/apt/sources.list
deb file:///opt/main smolensk main contrib non-free
deb file:///opt/devel smolensk main contrib non-free

Выполним 

Command
sudo ltsp-chroot apt update

Установим нужное:

Command

sudo ltsp-chroot apt install ltsp-client-core parsec linux-astra-modules-generic xorg-all-main fly-dm freerdp2-x11 zenity


Command

sudo ltsp-chroot apt install -f


В /opt/ltsp/amd64/etc/ltsp/update-kernels.conf укажем тип загружаемого образа: NBD

Блок кода
title/opt/ltsp/amd64/etc/ltsp/update-kernels.conf
# Supported booth methods
BOOT_METHODS="NBD"

Выполним:

Command
sudo ltsp-chroot bash /usr/share/ltsp/update-kernels

Для подключения по протоколу XDMCP поправим /opt/ltsp/amd64/usr/share/ltsp/screen.d/xdmcp

Строку

Блок кода
X_ARGS="$X_ARGS -query ${XDM_SERVER}"

изменим на

Блок кода
X_ARGS="$X_ARGS -query ${XDM_SERVER} -displayID 0:63:0x0:0x0"

Для rdp подключений:в файле /opt/ltsp/amd64/usr/share/ltsp/screen.d/xfreerdp приводим последнюю строку к виду

Блок кода
title/opt/ltsp/amd64/usr/share/ltsp/screen.d/xfreerdp
exec xinit /usr/share/ltsp/xinitrc /usr/local/bin/rdp.sh -- "$DISPLAY" "vt${TTY}" -nolisten tcp $X_ARGS >/dev/null

Редактируем файл  /opt/ltsp/amd64/usr/local/bin/rdp.sh

Блок кода
title/opt/ltsp/amd64/usr/local/bin/rdp.sh
#!/bin/bash
userdata=$(zenity --forms --title="Вход на сервер" --text="Форма авторизации" --add-entry="Логин:" --add-password="Пароль:");
userlogin="`echo $userdata|cut -d '|' -f 1`";
userpassword="`echo $userdata|cut -d '|' -f 2`";
xfreerdp /v:192.168.56.100 /cert-ignore +sec-nla /d:example.com /u:$userlogin /p: $userpassword /f /drive:usb,/media /network:lan /printer

Сделаем его исполняемым:

Command

chmod +x /opt/ltsp/amd64/usr/local/bin/rdp.sh

Выполним:

Command

sudo ltsp-chroot systemctl disable fly-dm
sudo ltsp-chroot update-initramfs -uk all

Далее правим /var/lib/tftpboot/ltsp/amd64/lts.conf:

Блок кода
titlenano /var/lib/tftpboot/ltsp/amd64/lts.conf
[default]
  LTSP_CONFIG=True
  #SOUND=False
  XSERVER=vesa
  LOCALDEV=True
  HOTPLUG=True
  DNS_SERVER=192.168.56.100
  SOUND=True
  MIC_VOLUME=0
  CAPTURE_VOLUME=100
  CAPTURE_SWITCH=toggle
  TIMEZONE=Europe/Moscow
  TIMESERVER=192.168.56.100
  SYSLOG_HOST=192.168.56.100
  NBD_SWAP=False
  #NBD_SWAP_SERVER=192.168.56.100
  #CONFIGURE_X=False
  SCREEN_07=xfreerdp
  PRINTER_O_DEVICE=/dev/usb/lp0
  PRINTER_0_TYPE=U


Информация
Для того, чтобы по умолчанию подключение выполнялось по XDMCP опцию SCREEN_07=xfreerdp следует изменить на SCREEN_07=xdmcp.


Автомонтирование usb

Создадим /opt/ltsp/amd64/etc/udev/rules.d/udev.rules:

Блок кода
title/opt/ltsp/amd64/etc/udev/rules.d/udev.rules
ACTION=="add", KERNEL=="sd[a-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbstick-handler@%k"


Далее создадим unit для запуска:

Блок кода
title/opt/ltsp/amd64/lib/systemd/system/usbstick-handler@.service
[Unit]
Description=Mount USB
BindsTo=dev-%i.device
After=dev-%i.device
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/automount %I
ExecStop=/usr/bin/pumount /dev/%I

И скрипт для монтирования:

Блок кода
title/opt/ltsp/amd64/usr/local/bin/automount
#!/bin/bash

PART=$1
FS_LABEL=`lsblk -o name,label | grep ${PART} | awk '{print $2}'`

if [ -z ${FS_LABEL} ]
then
/usr/bin/mount -t auto /dev/${PART} /media/${PART}
else
/usr/bin/mount -t auto /dev/${PART} /media/$ {FS_LABEL}_${PART}
fi


Command

chmod +x /opt/ltsp/amd64/usr/local/bin/automount

Пересоберем образ:

Command

sudo ltsp-update-kernels && sudo ltsp-update-image

Загрузка образа

Включаем тонкий клиент и выбираем загрузку по сети