최근에 PPA를 배치하기 위해 작은 Python 유틸리티를 패키지하려고 시도했으며 거의 작동했지만 패키지를 /usr/bin
대신 바이너리(chmod +x Python 스크립트)를 설치하는 데 문제가 있습니다. , 에 설치됩니다 /
. 이 디렉토리 구조가 있습니다 ->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도 가지고 있습니다.
그러나 이것을 빌드하고 데비안 패키지 내부를 살펴보면 txtrevise는 항상 usr/bin 대신 패키지의 루트에 위치하고 /usr/bin 대신 /에 설치됩니다.
스크립트를 어떻게 디빌드하고 올바른 위치에 배치합니까?
답변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)
다른 사람이 사용할 패키지를 만들 때 모든 디렉터리와 바이너리에 대한 권한이 다음을 기반으로 하는지도 확인해야 합니다.데비안 정책;이 경우에는 및 스키마 (및 디렉토리 sum ) $(DESTDIR)/usr/bin/textrevise
에 속 하려고 합니다 .root:root
0755
$(DESTDIR)/usr
$(DESTDIR)/usr/bin
한 번 살펴보고 싶을 수도 있습니다 설치하다더 간결한 Makefile 섹션을 작성하기 위해 설치된 파일의 소유자, 그룹 및 모드를 더 효과적으로 제어할 수 있는 명령입니다.