Статья поможет скомпилировать ПО для тонких клиентов (thinstation). С помощью тонкого клиента пользователь сможет подключаться к службам RDP / Citrix / VMview и другим протоколам. Для компиляции автор использовал CentOS 8, редакцию Server
Thinstation
Thinstation 6.2 — дистрибутив Линукс, который загружают на тонкий клиент(USB/HDD/PXE). Это – «урезанный» Linux, в нем убрали почти всё, кроме сетевых утилит. Для запуска дистрибутива достаточно иметь 1 CPU и 2 Гб ОЗУ. Для антикварных ЭВМ можно использовать Thinstation 5.1 который требует всего 512 Мб ОЗУ.
Подготовка пакетов
Так как в centos 8 уже предустановлен chroot, то других зависимостей перед установкой нет.
Скачивание исходников
репозиторий thinstation весит около 1.3 гб, так что, если у вас медленный интернет канал – наберитесь терпения.
cd /opt
git clone --depth 1 git://github.com/Thinstation/thinstation.git
cd thinstation
Конфигурирование
После скачивания репозитория thinstation, нам нужно собрать окружение chroot. Занимает это около 10-15 минут.
./setup-chroot
Попав в окружение chroot, нужно подготовить конфигурационные файлы, требуемые для сборки образа thinstation.
Имеется несколько вариантов сборки:
iso syslinux pxe refind grub
В нашем случае мы будем компилировать только версию pxe.
Для начала стоит удалить ссылку build.conf на build.conf.example, дабы не потерять оригинальный conf-файл, из которого в случае ошибок можно получить оригинальные параметры настроек.
cd build
rm -rf build.conf
cp build.conf.example build.conf
пройдемся по общим параметрам в файле build.conf
nano build.conf
Модуль hardware отвечает за выбор преднастроенных конфигураций для ПК или тонких клиентов. Он понадобится позже.
machine MyMachineName
Конфигурация Wifi
Если у вас в устройстве имеется wifi, следует активировать wpa_supplicant
package wpa_supplicant
Поддержка файловых систем
для дополнительного расширения функционала мы включим модули cifs,nfs и ntfs
module usb-storage
module isofs # ISO9960 file system support for CDRoms
module udf # CDRom UDF file system support
module vfat # Fat and VFat file system support
module ntfs # NTFS file system support
module ext4 # Ext4 file system support
module nfs # NFS file system support
module cifs # CIFS support (use either this or smbfs - not both)
Активируем netfiles, для загрузки дополнительных конфигурационных файлов через tftpd/http, которые мы используем позже для удобства администрирования.
package netfiles
Т.к. в нашем случае мы не будем использовать десктоп на тонких клиентах, мы удалим все ненужные локализации, кроме английской.
package locale-en_US # English-US
Подошла очередь приложений.
В моем случае нужен только freerdp, т.к. мы только и будем делать, что подключаться к серверу по RDP
package freerdp # X RDP Client - fork of rdesktop
#package rdesktop # X RDP client for Windows Terminal Services (ver 1.7)
#package vncviewer # VNC client (vncviewer)
#package xorg7vnc # Remote Control Client Workstation
#package ica # Citrix ICA client support
#package tarantella # Tarantella client support
#package xnest # XDM in a window client
#package urxvt # Light Xterm Client (vt102)
#package xterm # Xterm Client (vt220)
#package ssh # Secure Shell client
#package tn5250 # 5250 terminal emulator
#package dillo # Dillo light web browser
#package thinlinc # Cendio ThinLinc client support
#package nx # No Machine NX client
#package 2x # 2X client
#package spice # Redhat Spice Client
#package java # Java runtime
#package firefox # Firefox current Web Browser
#package chrome # Google Chrome Web Browser
#package chromium # Chromium Web Browser
#package kiosk # Rkiosk Plugin for Firefox
#package flash # Flash Current
#package filezilla # FileZilla FTP Client for X
#package git # GIT Version Control System
#package gparted # Gnome Partition Manager
#package open-vm-tools
#package vboxguest
#package medit # Notepad
#package mplayer # DVD and video player
#package vmview # VMware Open-View Client, PCOIP
#package xbmc # XBMC Media Center for X
#package evince # X PDF Viewer
#package openkiosk # OpenKiosk is a cross platform kiosk web browser based on Mozilla Firefox
#package xdmcp-connect # Simple connection to XDMCP server
Включаем пакет www для удаленного доступа к тонкому клиенту (Возможно пригодится)
package www
package lighttpd
Следующим шагом будет замена паролей и выбор режима загрузки.
Если включен режим fastboot – то отдельно будет сгенерирован файл, который будет загружен уже из запускаемой OC. Грубо говоря, это каталог /lib сжатый в squashfs.
В обратном случае все файлы будут добавлены в образ initrd.
param fastboot true # Mangles the filesystem a special way as to improve boot speed and reduce
# memory utilization. Cool/Dangerous . Harder to dubug other packages. (Finishing Touch)
# Set to 'true' to enable or 'lotsofmem' for slightly slower booting but no squash lag on app launch.
param tsuser tsuser # Name of the user that thinstation will run as. Needs userauto package.
param tsuserpasswd pleasechangeme # Do Change! Console/telnet password for non-root
param rootpasswd pleasechangeme # Do Change! Console/telnet password for root
# If this is enabled, Telnetd will be enabled.
param tsadminpasswd pleasechangeme # Admin password of web interface
param xorgvncpasswd pleasechangeme # VNC Access Password
param storagepasswd pleasechangeme # Password for storage server
param dialuppasswd pleasechangeme # Password for dialin account
param sambapasswd pleasechangeme # Password for samba shares when using user mode security
Дополнительные настройки
param bootresolution 1920x1080-32
param desktop file:./backgrounds/Hive_Lite.jpg # Custom image to load as desktop background
param defaultconfig thinstation.conf.buildtime # The file with default setup. No other config file is found
# during boot.
param basename thinstation # тут нужно указать имя файла для получения дополнительных файлов настроек
param basepath conf # тут нужно указать каталог для получения дополнительных файлов настроек
param baseurl 'http://${SERVER_IP}' # Used to determine url to wget/http files - if you wan't to use a web server on the same server as the TFTP server
param sametimestmp true # When enabled, the timestamps for all files and folders will be set to 00:00 of todays date in your timezone
param initrdcmd "gzip -9" # поправим gzip на более сильную компресию
param bootverbosity 3 # Increased vebosity when booting TS
param downloads /downloads
param bootimages "pxe" # сборка только PXE версии
param bootserver "192.168.1.1" # Указываем IP адрес сервера TFTPD64
Комментируем строки которые, будут устанавливать все модули.
#param allres true # Includes a lot of resolution splash images for live-cd s
#param allfirmware true # Includes a lot of firmwares for live-cd s
param earlymicrocode false # Builds microcode initramfs for early loading
Наш итоговый конфигурационный файлик, в котором мы дополнительно оставили xfwm4 для удобства использования оконного менеджера. Это может пригодиться для отладки. Далее, при помощи конфиг файла мы его отключим.
machine MyMachineName
package wpa_supplicant
module usb-storage
module isofs # ISO9960 file system support for CDRoms
module udf # CDRom UDF file system support
module vfat # Fat and VFat file system support
module ntfs # NTFS file system support
module ext4 # Ext4 file system support
module nfs # NFS file system support
module cifs # CIFS support (use either this or smbfs - not both)
package netfiles # Adds only this package instead of the whole ts-classic. netfiles lets you get thinstation.conf.xxx files
package udisks
package automount
package autonet
package ntp # Utility to obtain date & time from network
package alsa
package gnome-control-center
package volumeicon
package cpufreq
package xorg7-vesa #A fallback driver that works with almost everything. Does allow resolution changes
package xorg7-vmware
package xorg7-intel #Intel video driver for most modern chipsets except the GMA3500/3600
package locale-en_US # English-US
package freerdp # X RDP Client - fork of rdesktop
package open-vm-tools
package xfwm4
package xfce4-power-manager
package terminal # Terminal emulator for xfwm4 -- Pulls in xfwm4
package thunar # File Manager for xfwm4 -- Pulls in xfwm4
package www # Web access to client. From a browser: "http://<IP number>"
package cups
package samba-client # Samba smbclient, gives a shell like environment to access an samba server
package gtk-2.0 # Full gtk-2.0 plus clearlooks theme
package gtk-3.0
package gtk-theme-adwaita
package icons-cursor # Anti Aliased Mouse Cursor Theme
package icons-hicolor # Hi-Color icons for some applications and themes. Does not really contain any icons.
package icons-adwaita
package fonts-TTF-BH # This one works nicely most of the time and is small.
package fonts-TTF-vera
package fonts-TTF-liberation
package fonts-TTF-noto
param fastboot false # Mangles the filesystem a special way as to improve boot speed and reduce
param tsuser tsuser # Name of the user that thinstation will run as. Needs userauto package.
param tsuserpasswd pleasechangeme # Do Change! Console/telnet password for non-root
param rootpasswd pleasechangeme # Do Change! Console/telnet password for root
param tsadminpasswd pleasechangeme # Admin password of web interface
param xorgvncpasswd pleasechangeme # VNC Access Password
param storagepasswd pleasechangeme # Password for storage server
param dialuppasswd pleasechangeme # Password for dialin account
param sambapasswd pleasechangeme # Password for samba shares when using user mode security
param bootlogo true # Enable or Disable the use of the Boot splash.
param boottheme default # Backgound picture during boot
param splash silent
param fbmtrr 0 # MTRR value for uvesafb (default = 0, 4 is the best) grep your log to make sure you have not set it to high
param fbsm ywrap # Window scrolling method (redraw, ypan, ywrap) ywrap is best, but may not work correctly for all people
param bootresolution 1920x1080-32
param desktop file:./backgrounds/Hive_Lite.jpg # Custom image to load as desktop background
param defaultconfig thinstation.conf.buildtime # The file with default setup. No other config file is found
param basename thinstation # Used for all config/tftp/scp file names
param basepath conf # Used to determine path to tftp/scp files
param baseurl 'http://${SERVER_IP}' # Used to determine url to wget/http files - if you wan't to use a web server on the same server as the TFTP server
param haltonerror false # Will halt on error, default is true
param hardlinkfs true
param sametimestmp true # When enabled, the timestamps for all files and folders will be set to 00:00 of todays date in your timezone
param initrdcmd "gzip -9" # Compression mode and level of initrd file. none, gzip -9, lzma -9 ,bzip2 -9
param bootverbosity 3 # Increased vebosity when booting TS
param downloads /downloads
param bootimages "pxe"
param bootserver "192.168.1.1" # Used for the pxe image config files to specify where to download
param syslinuxtheme "default"
param grubtheme "default"
package alltimezone
param allres false # Includes a lot of resolution splash images for live-cd s
param allfirmware false # Includes a lot of firmwares for live-cd s
param earlymicrocode false # Builds microcode initramfs for early loading
param blacklist "snd-pcsp.ko pcspkr.ko"
Если вы пока не знаете, какое железо будет использовано на тонких клиентах или оно сильно разниться –
то стоит скомпилировать без создания конфигов machine и просто включить все модули, пропустив данный этап.
Если же у вас одна модель устройства, и/или если знания linux не позволяют вам просто сказать, какие модули (драйвера) вам нужны – то стоит скомпилировать дефолтный образ с добавлением параметра:
package extensions-x
и запустить компиляцию
./build --allmodules
Затем, нужно забрать iso из каталога boot-images/iso, развернуть на флешку и загрузить на клиенте.
Подключившись по telnet, выполнить команду hwlister.sh, которая сгенерирует файлы, требуемые для создания персонального конфига (нужен tftp).
На этом переходим к созданию machine
cd machine
mkdir MyMachineName
cd MyMachineName
cp /tftp_server/*.list .
Настроим, куда пользователь будет попадать после загрузки Thinstation, в плане окружения. Эти настройки производятся в файле thinstation.conf.buildtime
cd ../..
nano thinstation.build.conf
установим timzone и параметр загрузки дополнительных конфигов с tftp сервера, а так же, удаленный доступ с любых IP-адресов
TIME_ZONE=Asia/Tashkent
NET_REMOTE_ACCESS_FROM=0.0.0.0
NET_FILE_ENABLED=On
Компиляция
Теперь, когда все наши конфиги готовы – приступим к сборке.
cd ../../
./build
Переносим всё из каталога ./boot-images/pxe/ в каталог tftp
cp -rf ./boot-images/pxe/* /tftp_server/
iPxe
iPxe используется для загрузки по сети, используя протоколы TFTP HTTP, а также iSCSI.
В нашем случае, через tftp буден передан загрузочный образ iPXE, который в свою очередь даст старт загрузки файлов initrd и vmlinuz по HTTP. Это ускорит загрузку, т.к. tftp – довольно медленный протокол и в целом не предназначен для файлов большого объёма.
Скачивание исходников
cd /opt
git clone git://git.ipxe.org/ipxe.git
cd ipxe
Подготовим файл, который будет загружаться сразу после запуска iPXE
nano embed.ipxe
Создадим “вшитую” конфигурацию для получения параметров по DHCP, в том числе и загрузочного образа. В моем случае, корень веб сервера и tftp смотрят в один и тот же каталог: /tftp_server/
#!ipxe
dhcp
chain http://192.168.1.1:8080/boot/efi64/boot.ipxe
Компиляция
Компилируем с указанием пути к нашему ранее созданному файлу iPXE
cd /opt/ipxe/src/
make bin-x86_64-efi/ipxe.efi EMBED=../embed.ipxe
переносим ./bin-x86_64-efi/ipxe.efi в каталог tftp
cp -rf ./bin-x86_64-efi/ipxe.efi /tftp_server/
Running
подготовим каталоги к запуску
cd tftp_server/boot
rm -rf ./efi32
rm -rf ./lpxelinux
rm -rf ./pxelinux
rm -rf ./efi64/*
cp ../../ipxe.efi ./efi64/
Создадим конфигурационный файл для загрузки нашего образа по ipxe
nano ./efi64/boot.ipxe
#!ipxe
kernel http://192.168.1.1:8080/boot/vmlinuz initrd=initrd
initrd http://192.168.1.1:8080/boot/initrd
boot
TFTP
Я использовал роутер с tftp сервером. Вариантов настройки TFTP сервера достаточно много. Я бы подсказал начинающим администраторам использовать tinyPXE.
Внесём опции 66 и 67 в DHCP, которые укажут клиенту адрес tftp сервера и путь к загрузочному образу:
option 66 = 192.168.1.1 # Адрес TFTP сервера
option 67 = boot/efi64/ipxe.efi # путь к файлу загрузки
Теперь все основные настройки и сборки завершены. Стоит попробовать загрузить свой тонкий клиент и проверить работоспособность всех своих приложений
thinstation.conf.network
Если загрузка удалась – можем переходить к дополнительным опциям. А именно: настройка авто подключения к RDP серверу.
Для этого в корне сервера нужно создать каталог conf
cd /tftp_server/
mkdir conf
cd conf
Создадим конфиг файл с именем thinstation.conf.network
nano thinstation.conf.network
Внесем в файл данные о подключении к серверу и его автозапуске. Дополнительно о параметрах freerdp можно почитать тут https://github.com/FreeRDP/FreeRDP/wiki/CommandLineInterface
SESSION_0_AUTOSTART=ON
SESSION_0_TYPE=freerdp
SESSION_0_TITLE="RDP"
SESSION_0_FREERDP_SERVER="server-ip-addr"
SESSION_0_FREERDP_OPTIONS="/d:domain.org /bpp:32 /cert-ignore +fonts +aero"
RECONNECT_PROMPT=FORCE
Cохраняем файл, перезагружаем тонкий клиент – и вуаля! Все готово.