【问题标题】:How to cleanup sources to rebuild package with dpkg-buildpackage?如何使用 dpkg-buildpackage 清理源以重建包?
【发布时间】:2014-07-15 07:55:35
【问题描述】:

我在玩 dpkg,但我遇到了一个很奇怪的问题:第一个包成功构建后,无法第二次构建包。

dpkg-buildpackage -sa
....
dpkg-source: warning: newly created empty file 'build/lib.linux-x86_64-2.7/neutron/api/__init__.py' will not be represented in diff
(repeats 100500 times for different files).

我怎样才能第二次重建 deb?

我好像错过了一些清理命令。

【问题讨论】:

    标签: debian packaging deb dpkg


    【解决方案1】:

    debian/rules 文件实际上是一个Makefile,它必须(根据Debian policy)有一个clean 目标来清理构建。

    如果这个目标没有自动运行,你可以用类似这样的方式显式调用它:

     dpkg-buildpackage -rfakeroot -Tclean
    

    【讨论】:

    • 但是dpkg-buildpackage 已经运行了这个目标,不是吗?
    • 我这样做了,甚至删除了所有 *.pyc 文件,并删除了构建目录。现在它失败了 dpkg-source: info: local changes detected, 修改后的文件是: neutron-2013.2.3/neutron.egg-info/entry_points.txt neutron-2013.2.3/neutron.egg-info/requires.txt dpkg -source:info:您可以将本地更改与 dpkg-source --commit ...似乎包损坏。谢谢。
    • @tripleee afaik 它应该在开始构建之前运行clean目标(而不是之后构建)
    • @GeorgeShuklin 在这种情况下:是的,可能包坏了。通过获取 [package via git](git://anonscm.debian.org/openstack/neutron.git) 你可能会更幸运,并且在重建之前确保 git-tree 是干净的......
    • 对;但是如果它确实有效,那么 OP 一开始就不会得到这个错误,对吧?
    【解决方案2】:

    另一种可能性是使用debuild 而不是直接调用dpkg-buildpackage。 最简单的方法是构建二进制包以及未签名的源代码和未签名的更改日志,cd 到源代码的debian/ 目录,然后:

    $ debuild -uc -us
    

    您可以在debuild 上调用clean 目标进行清理。

    $ debuild -T clean
    

    【讨论】:

    • 如果没有-T 标志,命令debuild clean 似乎不起作用。它直接将此传递给dpkg-buildpackage,如错误所示:dpkg-buildpackage -us -uc -ui -sa cleandpkg-buildpackage: error: unknown option or argument clean 添加-T 标志首先起作用:debuild -T clean 给出:dpkg-buildpackage -us -uc -ui -sa -T clean,然后显示它运行clean 目标debian/rules: fakeroot debian/rules clean
    【解决方案3】:

    debian/rules 文件通常用于清除旧的构建工件,但您的文件似乎有错误,或者只是缺少此功能。 (提交错误报告?)

    如果对您的包没有更多了解,这是推测性的,但请尝试删除 build 目录。

    在最坏的情况下,通过重新解包源重新开始。

    【讨论】:

      【解决方案4】:

      感谢大家的帮助。

      就我而言,问题分为两部分:

      • 未清理的文件(并且原包没有适当的清理规则)
      • 错误打包的 neutron_2013.2.3.orig.tar.gz,带有 neutron.egg-info(它甚至添加到 github 上 repo 上的 .gitignore)

      所以在我的情况下,解决方案相当复杂:

      1. 重新打包没有 neutron.egg-info 的 neutron_2013.2.3.orig.tar.gz
      2. 在 neutron_2013.2.3-0ubuntu1~cloud0.dsc 中更改 md5sum/sha1sum/sha256sum 和文件大小
      3. 使用 dpkg-source -x neutron_2013.2.3-0ubuntu1~cloud0.dsc 再次解压源代码
      4. (补丁/凹凸版本)
      5. dpkg-buildpackage -sa
      6. 要再次打包,请在 neutron-2013.2.3 中删除:
        1. rm -r build neutron.egg-info
        2. 找到 . -名称“*.py”| xargs rm
      7. dpkg-buildpackage -sa

      【讨论】:

        猜你喜欢
        • 2018-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-02
        • 2023-03-04
        • 1970-01-01
        • 2013-02-20
        相关资源
        最近更新 更多