Quick howto - ArchLinux ARM (ALARM) on Odroid XU4 X11 Mate Installation Guide

This guide is the quickest way I have found to get the XU4 running with a lightweight responsive Linux Distro.

This guide will not provide hardware acceleration in Chromium

This guide provides hardware acceleration in Firefox 

This guide will help you get a Citrix connection working.

Guide is currently broken after a recent archlinuxarm upgrade, lightdm seems to be the issue

 As of 23 Feb this guide should work again.  $ uname -a
Linux alarm 4.14.94-1-ARCH #1 SMP PREEMPT Thu Jan 24 01:44:17 UTC 2019 armv7l GNU/Linux

 

1. Install ArchLinux ARM (ALARM) as described on the website https://archlinuxarm.org/platforms/armv7/samsung/odroid-xu4

2. su to root user, Install the odroid-xu3-libgl-x11 package - based on r17p0-1 (full package name is Packages (1) odroid-xu3-libgl-x11-r17p0-1)

 

su -

Password:

pacman -S odroid-xu3-libgl-x11


3. Install XWindows base packages
 
  pacman -S xorg xorg-server xorg-xinit

 

4. Install Mate (pronounced ma-tay) and Lightdm

 

  pacman -S mate mate-extra lightdm lightdm-gtk-greeter
 
5. Enable the login greeter 
 
  systemctl enable lightdm
 
6. Enable pulseaudio & alsa sound systems
 
  pacman -S pulseaudio alsa-utils

7. Install popular packages

 

  pacman -S cheese firefox vlc inkscape hexchat pidgin thunderbird chromium libreoffice

 

8. To install further (optional) packages, continue, or you are done, the XU4 is ready to browse the internet and use as desktop!


 

9. Install base devel package (this is for installation of packages from the AUR)

 

  pacman -S base-devel wget git openssl

 10. Exit su (root) shell

 

  exit

 

11. You should be logged in as a non-root user (alarm is the default non-root user)

 

  cd ~
 
 
12. Clone the Citrix Receiver (icaclient)
 
  git clone https://aur.archlinux.org/icaclient.git
 
13. Change directory into icaclient (the PKGBUILD file is only done for x64 and x86 architecture (can skip - had armv7h architecture is in the build now)
 
 

cd icaclient

nano PKGBUILD

 
14. The contents of PKGBUILD file should contain (can skip)
 
  # Maintainer: Eric Liu <This email address is being protected from spambots. You need JavaScript enabled to view it.>
# former Maintainer: Daniele Vazzola <This email address is being protected from spambots. You need JavaScript enabled to view it.>
# Contributor: Ciarán Coffey <This email address is being protected from spambots. You need JavaScript enabled to view it.>
# Contributor: Matthew Gyurgyik <This email address is being protected from spambots. You need JavaScript enabled to view it.>
pkgname=icaclient
pkgver=13.9.1
pkgrel=1
pkgdesc="Citrix Receiver for x86_64 (64bit) & armv7h Linux (ICAClient)"
arch=('x86_64' 'i686' 'armv7h')
url="https://www.citrix.com/products/receiver/"
license=('custom:Citrix')
depends=('alsa-lib' 'libvorbis' 'curl' 'gtk2' 'libpng12' 'libxaw' 'libxp' 'speex' 'libjpeg6-turbo' 'libsoup' 'gst-plugins-base-libs')
makedepends=('automake' 'autoconf' 'wget')
optdepends=(
  'xerces-c: gtk2 configuration manager'
  'webkitgtk2: gtk2 selfservice/storefront ui')
conflicts=('bin32-citrix-client' 'citrix-client')
options=(!strip)
backup=("opt/Citrix/ICAClient/config/appsrv.ini" "opt/Citrix/ICAClient/config/wfclient.ini" "opt/Citrix/ICAClient/config/module.ini")
source_url32="http:$(curl -L -silent 'http://www.citrix.com/downloads/citrix-receiver/linux/receiver-for-linux-latest.html' | awk -F 'rel=\"' '/linuxx86-/ {print $2}'| awk -F'"' '{print $1}'| sed '/^$/d' |uniq)"
source_url64="http:$(curl -L -silent 'http://www.citrix.com/downloads/citrix-receiver/linux/receiver-for-linux-latest.html' | awk -F 'rel=\"' '/linuxx64-/ {print $2}'| awk -F'"' '{print $1}'| sed '/^$/d' |uniq)"
source_urlarmhf="http:$(curl -L -silent 'http://www.citrix.com/downloads/citrix-receiver/linux/receiver-for-linux-latest.html' | awk -F 'rel=\"' '/linuxarmhf-/ {print $2}'| awk -F'"' '{print $1}'| sed '/^$/d' |uniq)"
source=('configmgr.desktop'  'conncenter.desktop'  'selfservice.desktop' 'wfica.desktop' 'wfica.sh' 'wfica_assoc.sh')
source_i686=($pkgname-x86-$pkgver.tar.gz::$source_url32)
source_x86_64=($pkgname-x64-$pkgver.tar.gz::$source_url64)
source_armv7h=($pkgname-armhf-$pkgver.tar.gz::$source_urlarmhf)
md5sums=('71aca6257f259996ac59729604f32978'
         'a38c3f844a0fefe8017a25bee213b843'
         '0e92c33b3fcc99b04269787da2984809'
         '1f214f6f456f59afd1a3275580f4240e'
         '59f8e50cc0e0c399d47eb7ace1df5a32'
         'dca5a1f51449ef35f1441b900d622276')
sha256sums_x86_64=('A9A9157CE8C287E8AA11447A0E3C3AB7C227330E9D8882C6F7B938A4DD5925BC')
sha256sums_i686=('A93E9770FD10FDD3586A2D47448559EA037265717A7000B9BD2B1DCCE7B0A483')
sha256sums_armv7h=('b224d894c980e29298398e1d6c1d837ad67ce201fa9ffea7d283fa3d368f23b7')
install=citrix-client.install

package() {
    cd "${srcdir}"
    ICAROOT=/opt/Citrix/ICAClient
    if [[ $CARCH == 'i686' ]]
    then
        ICADIR="$srcdir/linuxx86/linuxx86.cor"
    elif [[ $CARCH == 'x86_64' ]]
    then
        ICADIR="$srcdir/linuxx64/linuxx64.cor"
    elif [[ $CARCH == 'armv7h' ]]
    then
        ICADIR="$srcdir/linuxarmhf/linuxarmhf.cor"
    fi

    mkdir -p "${pkgdir}$ICAROOT"

    cd "$ICADIR"
    install -m755 wfica *.so *.DLL AuthManagerDaemon PrimaryAuthManager ServiceRecord selfservice "${pkgdir}$ICAROOT"

    # copy directories
    cp -r ./config/ "${pkgdir}$ICAROOT"
    cp -r ./gtk/ "${pkgdir}$ICAROOT"
    cp -r ./help/ "${pkgdir}$ICAROOT"
    cp -r ./keyboard/ "${pkgdir}$ICAROOT"
    cp -r ./keystore/ "${pkgdir}$ICAROOT"
    cp -r ./lib/ "${pkgdir}$ICAROOT"
    cp -r ./icons/ "${pkgdir}$ICAROOT"
    cp -r ./nls/ "${pkgdir}$ICAROOT"
    cp -r ./site/ "${pkgdir}$ICAROOT"
    cp -r ./usb/ "${pkgdir}$ICAROOT"
    cp -r ./util/ "${pkgdir}$ICAROOT"

    # Install License
    install -m644 -D nls/en.UTF-8/eula.txt \
      "${pkgdir}$ICAROOT/eula.txt"

    # create /config/.server to enable user customization using ~/.ICACLient/ overrides. Thanks Tomek
    touch "${pkgdir}$ICAROOT/config/.server"

    # Extract system ca-certificates and install in the Citrix cacerts directory
    cp /etc/ca-certificates/extracted/tls-ca-bundle.pem "${pkgdir}$ICAROOT/keystore/cacerts/"
    cd "${pkgdir}$ICAROOT/keystore/cacerts/"
    awk 'BEGIN {c=0;} /BEGIN CERT/{c++} { print > "cert." c ".pem"}' < tls-ca-bundle.pem

    # The following 32-bit library causes false namcap errors
    # rm util/libgstflatstm.32.so

    # Install wrapper script
    install -m755 "${srcdir}/wfica.sh" "${pkgdir}$ICAROOT/wfica.sh"

    # Dirty Hack
    # wfica expects {module,wfclient,apssrv}.ini in $ICAROOT/config
    # sadly these configs differ slightly by locale
    lang=${LANG%%_*}
    if [[ ! -d "${pkgdir}/$ICAROOT/nls/$lang" ]]; then
      lang='en'
    fi
    cp "${pkgdir}$ICAROOT/nls/$lang/module.ini" "${pkgdir}/$ICAROOT/config/"
    cp "${pkgdir}$ICAROOT/nls/$lang/appsrv.template" "${pkgdir}/$ICAROOT/config/appsrv.ini"
    cp "${pkgdir}$ICAROOT/nls/$lang/wfclient.template" "${pkgdir}/$ICAROOT/config/wfclient.ini"
 
    # Copy Firefox plugin into plugin directory
    mkdir -p "${pkgdir}/usr/lib/mozilla/plugins"
    ln -s "$ICAROOT/npica.so" "${pkgdir}"/usr/lib/mozilla/plugins/npica.so
    cd "${srcdir}"
    # install freedesktop.org files
    install -Dm644 wfica.desktop "${pkgdir}/usr/share/applications/wfica.desktop"
    install -Dm644 conncenter.desktop "${pkgdir}/usr/share/applications/conncentre.desktop"
    install -Dm644 configmgr.desktop "${pkgdir}/usr/share/applications/configmgr.desktop"
    install -Dm644 selfservice.desktop "${pkgdir}/usr/share/applications/wfcmgr.desktop"
    # install scripts
    install -Dm755 wfica.sh "${pkgdir}$ICAROOT"
    install -Dm755 wfica_assoc.sh "${pkgdir}$ICAROOT"

    # make certificates available
    ln -s /usr/share/ca-certificates/trust-source/* "${pkgdir}/opt/Citrix/ICAClient/keystore/cacerts/"
    c_rehash "${pkgdir}/opt/Citrix/ICAClient/keystore/cacerts/"
}
 
 
15. make the package (if it fails with missing packages install those packages with pacman)
 
  makepkg
 
If you get the c_rehash error put quotes in the file like such
 
  # Perl c_rehash script, scan all files in a directory
# and add symbolic links to their hash values.

my $dir = "/etc/ssl";
my $prefix = "/usr";
 
16. Install the package with pacman 
 
  pacman -U icaclient-13.9.1-1-armv7h.pkg.tar.xz

17. You might want  build the optional packages webkitgtk2 from the AUR to get the GUI working correctly as well. Build and then. Install the package with pacman, It takes a long time to compile about 28hrs on the XU4.

  cd ~
  git clone https://aur.archlinux.org/webkitgtk.git
  cd webkitgtk
  makepkg
  pacman -U webkitgtk-2.4.11-12-armv7h.pkg.tar.xz
  pacman -U webkitgtk2-2.4.11-12-armv7h.pkg.tar.xz