내 데비안 패키지에 .sh 래퍼 만들기

내 데비안 패키지에 .sh 래퍼 만들기

저는 모노를 사용하는 프로그램용 데비안 패키지를 만들려고 합니다. 내 make install목표는 현재 모든 바이너리를 배치한 /usr/local/lib/mypackage다음 /usr/local/bin모노로 실제 바이너리를 호출하는 작은 실행 가능 스크립트를 만듭니다. 한 줄의 코드를 사용하여 자리 표시자를 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)및 my와 도덕적으로 동일합니다. $(BINDIR)아니면 더 좋은 방법이 있나요?


편집하다:이것은 phonix.shsed를 호출하기 전의 실제 파일입니다.

#!/usr/bin/sh

exec mono PREFIX/phonix.exe

보시다시피,오직이 파일의 목적은 모노 기반 .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/rulesdh 또는 cdbs로 설정하거나 자동으로 설정 해야 합니다 . 귀하의 질문에 따르면 실제로 어떻게 든 설정되었다고 추측합니다.

관련 정보