Matthew Pirocchi Matthew Pirocchi - 1 year ago 167
Linux Question

How do I package my linux application using MonoDevelop?

I have a hobby project that is written in C# using MonoDevelop. I've been trying for some time now to get my head around linux packaging, but I keep coming away feeling frustrated and overwhelmed.

My program consists of:

  • A library project ("Generator") that does stuff with the data created by my program.

  • An ui ("Interface") project using Gtk#. This project has two subdirectories: "glade" (xml files that gtk uses to build widgets) and "book" (data used by my program).

  • A utility project ("Utils") used by both the library and interface projects.

  • A main project ("MyProgramName") that just starts the interface.

What (I think) I want to do is really very simple (I think):

  • Compile my application

  • Copy the .exe and .dll files (to /usr/local/bin?)

  • Copy the "book" directory (to /usr/local/bin?)

  • Copy the "glade" directory (to /usr/local/bin?)

Oh, and I want to do this as a .deb package. I think if I can get the tarball working, a .deb package shouldn't be too much trouble, but that's what I want to do eventually.

I'm still not really sure how to do this. I've used MonoDevelop to create a Tarball. When I install the tarball (using
sudo checkinstall
), it seems to install the executable code (and even create a command to run the program), but forgets about the "book" and "glade" directories.

How would I go about doing this? Sorry if this is a basic/broad question. I've been googling around about this, and I can't seem to find anything that doesn't assume I know the basics of packaging (even if it claims it doesn't assume this).

Answer Source

Debian packages are like tar files - they contain a copy of the file system. To create a Debian package...

  1. Install the tarball in a build directory.
  2. Add a DEBIAN directory with the control files. I found this article helpful.
  3. Create the package with dpkg --build.

I would start by learning GNU's autotools: autoconf and automake. They make it very easy to install the program in a build directory. You mentioned ./configure. So I assume ythis project already has some of the structure. From the description, it sounds like the project might need...

  • Entries in for files in "book" and "glade".
  • files in "book" and "glade".

Putting it all together, the following commands result in a package file named project.deb.

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