Linux 如何为静态文件创建本机Debian包?

Linux 如何为静态文件创建本机Debian包?,linux,debian,packaging,apt,Linux,Debian,Packaging,Apt,我需要对软件项目的一些静态资源进行借记,但对可用的信息感到困惑,并且可以在这样做时使用一些指导。以下是我一直在阅读的材料: Debian New Maintainer's Guide(Debian新维护者指南)似乎是最恰当的,尤其是,但它的说教式演示对我来说并不有效;它读起来更像是一个重新学习的参考,而不是一个未知的指南。我发现的许多信息同样适用于将包包含在我不需要的公共存储库中。为了让一些和善的人给我指路,我创建了一个小项目,它举例说明了我需要创建的包的类型。它的源代码树如下所示:

我需要对软件项目的一些静态资源进行借记,但对可用的信息感到困惑,并且可以在这样做时使用一些指导。以下是我一直在阅读的材料:

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

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

我知道如何完成其中的一些任务,可能需要使用哪些工具,但我觉得这些工具相当并行。

我想说最简单的事情是:

  • 创建一个makefile,该文件将按照您希望的方式安装文件,并遵循任何
    DESTDIR
    设置,而不对默认目标执行任何操作。大致如下:

    all: # nothing to build
    
    install:
        cp -r share/* $(DESTDIR)/usr/share/statrec/$(VERSION)
    
    DESTDIR
    这件事很重要;它不会安装到系统中,而是安装到dpkg将打包的临时目录中。所有符号链接必须指向最终目的地(不带
    $(DESTDIR)
    前缀)

  • dh_make--native
    做它自己的事(它将创建另一个makefile
    debian/rules
    ,调用第一个makefile)

  • 查看debian下的文件。尤其是
    debian/changelog
    可能需要编辑(它是
    debild
    /
    dpkg buildpackage
    获取版本号的地方,因此必须填写)

    我相信
    debild
    会自动使用
    fakeroot
    ,对于
    dpkg buildpackage
    您必须手动指定它。甚至不要考虑将它作为真正的根运行

  • 使用
    debild
    dpkg buildpackage-rfakeroot
    构建它

  • 无需关心卸载,因为
    dpkg
    将处理此问题

    更新:我建议
    dh_make--native
    ,因为我知道问题在于只需在几个debian系统上安装几个数据文件。如果应该分发,我建议只需在irc.debian.org#debian irc频道上询问,并可能将其留给debian开发者(只有debian开发者可以上传到debian archive,他们通常希望自己处理打包)


    另外,如果它是软件的一部分,而不是独立的一堆数据文件,那么安装应该是使用一个通用makefile的软件一般安装的一部分,应该只有一个Debian源程序包,只有
    Debian/control
    Debian/*。文件
    应该指定哪些文件进入应用程序包(即“架构:任意”),哪些文件进入数据包(即“架构:全部”,通常得到后缀
    -data
    )(关于cydia/jailbreak fame)“托管cydia存储库”指南对创建您自己的.deb文件非常有用。请在此处查看:

    您应该阅读中的第15.2.2节


    我发现仅仅创建一个.install文件并跳过Makefile部分是很有帮助的,对于我自己的项目来说,
    cp-r
    是错误的,至少因为它假定
    $(DESTDIR)/share/statrec
    存在。
    dh_make--native
    在此处创建了一个错误的本机软件包。
    ChangeLog
    被命名为
    ChangeLog
    debian
    下的其他文件应被查看和编辑、重命名或删除。
    dpkg buildpackage
    自动使用
    fakeroot
    持续两年。
    dh_make>--native
    是错误的,因为引用《维护指南》
    ,“正常的Debian软件包是由上游程序生成的非native Debian软件包。”native软件包仅适用于Debian-only软件,甚至非native软件包可能是更好的选择。而
    Makefile
    需要
    mkdir-p$(DESTDIR)/share/statrec/$(版本)
    cp-a
    (而不是
    cp-r
    )之前,或者在必要时使用其他方法来创建目录。此外,目标目录应该是
    /usr/share/statrec/$(版本)
    ,而不是
    /share/statrec/$(版本)
    (如果使用
    $(版本)
    ,则需要先定义它)。您的报价定义了什么是“普通Debian”软件包,而不是本机软件包和非本机软件包之间的重要区别。“本机”软件包是Debian项目特定的软件包,如
    dpkg
    ?两者之间的功能区别是什么?在什么情况下,非本机软件包可能是更好的选择,为什么Incerning
    VERSION
    MG 3.3注意到只定义了DESTDIR;是否定义了任何其他变量?项目生成文件的目标如何通过
    debuild
    dpkg buildpackage
    映射到它们的使用?是否只使用了
    install
    目标?
    dpkg
    打包为本机,是的。本机package意味着您每次更改打包中的内容时都需要发布新的上游版本,因为它只有上游版本,没有Debian版本号,这可能会带来不便。您可以在override下的Debian/rules中使用类似的copy命令,而不是在根目录下创建Makefile,否则您可能不希望这样做_dh_自动安装目标。使用dh_安装源目标。