6

我有一个使用 MonoDevelop 用 C# 编写的爱好项目。一段时间以来,我一直在尝试了解 linux 封装,但我总是感到沮丧和不知所措。

我的程序包括:

  • 一个库项目(“生成器”),它处理我的程序创建的数据。
  • 使用 Gtk# 的 ui(“接口”)项目。这个项目有两个子目录:“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”目录。

我该怎么做呢?对不起,如果这是一个基本/广泛的问题。我一直在谷歌上搜索这个,我似乎找不到任何不假设我知道包装基础知识的东西(即使它声称它不假设这个)。

4

2 回答 2

5

Debian 软件包就像 tar 文件——它们包含文件系统的副本。要创建 Debian 软件包...

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

我将从学习 GNU 的自动工具开始:autoconf 和 automake。它们使在构建目录中安装程序变得非常容易。你提到了./configure。所以我假设 ythis 项目已经有了一些结构。从描述中,听起来该项目可能需要...

  • configure.in中的条目用于“book”和“glade”中的文件。
  • “book”和“glade”中的 Makefile.am 文件。

综上所述,以下命令会生成一个名为project.deb的包文件。

# ./configure --prefix build/usr
# 制作 && 制作安装
# dpkg --build 构建项目.deb
于 2009-11-16T04:46:03.630 回答
4

也许这篇博文可能对你有所帮助。

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

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

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

于 2016-04-14T14:55:33.000 回答