Table of Contents

Этот мануал уже не актуален. Citrix Reciever 13.1 устанавливается нормально. Хотя и небезглючен

Часть Первая - запуск в 64-битной среде

Довольно странным оказался тот факт, что пакет 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

При установке 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 ставится и запускается.