Debian 软件包问题:文件正在安装到“/”中

Debian 软件包问题:文件正在安装到“/”中

我最近一直在尝试打包一个小型 Python 实用程序来放在我的 PPA 上,并且我几乎已经让它可以工作了,但是我在使包安装二进制文件(chmod +x Python 脚本)在/usr/bin.相反,它安装在/.我有这个目录结构->http://db.tt/0KhIYQL

我的包Makefile是这样的:

TARGET=usr/bin/txtrevise

make:
      chmod +x $(TARGET)

install:
      cp -r $(TARGET) $(DESTDIR)

据我了解,我已经使用$(DESTDIR)它在运行 debuild 时将文件放置在 debian 子目录下。

usr/bin我的包根目录下的文件夹下有 txtrevise 脚本,我的可执行文件。我还有 Makefile 和usr/bin/textrevise我的 tarball:txtrevise_1.1.original.tar.gz。

然而,当我构建这个并查看 Debian 软件包内部时,txtrevise 始终位于软件包的根目录而不是 usr/bin 下,并且将安装到 / 而不是 /usr/bin 下。

如何进行 debuild 将脚本放在正确的位置?

答案1

问题出在调用中:这将复制目录下的cp $(TARGET) $(DESTDIR)文件,即跳过前缀。您需要保留目录结构,例如:textrevise$(DESTDIR)/usr/bin

install:
    # ensure the destination directory exists
    mkdir -p $(DESTDIR)/usr/bin
    # copy the program to its final destination
    cp $(TARGET) $(DESTDIR)/$(TARGET)
    # ensure the program and directories have the correct permissions
    chmod a+rx $(DESTDIR)/$(TARGET)

请注意,在构建供其他人使用的软件包时,您还必须确保所有目录和二进制文件的权限都根据Debian 政策;在这种情况下,您希望 $(DESTDIR)/usr/bin/textrevise属于root:root和 模式 0755(以及目录$(DESTDIR)/usr$(DESTDIR)/usr/bin)。

您可能想看看 安装命令,使您可以更好地控制已安装文件的所有者、组和模式,以编写更简洁的 Makefile 节。

相关内容