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

6
我有一个爱好项目,用MonoDevelop用C#编写。我一直在尝试理解Linux打包技术,但是每次都感到沮丧和不知所措。
我的程序由以下组成:
- 一个库项目(“Generator”),用于处理程序创建的数据。 - 一个使用Gtk#的ui(“Interface”)项目。此项目有两个子目录:“glade”(gtk用于构建小部件的xml文件)和“book”(程序使用的数据)。 - 一个实用程序项目(“Utils”),由库和界面项目共同使用。 - 一个主项目(“MyProgramName”),只启动界面。
我想做的事情(我认为)实际上非常简单(我认为):
- 编译我的应用程序 - 复制.exe和.dll文件(到/usr/local/bin?) - 复制“book”目录(到/usr/local/bin?) - 复制“glade”目录(到/usr/local/bin?)
哦,我想把它做成.deb包。我认为如果我能让tarball工作,那么.deb包不应该太麻烦,但这是我最终想做的事情。
我仍然不确定如何做到这一点。我已经使用MonoDevelop创建了Tarball。当我安装tarball(使用./configure,make,sudo checkinstall)时,它似乎安装了可执行代码(甚至创建了一个命令来运行程序),但忘记了“book”和“glade”目录。
我该怎么做呢?如果这是一个基本/广泛的问题,对不起。我一直在搜索关于此事的信息,但似乎找不到任何不假设我知道打包的基础知识的东西(即使它声称不假设这一点)。
2个回答

5

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

4
也许这篇博客文章对您有所帮助:点击此处

它详细描述了deb软件包的结构,如下所示:

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

基本上,您在软件包中有一个deb文件夹,里面包含以下两个必填文件夹:
  • 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问题有一天变成软件包-hell问题。缺点是软件包的大小可能会变得更大。

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


@Mogsdad,确实,你说得对。不幸的是,我在旅途中用手机回答问题,所以我的能力受到了限制。我现在已经更新了帖子,所以你可以取消踩了。 - Ivaylo Slavov
不是我给你的负评;我只是在解释为什么你可能会得到它们 - 但我会删除我的评论,感谢你采取行动。祝你好运!(附注:你不必感到匆忙回答一个七年前的问题,尤其是在手机上...原帖已经过去了。) - Mogsdad
1
感谢@Mogsdad,很抱歉没有证据就指责你,这和投票反对甚至更糟糕。我必须承认,问题的日期是我注意到的最后一件事情,由于我在前一天刚开始使用Debian打包,所以我决定在我还兴致勃勃且相关信息易于查找的时候回答问题。祝大家一切顺利。 - Ivaylo Slavov
1
@Ivaylo,我确实已经继续前进了,但仍然感谢你:) 我相信其他用户会从你的答案中受益。 - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接