【问题标题】:How do I create a native Debian package for static files?如何为静态文件创建本机 Debian 软件包?
【发布时间】:2011-11-02 19:32:19
【问题描述】:

我需要为一个软件项目对一些静态资源进行 Debian 化,但对可用信息感到困惑,因此可以使用一些指导。以下是我一直在阅读的材料:

Debian 新维护者指南 似乎是最恰当的,尤其是 this chapter,但它的教学演示对我来说并不有效;它更像是一种重新学习的参考,而不是未知的指南。我发现的许多信息同样适用于将软件包包含在我不需要的公共存储库中。为了让一些好心的人给我指路,我创建了一个小项目statrec,它举例说明了我需要创建的包类型。它的源代码树如下所示:

statrec/
├── LICENSE
├── README.md
├── share
│   ├── gilgamesh.txt
│   └── thoreau.txt
└── VERSION

我需要但无法推断出如何:

  • 安装statrec/share/usr/share/statrec/VERSION/
  • 创建或修改从/usr/share/statrec/current//usr/share/statrec/VERSION/ 的符号链接,然后
  • 卸载以前版本的 statrec。

我了解如何完成其​​中的一些,也许可以使用哪些工具,但对surfeit of information 感到相当困惑。

【问题讨论】:

    标签: linux debian packaging apt


    【解决方案1】:

    我想说最简单的方法是:

    1. 创建一个makefile,它将按照您的要求安装文件,以遵守任何DESTDIR 设置,并且对默认目标不执行任何操作。大致如下:

      all: # nothing to build
      
      install:
          cp -r share/* $(DESTDIR)/usr/share/statrec/$(VERSION)
      

      DESTDIR 很重要;它不会安装到系统,而是安装到 dpkg 将打包的临时目录。所有符号链接都必须指向最终目的地(不带 $(DESTDIR) 前缀)。

    2. dh_make --native 做它的事(它会创建另一个makefile debian/rules 来调用第一个makefile)。

    3. 查看debian 下的文件。特别是debian/changelog 可能需要编辑(这是debuild /dpkg-buildpackage 获取版本号的地方,所以必须填写)。

      我相信debuild 会自动使用fakeroot,对于dpkg-buildpackage,您必须手动指定它。甚至不要考虑以真正的 root 身份运行它。

    4. 使用debuilddpkg-buildpackage -rfakeroot 构建它

    无需担心卸载,因为 dpkg 会处理这个问题。

    更新:我建议dh_make --native,因为我理解问题只是在少数 debian 系统上安装少量数据文件。如果应该分发它,我建议只需在 irc.debian.org#debian IRC 频道上询问,并可能留给 Debian 开发人员(只有 Debian 开发人员可以上传到 Debian 存档,他们通常想自己处理打包) .

    另外,如果它是软件的一部分,而不是独立的一堆数据文件,安装应该是使用一个通用 makefile 的软件的一般安装的一部分,应该只有 一个 Debian 源包,只有debian/controldebian/*.files 应该指定哪些文件进入应用程序包(即“Architecture: any”)以及哪些文件进入数据包(即“Architecture: all”,通常后缀为@ 987654340@)。

    【讨论】:

    • cp -r 是错误的,至少因为它假定 $(DESTDIR)/share/statrec 存在。 dh_make --native 创建了一个本地包,但这里是错误的。 ChangeLog 被命名为 changelogdebian 下的其他文件应进行审查和编辑、重命名或删除。 dpkg-buildpackage 使用 fakeroot 自动持续 2 年。
    • dh_make --native 是错误的,因为引用maint-guide,“普通 Debian 软件包是由上游程序制作的非本地 Debian 软件包。”本机软件包仅适用于仅 Debian 的软件,即使如此,非本机软件包也可能是更好的选择。 Makefilecp -a 之前需要mkdir -p $(DESTDIR)/share/statrec/$(VERSION)(不是cp -r)或其他一些方法来创建目录(如果需要)。另外,目标目录应该是/usr/share/statrec/$(VERSION),而不是/share/statrec/$(VERSION)(如果你使用$(VERSION),你需要先定义它)。
    • 您的报价定义了“普通 Debian”软件​​包是什么,而不是本地和非本地之间的重要区别。那么,“本机”软件包是 Debian 项目特定的软件,例如 dpkg?区别之间的功能区别是什么?在什么情况下,非本地包可能是更好的选择,为什么?关于VERSION MG 3.3 注意到只定义了 DESTDIR;是否定义了其他变量?项目 Makefile 的目标如何映射到 debuilddpkg-buildpackage 的使用?是不是只使用了install这个目标?
    • dpkg 被打包为原生,是的。 native 包意味着每次更改包中的东西都需要发布一个新的上游版本,因为它只有上游版本,没有 Debian 版本号,这可能不方便。
    • 您可以在 debian/rules 的 override_dh_auto_install 目标下使用类似的复制命令,而不是在根目录创建 Makefile,否则您可能不希望这样做。使用 dh_install source dest。
    【解决方案2】:

    您应该阅读debian-handbook 中的第 15.2.2 节。

    我发现为我自己的项目创建一个 .install 文件并跳过 Makefile 部分很有帮助

    【讨论】:

      【解决方案3】:

      我发现 saurik(以 cydia/越狱而闻名)的“托管 Cydia 存储库”指南对创建您自己的 .deb 文件很有用。在这里看看:http://www.saurik.com/id/7

      【讨论】:

        猜你喜欢
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        相关资源
        最近更新 更多