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

tro*_*ine 12 linux debian packaging apt

我需要为软件项目Debianize一些静态资源,但是对可用信息感到困惑,并且可以使用一些指导.以下是我一直在阅读的资料:

Debian新维护者指南似乎是最中肯的,特别是这章,但它的说教演示是不是有效的我; 它更像是一个重新学习的参考而不是一个未知的指南.我发现的大部分信息同样适用于将包裹包含在我不需要的公共存储库中.为了让一些善良的人可以向我展示方式,我创建了一个小项目statrec,它举例说明了我需要创建的包类型.它的源代码树看起来像这样:

statrec/
??? LICENSE
??? README.md
??? share
?   ??? gilgamesh.txt
?   ??? thoreau.txt
??? VERSION
Run Code Online (Sandbox Code Playgroud)

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

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

我理解如何完成其​​中的一些,可能使用哪些工具,但感觉过多的信息过度平行.

Jan*_*dec 8

我会说最简单的事情是:

  1. 创建一个makefile,它将按照您希望的方式安装文件以遵守任何DESTDIR设置,并且不对默认目标执行任何操作.有点像:

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

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

  2. 让它dh_make --native做生意(它将创建另一个debian/rules将调用第一个makefile的makefile).

  3. 看下面的文件debian.特别是debian/changelog可能需要编辑(它来自debuild/ dpkg-buildpackage获取版本号,因此必须填写).

    我相信自动debuild使用fakeroot,因为dpkg-buildpackage你必须手动指定它.甚至不要把它作为真正的根运行.

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

不需要关心卸载就像dpkg处理那样.

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

此外,如果它是软件的一部分,而不是数据文件的单机一堆,安装应使用一个共同的生成文件的软件一般安装的一部分,应该只有一个 Debian源代码包,只是在debian/controldebian/*.files应指定哪些文件去到应用程序包("架构:任何")以及哪些文件转到数据包("Architecure:all",通常是后缀-data).

  • 那个`cp -r`至少是错误的,因为它假设存在`$(DESTDIR)/ share/statrec`.`dh_make --native`创建了一个本机包,这里错了.`ChangeLog`被命名为`changelog`.应该审查和编辑,重命名或删除"debian"下的其他文件.`dpkg-buildpackage`使用`fakeroot`自动使用2年. (2认同)
  • `dh_make --native`是错误的,因为引用`maint-guide`,"普通的Debian软件包是由上游程序制作的非本地Debian软件包." 本机程序包仅适用于仅使用Debian的软件,即使这样,非本机程序包也可能是更好的选择.`makefile`在`cp -a`(不是`cp -r`)之前需要`mkdir -p $(DESTDIR)/ share/statrec/$(VERSION)`或者在必要时创建目录的其他方法.此外,目标目录应该是`/ usr/share/statrec/$(VERSION)`,而不是`/ share/statrec/$(VERSION)`(如果你使用`$(VERSION)`,你需要定义它第一). (2认同)
  • 您可以在 debian/rules 中的 override_dh_auto_install 目标下使用类似的复制命令,而不是在根目录创建 Makefile(否则您可能不希望这样做)。使用 dh_install 源目标。 (2认同)