Как мне упаковать мое linux-приложение, используя MonoDevelop? - PullRequest
6 голосов
/ 16 ноября 2009

У меня есть хобби-проект, написанный на C # с использованием MonoDevelop. Я уже некоторое время пытаюсь разобраться с упаковкой Linux, но я продолжаю уходить, чувствуя себя разбитым и подавленным.

Моя программа состоит из:

  • Проект библиотеки («Генератор»), который работает с данными, созданными моей программой.
  • Проект пользовательского интерфейса ("Interface") с использованием Gtk #. Этот проект имеет два подкаталога: "glade" (xml-файлы, которые gtk использует для создания виджетов) и "book" (данные, используемые моей программой).
  • Служебный проект ("Utils"), используемый как библиотеками, так и интерфейсными проектами.
  • Основной проект («MyProgramName»), который просто запускает интерфейс.

Что (я думаю) я хочу сделать, это действительно очень просто (я думаю):

  • Скомпилируйте мое приложение
  • Скопируйте файлы .exe и .dll (в / usr / local / bin?)
  • Скопируйте каталог "book" (в / usr / local / bin?)
  • Скопировать каталог "glade" (в / usr / local / bin?)

О, и я хочу сделать это как пакет .deb. Я думаю, что если я смогу запустить tarball, то пакет .deb не должен вызывать особых проблем, но в конце концов я хочу это сделать.

Я все еще не совсем уверен, как это сделать. Я использовал MonoDevelop для создания тарбола. Когда я устанавливаю tarball (используя ./configure, make, sudo checkinstall), он, кажется, устанавливает исполняемый код (и даже создает команду для запуска программы), но забывает о «книге» и «поляне» каталоги.

Как бы я поступил так? Извините, если это основной / широкий вопрос. Я гуглял по этому поводу, и я не могу найти ничего, что не предполагает, что я знаю основы упаковки (даже если он утверждает, что не принимает это).

Ответы [ 2 ]

5 голосов
/ 16 ноября 2009

Пакеты Debian похожи на tar-файлы - они содержат копию файловой системы. Чтобы создать пакет Debian ...

  1. Установите tarball в директорию сборки.
  2. Добавить каталог DEBIAN с управляющими файлами. Я нашел эту статью полезной.
  3. Создайте пакет с помощью dpkg --build.

Я бы начал с изучения автоинструментов GNU: autoconf и automake. Они позволяют очень легко установить программу в директорию сборки. Вы упомянули ./configure. Поэтому я предполагаю, что у этого проекта уже есть некоторая структура. Из описания звучит так, будто проекту может понадобиться ...

  • Записи в configure.in для файлов "book" и "glade".
  • Makefile.am файлы в «книге» и «поляне».

Собрав все вместе, следующие команды приводят к файлу пакета с именем project.deb .

# ./configure --prefix build/usr
# make && make install
# dpkg --build build project.deb
4 голосов
/ 14 апреля 2016

Возможно этот блог может быть полезным для вас.

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

<YOUR PACKAGE NAME>
└── deb
    ├── DEBIAN
    │   ├── conffiles
    │   ├── control
    │   └── preinst
    └── opt
        └── <YOUR APPLICATION>
            └── <Your Application Contents>  

В основном, внутри пакета есть папка deb со следующими 2 обязательными папками внутри:

  • DEBIAN - содержит файлы, которые описывают сам пакет deb
  • структура файловой системы, отражающая место назначения пакета монтаж. В приведенном выше примере пакет будет развернут в каталоге /opt/<YOUR APPLICATION>.

В каталоге DEBIAN у вас должен быть как минимум файл control, который является простым текстом. Он должен содержать записи в определенном формате, который подробно описан на связанной странице. Вот простой пример (взятый оттуда) с образцом контрольного файла:

Package:packagingmono
Version:1.0
Maintainer:Mikael Chudinov <mikael@chudinov.net>
Architecture:amd64
Section:net
Description:Template for Debian packaged Mono application.
Depends:mono-complete (>=3)
  • Package должно быть вашим именем пакета. Разрешены верхние / нижние латинские буквы, цифры и -.
  • Version - версия пакета. Я бы рекомендовал использовать версию сборки для этого поля.
  • Maintainer - имя разработчика и контактные данные и контактная информация.
  • Architecture - либо i386, либо amd64. Если вы хотите распространять ваше приложение, оптимизированное для x86 и x64, в виде отдельных исполняемых файлов для каждой платформы (я имею в виду, что они созданы специально для x64 или x86, не использующих AnyCPU), то вы должны создать отдельные пакеты .deb для каждого и установить поле Architecture соответственно. Остальные поля могут быть одинаковыми.
  • Section - необязательно, это может быть любая из разрешенных категорий пакетов в системе Debian apt.
  • Description. Состоит из двух токенов - краткое описание (первый элемент перед символом новой строки) и, возможно, более длинный (текст после первой новой строки).
  • Depends - список зависимостей для вашего пакета. В примере указывается mono-complete, которое является именем пакета для моно среды выполнения, и дополнительно ограничивает его значением выше или равным версии 3

Важная вещь, которую нужно знать о пакете deb, заключается в том, что вы можете фактически поместить все приложение (содержимое папки bin) в один пакет. Нет необходимости помещать указанные библиотеки в отдельные пакеты и помечать их как зависимости, что имеет смысл, если вы планируете устанавливать другие приложения, которые будут полагаться на те же библиотеки. Кроме того, упаковка приложения не позволила бы проблеме dll-hell однажды стать проблемой пакета-адом. Недостатком этого является то, что размер упаковки может увеличиться.

В статье также рекомендуются некоторые родные инструменты GNU / Linux, которые помогут вам в создании пакета. Например, xbuild можно использовать для запуска файла MSBuild, который сделает упаковку за вас. Это поможет сделать вещи более знакомыми для разработчиков Windows. Инструмент lintian может также помочь вам исправить проблемы с созданным файлом .deb. Остальные инструменты - это промежуточные утилиты, которые запускаются во время процесса упаковки MSBuild.

...