LTSP/BuildYourself

Материал из ALT Linux Wiki


Самостоятельная установка ALTSP

Здесь описан процесс превращения в терминальный сервер уже развёрнутой десктопной[1] системы. Обычно это слишком много труда и достаточно взять уже готовый дистрибутив терминального сервера[2].

Версии

Для создания терминального сервера mike@ проверены пакеты из веток:

  • 4.0 (выделенная система, 2007-09-11);
  • p5  (дистрибутив, 2010-03-15);
  • 5.1 (контейнер OpenVZ, 2011-04-03);
  • t6 (дистрибутив, 2012-03-09);
  • p7 (из стартеркита, 2015-11-28)

Следует использовать пакеты из актуальной копии выбранного бранча либо из дистрибутива терминального сервера. Первые сборки 2006/2007 года имели известные недоработки и нюансы; соответствующие примечания ниже отмечены [OLD][3] и будут через некоторое время убраны как устаревшая документация.

Бранч 4.1 не применялся[4] для создания дистрибутивов терминального сервера.

Sisyphus по состоянию на весну 2012 года местами пригоден для создания терминального чрута; в kernel-image-ltsp-client-2.6.32-alt1+ есть поддержка KMS, необходимая для текущего xorg.

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

Предварительно необходимо подключить один из поддерживаемых бранчей.

  • Установить пакет ltsp-server-{basic,enhanced,light,kde}basic и enhanced оконным менеджером служит twm, в lighticewm)
  • Настроить dhcp; можно взять рабочую заготовку в пакете ltsp-server:
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.BAK
cp -a /etc/ltsp/dhcpd.conf /etc/dhcp/
  • Настроить tftp-server: дописать в /etc/xinetd.d/tftp рядом с остальными строчку only_from = 192.168.0.0/24 (или другую сеть, на которую настроен DHCP-сервер) и выполнить команды
chkconfig tftp on
chkconfig xinetd on
  • Разрешить удалённый доступ к portmap[5] и обеспечить автозапуск сервиса[6]:
control portmap server
chkconfig portmap on
  • Настроить nfs-server[7]: дописать в /etc/exports строчку
/var/lib/ltsp/i586 (ro,no_root_squash,async)

и выполнить

chkconfig nfs on
  • При объёме памяти бездисковых станций менее 64..128Mb рекомендуется организовать сетевой своп.
  • Настроить Display Manager:
    • выполнить chkconfig dm on
    • для kdm: в секции [Xdmcp] файла /etc/X11/kdm/kdmrc обеспечить Enable=true
    • для gdm смотрим файл /etc/X11/gdm/custom.conf:
      • в секции [Xdmcp] требуется Enable=true,
      • в секции [daemon] — RemoteGreeter=/usr/lib/gdm/gdmgreeter
    • в случае неиспользования локальной X-сессии на сервере (в т.ч. в контейнере OpenVZ) закомментировать в /etc/X11/xdm/Xservers строку
:0 local /etc/X11/xinit/xserverrc
  • При необходимости[8] разрешить удалённый доступ к xfs в /etc/sysconfig/xfs должно быть следующее:
ARGS="-daemon -user xfs"

Сборка LTSP chroot

Для сборки чрута из пакетов требуется[9]:

  • отредактировать (при необходимости):
    • /etc/ltsp/update-kernels.conf[10];
    • /etc/ltsp/ltsp-update-kernels.conf;
    • /etc/ltsp/ltsp-build-client.conf:
      • ARCH, BASE[11], MIRROR[12] (настроить на доступный репозиторий)
      • ROOTPASS (prompt — спросить при генерации);
      • возможно, EXTRA_MIRROR (например, EXTRA_MIRROR="file:/var/ftp/ltsp5 i586 ltsp5;file:/var/ftp/ltsp5 noarch ltsp5");
      • возможно, KERNEL (по умолчанию — kernel-image-std-smp; достаточно указывать только суффикс std-smp);
      • возможно, KERNEL_MODULES (субпакеты через пробел; по умолчанию — alsa)
      • CHROOT_IMAGE[13];
  • удостовериться, что репозиторий для архитектуры $ARCH (в том числе и noarch) доступен;
  • выполнить команду ltsp-build-client[14];
  • запустить apt-get update, поскольку при предыдущем шаге конфигурация apt подменялась.

Запуск

Gnome-dialog-warning.svg
Внимание: проверьте, чтобы настроенный DHCPD не пересёкся
с уже используемым в локальной сети
!
  • Запустить необходимые сервисы:
service dhcpd restart
service xinetd restart
service portmap restart
service nfs restart
service ltspswapd restart || service nbd-server restart
service xfs restart # для ltsp-client >= 5.0-alt0.49 xfs необязателен
service dm restart
  • Требуется также обеспечить обратный резолвинг IP клиентов, чтобы избежать таймаутов при отрабатывании dm («крестик на экране») — либо путём настройки DNS на терминальном сервере с обратной зоной для выдаваемых по DHCP адресов, либо хотя бы выполнить нечто вроде (для локального доменного суффикса ltsp):
grep -q ^192.168.0.1 /etc/hosts || echo "192.168.0.1 server server.ltsp" >> /etc/hosts
grep -q ^192.168.0.250 /etc/hosts || {
        for i in `seq 20 250`; do
                echo "192.168.0.$i ws$i ws$i.ltsp" >> /etc/hosts
        done
}
update_chrooted conf
  • При потребности в использовании локальных устройств (CD-ROM, флэшки) выполнить:
# вариант "на железе"
echo fuse >> /etc/modules
modprobe fuse
control fusermount public
# вариант "под OpenVZ"
# HN:
echo fuse >> /etc/modules
modprobe fuse
vzctl set ltsp --devnodes fuse:rw --save
# VE, которое --name ltsp:
control fusermount public

Вариации на тему

dnsmasq

Роль сервера DHCP, TFTP и DNS вместо dhcpd, tftp-server и bind прекрасно исполняет dnsmasq со следующим конфигурационным файлом:

bind-interfaces
interface=lan
interface=lo

resolv-file=/etc/resolv.conf.dnsmasq
strict-order

expand-hosts
domain=mydomain.com

dhcp-range=192.168.0.100,192.168.0.199

enable-tftp

tftp-root=/diskless/altsp/boot/i586
dhcp-boot=pxelinux.0

ALTSP inside OpenVZ

Недавно повторено и описано тут enp@.

Загрузка тонких клиентов с локальных HDD

Основная статья: LTSP/LocalBoot


Шпаргалка

Для справки можно подсматривать в профиль, по которому собирался дистрибутив ALT Linux 4.0 Terminal, и фрагмент инсталятора. Оттуда видно, что, скорее всего, будет достаточно установить в VE по вкусу один из пакетов ltsp-server-{basic,enhanced,light,kde} и все, что он вытащит по зависимостям, а также выполнить действия по мотивам написанного в скрипте настройки.

Примечания

  1. Терминальный сервер самому проще сделать из десктопа (которым он функциональности в основном и является), чем из сервера (который сперва всё равно придётся превратить в десктоп).
  2. При сильном желании модифицировать не просто отдельную систему, а сам инсталяционный образ — читайте про сборку дистрибутивов.
  3. Совсем старые пакеты назывались ltsp5-* и ориентировались на расположение терминального чрута в /var/lib/ltsp5/.
  4. Переработанный alterator-backend-x11 в 4.1/branch не работал без HAL; решено в бранчах 5.1/p5 пакетом ltsp-x11-autosetup.
  5. Как вариант, закомментировать PORTMAP_ARGS="-l" в /etc/sysconfig/portmap
  6. В Sisyphus и бранчах старше 5.1/p5 замените portmap на rpcbind.
  7. При использовании в контейнере OpenVZ вместо nfs-server придётся взять unfs3, это приведёт к удалению метапакета ltsp-server-basic — не страшно, его роль только втащить нужные пакеты по зависимостям.
  8. для ltsp-client >= 5.0-alt0.49 xfs необязателен.
  9. [OLD] В ранних сборках также был необходим пакет hasher.
  10. [OLD] Для standalone-сервера рациональнее будет NFSROOT_OPTS=tcp вместо udp (по умолчанию); с tcp наблюдались проблемы в контейнере OpenVZ.
  11. В BASE, если необходимо, изменить путь к chroot, расположив его на разделе без noexec.
  12. Если в MIRROR указать полную строчку из sources.list, начинающуюся с rpm, то реконструкция с использованием ARCH и COMPONENTS производиться не будет, а строчка попадёт «как есть».
  13. CHROOT_IMAGE имеет смысл, если используется заранее приготовленный с помощью spt и spt-profiles-ltsp-root (или другим способом) корень.
  14. Для ранних пакетов ltsp также были актуальны следующие замечания:
    • [OLD] Для успешной сборки могло быть необходимо поправить /usr/share/ltsp/profile/ltsp-root/packages из пакета spt-profiles-ltsp-root, добавив туда which, xinitrc, libhw-tools.
    • [OLD] После сборки следовало проверить права доступа на чтение в /var/lib/tftpboot/ltsp5
    • [OLD] Также доводилось поправить /etc/exports на предмет лишнего пробела, иначе старый unfs3 не разрешал клиенту подмонтировать корень; в unfs3-0.9.18 была добавлена опция проверки корректности конфигурации и она теперь используется в инитскрипте, с 0.9.17 и ltsp5-server-5.0-alt0.44 тоже всё в порядке.