Первым делом после установки обновляем систему до актуального состояния:
	-      apt update && apt upgrade 
 
По требованиям Citrix (ссылки на используемые документы будут в конце статьи), HWE ядра, используемые в Ubuntu Desktop по-умолчанию, не подходят для нашей цели и нам придётся сделать downgrade с HWE/OEM до GA версии:
	-  apt install --install-recommends linux-generic 
-  Reboot, interrupt grub, in advanced options elect to boot 5.4 based kernel, complete boot. Check that everything works as expected.
-  apt remove --purge linux-generic-hwe-20.04 linux-oem-20.04 linux-hwe-* linux-oem-* linux-modules-5.1* linux-modules-5.8.0-* linux-modules-5.6.0-* 
 
Далее, устанавливаем .NET Core Runtime 3.1:
	-  wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb 
-  dpkg -i packages-microsoft-prod.deb 
-  apt update 
-  apt install apt-transport-https 
-  apt install dotnet-runtime-3.1
-  dotnet --list-runtimes 
 
Последней командой проверяем, не стоит ли что-то лишнее и если да, то оставляем только одну версию.
Пожалуйста, прочтите все требования к дистрибутиву по второй ссылке, там есть специфичные для версий и дистрибутивов и конечно же, что-то обязательно добавится с течением времени.
Далее подготавливаем VM к установке Linux Virtual Delivery Agent. Для этого внесём изменения в некоторые конфигурационные файлы:
В /etc/hosts оставляем только одну строку:
	-  127.0.0.1 hostname-fqdn hostname localhost 
 
Например: 127.0.0.1  ubuntu.xenlab.local xenlab localhost
Проверяем:
В файле /etc/resolv.conf указываем IP нашего DNS сервера и имя используемого домена, например:
	-  nameserver 192.168.100.254
-  search xenlab.local 
 
Для отключения использования mDNS в файле /etc/nsswitch.conf меняем содержимое строки:
	-  hosts: files mdns_minimal [NOTFOUND=return] dns 
 
на
Проверяем:
Ставим chrony в качестве NTP клиента:
и редактируем файл /etc/chrony.conf так, чтобы он смотрел в сторону нашего NTP сервера, убрав все остальные сервера, указанные в конфиге на момент установки:
	-  pool ntp.xenlab.local iburst maxsources 1 
 
Добавляем и включаем запуск в systemd и проверяем:
	-  systemctl enable chrony
-  systemctl start chrony
-  chronyc activity 
 
 
Тут, коллеги, нам необходимо установить Oracle JDK 11 и я очень рекомендую пару статей из ссылок ниже, для того, чтобы понять, что уже имеется в системе, как удалить не нужное и как определить, какую именно из версий, система считает дефолтной.
По версии Citrix нам просто нужно:
	-  apt install -y openjdk-11-jdk 
 
 
Но повторюсь, что не факт, что эта версия будет именно 11й. Проверьте командой:
и в случае необходимости поправьте с помощью статей.
 
Устанавливаем PostgreSQL:
	-  apt install -y postgresql
- apt install -y libpostgresql-jdbc-java 
 
 
Устанавливаем Motif:
 
Устанавливаем прочие зависимости:
	-  apt install -y imagemagick gtk3-nocsd libmspack0 libgoogle-perftools4 libpython2.7 libsasl2-2 libsasl2-modules-gssapi-mit libldap-2.4-2 krb5-user libgtk2.0-0
 
 
Следующий шаг – редактирование конфигурационного файла /etc/krb5.conf:
	-      [libdefaults]
-       default_realm = XENLAB.LOCAL
-         dns_lookup_kdc = false
-   
-       [realms]
-       XENLAB.LOCAL = {
-          admin_server = DC.XENLAB.LOCAL
-          kdc = DC.XENLAB.LOCAL
-       }
-   
-       [domain_realm]
-          xenlab.local = XENLAB.LOCAL
-    .xenlab.local = XENLAB.LOCAL 
 
 
Там, где CAPS, должен быть CAPS. Всегда пишите realm заглавными буквами.
проверяем:
 
В инструкции Citrix по 4й ссылке вы можете найти 5 вариантов подключения VM к AD, мы использовали SSSD, поэтому:
 
Редактируем (при необходимости создаём) /etc/sssd/sssd.conf:
	-  [sssd]
-   
-  services = nss, pam
-   
-  config_file_version = 2
-   
-  domains = xenlab.local
-   
-  [domain/xenlab.local]
-   
-  id_provider = ad
-   
-  access_provider = ad
-   
-  auth_provider = krb5
-   
-  krb5_realm = XENLAB.LOCAL
-   
-  # Set krb5_renewable_lifetime higher if TGT renew lifetime is longer than 14 days
-   
-  krb5_renewable_lifetime = 14d
-   
-  # Set krb5_renew_interval to lower value if TGT ticket lifetime is shorter than 2 hours
-   
-  krb5_renew_interval = 1h
-   
-  krb5_ccachedir = /tmp
-   
-  krb5_ccname_template = FILE:%d/krb5cc_%U
-   
-  # This ldap_id_mapping setting is also the default value
-   
-  ldap_id_mapping = true
-   
-  override_homedir = /home/%d/%u
-   
-  default_shell = /bin/bash
-   
-  ad_gpo_map_remote_interactive = +ctxhdx
-   
 
Определяем права на файл и запускаем его:
	-  chmod 0600 /etc/sssd/sssd.conf
-  systemctl start sssd
-  systemctl enable sssd 
 
Устанавливаем adcli:
Удаляем keytab файл и подключаемся к домену:
	-  rm -rf /etc/krb5.keytab 
-  adcli join domain-dns-name -U user -H hostname-fqdn 
 
Проверяем:
	-  adcli testjoin 
-  adcli info domain-dns-name
 
Для того, чтобы при подключении пользователей создавались домашние папки, запускаем:
и выбираем соответствующую опцию.
Теперь можно приступать к инсталляции Linux VDA. Копируем файл инсталлятора и устанавливаем его командой:
	-  dpkg -i xendesktopvda_<version>.ubuntu20.04_amd64.deb 
 
Если не все зависимости были установлены, после установки пакета можно доставить их командой:
Далее, необходимо зайти в каталог /opt/Citrix/VDA/sbin/ , запустить ctxsetup.sh и после ответа на ряд вопросов, получить работающий Linux VDA.
Логи инсталляции находятся в файле /tmp/xdl.configure.log
Итогом всей нашей работы должны служить две запущенные:
	-  systemctl start ctxhdx
-  systemctl start ctxvda 
 
и работающие службы
	-  systemctl status ctxvda
-  systemctl status ctxhdx 
 
которые, после проверки, сделайте enable.
В любом случае рекомендую ознакомиться с официальной документацией, приведённой по 4й ссылке, там процесс разобран более подробно и содержит всю необходимую вам информацию, которую я мог не учесть или которая мне просто не пригодилась в процессе установке. В случае обнаружения ошибок в статье буду ра вашим замечаниям.
Ссылки, использованные в статье:
	-  Kernel/LTSEnablementStack - Ubuntu Wiki
-  System requirements (citrix.com)
-  Install .NET on Linux Distributions | Microsoft Docs
-  https://docs.citrix.com/en-us/linux-virtual-delivery-agent/current-release/installation-overview/ubuntu.html
-  How To Install Java with Apt on Ubuntu 20.04 | DigitalOcean
-  How To Uninstall JDK From Linux ? – Novice Stuffs (wordpress.com)