Довольно странным оказался тот факт, что пакет Citrix Reciever, скачиваемый с сайта citrix.com просто так не ставится и нуждается в доработке напильником. Это происходит по двум причинам. Во-первых - сам пакет 32-битный, а во вторых - пакеты, от которых он зависит в новой Ubuntu заменены другими. Это касается версий пакета 12.x и 13.
Процедура описана тут: https://help.ubuntu.com/community/CitrixICAClientHowTo
В двух словах. Нужно скачать пакет, распаковать его и отредактировать зависимости.
Включаем поддержку 32-битных пакетов:
sudo dpkg --add-architecture i386 # only needed once sudo apt-get update
Ставим зависимости:
sudo apt-get install libmotif4:i386 nspluginwrapper lib32z1 libc6-i386 libxp6:i386 libxpm4:i386 libasound2:i386
Скачиваем пакет x64 Citrix Receiver 12.1 .deb
https://www.citrix.com/downloads/citrix-receiver/receivers-by-platform/
Ремонтируем пакет. Распакуем его:
cd ~/Downloads mkdir ica_temp dpkg-deb -x icaclient_13.0.0.256735_amd64.deb ica_temp dpkg-deb --control icaclient_13.0.0.256735_amd64.deb ica_temp/DEBIAN
Корректирум список зависимостей:
nano ./ica_temp/DEBIAN/control
И меняем строку Depends: … на:
Depends: libc6-i386 (>= 2.7-1), lib32z1, nspluginwrapper, libxp6:i386, libxpm4:i386
Теперь отредактируем постинсталляционный скрипт:
nano ./ica_temp/DEBIAN/postinst
Ищем строку:
echo $Arch|grep "i[0-9]86" >/dev/null
и заменяем ее на :
echo $Arch|grep -E "i[0-9]86|x86_64" >/dev/null
Пересобираем пакет:
dpkg -b ica_temp icaclient-modified.deb
Ставим его:
sudo dpkg -i icaclient-modified.deb
Теперь добавляем сертификаты. Я сначала брал сертификат центра сертификации с сервера WIndows в файле .cer, потом импортировал его в Firefox (Edit → Prefrences → Advanced → Certificates → View Certs → Authorities → Import).
А потом делал ссылку на серты Firefox в папку с сертами Citrix:
sudo ln -s /usr/share/ca-certificates/mozilla/* /opt/Citrix/ICAClient/keystore/cacerts/
Все. Теперь можно работать. Заходим на свой сайт Citrix Web Interface, логинимся и тыкаем в ярлычок с приложением. Firefox спросит что делать с файлом launch.ica. Нужно указать ему путь к исполняемом файлу клиента ICA - /opt/Citrix/ICAClient/wfica
Всё.
Сначала я думал, что всё… Будет работать…Однако, это оказалось совсем не всё… К сожалению, .deb пакет Citrix Reciever на данный момент (июль 2014 года) собран очень похабно. Фактически - в нем просто прописали что архитекртура теперь amd64.. И всё. Будучи установленным непосредственно в 64-bit систему он нуждается в некоторых 32-bit пакетах, которые невозможно установить рядом с 64-bit. То есть - работает запуск приложений из браузера, но вот получить окошко Reciever с приложенимя так просто не удается. Но выход есть! Это создание 32-х битного окружения chroot и запуск Reciever в нем.
Итак, поехали.
Делаем chroot.
Ставим то что нам понадобится:
sudo apt-get install debootstrap schroot
Создаем директорию и конфигурационный файл для нашего chroot:
sudo mkdir /trusty_i386 sudo nano /etc/schroot/chroot.d/trusty_i386.conf
И записываем туда вот что:
[trusty_i386] description=Ubuntu 14.04 Trusty for i386 directory=/trusty_i386 personality=linux32 root-users=mike type=directory users=alice,mike
Тут:
directory (раньше - location) - Директория где будут лежать файлы этого environment. Директория должна быть за пределами /home. tree.
По-умолчанию - /srv/chroot.
personality - Эта строка нужна, если хост-система 64-bit, а chroot-система - 32-bit. В противном случае можно отключить или закомментировать “#”.
root-users - Пользователи хост-системы, которые имеют права запускать schroot и получат root-доступ к chroot-окружению.
users - Пользователи хост-системы, которые имеют права запускать schroot и получат пользовательский доступ к chroot-окружению.
Выполнем установку нашей Ubuntu 14.04 Trusty 32-bit системы в указанную папку:
sudo debootstrap --variant=buildd --arch=i386 trusty /trusty_i386 http://archive.ubuntu.com/ubuntu/
Для других дистрибутивов просто меняем trusty на название дистра (например для Ubuntu 13.04 - precise)
Смотрим на список сконфигурированных chroot:
schroot -l
Копируем туда пользователей и группы из хостовой системы:
sudo cp /etc/group /trusty_i386/etc/ sudo cp /etc/passwd /trusty_i386/etc/
Теперь запустим наше chroot-окружение и убедимсо, что там внутри 32-bit:
schroot -p -c trusty_i386 -u root (trusty_i386)root@host-system:/home/mike# uname -a Linux host-system 3.16.0-031600rc2-generic #201406220135 SMP Sun Jun 22 05:36:21 UTC 2014 i686 i686 i686 GNU/Linux
В данном случае -p указывает на то, что мы хотим передать в chroot текущее окружение пользователя. Это необходимо для того, чтобы правильно передалась переменная DISPLAY, которая важна для запуска GUI-приложений.
Затем в окружении chroot ставим компоненты системы:
(trusty_i386)root@host-system:/home/mike# apt-get install ubuntu-minimal
Обязательно нужно реконфигурировать locales. Признаком ошибок в конфигурации locales является появление при запуске Citrix Reciever сообщений типа: Gtk-WARNING **: Locale not supported by C library.. Выполянем:
sudo locale-gen en_US en_US.UTF-8 ru_RU ru_RU.UTF-8 sudo dpkg-reconfigure locales
Теперь ставим сам Citrix Reciever.
Скачиваем 32-битный пакет и кладем его куда-нить в папку /trusty_i386.
Дальше нужно удовлетворить зависимости. Для этого я просто попытался установить пакет в лоб, а затем доставил зависимости:
(trusty_i386)root@host-system:/home/mike# dpkg -i /opt/icaclient_13.0.0.256735_i386.deb (trusty_i386)root@host-system:/home/mike# apt-get -f install
Однако этого оказалось маловато. Есть такой пакетик libxerces-c3.1, который почему-то не входит в стандартный репозиторий Ubuntu.
Его ставим так:
echo "deb http://cz.archive.ubuntu.com/ubuntu trusty main universe" >> /etc/apt/sources.list apt-get update apt-get install libxerces-c3.1
И уже потом делаем
(trusty_i386)root@host-system:/home/mike# dpkg -i /opt/icaclient_13.0.0.256735_i386.deb
У меня все поставилось.
Дальше надо положить сертификаты из хост-системы в chroot в папку /opt/Citrix/ICAClient/keystore/cacerts/.
Их можно скопировать из папки с сертификатами mozilla. В хостовой системе выполняем:
cp /usr/share/ca-certificates/mozilla/* /trusty_i386/opt/Citrix/ICAClient/keystore/cacerts/
И это еще не все. По непонятной причине из браузера приложения запускаются с сертификатом в виндовом формате .cer (x509 der), а вот Citrix Receiver в режиме kiosk-mode cс таким сертификатом запускаться отказывается с сообщением “Your account cannot be added using this server address. Make sure you entered it correctly”. И отладочных сообщений никаких. В лучших традициях Microsoft.
Для того чтобы все заработало нужно сконвертировать сертификат в форма .pem и выполнить rehash:
openssl x509 -inform der -in /opt/Citrix/ICAClient/keystore/cacerts/your_CA_root_cert.cer -out /opt/Citrix/ICAClient/keystore/cacerts/your_CA_root_cert.pem c_rehash /opt/Citrix/ICAClient/keystore/cacerts/
После этого можно смело запускать Citrix Reciever:
(trusty_i386)root@host-system:/home/mike# /opt/Citrix/ICAClient/selfservice &
Для того чтобы запускать Citrix Reciever скриптом я сделал так вот что.
В окружении trusty_i386 с сделал скрипт /opt/CitrixReciever.sh:
#! /bin/sh /opt/Citrix/ICAClient/selfservice
Сделал его исполняемым:
chmod a+x /opt/CitrixReciever.sh
После этого в хост-системе я могу запускать Citrix Reciever командой:
SESSION=$(schroot --begin-session -p -c trusty_i386 --session-name CitrixReciever) && schroot --run-session -p -c "$SESSION" -- /opt/CitrixReciever.sh && schroot --end-session -c "$SESSION" &
Эту же команду я засунул в Link to application, а в файле .desktop потом прописал icon - /trusty_i386/opt/Citrix/ICAClient/icons/025_Receiver_h32bit_48.png и получился ярлык как в Windows.
Настроить параметры Reciever можно с помощью утилиты configmgr, которая запускается так:
/opt/Citrix/ICAClient/util/configmgr
Там среди всего прочего можно настроить доступ к файловой системе. Но так как мы работаем из chroot, то понадобится пробросить папки из хостовой системы в chroot.
При установке ctxusb возникают проблемы с запуском.
Система пишет:* Starting Citrix USB daemon [fail]
В логах следующее:
libcap: # cat /var/log/syslog | grep ctxusbd libcap.so.1: cannot open shared object file: No such file or directory
Проблема в отсутствии libcap.so.1 в репозиториях Ubuntu. Но она есть в параллельной вселенной в .rpm Так поставим же ее:
sudo apt-get install alien wget ftp://rpmfind.net/linux/opensuse/distribution/13.2/repo/oss/suse/x86_64/libcap1-32bit-1.10-60.2.1.x86_64.rpm sudo alien -i ./libcap1-32bit-1.10-60.2.1.x86_64.rpm
После этих манипуляций ctxusb ставится и запускается.