LinuxForum.Fans
Тема

PXEBoot+ThinStation+Xdmcp на Mageia 6

Автор: DiabloPC 8 сообщений 750 просмотров
10.10.2017 00:02 #425828




Распинаться зачем оно нужно не буду, думаю если кто-то такое крутит то сам знает зачем оно ему *WASSUP*

В качестве подопытного кролика выступает Mageia 6 i586 (хотя работать должно, возможно с минимальными отличиями в конфигах, на любом дистрибутиве) [console]root@server.local:/ # echo `uname -rmo` `cat /etc/mageia-release`
4.12.14-server-1.mga6 i686 GNU/Linux Mageia release 6 (Official) for i586
[/console]
Для тех кто спросит почему ядро именно server: - игрался с ядрами, забыл откатиться на desktop.

Что потребуется:

  • Ну естественно сама Маgeia 6
  • DM с поддержкой xdmcp [[ так как KDM из магеи выпилили :( пришлось использовать LightDM ]]
  • DHCP сервер [[ будем использовать dhcpd ]]
  • TFTP сервер [[ в ход пойдет tftpd ]]
  • ThinStation

Думаю про установку системы осoбо расказывать не нужно, т.к. установщик Mageia чертовски прост и понятен.

Настраивать всё это удобно не на локальной машине, а удаленно, т.к. появляется возможность всё проверять по ходу действий.
Для удаленных соединений используем SSH
[console]## устaнaвливаем sshd на сервере:
root@server.local:/ # urpmi openssh-server
## так как 99% прийдется делать под учеткой root'a - разрешаем ему подключаться по ssh
root@server.local:/ # echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
## перзапускаем демон ssh
root@server.local:/ # systemctl restart sshd

## теперь можнo подключиться с другой машины и продолжить
ssh с ключом -X - да просто по привычке, на выполнение консольных команд не влияет, а если понадобится запустить что-то с графикой - никаких проблем

user@client.pc:~> ssh -X root@192.168.0.10
[/console]

Начнем с установки всего что нужно:
[console]## по какой-то странной привычке я всегда включаю все доступные источники
root@server.local:/ # cp /etc/urpmi/urpmi.cfg /etc/urpmi/urpmi.cfg~ && cat /etc/urpmi/urpmi.cfg~ | sed 's/ignore//g' > /etc/urpmi/urpmi.cfg
## устанавливаем
root@server.local:/ # urpmi lightdm dhcp-server tftp-server syslinux
## на клиенте можнo установить xnest, с ним удобно проверить реакцию сервера на удаленные подключения
user@client.pc:~> urpmi x11-server-xnest
[/console]

"Сеть у меня сконфигурирована следующим образом, так что отталкиваться я буду от этого, естественно всунуть это все в одну подсеть - не проблема"

Настроим сетевые интерфейсы:
[console]root@server.local:/ # cat /etc/sysconfig/network-scripts/ifcfg-enp2s6
DEVICE=enp2s6
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.10
ONBOOT=yes
METRIC=10
MII_NOT_SUPPORTED=no
USERCTL=yes
DNS1=192.168.0.3
RESOLV_MODS=no
IPV6INIT=no
IPV6TO4INIT=no
ACCOUNTING=no
NM_CONTROLLED=no

root@server.local:/ # cat /etc/sysconfig/network-scripts/ifcfg-enp2s7
DEVICE=enp2s7
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.3
ONBOOT=yes
METRIC=10
MII_NOT_SUPPORTED=no
USERCTL=yes
DNS1=192.168.0.3
RESOLV_MODS=no
IPV6INIT=no
IPV6TO4INIT=no
ACCOUNTING=no
NM_CONTROLLED=no
[/console]



Настраиваем dhcpd [console=inline] mcedit /etc/dhcpd.conf [/console]

[console]option ip-forwarding on; ## определяет возможность пересылки пакетов на клиенте.
default-lease-time 60; ## ||
min-lease-time 120; ## ||=> отвечают за сохранность IP за клиентом
max-lease-time 300; ## ||
authoritative; ## если интересно - читать здесь ==>
ddns-update-style interim;
log-facility local7; ## уровень логов, емнип 7-й самый низкий, т.е. минимум информации

subnet 192.168.1.0 netmask 255.255.255.0 { ## указывает на первую подсеть
range 192.168.1.101 192.168.1.200; ## диапазон адресов выдаваемых в подсети
option routers 192.168.1.10; ## адресс роутера
option subnet-mask 255.255.255.0; ## маска подсети
option domain-name-servers 192.168.0.3; ## адрес ДНС сервера (так как он есть на инет_роутере - отправим всех туда)
filename "pxelinux.0"; ## имя файла загрузчика (указывается относительно корня TFТP
next-server 192.168.1.10; ## адресc TFTP сервера
option root-path "192.168.1.10:/srv/tftp/nfs_root"; ## ресурс NFS, который будет использоваться как корневая ФС в случае загрузки через NFS
interface enp2s6; ## привязка к определенному интерфейсу
}


host st6012 { ## || выдаем статический адрес устройству
hardware ethernet 00:23:26:6a:12:f2; ## ||=> основываясь на его MAC'e
fixed-address 192.168.1.200; ## ||
}

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.199;
option routers 192.168.0.3;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.0.3;
interface enp2s7;
}

host xerox3040 {
hardware ethernet 43:09:5f:aa:09:a7;
fixed-address 192.168.0.189;
min-lease-time 7200;
}

host st6012wl {
hardware ethernet 34:23:87:10:17:01;
fixed-address 192.168.0.200;
[/console]

Так как в обе подсети адреса раздаются с нашего сервера не забываем отрубить DHCP на апаратном роутере!

Перезагружаем сетевые сервисы и DHCP
[console]root@server.local:/ # systemctl restart network.service
root@server.local:/ # systemctl restart dhcpd.service[/console]

Пришло время DM
[console]## Назначим LightDM менеджером дисплея по умолчанию
root@server.local:/ # echo 'DISPLAYMANAGER=LIGHTDM' > /etc/sysconfig/desktop
## Резрешим удаленные подключения
root@server.local:/ # echo -e "[XDMCPServer] \nenabled=true \nport=177" >> /etc/lightdm/lightdm.conf
## Перезапускаем службу:
root@server.local:/ # systemctl restart prefdm.service
[/console]


На этом этапе уже можно поглядеть на удаленный десктоп:
[console]user@client.pc:~> Xnest :1 -query 192.168.0.10
## после выполнения команды нас радостно должен поприветствовать экран входа удаленного LightDM
##если этого не случилось - внимательно всё перепроверяем
[/console]
___________________________________________________
Продолжение ===>

10.10.2017 09:49 #425829
"DiabloPC" написал:
Для тех кто спросит почему ядро именно server: - игрался с ядрами, забыл откатиться на desktop.

Извини что не по теме, но когда устанавливал 32-бит из полного образа, то ядро server ставится по дефолту(галочка на Рабочая станция), при этом есть приятная плюшка, если ОЗУ больше 4Гб, то видится и используется вся оперативка, при установке 64-бит системы server уже не ставится по дефолту

10.10.2017 10:25 #425830
"algri14" написал:
если ОЗУ больше 4Гб, то видится и используется вся оперативка

Ядро с поддержкой PAE.

11.10.2017 01:52 #425855

Далее настроим TFTP
[console]root@server.local:/ # cat /usr/lib/systemd/system/tftp.service
[Unit]
Description=Tftp Server
Requires=tftp.socket
Documentation=man:in.tftpd


[Service]
ExecStart=/usr/sbin/in.tftpd -s
/srv/tftp ## по умолчанию оно отправляет кудато в "/var"
StandardInput=socket

[Install]
Also=tftp.socket


## создадим каталог, который указали в настройках
root@server.local:/ # mkdir /srv/tftp

## устанавливаем сервис в автозагрузку и запускаем
root@server.local:/ # systemctl enable tftp.service && systemctl restart tftp.service

## Дальше создаем структуру каталогов нашего tftp
root@server.local:/ # cd /srv/tftp && mkdir pxelinux.cfg img lib boot

## копируем загрузчик и его библиотеки
root@server.local:/ # cp /usr/lib/syslinux/pxelinux.0 /srv/tftp/ && cp /usr/lib/syslinux/*.c32 /srv/tftp/

## теперь можно проверить tftp сервер
user@client.pc:~> tftp 192.168.0.10
tftp> get pxelinux.0
tftp> quit
user@client.pc:~> ls pxelinux.0
pxelinux.0 ## если файл стянулся - все впорядке.[/console]

Пришла очередь thinstation
[console]## создаем каталог где будем всё это крутить-вертеть :)
root@server.local:/ # mkdir /srv/thinstation_build_env

## стягиваем репозиторий thinstation
## (используем версию 5.5 т.к., судя по информации на гитхабе, она самая свежая, невзирая на наличие 5.6 и даже 6.х)
root@server.local:/ # cd /srv/thinstation_build_env && git clone --depth 1 git://github.com/Thinstation/thinstation.git -b 5.5-Stable

## далее идем в chroot thinstation, соглашаемся ("у") со всем что оно спрашивает
root@server.local:/ # /srv/thinstation_build_env/thinstation/setup-chroot
[chroot@TS5:]# exit[/console]

Теперь нужно подправить конфиги под себя:
[console=inline]mcedit /srv/thinstation_build_env/thinstation/build/build.conf[/console]
Все параметры в этом файле очень хорошо прокоментированы, так что особо здесь расказывать о них нету смысла, приведу лишь свой конфиг без коментариев:

build.conf
text
machine classic_generic        
module usb-storage
module autofs4                  
module isofs                  
module udf                     
module vfat                    
module ext2                   
module ext3                   
module ext4                  
module nfs            
package overlayfs                     
package automount
package netfiles                     
package udisks
package networkmanager
package ntp                     
package sound-esd               
package alsa
package pulseaudio
package xdmcp-connect
package gst-plugins-base
package gst-plugins-good
package libva
package cpufreq
package xorg7-vesa           
package xorg7-nouveau         
package xorg7_nvidia           
package xorg7-intel          
package locale-en_US  
package locale-ru_RU 
package locale-uk_UA  
package vncviewer         
package xorg7vnc      
package xnest         
package xterm         
package ssh          
package dillo            
package open-vm-tools
package www      
package sshd                   
package fonts-misc
package fonts-TTF-BH          
package fonts-TTF-vera
package fonts-TTF-liberation
package lshw                   
param tsuser         user            
param tsuserpasswd   00   
param rootpasswd     0000 
param xorgvncpasswd  0000      
param storagepasswd  00          
param dialuppasswd   00       
param sambapasswd    00                  
param kernelcmdline "nomodeset"        
param acpisupport    enable              
param bootlogo       false                  
param boottheme      default              
param splash         0             
param fbsm           ywrap               
param bootresolution 1024x768-32  
param defaultconfig  thinstation.conf.buildtime  
param basename       thinstation   
param basepath       ts5.5     
param haltonerror    false                            
param hardlinkfs     true
param sametimestmp   true                          
param initrdcmd      "squashfs"               
param bootverbosity   15 
param downloads         /downloads
param bootimages        "pxe"
param bootserver        "192.168.1.10"  
param syslinuxtheme     "default"
param allfirmware       false        
param blacklist snd-pcsp.ko

Второй файл, который нужно подправить, это [console=inline] /srv/thinstation_build_env/thinstation/build/thinstation.conf.buildtime[/console]

Здесь всё хуже, коментариев нету в принципе, благо хоть параметры более-менее поддаются осмыслению...
[console]AUDIO_LEVEL=100 ## т.к. на клиенте громкость будет нерегулируемая - выкручиваем ее на максимум
MIC_LEVEL=100
SESSION_0_TYPE=xdmcp ## тип сесии, в нашем случае xdmcp
SESSION_0_AUTOSTART=on ## автостарт сесии
SESSION_0_XDMCP_SERVER=192.168.1.10 ## адрес сервера
SESSION_0_XDMCP_OPTIONS="X :3 -listen tcp -once -query" ## опции передаваемые иксам при запуске
NET_USE_DHCP=on ## ну да, исподьзуем dhcp
NET_HOSTNAME=thinstation
NET_TELNETD_ENABLED=ON
TIME_ZONE=America/Los_Angeles
NET_TIME_SERVER=us.pool.ntp.org
NET_REMOTE_ACCESS_FROM="0.0.0.0" ## к клиенту можно достучаться через браузер на порту 6800, здесь указуем с каких адресов можно это делать
TFTP_BLOCKSIZE=1024
BIND_MOUNT0="storage:/mnt/storage" ## куда будем монтировать всякие флЮшки
STORAGE_CONFIG1=/mnt/storage
USB_STORAGE_SYNC=on ## так как безопасного извлечения устройств не будет - прийдется и это включить
LOCALE=en_US
MOUNT_0="LABEL=boot /boot auto x-mount.mkdir,defaults 0 0"
MOUNT_1="LABEL=home /root auto x-mount.mkdir,defaults 0 0"
MOUNT_2="LABEL=swap swap swap defaults 0 0"
SCREEN_RESOLUTION="1024x768" ## разрешение экрана клиента
SCREEN_COLOR_DEPTH="24"
SET_RESOLUTION_MULTIMONITOR_EXPAND='mirror'
SET_RESOLUTION_MULTIMONITOR_AUTOSCALE='scale'
[/console]

Еще стоит покопать в каталоге [console=inline]/srv/thinstation_build_env/thinstation/build/conf/[/console], там куча примеров того что можно еще настроить, и благо они нормально описаны. Все что понравится из примеров вытягиваем в наш
[console=inline] /srv/thinstation_build_env/thinstation/build/thinstation.conf.buildtime[/console]

Далее самое смешное: начиная с версии 5.0 разрабы thinstation решили выкинуть поддержку xdmcp o_O админегознает зачем, но факт.
Прийдется ее вернуть:
[console]root@server.local:/ # cd /srv/thinstation_build_env/thinstation/ts/build/packages/
root@server.local:packages/ # mkdir -p xdmcp-connect/etc/init.d
root@server.local:packages/ # echo xorg7 > xdmcp-connect/dependencies
root@server.local:packages/ # echo ",dependencies,0,0,,0,,,,,,,,," > xdmcp-connect/.dna
root@server.local:packages/ # cd xdmcp-connect/etc/init.d && ln -s /etc/thinstation.packages xdmcp[/console]

И не забываем добавить его в build.conf строчкой package xdmcp-connect .

Соберем нашу thinstation
[console]root@server.local:/ # /srv/thinstation_build_env/thinstation/setup-chroot
[root@TS_chroot]/# cd build
[root@TS_chroot]/build# ./build --allmodules --license ACCEPT --autodl[/console]

__________________________________________________________________________
Еще много букаФФ ==>>

11.10.2017 01:57 #425856
"DiabloPC" написал:
systemctl enable tftp.service && systemctl restart tftp.service

Разве не start?

"DiabloPC" написал:
echo xorg7 > xdmcp-connect/dependencies

Это-то зачем?

11.10.2017 02:02 #425857

"stranger" написал:
Разве не start?
А кто его знает, запущеный он уже или нет, а restart его гарантировано запустит/перезапустит :)
"stranger" написал:
Это-то зачем?
по поводу включения поддержки xdmcp: совет содран из какого-то мана, откопаного в недрах сети, так что тут мне трудно ответить, но оно работает.

ЗЫ
хотя если логически порассуждать, пакет с иксами в thinstation называется xorg7, a xdmcp ну явно зависим от наличия иксов ;)
11.10.2017 02:18 #425858
"DiabloPC" написал:
пакет с иксами

Вот это как? Я всегда полагал, что есть ОС, есть иксы и есть приложения. Именно в таком порядке и не иначе. Я ошибался?

14.10.2017 02:05 #425900

Ну а пока собирается образ ThinStation, в соседней консоли можно настраивать загрузчик.
Основная конфигурация находится в /srv/tftp/pxelinux.cfg/default
[console]root@server.local:/ # cat /srv/tftp/pxelinux.cfg/default
## Заглавие нашей менюшки, можно писать что угодно, ну или не использовать этот пункт вообще
MENU TITLE Syslinux @ server.local
## подключаем графическую менюшку, также можно использовать текстовую "UI menu.c32"
UI vesamenu.c32
## таймаут до загрузки дефолтного пункта (почему-то используется ⅒секунды, соответственно значение "100" равно 10с)
TIMEOUT 100
## Ширина меню
MENU WIDTH 70
## Смещение меню по вертикали
MENU VSHIFT 20
## смещение меню по горизонтали
MENU HSHIFT 14
## к-во строк в меню
MENU ROWS 4
## не отображать сообщение "Press TAB to edit boot options"
MENU NOTABROW
## следующими 5-ю строками можно приукрасить нашу менюшку, изменив любой из ее цветов
MENU color title 1;36;44 #ffffffff #00000000 std
MENU color sel 7;37;40 #FF000000 #FFC0C0C0 all
MENU color hotsel 1;7;37;40 #FF000000 #FFC0C0C0 all
menu color border 30;44 #D00000 #00000000 std
menu color scrollbar 30;44 #DDDDDDDD #00000000 none

## с этим немного не ясно, по идее оно должно работать, но почемуто не хочет, разрешение так и остается 640х480 ((
MENU RESOLUTION 1280 800
## Обои менюшки. Можно ему скормить jpg или png, главное чтобы разрешение картинки было идентичным с разрешением экрана.
MENU BACKGROUND img/default.jpg

## Название пункта меню. Символ "^" говорит о использовании хоткея для загрузки этого пункта, в даном случае "g"
LABEL Connect to ^graphical server
## путь к ядру нашей системы
kernel boot/vmlinuz
## путь к initrd и опции загрузки (где их взять немного ниже)
append initrd=boot/initrd splash=silent,theme:default load_ramdisk=1 ramdisk_blocksize=4096 root=/dev/ram0 ramdisk_size=786432 console=tty1 vt.global_cursor_default=0 quiet loglevel=3 LM=4 fbcon=rotate:1
## говорит о том что именно этот пункт меню будет загружен по таймауту
MENU DEFAULT

## вставляет пустую строку в меню
MENU SEPARATOR

## пару стандартных пунктикоы, для тех кому они нужны =)
LABEL ^Boot from HDD
KERNEL chain.c32
APPEND hd1

LABEL ^Reboot
KERNEL reboot.c32[/console]

С этими настройками будут грузиться все клиенты.

Если есть желание указать отдельные настройки для одного из клиентов, создаем файл 01-MAC в каталоге pxelinux.cfg
К примеру [console=inline]touch /srv/tftp/pxelinux.cfg/01-aa-bb-cc-dd-ee-ff[/console] если в мак-адресе есть буквы, то они указуются только строчными, а не прописными.
В этом файле описуем все те же настройки что и в стандартной конфигурации. При загрузке клиента с маком указаным в названии этого файла файл default будет игнорироваться.

Ну а пока мы тут думали как разукрасить менюшку, должна была собраться ThinStation....
[console]## Выходим из chroot-окружения:
[root@TS_chroot]/# exit
## Идем в каталог с готовыми файлами для PXE
root@server.local:/ # cd /srv/thinstation_build_env/thinstation/build/boot-images/pxe/boot
## забираем загрузочные файлы в каталог boot tftp-сервера
root@server.local:boot # cp {initrd,vmlinuz} /srv/tftp/boot
## Забираем строку с параметрами для загрузчика
root@server.local:boot # cat pxelinux/pxelinux.cfg/default | grep initrd | sed 's/::\///'
APPEND initrd=boot/initrd splash=off nomodeset load_ramdisk=1 ramdisk_blocksize=4096 root=/dev/ram0 ramdisk_size=786432 LM=3
## Это и есть та строка, которую нужно добавить в файле конфигурации загрузчика[/console]

Собственно и все, если все сделано правильно то клиент должен загрузиться и подключиться к нашему серверу.

ЗЫ
еще можно немного изменять настройки нашего клиента личными конфигами
Для этого создаем файл [console=inline]touch /srv/tftp/thinstation.conf-aabbccddeeff[/console]
Синтаксис такой-же как и у файла thinstation.conf.buildtime.

Войдите или зарегистрируйтесь, чтобы ответить.