Linux 为什么我手工创建的deb软件包在安装时失败,并带有;无法创建";档案?

Linux 为什么我手工创建的deb软件包在安装时失败,并带有;无法创建";档案?,linux,dpkg,deb,Linux,Dpkg,Deb,我制作了一个perl脚本,从头创建了一个deb二进制包。 我创建了数据、控件等。 但当我在我的deb包上运行dpkg-I时,它会抱怨无法从数据中删除文件。 例子: 无法创建“.dpkg new”(处理“”时):没有此类文件或目录 我下载了一些.deb包来查看,它们不使用preinst脚本来创建目录结构 我想我做错了什么,我认为必须在PrimNST中创建自己的目录,但是它似乎不对。也许我错过了什么 我是否必须创建目录,将数据中的文件复制到preinst sh中,还是dpkg这样做而我做错了什么?您

我制作了一个perl脚本,从头创建了一个deb二进制包。 我创建了数据、控件等。 但当我在我的deb包上运行dpkg-I时,它会抱怨无法从数据中删除文件。 例子: 无法创建“.dpkg new”(处理“”时):没有此类文件或目录

我下载了一些.deb包来查看,它们不使用preinst脚本来创建目录结构

我想我做错了什么,我认为必须在PrimNST中创建自己的目录,但是它似乎不对。也许我错过了什么


我是否必须创建目录,将数据中的文件复制到preinst sh中,还是dpkg这样做而我做错了什么?

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


您手工创建的软件包在您看来可能是正确的,但由于它没有安装,它显然有缺陷,要么是您没有注意到的小缺陷,要么是您看不见的更严重的缺陷(例如,大多数人没有意识到.deb实际上是ar存档)。

除了@Arrowmaster所说的,有关文件的详细说明,请查看。构建包本身后,您可以使用
lintian
工具检查包,查看是否有任何明显遗漏的内容。

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

我已经使我自己的perl构建脚本比前面提到的要简单得多,因此我可以轻松地维护它

在此过程中获得的一些有用知识:
0deb是一个ar归档文件,包含3个文件,文件的顺序很重要。
1.control.tar.gz中的脚本必须是可执行的。
2.如果目录不存在,最好有一个预安装脚本来创建目录。
3.有时dpkg决定解压您的拉链(如果zip是data.tar.gz中的唯一文件,则会发生这种情况),因此请在安装后脚本中检查此情况。

4.在tar.gz某些文件时,请确保chmod到包含tar目录结构的目录

我写的Ruby脚本也有同样的问题

在构建data.tar.gz归档文件时,我正在生成要传递给tar的文件列表。当我手动解压和解压归档文件时,它会很好地放气,但dpkg会失败

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

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

execlp(TAR、-cf、-cf、-format=gnu、-null、-T、-T、-no递归、-null)

相反,我用


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

原因很多。您确实需要运行:

dpkg -i -D1110 mydeb.deb
并张贴结果,希望有人能够解决问题

说“不要这样做”并不能真正解决想知道dpkg如何工作的问题。