我制作了一个perl脚本,从头开始创建一个deb二进制包。 我创建了数据,控制等。 但是当我在我的deb包上运行dpkg -i时,它抱怨它无法从数据中获取文件。 例: 无法创建'.dpkg-new'(处理''时):没有这样的文件或目录。
我已经下载了一些.deb软件包,他们不会使用preinst脚本来创建目录结构。
我在想我做错了什么,我认为必须在preinst中创建我自己的目录,但这似乎不对......也许我错过了什么?
我是否必须创建目录,其中我的数据文件将在preinst sh中复制,或者dpkg是否应该执行此操作并且我做错了什么?
答案 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
发布结果,希望有人能够解决问题。