Содержание

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

Info
iconfalse

Table of Contents
outlinetrue
indent15px

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


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

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

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

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


Info

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

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


Warning
Для создания сервера терминалов необходим диск со средствами разработки 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

Code Block
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 на нужные:

Code Block
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 изменим путь к корню тфтп сервера:

Code Block
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

Строку       

Code Block
 LC_ALL=C ${DEBOOTSTRAP:-"debootstrap"}  $DEBOOTSTRAPOPTS --arch $ARCH $DIST $ROOT $MIRROR

  меняем на 

Code Block
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 пропишем путь к репам:

Code Block
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

Code Block
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

Строку

Code Block
X_ARGS="$X_ARGS -query ${XDM_SERVER}"

изменим на

Code Block
X_ARGS="$X_ARGS -query ${XDM_SERVER} -displayID 0:63:0x0:0x0"

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

Code Block
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

Code Block
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:

Code Block
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


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


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

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

Code Block
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 для запуска:

Code Block
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

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

Code Block
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

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

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