Search code examples
c#linuxpackagingmonodevelop

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 ./configure, make, 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).


Solution

  • 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 configure.in for files in "book" and "glade".
    • Makefile.am 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