【问题标题】:Building a .deb of a Python project fails - dpkg-buildpackage is trying to delete files as directories?构建 Python 项目的 .deb 失败 - dpkg-buildpackage 正在尝试将文件作为目录删除?
【发布时间】:2013-02-27 21:30:53
【问题描述】:

这是我第二次尝试创建 deb 文件 - 第一次是我使用 FPM 的 C 项目 - 这工作得很好,尽管是一个不可接受的包 - 它工作正常。然而,这是一个 Python 项目 (GNS3),我更愿意正确地完成它,因为如果我要这样做 - 它也可能是正确的。话虽如此,现在我会接受一个有效的 .deb 文件。

问题:我一直在修改 GNS3 作为一个项目,我需要做的最后一步是将它重新打包成一个 .deb 文件。我知道这是可以做到的,因为它在 Ubuntu 存储库中,但我的研究让我了解到 Debian 的一个叫 Erik Wenzel 的人构建了 deb 并且他不再可用 - 而 GNS3 的开发人员显然专注于 Windows并且没有当前的知识来打包它(“据称” - 我最近问过他们但还没有收到回复 - 如果我这样做了,我会将他们提供的任何信息添加到这个问题中)。

我尝试了各种不同的方法来获取 debian 软件包,但我尝试的最后一种方法似乎最有希望。我用过(来自:https://pypi.python.org/pypi/stdeb):

python setup.py --command-packages=stdeb.command bdist_deb

这给了我压缩包,然后尝试:

dpkg-buildpackage -rfakeroot -uc -us

这没有用。此输出失败(从末尾截断):

...
dh_python2 -O--buildsystem=python_distutils
dh_usrlocal -O--buildsystem=python_distutils
dh_usrlocal: debian/python-gns3/usr/local/share/examples/gns3/baseconfig.txt is not a directory
dh_usrlocal: debian/python-gns3/usr/local/share/examples/gns3/baseconfig_sw.txt is not a directory
rmdir: failed to remove `debian/python-gns3/usr/local/share/examples/gns3': Directory not empty
dh_usrlocal: rmdir debian/python-gns3/usr/local/share/examples/gns3 returned exit code 1
make: *** [binary] Error 25
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

错误是正确的(?!) - 这两个文件不是目录 - 它们是文本文件 - 它们似乎没有任何异常特征:

drwxr-xr-x 2 steved swdept 4096 Feb 27 16:57 ./
drwxr-xr-x 3 steved swdept 4096 Feb 27 16:57 ../
-rw-r--r-- 1 steved swdept 3146 Feb 26 15:00 baseconfig_sw.txt
-rw-r--r-- 1 steved swdept 257 Feb 26 15:00 baseconfig.txt

看来 STDEB 正在正确地发挥作用 - 但我不能肯定地说。它可能正在做一些导致 dpkg-buildpackage 失败的事情。我希望有人会看到这个然后说,“当然那是行不通的——你需要做 x 和 y,然后它就会建立起来”。或者至少是“试试这个和这个”。

如果我能做到这一点,那么我也可以将知识回馈给 GNS3 项目,这将是非常棒的。

任何帮助表示赞赏。

干杯

史蒂夫

【问题讨论】:

    标签: python debian ubuntu-12.04 deb dpkg


    【解决方案1】:

    只需将其放入您的 debian/rules 文件 override_dh_usrlocal: 中,这将阻止 dh_usrlocal 运行,我认为这实际上会导致您出现问题。我遇到了类似的情况,这样做对我有帮助。

    【讨论】:

      【解决方案2】:

      不要在/usr/local 中安装任何东西。如果你想打包一个已经有官方包的新版本的软件,不要尝试从头开始制作一个包,而是修改现有的。

      【讨论】:

      • 我并没有从原始源更改安装路径,但我相信在 GNS3 论坛上有一些关于移动其安装位置的讨论。至于修改原包,有没有正确的方法?我不是在制作这样的新版本,它更像是一个分支。
      • @Steve 使用 dch --local 添加新的变更日志条目并进行所需的任何修改。
      • 我可能做错了,但我使用 AR 解压 deb,使用 python setup.py --command-packages=stdeb.command bdist_deb 创建新存档来替换数据。 tar.gz 然后用 AR 重新打包,但它似乎不再是 dpkg 的 deb 文件。我还没有机会深入研究它,但我走在正确的轨道上吗?干杯
      • @Steve 说错了。从debian.org/doc/manuals/maint-guide开始
      猜你喜欢
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      相关资源
      最近更新 更多