Linux 如何为静态文件创建本机Debian包?
我需要对软件项目的一些静态资源进行借记,但对可用的信息感到困惑,并且可以在这样做时使用一些指导。以下是我一直在阅读的材料:Linux 如何为静态文件创建本机Debian包?,linux,debian,packaging,apt,Linux,Debian,Packaging,Apt,我需要对软件项目的一些静态资源进行借记,但对可用的信息感到困惑,并且可以在这样做时使用一些指导。以下是我一直在阅读的材料: 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
我知道如何完成其中的一些任务,可能需要使用哪些工具,但我觉得这些工具相当并行。我想说最简单的事情是:
DESTDIR
设置,而不对默认目标执行任何操作。大致如下:
all: # nothing to build
install:
cp -r share/* $(DESTDIR)/usr/share/statrec/$(VERSION)
DESTDIR
这件事很重要;它不会安装到系统中,而是安装到dpkg将打包的临时目录中。所有符号链接必须指向最终目的地(不带$(DESTDIR)
前缀)dh_make--native
做它自己的事(它将创建另一个makefiledebian/rules
,调用第一个makefile)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
?两者之间的功能区别是什么?在什么情况下,非本机软件包可能是更好的选择,为什么IncerningVERSION
MG 3.3注意到只定义了DESTDIR;是否定义了任何其他变量?项目生成文件的目标如何通过debuild
或dpkg buildpackage
映射到它们的使用?是否只使用了install
目标?dpkg
打包为本机,是的。本机package意味着您每次更改打包中的内容时都需要发布新的上游版本,因为它只有上游版本,没有Debian版本号,这可能会带来不便。您可以在override下的Debian/rules中使用类似的copy命令,而不是在根目录下创建Makefile,否则您可能不希望这样做_dh_自动安装目标。使用dh_安装源目标。