如何使用MonoDevelop打包我的Linux应用程序?

我有一个用C#编写的使用MonoDevelop的爱好项目。 我一直在尝试一段时间来让我的脑袋绕过Linux的包装,但我不断地感到沮丧和不知所措。

我的程序包括:

  • 一个图书馆项目(“发电机”),用我的程序创build的数据。
  • 一个使用Gtk#的UI(“接口”)项目。 这个项目有两个子目录:“glade”(gtk用于构build小部件的xml文件)和“book”(我的程序使用的数据)。
  • 库和接口项目使用的实用程序项目(“Utils”)。
  • 一个主要项目(“MyProgramName”),只是启动界面。

我想要做的是什么(我认为)非常简单:

  • 编译我的应用程序
  • 复制.exe和.dll文件(到/ usr / local / bin?)
  • 复制“book”目录(到/ usr / local / bin?)
  • 复制“glade”目录(到/ usr / local / bin?)

噢,我想做一个.deb包。 我想如果我能得到tarball的工作,一个.deb包不应该太麻烦,但是这就是我最终想要做的。

我仍然不确定如何做到这一点。 我用MonoDevelop来创build一个Tarball。 当我安装tarball(使用./configure sudo checkinstall )时,它似乎安装了可执行代码(甚至创build了一个运行程序的命令),但忘记了“book”和“glade”目录。

我怎么去做这个? 对不起,如果这是一个基本的/广泛的问题。 我一直在search这个,我似乎无法find任何不认为我知道包装的基本知识(即使它声称它不承担这一点)。

Debian软件包就像tar文件 – 它们包含文件系统的一个副本。 要创建一个Debian软件包…

  1. 在构建目录中安装tarball。
  2. 用控制文件添加一个DEBIAN目录。 我发现这篇文章很有帮助。
  3. 使用dpkg --build创建软件包。

我将从学习GNU的autotools开始:autoconf和automake。 他们使得将程序安装到构建目录非常容易。 你提到了./configure 。 所以我认为这个项目已经有了一些结构。 从描述来看,这听起来像项目可能需要…

  • 在“book”和“glade”中为configure.in文件输入文件。
  • “book”和“glade”中的Makefile.am文件。

综合起来,下面的命令产生一个名为project.deb的包文件。

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

也许这个博客文章可能对你有帮助。

它彻底地描述了一个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 – 无论是i386amd64 。 如果您想将针对x86和x64进行优化的应用程序作为单独的可执行文件分发给每个平台(我的意思是为x64或x86而不是使用AnyCPU明确构建),那么您应该为每个平台生成单独的.deb包,并适当地设置Architecture字段。 其余的字段可能仍然是一样的。
  • Section – 可选,可以是debian apt系统允许的任何包类别 。
  • Description 。 由两个标记组成 – 简短描述(新行符号之前的第一个项目)和可选较长的一个(第一个新行之后的文本)。
  • Depends你的软件包的依赖列表。 这个例子声明mono-complete是mono运行时的包名,并且进一步限制它高于或等于版本3

了解deb包的重要之处在于,您可以将整个应用程序(bin文件夹的内容)放到一个包中。 不需要将引用的库放在单独的包中,并将它们标记为依赖项,如果您计划安装依赖于相同库的其他应用程序,则后者是有意义的。 此外,将应用程序打包在一起不会让dll-hell问题有一天成为一个包装问题。 这样做的缺点是包装的尺寸可能会变大。

本文还推荐了一些本地GNU / Linux工具,可以帮助您创建包。 例如, xbuild可以用来运行一个MSBuild文件来为你做打包。 这将有助于使Windows开发人员更加熟悉。 lintian工具也可以帮助你解决生成的.deb文件的问题。 其余的工具是在MSBuild打包过程中调用的中间工具。