Содержание

Skip to end of metadata
Go to start of metadata

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

Для передачи клиентам первичной информации (сетевой адрес терминала, адрес, к которому должен подключаться терминал) дложна использоваться службы DHCP. Далее рассматриваются два варианта настройки:

  • служба dnsmasq - упрощенная служба, устанавливается вместе с сервером LTSP, включает в свой состав простой TFTP-сервер, и позволяет быстро настроить нужные параметры для работы терминалов;
  • служба isc-dhcp-server  - полноценная служба DHCP, обычно применяется в больших сетях.

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

Подключение клиентов осуществляется по протоколу SSH (рекомендованный вариант), или по протоколу xRDP.

Входящая в состав Astra Linux версия LTSP поддерживает два режима работы клиентов:

  • "Тонкий клиент" - По сети загружается минимальный образ с базовой системой и графическим сервером. Приложения выполняются на сервере терминалов, результаты работы передаются по сети графическому серверу на дисплей терминального клиента. Дополнительно в этом режиме поддерживается возможность выполнения отдельных приложений на тонком клиенте (подробнее см. https://manpages.ubuntu.com/manpages/trusty/man5/lts.conf.5.html ).

  • "Толстый клиент" - Загружается полноценный образ с ОС. Приложения выполняются непосредственно на терминальном клиенте, а сервер просто предоставляет доступ к пользовательским данным и программам.


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

По умолчанию клиент загружается в "тонком" режиме. Клиент загружается в "толстом" режиме (chroot в клиентскую систему) после установки в клиентский образ менеджера рабочего стола (fly-wm). Кроме того, для указания режима загрузки клиентов можно использовать опцию LTSP_FATCLIENT=true/false (по умолчанию не задана) в файле /var/lib/tftpboot/ltsp/amd64/lts.conf на сервере терминалов (подробнее см. https://manpages.ubuntu.com/manpages/trusty/man5/lts.conf.5.html ).


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

  • ОС ОН Орёл 2.12 (2.12.24 и выше)
  • ОС СН Смоленск 1.6 (с установленным обновлением безопасности Update5 и выше)

В данной статье описывается работа с LTSP версии 5.18.12-3.1astra3, позволяющей создавать гостевые образы ОС ОН Орёл и ОС СН Смоленск на любой из этих ОС (по умолчанию создается гостевой образ соответствующий текущей хост-системе).  Эта версия доступна для установки из репозитория пакетов ОС ОН Орёл.

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


Настройка сетевых интерфейсов

Типичный сервер LTSP имеет два сетевых интерфейса:

  • Первый интерфейс (eth0) подключен к Интернет, и настройки получает автоматически;
  • Второй интерфейс (eth1) подключен к локальной сети, и ему присвоен статический адрес (для примера 192.168.56.10 с маской 24). Через этот интерфейс осуществляется подключение клиентских машин (также находящихся в локальной сети).

Сетевые интерфейсы настраиваем любым предпочтительным способом, например, с помощью Network Manager.

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

Для работы сервера LTSP нужно разрешить удаленный вход в систему:

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

Установка пакетов


Предполагается, что перед установкой пакетов правильно подключены и настроены репозитории (установочные диски).

Для установки пакетов на ОС СН Смоленск необходимы:

  • установочный диск;
  • диск со средствами разработки;
  • образ обновления установочного диска (update-iso);
  • образ обновления диска со средствами разработки (update-dev-iso).


Установка пакетов может быть выполнена с помощью графического менеджера пакетов или из командной строки командой:

sudo apt install ltsp-server-standalone xrdp ssh

При установке пакета ltsp-server-standalone дополнительно будут установлены пакеты:

  • dnsmasq - встроенный сервер DHCP/TFTP. Используется для выдачи клиентам IP-адресов, информации о tftp-сервере и пути к загрузчику pxelinux, а также отдает по tftp-протоколу загрузчик, ядро и главный конфигурационный файл lts.conf;
  • ltsp-server - набор сценариев для создания сервера терминалов.

Установка пакета xrdp необязательна, и нужна для поддержки работы по протоколу xRDP в дополнение к протоколу SSH.


Настройка служб DHCP

Не нужно настраивать обе службы, достаточно одной.

Настройка службы dnsmasq

  1. Создать файл /etc/dnsmasq.d/ltsp-server-dnsmasq.conf конфигурации службы dnsmasq командой :

    sudo ltsp-config --overwrite dnsmasq

  2. Отредактировать файл конфигурации /etc/dnsmasq.d/ltsp-server-dnsmasq.conf.


    В конфигурационном файле, устанавливаемом по умолчанию, имеются параметры использования proxy:

    dhcp-range=192.168.56.0,proxy
    dhcp-range=192.168.122.0,proxy

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


    Минимальные исправления - указать диапазон адресов, выдаваемых сервером DHCP (в пример ниже отмечено выделением):

    # Configures dnsmasq for PXE client booting.
    # All the files in /etc/dnsmasq.d/ override the main dnsmasq configuration in
    # /etc/dnsmasq.conf.
    # You may modify this file to suit your needs, or create new ones in dnsmasq.d/.
    #interface=eth1
    # Log lots of extra information about DHCP transactions.
    #log-dhcp
    # IP ranges to hand out.
    dhcp-range=192.168.56.20,192.168.56.250,8h
    # The rootpath option is used by both NFS and NBD.
    dhcp-option=17,/opt/ltsp/amd64
    # Define common netboot types.
    dhcp-vendorclass=etherboot,Etherboot
    dhcp-vendorclass=pxe,PXEClient
    dhcp-vendorclass=ltsp,"Linux ipconfig"
    # Set the boot filename depending on the client vendor identifier.
    # The boot filename is relative to tftp-root.
    dhcp-boot=net:pxe,/ltsp/amd64/pxelinux.0
    dhcp-boot=net:etherboot,/ltsp/amd64/nbi.img
    dhcp-boot=net:ltsp,/ltsp/amd64/lts.conf
    # Kill multicast.
    dhcp-option=vendor:pxe,6,2b
    # Disable re-use of the DHCP servername and filename fields as extra
    # option space. That's to avoid confusing some old or broken DHCP clients.
    dhcp-no-override
    # The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
    # Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
    pxe-service=X86PC, "Boot from network", /ltsp/amd64/pxelinux
    # Comment the following to disable the TFTP server functionality of dnsmasq.
    enable-tftp
    # The TFTP directory. Sometimes /srv/tftp is used instead.
    tftp-root=/var/lib/tftpboot/
    # Disable the DNS server functionality of dnsmasq by setting port=0
  3. Перезапустить сервис dnsmasq командой:

    sudo systemctl restart dnsmasq


Настройка службы isc-dhcp-server

Предполагается, что служба isc-dhcp-server уже настроена и находится в эксплуатации. При этом она не обязательно дожна находиться на сервере терминалов.
  1. Создать конфигурационный файл /etc/ltsp/dhcpd.conf, выполнив на сервере терминалов команду:

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

    При этом будет создан конфигурационный файл /etc/ltsp/dhcpd.conf следующего вида:

    #
    # Default LTSP dhcpd.conf config file.
    #
    
    authoritative;
    
    subnet 192.168.67.0 netmask 255.255.255.0 {
      range 192.168.67.20 192.168.67.250;
      option domain-name "example.com";
      option domain-name-servers 192.168.67.1;
      option broadcast-address 192.168.67.255;
      option routers 192.168.67.1;
      next-server 192.168.67.1;
    # 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";
      }
    }

    Указанные в полученном файле сетевые адреса и сетевые маски следует заменить на актуальные.

  2. Если в используемой сети нет службы DHCP, а служба DHCP нужна только для сервера терминалов и не используется более ни для чего, то после внесения актуальных сетевых адресов и масок полученный на предыдущем шаге файл можно использовать как файл конфигурации службы isc-dhcp-server:

    sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.bak
    sudo cp /etc/ltsp/dhcpd.conf /etc/dhcp/dhcpd.conf
    sudo systemctl restart isc-dhcp-server

    Если служба DHCP используется для иных целей (в том числе, если используется служба, отличная от isc-dhcp-server), то параметры из полученного файла должны пыть перенесены в конфигурацию используемой службы.


Создание образа тонкого клиента

Для создания образа тонкого клиента используется сценарий ltsp-build-client. Особенности применения сценария зависят от создаваемой гостевой ОС (ОС СН Astra Linux SE или ОС ОН Astra Linux CE):

ОС ОН Орёл

В ОС ОН Орёл по умолчанию для сборки образа будет использоваться тот же дистрибутив и/или архитектура что и на серверной системе, и сценарий сборки образа в простейшем случае может быть вызван без параметров:

sudo ltsp-build-client

Если предполагается использовать графическую оболочку, то следует сразу установить пакет fly-all-main:

sudo ltsp-build-client --early-packages fly-all-main

Возможные необязательные параметры:

--chroot <название папки> - название папки с образом относительно каталога /opt/ltsp/ (по умолчанию - amd64);

--dist <название дистрибутива> - задаёт для сборки дистрибутив, отличный от используемого по умолчанию дистрибутива серверной системы. Поддерживаются два варианта: orel или smolensk;

--mirror <url> - задаёт для сборки другое расположение зеркала репозитория, из котрого нужно ставить систему (по умолчанию http://dl.astralinux.ru/astra/current/orel/repository);

--early-packages <название пакетов> — установка в клиентский образ дополнительных пакетов.

В опции --early-packages названия дополнительных пакетов должны быть указаны через запятую без пробелов.



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

В ОС СН Смоленск для сборки образа нужно настроить репозиторий или примонтировать установочный диск (или образ диска) 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

Для успешной сборки системы необходимы:

  • установочный диск;
  • диск со средствами разработки;
  • образ обновления установочного диска (update-iso);
  • образ обновления диска со средствами разработки (update-dev-iso).

Сборка образа для ОС СН Смоленск осуществляется командой:

sudo ltsp-build-client --update-bin <путь_к_update-iso> --update-dev <путь_к_update-dev-iso>

При этом, в дополнение к необязательным опциям сценария сборки, применяемым в ОС ОН Орёл, в ОС СН Смоленск используются две обязательные опции:

--update-bin - path/to/iso образ репозитория с обновлением smolensk;
--update-dev - path/to/iso iso образ репозитория с обновлением smolensk-devel.

Если предполагается использовать графическую оболочку, то следует сразу установить пакет fly-all-main (так же, как в ОС ОН Орёл, использовать опцию --early-packages).

В ОС СН Смоленск помимо устанавливаемых в ОС ОН Орёл пакетов будут установлены пакеты parsec и linux-astra-modules. В процессе работы сценария будут появляться запросы на установку/монтирование необходимых дисков в каталог /media/cdrom.

После завершения работы образ системы будет записан в /opt/ltsp/images. Распакованная система будет расположена в каталоге /opt/ltsp/amd64, или в том подкаталоге каталога /opt/ltsp/, который был указан с помощью необязательной опции --chroot.

Настройка образа тонкого клиента

Опционально в отладочных целях рекомендуется обновить каталоги пакетов и задать пароль для локального администратора в клиентском образе (вместо <adminname> указать имя администратора): 

[ -d /parsecfs ] && sudo mount --bind /parsecfs /opt/ltsp/amd64/parsecfs
sudo ltsp-chroot -m

apt update
useradd -g adm -G sudo -s /bin/bash -m <adminname>
passwd <adminname>
exit
[ -d /parsecfs ] && sudo umount /opt/ltsp/amd64/parsecfs

В приведённом выше примере первая и последняя команды (монтирование и размонтирование файловой системы /parsecfs) нужны (и сработают) только в ОС СН Смоленск, в ОС ОН Орёл они не нужны. При этом подразумевается, что распакованная система находится в каталоге /opt/ltsp/amd64/, если это не так, то эти команды нужно изменить соответствующим образом.

Если ранее не был установлен пакет fly-all-main (или какой-то другой нужный пакет), то его можно доустановить в любой момент:

sudo ltsp-chroot -m apt install fly-all-main


При необходимости для команды ltsp-chroot может быть указан дополнительный параметр -a <имя каталога>, задающий расположение образа (аналогично параметру --chroot команды ltsp-build-client);
Обновить созданный образ:

sudo ltsp-update-image

Перезапустить службы nbd-server, sshd, xrdp:

sudo systemctl restart nbd-server sshd xrdp

По умолчанию для клиентов используется файл конфигурации, находящийся в образе терминального клиента (/opt/ltsp/amd64/etc/lts.conf).
Опционально рекомендуется создать отдельный файл конфигурации по умолчанию для LTSP клиентов:

sudo ltsp-config --overwrite lts.conf

После создания файла конфигурации на сервере терминалов для клиентов будет использоваться файл /var/lib/tftpboot/ltsp/amd64/lts.conf.

Создание и настройка образа толстого клиента

Для создания образа толстого клиента нужно:
  1. Создать и настроить образ тонкого клиента по описанной выше процедуре или создать сразу образ толстого клиента:

    sudo ltsp-build-client --fat-client-desktop fly-wm --late-packages sudo,mc

    Где параметры:

    --fat-client-desktop - название рабочего стола (fly-wm)

    --late-packages - название дополнительных пакетов, отсутствующих в стандартном наборе для создания тонкого клиента( в данном примере - пакеты sudo и mc)

    В параметре --late-packages названия дополнительных пакетов должны быть указаны через запятую без пробелов.

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

  2. Если используется образ тонкого клиента, то установить в него основные пакеты Fly:

    sudo ltsp-chroot -m apt install fly-all-main

    При необходимости для команды ltsp-chroot может быть указан дополнительный параметр -a <имя каталога>, задающий расположение образа (аналогично параметру --chroot команды ltsp-build-client);


  3. Аналогично, с помощью команды ltsp-chroot -m apt install установить в созданный образ опциональные метапакеты (или же необходимые пакеты по отдельности):

    • Метапакет fly-all-optional - включает в себя пакеты ark, clementine, compton, fly-admin-iso, fly-fm-crypt, gparted, guvcview, kgpg, librsvg2-bin, qapt-deb-installer, qbat, recoll, speedcrunch, synaptic, vlc, vlc-astra, vlc-l10n, vlc-plugin-access-extra, xca, yelp;

    • Метапакет fly-all-games - включает в себя пакеты klines, kmines, kpat, supertux, warzone2100, xonotic;

    • Пакет libreoffice -  кроссплатформенный, свободно распространяемый офисный пакет с открытым исходным кодом;

    • другие необходимые пакеты;

  4. Если был установлен fly-dm, то запретить его автозапуск:

    sudo ltsp-chroot -m systemctl disable fly-dm

    При необходимости для команды ltsp-chroot может быть указан дополнительный параметр -a <имя каталога>, задающий расположение образа (аналогично параметру --chroot команды ltsp-build-client);


  5. В используемом файле конфигурации клиента (/opt/ltsp/amd64/etc/lts.conf или /var/lib/tftpboot/ltsp/amd64/lts.conf) изменить значение параметра LDM_SESSION на default (добавить параметр, если его нет), и добавить параметр LDM_PASSWORD_HASH для корректной работы блокировщика экрана:

    # If you're using Unity, you might want to install gnome-session-fallback and
    # use it by default instead, as it performs better on LTSP thin clients.
    LDM_SESSION="default"
    LDM_PASSWORD_HASH=True
  6. Обновить ранее собранный образ клиента:

    ltsp-update-kernels <ARCH> && sudo ltsp-update-image <ARCH>

    где вместо <ARCH> указать название каталога, в котором находятся файлы для сборки (каталог указывается относительно каталога /opt/ltsp/ и, если не указать ничего - то будет использована архитектура amd64, т.е. будет использован  каталог /opt/ltsp/amd64/)

Настройка удалённых подключений XDMCP и RDP

По умолчанию подключение осуществляется с использованием оконного менеджера ldm.

Для подключения по протоколу XDMCP:

В ОС СН Смоленск 1.6 заменить в файле /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 (указать актуальный IP-адрес):

/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

И сделать созданный файл /opt/ltsp/amd64/usr/local/bin/rdp.sh исполняемым:

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

Выполнить команды:

sudo ltsp-chroot systemctl disable fly-dm
sudo ltsp-chroot -m update-initramfs -uk all
sudo ltsp-config --overwrite lts.conf

Файл /var/lib/tftpboot/ltsp/amd64/lts.conf привести к следующему виду (исправив IP-адреса на актуальные):

nano /var/lib/tftpboot/ltsp/amd64/lts.conf
[default]
  LTSP_CONFIG=True
  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+="sy sudo mount --bind /persecfs /opt/ltsp/<name>/parsecfsstemd", 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

Разрешить выполнение сценария:

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

Пересоберать образ:

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

  • No labels