我最近一直在尝试打包一个小型 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 节。