Содержание

Skip to end of metadata
Go to start of metadata

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

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


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

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

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

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


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

  • ОС СН Смоленск 1.6
Для создания сервера терминалов необходим диск со средствами разработки Astra Linux SE 1.6

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


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

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

Проверим:

cat /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

Установка ПО

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

  • isc-dhcp-server - DHCP сервер. 
  • tftpd-hpa - сервер tftpd.
  • ltsp-server - скрипты для создания сервера терминалов

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

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

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

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

/etc/default/isc-dhcp-server
INTERFACECv4="eth1"

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

sudo ltsp-config --overwrite isc-dhcp-server
sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.bak
sudo cp /etc/ltsp/dhcpd.conf /etc/dhcp/dhcpd.conf
Заменим адреса в dhcpd.conf на нужные:

/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:

sudo systemctl restart isc-dhcp-server

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

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

/etc/default/tftpd-hpa
TFTP_DIRECTORY="/var/lib/tftpboot"

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

sudo systemctl restart tftpd-hpa

Настройка LTSP

Скопируем конфигурацию Debian (т.к. для орла конфигурацию еще не придумали)

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

Монтируем:

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

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

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

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:

sudo ltsp-chroot passwd root

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

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

/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

Выполним 

sudo ltsp-chroot apt update
Установим нужное:
sudo ltsp-chroot apt install ltsp-client-core parsec linux-astra-modules-generic xorg-all-main fly-dm freerdp2-x11 zenity
sudo ltsp-chroot apt install -f


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

/opt/ltsp/amd64/etc/ltsp/update-kernels.conf
# Supported booth methods
BOOT_METHODS="NBD"

Выполним:

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 приводим последнюю строку к виду

/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

/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.local /u:$userlogin /p: $userpassword /f /drive:usb,/media /network:lan /printer

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

chmod +x /opt/ltsp/amd64/usr/local/bin/rdp.sh
Выполним:

sudo ltsp-chroot systemctl disable fly-dm

sudo ltsp-chroot update-initramfs -uk all

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

nano /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:

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

/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

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

/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

chmod +x /opt/ltsp/amd64/usr/local/bin/automount
Пересоберем образ:
sudo ltsp-update-kernels && sudo ltsp-update-image

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

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

  • No labels

3 Comments

  1. Дополнить, что для дефолтного подключения по XDMCP опцию SCREEN_07=xfreerdp изменить на SCREEN_07=xdmcp

  2. Поправить .....xfreerdp /v:192.168.56.1 /cert-ignore +sec-nla...... на 192.168.56.100