Linux VDI на Citrix: станцуем на граблях

Хоть как бы я не любил Linux на серверах и даже не смотря на то что Linux установлен на моем рабочем компе (вынуждено), всегда когда я слышу про Linux на пользовательской машине мне представляется куча граблей и боль…

(с) Доктор Добрянский XXI век Н.Э.

Однако здравствуйте!

Недавно испытал новый экспириенс сексуального характера с использованием экзотических приспособлений. Да-да, речь пойдет о Linux VDI :)

К этой идее я относился всегда скептически (да и сейчас тоже) и никогда не понимал зачем люди пытаются усложнять себе жизнь. Однако недавно столкнулся людьми, которые хотят на этом сэкономить бюджет компании и вполне справедливо. Но речь сегодня не совсем об этом, а о том как это работает в разрезе Citrix и с какими проблемами вы можете столкнуться, т.к. Citrix поддерживает это добро относительно недавно и есть ряд «детских болезней».

В качестве десктопных ОСей поддерживается не так много всего, я выбрал CentOS т.к. возиться с православным RedHat в триальном режиме это удовольствие не самое приятное и все это строилось исключительно для «попробовать».

UPD: Пока я писал эту статью, вышла версия 7.12 в которой помимо RHEL, CentOS и Suse добавили еще Ubuntu.

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

В целом процесс настройки выглядит примерно так:

  1. После установки голой машины с GUI нужно завести ее в домен, процесс достаточно муторный для меня (хотя раньше доменные линуксы я содержал), но достаточно подробно описан в доке Citrix. Проблема была по сути только одна — я пытался извратиться так что бы завести машину в чужой домен где у меня были только пользовательские права :)) Но после того как надо мной сжалились и создали компьютерную учетку для машины и дали на нее права, дело пошло куда живее.
  2. Устанавливаем Linux VDA (в моем случае была версия 1.4) из RPM пакета с помощью yum install … который прекрасно подтягивает все зависимости, нужно только подключение к интернету. Здесь у меня вообще проблем не было.
  3. Настраиваем агента с помощью команды:
    /opt/Citrix/VDA/sbin/ctxsetup.sh

    Отвечаем на вопросы (я указал только адрес контроллера, все остальное по умолчанию) и оно вроде как должно настроится. Здесь я поймал первую интересную занозу: оказывается, что одной из зависимостей Linux VDA является, кто бы мог подумать — PostgreSQL сервер :)) в котором как я понял хранится конфигурация (и может что-то еще). Так вот, в инструкции не указано, что этот сервер нужно проинициализировать, т.к. без этого демон постгреса не стартует с ошибкой:

    Job failed. See system journal and 'systemctl status' for details.

    Взбодрить его можно следующими действиями. Создаем папку для данных (в моем случае она была создана и владельцем был пользователь postgres):

    sudo mkdir /var/lib/postgres/data

    После этого инициализируем БД:

    user@foobar:~$ sudo -i -u postgres
    [postgres@foobar ~]$ initdb  -D '/var/lib/postgres/data'

    Стартуем демон и добавляем в автозагрузку:

    sudo systemctl start postgresql.service
    sudo systemctl enable postgresql.service

    Настройку VDA скриптом я повторил, т.к. пока постгрес не запущен он по идее не может настроится по-человечески.

  4. К этому моменту зуд усиливался и хотелось побыстрее создать каталог что бы… что бы поймать новые грабли… Каталог создается стандартно, как для виндовой машины: выбираем Server OS, аккаунт машины из AD, далее-далее-финиш. После этого я сразу же создал Delivery Group и понял что счастья не будет — машина в состоянии Unregistered и регатся как бы и не собирается. Как в принципе большинство нормальных сервисов под линуксом, эта гадость пишет достаточно подробный лог в /var/log/xdl/vda.log и там я нашел следующее:
    2016-11-21 12:09:52.660 [INFO ] - The Citrix Desktop Service cannot connect to the delivery controller 'http://deliverycontroller.domain.local:80/Citrix/CdsController/IRegistrar' (IP Address '222.222.222.222')
    Check that the system clock is in sync between this machine and the delivery controller. If this does not resolve the problem, please refer to Citrix Knowledge Base article CTX117248 for further information.
    Error Details:
    Exception 'Fail worker callback using SPN HOST/vdihost.domain.local and IP address 111.111.111.111' of type 'class com.citrix.cds.protocol.controller.registrar.IRegistrarRegisterFaultFaultFaultMessage'.

    Первым делом я обратил внимание на дату и время, т.к. оно действительно было неправильное и у меня не один раз были точно такие же проблемы из-за этого даже на винде. Время я таки настроил, для этого добавил контроллер домена в /etc/ntp.conf и пнул демон NTP:

    systemctl start ntpd.service
    systemctl enable ntpd.service

    Короче, это не помогло :) Дальше я смутно помню что я делал в состоянии аффекта, т.к. начало бесить конкретно, помню точно что кроме хаотичных движений в виде перепроверки тысячу раз подряд настройки NTP, перепроверки аутентификации AD и перезагрузок, я точно правил файл /etc/hosts что бы добавить туда Delivery Controller и поправить строку локалхоста, добавив туда реальный хостнейм вроде этого:

    127.0.0.1    vdihost.domain.local    vdihost    localhost
  5. В общем в итоге что-то из предыдущего пункта подействовало, но нет, работать не начало, но ошибка поменялась:
    2016-11-21 14:33:32.096 [INFO ] - The Citrix Desktop Service cannot connect to the delivery controller 'http://deliverycontroller.domain.local:80/Citrix/CdsController/IRegistrar' (IP Address '222.222.222.222')
    Check that the system clock is in sync between this machine and the delivery controller. If this does not resolve the problem, please refer to Citrix Knowledge Base article CTX117248 for further information.
    Error Details:
    Exception 'VDA FunctionalLevel too low for Catalog' of type 'class com.citrix.cds.protocol.controller.registrar.IRegistrarRegisterFaultFaultFaultMessage'.

    Здесь в принципе ошибка говорит сама за себя — версия агента, выбранная во время создания каталога (у меня был 7.9) выше чем версия агента установленного на машине. Здесь все решилось очень быстро, путем пересоздания каталога выбрав при этом версию 7.0 (теоретически должно работать и на 7.6). После этого, десктоп перешел в состояние «Initializing» а потом «Registered» (тадаааааам!!)

Больше никаких сюрпризов не было, я успешно подключился с тонкого клиента к Linux десктопу. К слову, после подключения к рабочему столу с тонкого клиента я впервые увидел как выглядит его морда, т.к. установку самой ОС делал не я, а вся конфигурация выполнялась через SSH (вот за это Linux сложно не уважать).

Ну и еще несколько слов о самом Linux VDI:

  • Доставка виндовых приложений через XenApp в линуксовый рабочий стол выглядит эффектно (требуется установка Citrix Receiver for Linux);
  • К сожалению, на данный момент нет поддержки MCS или PVS. Ходили слухи что это будет в 7.12, но ничего подобного в Release Notes я не нашел;
  • Citrix эту тему двигает, значит скорее всего видит перспективы.

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

Спасибо за внимание!