# Установка программы

Опубликовано 2023-07-31

# Версия Astra Linux

Компиляция приложения, сборка debian пакета и тестирование проводилось в Astra Linux версии v1.7.3:

$ lsb_release -a
No LSB modules are available.
Distributor ID: AstraLinux
Description:    Astra Linux 1.7 x86-64
Release:        1.7_x86-64
Codename:       1.7_x86-64

$ cat /etc/astra_version
1.7.3

# Установка программы и ee зависимостей

Для установки программы необходимо распокавать полученный архив:

$ tar -zxvf kinematic.tar.gz
$ ls .      # ниже приблизительное содержимое архива
kinematic_0.16.0_amd64.deb  license.json  license.json.sig  install.sh  uninstall.sh

В архиве находятся следующие файлы:

  • kinematic_X.Y.Z_amd64.deb - debian пакет с программой где X.Y.Z версия программы
  • license.json - файл с лицензией на программу
  • license.json.sig - цифровая подпись лицензии на прогрмму
  • install.sh - скрипт, который производит установку программы на компьютере пользователя
  • uninstall.sh - скрипт, который удаляет программу с компьютера пользователя

Устанавливаемая программа зависит от следующих пакетов:

  • pcscd - сервис для доступа к смарткартами через PC/SC
  • opensc-pkcs11 - библиотеки для работы со сматр картами по протоколу PKCS#11
  • libwebkit2gtk-4.0-37 - WebKit движок для отображения веб страниц
  • libgtk-3-0 - графическая библиотека для создания оконных приложений

Узнать зависимости устанавливаемого пакета можно с помощью следующей комманды:

$ dpkg -I kinematic_0.16.0_amd64.deb
# ниже примерный вывод
new Debian package, version 2.0.
 Package: kinematic
 Version: 0.16.0
 Architecture: amd64
 Installed-Size: 12311
 Maintainer:
 Depends: opensc-pkcs11, pcscd, libwebkit2gtk-4.0-37, libgtk-3-0
 Description:
 Priority: optional

Для установки программы нужно задать права на исполнение скрипту install.sh и запустить его из папки распакованного архива.

$ chmod u+x install.sh
$ ./install.sh

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
Application configuration directory: /home/deform/.config/com.kinematic
Application configuration file generated at /home/deform/.config/com.kinematic/app.json

Инсталяционный скрипт загрузит и установит пакеты от которых зависит программа, после чего установит пакет приложения. Так же будет создана папка с идентификатором приложения внутри папки .config, расположенной в домашней директории пользователя. В этой папке будет создан файл с конфигурацией приложения, а также скопированы файл с лицензией и цифровой подписью.

Установщик поместит исполняемую программу по пути usr/bin/kinematic, что сделает ее доступной для запуска из терминала. Также установщик создаст *.desktop файл по пути usr/share/applications/kinematic.desktop, что даст возможность искать и запускать программу через графическое окружение операционной системы.

# Подготовка перед запуском программы

Для работы приложения необходим лицензионный usb токен.

Перед запуском приложения следует вставить лицензионный токен в usb порт компьютера. Чтобы убедиться, что токен доступен для работы можно выполнить следующую команду:

$ lsusb
...
Bus 001 Device 041: ID 1050:0407 Yubico.com Yubikey 4/5 OTP+U2F+CCID
...

Выше показан приблизительный вывод команды из которой следует, что лицензионный usb токен определился компьютером и готов к работе.

Для работы программы не важно в какой из usb портов вставлен токен.

# Запуск программы

Запустить программу можно как из командой строки, так и через графическую оболочку Fly операционной системы. Ниже будут показаны оба способа.

При первом запуске рекомендуется запускать приложение с помощью терминала, т.к. в версии 0.16 логирование реализовано только в поток стандартного вывода ошибок (stderr), т.е. в терминал, а не файл для логов.

# Запуск из консоли

Запуск приложения через терминал:

$ kinematic
# Ниже будут расположены логи программы

Если при запуске программы лицензионный токен не определяется системой, то программа аварийно завершится. Также программа аварийно завершит работу если извлечь лицензионный токен в процессе ее работы. Ниже показан пример аварийного завершения программы при отсутствии лицензионного токена.

$ kinematic
error while runnign tauri application: Setup(SetupError("[Token Error] No token found which satisfies license"))

# Запуск через ярлык

Для запуска приложения с рабочего стола нужно создать ярлык. Ниже приведены скриншоты как это сделать.

Шаг 1: пуск > поиск (start > search)
Шаг 1: пуск > поиск (start > search)
Шаг 2: поиск установленной программы
Шаг 2: поиск установленной программы
Шаг 3: добавить ярлык
Шаг 3: добавить ярлык
Шаг 4: ярлык программы на рабочем столе
Шаг 4: ярлык программы на рабочем столе

# Офлайн установка

Для офлайн установки программы нужно подключить локальный репозиторий из которого будут скачиваться пакеты от которых зависит приложение. Чаще всего папку с локальным репозиторием можно найти на диске с которого производилась установка операционной системы Astra Linux. Предположим, что папка с локального резпозитория скопирована в систему по пути /srv/local_repo/:

$ ls /srv/local_repo/
dists  pool  repository-gostsums.txt

Чтобы подключить локальный репозиторий нужно добавить следующую запись в файл /etc/apt/sources.list:

deb file:/srv/local_repo/ stable contrib main non-free

После чего нужно получить последние версии пакетов:

$ sudo apt update

После этого можно установить программу. Инсталятор скачает зависимые пакеты из локального репозитория, который расположен по пути /srv/local_repo/.

# Отладка

# Запуск в виртуальной машине

При запуске программы в виртуальной машине могут возникнуть проблемы с недоступностью лицензионного токена внутри виртуальной машины. Поэтому нужно предпринять дополнительные шаги, чтобы лицензионный токен был доступен внутри гостевой ОС. Если этого не сделать то программа аварийно завершится сразу после запуска с ошибкой показанной ниже.

error while runnign tauri application: Setup(SetupError("[Token Error] No token found which satisfies license"))

При работе из виртуальной машины, настройки по-умолчанию не дают доступа к usb устройствам подключенным к компьютеру из гостевой ОС. Инструкции как предоставить доступ к usb устройству из гостевой ОС зависят от используемого гипервизора. Ниже приведены ссылки на документации популярных гипервизоров:

После того как в настройках гипервизора гостевой ОС был предоставлен доступ к usb токену нужно проверить, что токен определяется как usb устройство в системе:

$ lsusb
Bus 001 Device 041: ID 1050:0407 Yubico.com Yubikey 4/5 OTP+U2F+CCID
...

На текущий момент используются токены производителя Yubico. Если в выводе команды lsusb нет упоминания Yubico.com Yubikey, то это означает, что usb токен не определился системой. Это может быть связано как с настройками гипервизора, так и с работоспособностью usb порта.

После того как usb устройство определяется в гостевой ОС нужно убедиться, что в usb устройсве присутствует логический кард-ридер и смарт-карта. В терминах стандарта pkcs#11 кард-ридер и смарт-карта называются слот и токен соответственно. Для просмотра подключенных кард-ридеров и вставленных в них смарт-карт необходимо установить пакет opensc:

$ sudo apt install opensc

В пакет opensc входит консольная программа с помощью которой можно узнать какие кард-ридеры подключены к системе:

$ pkcs11-tool --list-slots
Available slots:
Slot 0 (0x0): Yubico YubiKey OTP+FIDO+CCID 00 00
  token label        : app auth key
  token manufacturer : piv_II
  token model        : PKCS#15 emulated
  token flags        : login required, rng, token initialized, PIN initialized
  hardware version   : 0.0
  firmware version   : 0.0
  serial num         : 00000000
  pin min/max        : 4/8

Вывод команды показывает, что в системе определился один кард-ридер под названием Yubico YubiKey OTP+FIDO+CCID. В этот кард-ридер вставлена смарт-карта с названием app auth key.

Если в системе не определился кард-ридер, то вывод программы будет как показано ниже:

# Кард-ридер не определяется системой
$ pkcs11-tool --list-slots
Available slots:
No slots.

Такая проблема может наблюдаться когда программа или сервис (служба) хостовой ОС использует кард-ридер, что делает его недоступным в виртуальном машине. В Debian подобных операционных системах, как Astra Linux или Ubuntu примером такого сервиса, который мешает сделать доступным кард-ридер гостевой ОС, является pcscd. Его необходимо временно отключить в хостовой OC.

# врменно отключаем в хостовой ОС
$ sudo systemctl stop pcscd

# запускаем приложение в гостевой ОС
# пока сервис pcscd отключен в хостовой ОС,
# гостевая может получить экслкюзивный доступ к токену

# запускаем отключенный сервис в хостовой ОС
# после того как в гостевой запустилось приложение
$ sudo systemctl start pcscd