Содержание

Skip to end of metadata
Go to start of metadata

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

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Для создания сервера терминалов необходим диск со средствами разработки Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)


В статье описывается создание сервера терминалов LTSP на базе Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с загрузочным образом для бездисковых  станций с пробросом usb устройств.


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


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

  1. ВМ с Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с обновлением БЮЛЛЕТЕНЬ № 20181229SE16;
  2. ВМ без ОС  - тонкий клиент.

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

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

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


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

Обновим систему по статье: 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


При настройке сетевых подключений следует помнить, что имя домена, задаваемое в настройках службы 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  НЕВОЗМОЖНО.

Установка ПО

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

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

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

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

Ошибки, выводимые при установке 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 РУСБ.10015-01 (очередное обновление 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 - собрать образ с системой Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6);

--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.com /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
sudo ltsp-config --overwrite lts.conf

Далее правим /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