Добавление приложений в Termidesk Live

Общие сведения

Termidesk Live поддерживает добавление приложений в ОС посредством файловой системы overlay, при этом первоначальный образ Termidesk Live не меняется. Приложения, необходимые пользователю для работы, добавляются на этапе загрузки образа через опрос NFS-сервера, который должен функционировать в сетевой инфраструктуре.

Для добавления приложений должно выполняться следующее:

  • все целевые устройства (компьютер, тонкий клиент и др.) должны находиться в одной локальной сети (в одном широковещательном домене);

  • в этой сети должны быть:

    • настроенный DHCP-сервер, выдающий клиентским компьютерам не только сетевые IP-адреса, но и другие сетевые параметры, в частности, IP-адрес NFS-сервера и опцию «appimage». Настройка опции «appimage» приведена ниже;

      Работа функционала проверена с программными DHCP-серверами. С аппаратными комплексами DHCP-серверов работа функционала будет затруднена, поскольку в большинстве случаев такие DHCP-серверы поддерживают только назначение IP-адресов и не поддерживают передачу других сетевых параметров.
    • настроенный NFS-сервер, на котором выполнены дополнительные действия, приведенные ниже;

    • разделяемые сетевые ресурсы NFS-сервера, используемые для хранения приложений. Настройка сетевых ресурсов приведена ниже.

Порядок работы:

  • целевое устройство с образом Termidesk Live подключается к сети и запрашивает IP-адрес, передавая в запросе информацию о собственной конфигурации;

  • DHCP-сервер назначает целевому устройству IP-адрес и вместе с назначенным адресом передает ему дополнительные сетевые параметры, в том числе IP-адрес NFS-сервера и значение опции «appimage»;

Образ Termidesk Live поставляется с уже настроенным функционалом поддержки получения IP-адреса от DHCP-сервера.

Если целевое устройство с образом Termidesk Live имеет два и более сетевых интерфейса с автоматическим получением параметров от DHCP-сервера, для поиска NFS-сервера будет использоваться первый интерфейс.

В текущей версии Termidesk Live не предусмотрена парольная или какая-либо иная аутентификация при монтировании каталога с NFS-сервера.

  • целевое устройство с образом Termidesk Live подключается к указанному в опции «appimage» NFS-серверу и каталогу и монтирует его в ОС Termidesk Live;

  • после завершения загрузки Termidesk Live приложения, которые были размещены в каталоге на NFS-сервере, отображаются на рабочем столе ОС Termidesk Live.

Дополнительная настройка существующего DHCP-сервера

Дополнительная настройка существующего DHCP-сервера сводится к редактированию конфигурационного файла dhcpd.conf, а именно:

  • в файле обязательно должна быть указана опция appimage с кодом 155 и значением text:

Получение опции appimage с кодом 155 и значением text предопределено в образе Termidesk Live, использование других значений опции не предусмотрено.
option appimage code 155 = text;
  • в файле обязательно должен быть указан NFS-сервер, например:

host nfs-server { hardware ethernet 08:00:27:be:4a:f0; fixed-address 192.0.2.1; }
  • в файле обязательно присвоить опции appimage путь к каталогу на NFS-сервере, из которого Termidesk Live будет получать приложения:

option appimage "192.0.2.1:111:2049:/nfs";

Где:

192.0.2.1 - IP-адрес NFS-сервера;

111 - порт регистрации удаленных вызовов процедур (RPC);

2049 - порт для подключения к NFS-серверу;

/nfs - путь к каталогу на NFS-сервере для монтирования.

Пример файла dhcpd.conf:

Приведен только пример файла! Настройки DHCP-сервера и IP-адреса должны быть заменены на актуальные, используемые согласно схеме адресации, принятой в инфраструктуре организации.
option appimage code 155 = text;
subnet 192.0.2.0 netmask 255.255.255.0 {
    host nfs-server { hardware ethernet 08:00:27:be:4a:f0; fixed-address 192.0.2.1; }
    option routers 192.0.2.2;
    option subnet-mask 255.255.255.0;
    range 192.0.2.10 192.0.2.255;
    default-lease-time 600;
    max-lease-time 1800;
    option appimage "192.0.2.1:111:2049:/nfs";
    option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Дополнительная настройка существующего NFS-сервера

Дополнительная настройка существующего NFS-сервера сводится к:

  • созданию обязательного каталога, указанного в опции appimage, в котором будут размещаться приложения (/nfs):

sudo mkdir /nfs
  • созданию подкаталога appimage в указанном каталоге (/nfs/appimage) для хранения файлов разрешения .AppImage:

sudo mkdir /nfs/appimage
  • созданию подкаталога menu в указанном каталоге (/nfs/menu) для хранения конфигурационных файлов:

sudo mkdir /nfs/menu
  • созданию подкаталога images в каталоге appimage (/nfs/appimage/images) для хранения изображений (иконок) приложений:

sudo mkdir /nfs/appimage/images

После создания каталогов они должны быть наполнены соответствующим образом:

  • в корень каталога /nfs/appimage необходимо поместить непосредственно приложения в формате .AppImage;

Файлам .AppImage обязательно нужно добавить флаг исполнения:

sudo chmod +x /nfs/appimage/*.AppImage
  • в каталог /nfs/appimage/images необходимо поместить изображения;

  • в каталог /nfs/menu необходимо поместить конфигурационные файлы, соответствующие .AppImage, содержащие описание размещения приложения на рабочем столе Termidesk Live. Пример конфигурационного файла /nfs/menu/Application:

needs="x11"; title="Application"; icon="/nfs/appimage/images/Application.png"; command="/nfs/appimage/Application-x86_64.AppImage";

Создание приложений формата AppImage

Для создания приложений формата .AppImage может использоваться исполняемый файл appimage-builder.sh. Преобразование приложений должно выполняться на любом узле, отличном от Termidesk Live и на котором возможно разрешение зависимостей, приведенных ниже.

Действия для подготовки к использованию appimage-builder.sh:

Все перечисленные в этом подразделе действия должны выполняться на ОС, отличной от ОС Astra Linux Special Edition, например: Alpine Linux, Debian.
  • скачать утилиту appimagetool: https://github.com/AppImage/appimagetool/releases. Поместить в любую директорию, например, /home/user/;

  • скачать среду выполнения runtime: https://github.com/AppImage/type2-runtime/releases. Поместить в любую директорию, например, /home/user/;

  • установить пакеты rpm2cpio и cpio;

  • установить пакет binutils;

  • назначить флаг исполнения для загруженных утилит appimagetool-x86_64.AppImage и runtime-x86_64:

chmod +x /home/user/appimagetool-x86_64.AppImage /home/user/runtime-x86_64
  • создать каталог appimage-builder:

mkdir /home/user/appimage-builder
  • скопировать в него файл appimage-builder.sh и сделать его исполняемым:

chmod +x /home/user/appimage-builder/appimage-builder.sh
  • создать каталог приложения apps с подкаталогом наименования приложения (в примерах используется icaclient):

mkdir -p /home/user/appimage-builder/apps/icaclient
  • создать в каталоге /home/user/appimage-builder/apps/icaclient файл sources и внести в него все зависимости приложения, пример:

http://security.debian.org/debian-security/pool/updates/main/w/webkit2gtk/libwebkit2gtk-4.0-37_2.42.5-1~deb12u1_amd64.deb
http://security.debian.org/debian-security/pool/updates/main/w/webkit2gtk/libjavascriptcoregtk-4.0-18_2.42.5-1~deb12u1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/i/icu/libicu72_72.1-3_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/g/gst-plugins-bad1.0/libgstreamer-plugins-bad1.0-0_1.22.0-4+deb12u5_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.1.5-2_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/liba/libavif/libavif15_0.11.1-1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/libm/libmanette/libmanette-0.2-0_0.2.6-3+b1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/d/dav1d/libdav1d6_1.0.0-2_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/libg/libgav1/libgav1-1_0.18.0-1+b1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/r/rust-rav1e/librav1e0_0.5.1-6_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/s/svt-av1/libsvtav1enc1_1.4.1+dfsg-1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/a/aom/libaom3_3.6.0-1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/liby/libyuv/libyuv0_0.0~git20230123.b2528b0-1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/a/abseil/libabsl20220623_20220623.1-1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/g/gcc-12/libstdc++6_12.2.0-14_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.74.6-2_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/libs/libselinux/libselinux1_3.4-1+b6_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/libf/libffi/libffi8_3.4.4-1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/g/gstreamer1.0/libgstreamer1.0-0_1.22.0-2_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/g/gst-plugins-base1.0/libgstreamer-plugins-base1.0-0_1.22.0-3+deb12u1_amd64.deb
http://ftp.ru.debian.org/debian/pool/main/g/gst-plugins-base1.0/libgstreamer-gl1.0-0_1.22.0-3+deb12u1_amd64.deb
  • в каталоге приложения (в примере - icaclient) создать подкаталог files:

mkdir /home/user/appimage-builder/apps/icaclient/files
  • поместить в подкаталог files файлы для запуска .AppImage, а именно:

    • изображение приложения в формате .png;

    • конфигурационный файл формата .desktop, содержащий информацию о запуске приложения, пример:

      [Desktop Entry]
      Version=1.0
      Type=Application
      Name=Citrix Workspace
      Icon=receiver
      Categories=Network;
      Exec=opt/Citrix/ICAClient/selfservice --icaroot opt/Citrix/ICAClient
    • исполняемый файл AppRun, содержащий основную команду запуска приложения, пример:

      #!/bin/sh
      
      export LD_LIBRARY_PATH="lib/x86_64-linux-gnu;lib;lib64;usr/lib;usr/lib/x86_64-linux-gnu;"
      
      readlink_file() {
          next_path=$1
          i=0
          while [ "$i" != 10 ] && [ "x$next_path" != "x$path" ]; do
              path=$next_path
              next_path=$(readlink "$path" || echo $path)
              ((++i))
          done
          echo "$path"
      }
      
      basedir() {
          file=$(readlink -f "$1") || $(readlink_file "$1")
          echo $(cd "$(dirname "$file")" && pwd -P)
      }
      
      cd "$(basedir "$0")" && LD_PRELOAD=usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 opt/Citrix/ICAClient/selfservice --icaroot opt/Citrix/ICAClient

      Если приложение необходимо модифицировать, применить к нему патч, то это возможно сделать, создав исполняемый файл build.sh.

      Build.sh должен содержать в себе необходимые инструкции по модификации и должен быть скопирован в каталог приложения, в примерах это /home/user/appimage-builder/icaclient.

  • убедиться, что структура каталога приложения (в примере - icaclient) соответствует следующей:

appimage-builder/icaclient
├── build.sh (необязательный файл)
├── files
│   ├── AppRun
│   ├── icaclient.desktop
│   └── icaclient.png
└── sources

После выполнения всех перечисленных действий по подготовке среды выполнения можно перейти к формированию файлов .AppImage:

  • перейти в каталог appimage-builder:

cd /home/user/appimage-builder/
  • запустить исполняемый файл appimage-builder.sh, указав приложение, для которого необходимо сформировать .AppImage (в примере - icaclient), и инструменты сборки:

./appimage-builder.sh --appimage-tool /home/user/appimage-builder/appimagetool-x86_64.AppImage --appimage-runtime /home/user/appimage-builder/runtime-x86_64 icaclient

Если среда выполнения была подготовлена правильно, то appimage-builder.sh автоматически создаст каталог AppImages в домашнем каталоге пользователя и поместит в него после сборки файлы .AppImage и журнал сборки. В качестве временного каталога используется /tmp/.

Список всех параметров, поддерживаемых исполняемым файлом appimage-builder.sh, приведен в на таблице (см. таблицу Список параметров для appimage-builder.sh).

Таблица 1. Список параметров для appimage-builder.sh
Параметр Описание

--help

Вызов справки appimage-builder.sh

--version

Вывод текущей версии appimage-builder.sh

--appimage-tool

Путь к инструменту сборки appimagetool

--appimage-runtime

Путь к инструменту среды выполнения runtime

--input-path

Каталог с файлами исходных пакетов (AppRun, .desktop, .png)

--output-path

Каталог для сохранения собранных файлов .AppImage

--cache-path

Каталог с загруженными пакетами зависимостей. Задание параметра избавляет от необходимости повторной загрузки пакетов, указанных в sources

--log-path

Каталог для сохранения журнала сборки