2009-11-15 5 views
5

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

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

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

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

  • Компиляция мое приложение
  • Скопируйте .exe и .dll файлов (в/USR/местные/бен?)
  • Скопируйте "книга" каталог (в/USR/местные/бен?)
  • Скопировать "поляну" каталог (в/USR/местные/бен?)

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

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

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

ответ

4

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

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

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

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

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

 
# ./configure --prefix build/usr 
# make && make install 
# dpkg --build build project.deb 
3

Возможно, this blog post может быть вам полезной.

Он тщательно описывает структуру пакета 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 <[email protected]> 
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 - необязательно, может быть любой из allowed package categories в системе debian.
  • Description. Состоит из двух токенов - краткое описание (первый элемент перед новым символом строки) и необязательно длинный (текст после первой новой строки).
  • Depends - список зависимостей от вашего пакета. Пример гласит mono-complete который является имя пакета для моно выполнения, и, кроме того, ограничивает его быть выше или равна версии 3

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

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

+0

@Mogsdad, действительно, у вас есть точка. К сожалению, я отвечал со своего телефона во время путешествия, поэтому у меня были ограниченные возможности для обогащения почты. Я обновил его сейчас, так что вы можете удалить downvote –

+0

Не мой downvote; Я просто объяснял, почему вы можете их получить, но я удалю свой комментарий, спасибо за принятие мер. Удачи! (PS: вам не нужно торопиться отвечать на 7-летний вопрос на вашем телефоне ... OP двинулся дальше.) – Mogsdad

+1

Спасибо @Mogsdad, и извините за то, что обвиняю вас без каких-либо доказательств, это так же плохо, как downvote или еще хуже. Должен признаться, дата вопроса относится к числу последних вещей, которые я замечаю, и с тех пор, как я попал в упаковку Debian накануне, я решил ответить, пока я был еще в шумихе, и мне была легко найти соответствующую информацию. Желаю вам всем хорошо. –