为什么我的手创建deb包在安装时失败并且“无法创建”文件?

时间:2010-12-30 16:42:44

标签: linux dpkg deb

我制作了一个perl脚本,从头开始创建一个deb二进制包。 我创建了数据,控制等。 但是当我在我的deb包上运行dpkg -i时,它抱怨它无法从数据中获取文件。 例: 无法创建'.dpkg-new'(处理''时):没有这样的文件或目录。

我已经下载了一些.deb软件包,他们不会使用preinst脚本来创建目录结构。

我在想我做错了什么,我认为必须在preinst中创建我自己的目录,但这似乎不对......也许我错过了什么?

我是否必须创建目录,其中我的数据文件将在preinst sh中复制,或者dpkg是否应该执行此操作并且我做错了什么?

5 个答案:

答案 0 :(得分:4)

我在写的Ruby脚本中遇到了同样的问题。

我在构建data.tar.gz存档时生成了要传递给tar的文件列表。当我手动ungzip并解开档案时,它会收缩很好,但是dpkg会失败。

事实证明,文件列表还必须包含要创建的每个目录。

请注意,当我创建data.tar.gz时,我使用与dpkg-deb / build.c在dpkg-1.15.8.11源中几乎相同的选项构建它。

execlp(TAR, "tar", "-cf", "-", "--format=gnu", "--null", "-T", "-", "--no-recursion", NULL);

相反,我使用了

IO.popen("gnutar -czf - --format=gnu -T - --no-recursion", "r+")

答案 1 :(得分:2)

除了@Arrowmaster所说的内容之外,请查看http://www.debian.org/doc/debian-policy/以获取有关文件的详细说明。在您自己构建软件包之后,可以使用lintian工具进行检查,看看是否有任何明显的错误。

答案 2 :(得分:2)

如果有人寻找问题的解决方案:
“从rpm规范文件构建deb包。”
看这里http://www.deepnet.cx/debbuild/

我已经使我自己的perl构建脚本比上面提到的更简单,所以我可以轻松地维护它。

在此过程中获得的一些有用的知识:
 0. deb是一个包含3个文件的ar档案,文件的顺序很重要  1. control.tar.gz中的脚本必须是可执行的  2.如果dirs不存在,最好有一个预安装脚本来制作目录  3.有时dpkg决定解压缩你的拉链(如果zip是data.tar.gz中唯一的文件就会发生这种情况)所以请在安装后的脚本中检查一下。
 4.当你tar.gz时,请确保chmod到包含tar目录结构的目录。

答案 3 :(得分:1)

您不应尝试手动手动创建.deb二进制包。 Debian New Maintainers' Guide介绍了如何使用正确的工具开始创建Debian软件包。

您手工创建的包装可能看起来不对您,但因为它没有安装它显然有缺陷,您可能没有注意到或以一种您不可见的更严肃的方式(例如,大多数人都不知道)没有意识到.deb实际上是一个ar档案。)

答案 4 :(得分:1)

这有很多原因。你真的需要运行:

dpkg -i -D1110 mydeb.deb

发布结果,希望有人能够解决问题。