【问题标题】:Why does my hand created deb package fails at install with "unable to create" on files?为什么我手工创建的 deb 包在安装时失败,文件上“无法创建”?
【发布时间】:2010-12-30 16:42:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: linux dpkg deb


    【解决方案1】:

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

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

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

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

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

    我用了

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

    【讨论】:

      【解决方案2】:

      除了@Arrowmaster 所说的,查看http://www.debian.org/doc/debian-policy/ 以获取文件的一些详细说明。构建包本身后,您可以使用lintian 工具检查它,看看是否有明显的遗漏。

      【讨论】:

        【解决方案3】:

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

        我自己的 perl 构建脚本比上面提到的要简单得多,所以我可以轻松地维护它。

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

        【讨论】:

          【解决方案4】:

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

          您手动创建的软件包对您来说可能看起来是正确的,但因为它没有安装,所以它显然存在缺陷,无论是您没有注意到的小问题,还是您看不到的更严重的方式(例如,大多数人不知道) '没有意识到 .deb 实际上是一个 ar 存档)。

          【讨论】:

          • 说“不做”并不能真正解决想知道 dpkg 是如何工作的问题。
          【解决方案5】:

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

          dpkg -i -D1110 mydeb.deb
          

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

          【讨论】:

            猜你喜欢
            • 2016-11-21
            • 1970-01-01
            • 2017-07-29
            • 2011-02-01
            • 2021-05-12
            • 1970-01-01
            • 2020-08-25
            • 2017-05-23
            • 2012-08-25
            相关资源
            最近更新 更多