Оглавление | ||||
---|---|---|---|---|
|
Более актуальную статью см. Терминальный сервер LTSP (ltsp-server-standalone) на базе Astra Linux.
Информация | ||
---|---|---|
| ||
|
Предупреждение |
---|
Для создания сервера терминалов необходим диск со средствами разработки Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) |
В статье описывается создание сервера терминалов LTSP на базе Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с загрузочным образом для бездисковых станций с пробросом usb устройств.
Конфигурация стенда
Стенд состоит из двух виртуальных машин (ВМ):
- ВМ с Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с обновлением БЮЛЛЕТЕНЬ № 20181229SE16;
- ВМ без ОС - тонкий клиент.
На первой машине используются 2 сетевых интерфейса:
- eth0 смотрит в интернетсетевой интерфейс eth0 подключен к Интернет;
- eth1 - во внутреннюю сетьсетевой интерфейс eth1 подключен к внутренней, в которой находятся тонкие клиенты.
Настройка сервера
Обновление системы
Обновим систему по статье: https://wiki.astralinux.ru/x/e410Ag
Проверим:
Command | ||
---|---|---|
| ||
Update 1 Bulletin 20181229SE16 |
Включение удаленного доступа
Разрешим Разрешить удаленный вход в систему:
Информация |
---|
Панель управления → Система → Вход в систему → Дополнительно - Разрешить удаленный вход в систему (Не забываем перезапустить fly-dm) |
Настройка сети
Сеть настраиваем можно настроить любым предпочтительным способом. Например, с помощью Network Manager. Первый сетевой интерфейс (eth0 смотрит в ) подключен к интернет, и настройки получает автоматически. Второму , eth1, прописываем статический сетевому интерфейсу (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 с помощью Network Manager поле "DNS servers" должно оставаться либо пустым, либо его значение должно совпадать с вышеупомянутым именем домена. Если сетевые подключения настраиваются посредством /etc/network/interfaces, то там также либо указать такое же имя домена, либо не указывать никакое. При несовпадении имён подключение по XDMCP НЕВОЗМОЖНО.
Установка ПО
Для сервера терминалов необходимы следующие пакеты:
- isc-dhcp-server - DHCP сервер.;
- tftpd-hpa - сервер tftpd;
- ltsp-server - скрипты для создания сервера терминалов;
- xrdp - реализация протокола доступа к удалённому рабочему столу;
Установить эти пакеты можно командой:
Command |
---|
sudo apt install isc-dhcp-server ltsp-server tftpd-hpa xrdp |
Ошибки, выводимые при установке dhcp сервера, игнорируем: настройка dhcp будет осуществлена на следующем шаге.
Настройка DHCP сервера
В файле /etc/default/isc-dhcp-server в строке INTERFACECv4=""
указать интерфейс: eth1
Блок кода | ||
---|---|---|
| ||
INTERFACECv4="eth1" |
Создадим Создать конфигурацию для DHCP сервера:
Command | ||
---|---|---|
| ||
sudo ltsp-config --overwrite isc-dhcp-server |
Command | ||
---|---|---|
| ||
sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.bak |
Command | ||
---|---|---|
| ||
sudo cp /etc/ltsp/dhcpd.conf /etc/dhcp/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Перезапустить службу DHCP:
Command | ||
---|---|---|
| ||
sudo systemctl restart isc-dhcp-server |
Настройка tftpd сервера
В файле /etc/default/tftpd-hpa изменим изменить путь к корню тфтп раздаваемого ресурса сервера:
Блок кода | ||
---|---|---|
| ||
TFTP_DIRECTORY="/var/lib/tftpboot" |
ПерезапустимПерезапустить службу:
Command |
---|
sudo systemctl restart tftpd-hpa |
Настройка LTSP
Скопируем конфигурацию DebianСкопировать конфигурационные файлы Debian в каталог /usr/share/ltsp/plugins/ltsp-build-client/AstraLinuxSE:
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 РУСБ.10015-01 (очередное обновление 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 - собрать образ с системой 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:
Command |
---|
sudo ltsp-chroot passwd root |
Примонтируем Примонтировать репозитории в каталоги образа:
Command |
---|
sudo mkdir /opt/ltsp/amd64/opt/{main,devel} |
в /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
Блок кода | ||
---|---|---|
| ||
# 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 приводим 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 к виду:
Блок кода | ||
---|---|---|
| ||
#!/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 |
Далее правим Привести файл /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:
Блок кода | ||
---|---|---|
| ||
ACTION=="add", KERNEL=="sd[a-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbstick-handler@%k" |
Создать unit для запуска:
Блок кода | ||
---|---|---|
| ||
[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 |
И скрипт сценарий для монтирования:
Блок кода | ||
---|---|---|
| ||
#!/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 |
Загрузка образа
ВключаемДля загрузки образа:
- Включить тонкий клиент
- ;
- Выбирать загрузку по сети.