Cool Solution - XenApp/XenDesktop on Thinclient with only 1GB Flash
From Univention Wiki
Thin Clients may have smaller storage devices (i.e. Compact Flash or onboard Flash) than the default 1,2G of the UCC default image.
This is an example for a thin client image for 1GB Flash supporting XenApp.
The configuration file, tested on a HP t5745(1GB), can be found at the bottom of this article.
Software packages required
Here we are going to create a small UCC Thin Client image targeting full Citrix support, tested in a HP t5745 with 1GB flash storage.
In a typical deployment, some of our customers often require these features in order of priority:
- XenApp Session (+Firefox), including german localisation
- Typical ressoures: Sound, Flash, HDX
- if possible special enhancements: truecrypt
- if also possible RDP session as a fallback
For this we are going to need two diferent approaches, first we will use the ucc-image utility to build an image with an edited configuration file, and second we will manually install the packages left from the previous step.
Step 1 - Configuration File
This file is based on the official file for a thin client
Please read UCC Manual Generation of adapted images.
The official images are also explained in Building_UCC_images
Another configuration file to generate a <1GB image Configuration_file_for_a_reduced-sized_thin_client
The image size is set at 794MB:
# Image size in GB size: 0.794
A graphical system is still installed, but without desktop manager:
univention-lightdm (Integration of lightDM login manager into UCC) indicator-session (Session management, status and user switching) indicator-power (Power state)
X window system (and input drivers)
xserver-xorg xserver-xorg-input-mouse xserver-xorg-input-kbd
Drivers for some typical video card families
xserver-xorg-video-ati xserver-xorg-video-intel xserver-xorg-video-vesa xserver-xorg-video-nouveau xserver-xorg-video-sis
Tools: (no sessions are installed in this step)
openssh-server (Remote secure shell (SSH) server) language-pack-de firefox-locale-de ntpdate (client for NTP time servers) libmotif4 curl nspluginwrapper libcap2
Integration with the UCC domain, always required:
univention-ucc-theme (Univention theme) univention-corporate-client (Metapackage for client systems)
These are also essential:
# These packages will be installed packages: # Kernel linux-image-generic (Linux kernel image) # Grub univention-ucc-grub (Grub2 configuration)
If you want to include packages from the UCC Cool-Solutions Repository (e.g. univention-ucc-status from above), you need to integrate the Repository in the image:
sources_list: [...] deb http://ucc.software-univention.de/unmaintained/component/ ucc-coolsolutions/all/ deb http://ucc.software-univention.de/unmaintained/component/ ucc-coolsolutions/$(ARCH)/
You also need to include multiverse for some packages XenApp and Citrix Receiver require:
# Use multiverse repository? multiverse: true
Don't forget to rename your image:
# Name of output image name: ucc-%(version)s-thinclient-image-1G.img
/boot is set to 45MB. This is usually enough for one kernel, meaning that kernel updates should be performed by generating the image once again.
partition2_name: boot partition2_size: 45 partition2_fs: ext4 partition2_mountpoint: /boot
The slash partition (/) will take all the available space.
partition3_name: root partition3_size: expand partition3_fs: ext4 partition3_mountpoint: /
The GPT would start at 2MB for alignment, and it will use 10MB of space. No "swap" partition is considered.
Now, after calling
ucc-image -c thinclient-image-1G.cfg
we will get the initial image, somewhere in the /tmp/ directory, e.g. /tmp/tmprUgkUj/ucc-1.0-rev2-thinclient-image-1G.img The precise path will be shown at the end of the image creation process. Alternatively, you can specifiy the target directory using the -t switch.
Manual installation of extra packages
The idea is to first free some space used by apt-get and then temporarily mount additional disks so we get enough cache for packages.
That is to delete the cache of packages in var/cache/apt and var/lib/apt
First let us mount the image in /mnt/img/
mkdir /mnt/img mount -o loop /tmp/tmprUgkUj/ucc-1.0-rev2-thinclient-image-1G.img /mnt/img/
and free some space:
chroot /mnt/img/ apt-get clean
should free var/cache/apt/archives/ and the lists we can delete manually:
there should remain a 'partial' directory in there
Second, let us create and mount the new filesystems
dd if=/dev/zero of=/tmp/cache-apt bs=1M count=500 && mkfs.ext4 -F /tmp/cache-apt dd if=/dev/zero of=/tmp/apt-lists bs=1M count=500 && mkfs.ext4 -F /tmp/apt-lists
Now they can be mounted
mount -o loop /tmp/cache-apt /mnt/img/var/cache/apt/ mkdir -p /mnt/img/var/cache/apt/archives/partial mount -o loop /tmp/apt-lists /mnt/img/var/lib/apt/lists/ mkdir /mnt/img/var/lib/apt/lists/partial
The 'Citrix Receiver for Linux' and the 'USB Support Package' can be downloaded from Here Please copy them into the cache directory
cp icaclient-12.1.0_i386.deb /mnt/img/var/cache/apt/ cp ctxusb-2.2.0_i386.deb /mnt/img/var/cache/apt/
with all ready, we can go into the image
Once inside we can install xenapp session (~200MB in this case)
apt-get update apt-get install --no-install-recommends univention-ucc-session-xenapp
Install the receiver and the USB support (the system outside the chroot should also be i386. Bug)
dpkg -i /var/cache/apt/icaclient-12.1.0_i386.deb dpkg -i /var/cache/apt/ctxusb-2.2.0_i386.deb
Create symbolic links for the browser plugin (the icaclient package itself fails to create them in this scenario):
mkdir -p /usr/lib/mozilla/plugins/ ln -s /opt/Citrix/ICAClient/npica.so /usr/lib/mozilla/plugins/
Now the image is complete, so we exit and unmount:
apt-get clean sync exit umount /mnt/img/var/cache/apt/ umount /mnt/img/var/lib/apt/lists/ umount /mnt/img
Thanks to the 50MB buffer that the image has, other utilities as flash player can be added later, once the client is rolled out.
- client shutdown fails, the client needs to be powered off using the power button or the command line
The reason is, the indicator-power package is excluded, as it is a recommended one, during installation. Adding this package to the list will add around 16MB extra space, and will activate the functionality.