在我的 debian 包中创建 .sh 包装器

在我的 debian 包中创建 .sh 包装器

我正在尝试为使用 mono 的程序构建 debian 包。我的make install目标当前放置了所有二进制文件/usr/local/lib/mypackage,然后创建一个微小的可执行脚本,/usr/local/bin用 mono 调用实际的二进制文件。我使用单行代码将占位符替换PREFIX为实际安装路径:

install: DESTDIR=/usr/local
install: LIBDIR=$(DESTDIR)/lib
install: BINDIR=$(DESTDIR)/bin
install: $(PHONIX) $(ANTLR) doc
    install -m 0755 -d $(LIBDIR)/phonix
    install -m 0755 -t $(LIBDIR)/phonix $(PHONIX) $(ANTLER)
    install -m 0755 -D phonix.sh $(BINDIR)/phonix
    sed -i "s!PREFIX!$(LIBDIR)!" $(BINDIR)/phonix

当我在 下运行时dh_make$(LIBDIR)$(BINDIR)根据需要指向打包目录。所有内容都被安装到打包程序的正确位置,但调用sed将我的本地打包目录的路径放入脚本中,然后将其逐字放置在包中。一旦我在目标系统上实际安装了该软件包,这显然不起作用。

我认为我需要将sed调用移至安装后脚本中,但我不确定如何在安装后步骤中获取本地安装目录(道德上相当于 my$(LIBDIR)和)。$(BINDIR)或者有更好的方法来做到这一点吗?


编辑:这是我phonix.sh在调用 sed 之前的实际文件:

#!/usr/bin/sh

exec mono PREFIX/phonix.exe

如您所见,仅有的该文件的目的是为基于 mono 的 .exe 提供可执行包装。 sed 调用只是替换PREFIX$(LIBDIR)。所以我真正需要知道的是如何获取 .exe 在目标系统上的实际安装位​​置这样包装脚本就可以工作了吗?

答案1

您正在DESTDIR以非标准方式使用。它不是软件包的安装前缀,而是软件包构建等内容的“fakeroot”前缀。

更典型的写法是这样的:

prefix = /usr/local
bindir = $(prefix)/bin
libdir = $(prefix)/lib

install: $(PHONIX) $(ANTLR) doc
    install -m 0755 -d $(DESTDIR)$(libdir)/phonix
    install -m 0755 -t $(DESTDIR)$(libdir)/phonix $(PHONIX) $(ANTLER)
    install -m 0755 -D phonix.sh $(DESTDIR)$(bindir)/phonix
    sed -i "s!PREFIX!$(libdir)!" $(DESTDIR)$(bindir)/phonix

DESTDIR在包的 makefile 中将其留空。它应该debian/rules由 dh 或 cdbs设置或自动设置。我从你的问题中猜想它确实以某种方式设置了。

相关内容