Recloud Wiki 2025.2 Help

Публикация для Debian / Ubuntu

Лаунчер Gml.Launcher написан с использованием технологии Avalonia.

Avalonia для Linux может быть запущена на большинстве дистрибутивов Linux с помощью двойного щелчка по исполняемому файлу или через терминал. Тем не менее, для лучшего пользовательского опыта рекомендуется установить программу, чтобы пользователи могли запускать её через ярлык на рабочем столе, существующий в средах рабочего стола, таких как GNOME и KDE, или через командную строку, добавив программу в PATH.

Приложения для дистрибутивов, связанных с Debian и Ubuntu, упаковываются в файлы .deb, которые можно установить с помощью команды sudo apt install ./your_package.deb.

Руководство

В этом руководстве мы будем использовать инструмент dpkg-deb для компиляции вашего пакета .deb.

1) Организация файлов программы в папке подготовки

Пакеты Debian имеют следующую базовую структуру:

./staging_folder/ ├── DEBIAN │   └── control # файл управления пакетом └── usr ├── bin │   └── myprogram # стартовый скрипт ├── lib │   └── myprogram │   ├── libHarfBuzzSharp.so # библиотека Avalonia │   ├── libSkiaSharp.so # библиотека Avalonia │   ├── other_native_library_1.so │   ├── myprogram_executable # основной исполняемый файл │   ├── myprogram.dll │   ├── my_other_dll.dll │   ├── ... # все файлы, сгенерированные dotnet publish └── share ├── applications │   └── MyProgram.desktop # ярлык на рабочем столе ├── icons │   └── hicolor │   ├── ... # иконки различных разрешений (необязательно) └── pixmaps └── myprogram.png # основная иконка приложения

Значение каждой папки:

  • DEBIAN: содержит файл control.

  • /usr/bin/: содержит стартовый скрипт (рекомендуется для запуска программы через командную строку).

  • /usr/lib/myprogram/: содержит все файлы, сгенерированные dotnet publish.

  • /usr/share/applications/: папка для ярлыка на рабочем столе.

  • /usr/share/pixmaps/ и /usr/share/icons/hicolor/**: папки для иконок приложения.

2) Создание файла control

Файл control размещается в папке DEBIAN.

Этот файл описывает общие аспекты вашей программы, такие как её имя, версия, категория, зависимости, сопровождающий, архитектура процессора и лицензии. Более подробное описание всех возможных полей в файле можно найти в документации Debian.

Зависимости .NET можно перечислить, выполнив команду apt show dotnet-runtime-deps-8.0 (суффикс меняется для других версий .NET); они будут отображены в строке, начинающейся с Depends: .... Зависимости Avalonia включают: libx11-6, libice6, libsm6, libfontconfig1. В целом, все зависимости .NET и Avalonia обязательны, плюс любые другие, специфичные для вашего приложения.

Ниже приведен простой пример файла control.

Package: myprogram Version: 3.1.0 Section: devel Priority: optional Architecture: amd64 Installed-Size: 68279 Depends: libx11-6, libice6, libsm6, libfontconfig1, ca-certificates, tzdata, libc6, libgcc1, libgssapi-krb5-2, libstdc++6, zlib1g, libssl1.0.0 | libssl1.0.2 | libssl1.1 | libssl3, libicu | libicu72 | libicu71 | libicu70 | libicu69 | libicu68 | libicu67 | libicu66 | libicu65 | libicu63 | libicu60 | libicu57 | libicu55 | libicu52 Maintainer: Ken Lee <kenlee@outlook.com> Homepage: https://github.com/kenlee/myprogram Description: Это MyProgram, отличный для выполнения X. Copyright: 2022-2024 Ken Lee <kenlee@outlook.com>

3) Создание стартового скрипта

Этот шаг рекомендуется по двум причинам: во-первых, для уменьшения сложности ярлыка на рабочем столе, а во-вторых, для того, чтобы ваше приложение можно было запустить из терминала.

Имя файла стартового скрипта должно быть предпочтительно myprogram (без расширения .sh), чтобы при вводе "myprogram" в терминале пользователи могли запустить ваше приложение.

Файл myprogram_executable обычно имеет то же имя, что и его .NET проект, например, если ваш Avalonia .csproj проект называется MyProgram.Desktop, то основной исполняемый файл, сгенерированный dotnet publish, будет MyProgram.Desktop.

Пример стартового скрипта:

#!/bin/bash # используем exec, чтобы скрипт-обертка не оставался как отдельный процесс # "$@" для передачи аргументов командной строки приложению exec /usr/lib/myprogram/myprogram_executable "$@"

4) Создание ярлыка на рабочем столе

Файл ярлыка на рабочем столе соответствует спецификации freedesktop. Вики Arch Linux также содержит полезную информацию.

Ниже приведен пример файла ярлыка на рабочем столе.

[Desktop Entry] Name=MyProgram Comment=MyProgram, отличный для выполнения X Icon=myprogram Exec=myprogram StartupWMClass=myprogram Terminal=false Type=Application Categories=Development GenericName=MyProgram Keywords=ключевое_слово1; ключевое_слово2; ключевое_слово3

5) Добавление иконок hicolor (необязательно)

Иконки hicolor следуют следующей структуре папок.

Эта запись в блоге советует помещать иконки в директории hicolor и pixmaps, согласно документации по системе меню Debian и документации FreeDesktop.

├── icons │   └── hicolor │   ├── 128x128 │   │   └── apps │   │   └── myprogram.png │   ├── 16x16 │   │   └── apps │   │   └── myprogram.png │   ├── 256x256 │   │   └── apps │   │   └── myprogram.png │   ├── 32x32 │   │   └── apps │   │   └── myprogram.png │   ├── 48x48 │   │   └── apps │   │   └── myprogram.png │   ├── 512x512 │   │   └── apps │   │   └── myprogram.png │   ├── 64x64 │   │   └── apps │   │   └── myprogram.png │   └── scalable │   └── apps │   └── myprogram.svg

6) Компиляция пакета .deb

# для архитектуры x64 рекомендуется суффикс amd64. dpkg-deb --root -owner-group --build ./staging_folder/ "./myprogram_${versionName}_amd64.deb"

Пример скрипта оболочки Linux для всего процесса

#!/bin/bash # Очистка rm -rf ./out/ rm -rf ./staging_folder/ # Публикация .NET # рекомендуется self-contained, чтобы конечным пользователям не нужно было устанавливать .NET dotnet publish "./src/MyProgram.Desktop/MyProgram.Desktop.csproj" \ --verbosity quiet \ --nologo \ --configuration Release \ --self-contained true \ --runtime linux-x64 \ --output "./out/linux-x64" # Папка подготовки mkdir staging_folder # Файл управления Debian mkdir ./staging_folder/DEBIAN cp ./src/MyProgram.Desktop.Debian/control ./staging_folder/DEBIAN # Стартовый скрипт mkdir ./staging_folder/usr mkdir ./staging_folder/usr/bin cp ./src/MyProgram.Desktop.Debian/myprogram.sh ./staging_folder/usr/bin/myprogram chmod +x ./staging_folder/usr/bin/myprogram # установка разрешений на выполнение стартового скрипта # Другие файлы mkdir ./staging_folder/usr/lib mkdir ./staging_folder/usr/lib/myprogram cp -f -a ./out/linux-x64/. ./staging_folder/usr/lib/myprogram/ # копирование всех файлов из каталога публикации chmod -R a+rX ./staging_folder/usr/lib/myprogram/ # установка разрешений на чтение всех файлов chmod +x ./staging_folder/usr/lib/myprogram/myprogram_executable # установка разрешений на выполнение основного исполняемого файла # Ярлык на рабочем столе mkdir ./staging_folder/usr/share mkdir ./staging_folder/usr/share/applications cp ./src/MyProgram.Desktop.Debian/MyProgram.desktop ./staging_folder/usr/share/applications/MyProgram.desktop # Иконка на рабочем столе # 1024px x 1024px PNG, как у VS Code для его иконки mkdir ./staging_folder/usr/share/pixmaps cp ./src/MyProgram.Desktop.Debian/myprogram_icon_1024px.png ./staging_folder/usr/share/pixmaps/myprogram.png # Иконки hicolor mkdir ./staging_folder/usr/share/icons mkdir ./staging_folder/usr/share/icons/hicolor mkdir ./staging_folder/usr/share/icons/hicolor/scalable mkdir ./staging_folder/usr/share/icons/hicolor/scalable/apps cp ./misc/myprogram_logo.svg ./staging_folder/usr/share/icons/hicolor/scalable/apps/myprogram.svg # Создание файла .deb dpkg-deb --root-owner-group --build ./staging_folder/ ./myprogram_3.1.0_amd64.deb

Установка

sudo apt install ./myprogram_3.1.0_amd64.deb

Удаление

sudo apt remove myprogram

Сторонние инструменты публикации для Debian / Ubuntu

Last modified: 05 July 2024