데비안용 패키지 빌드

데비안용 패키지 빌드

다음 명령을 사용하여 Debian 패키지를 빌드하려고 합니다.

debian/rules clean
dpkg-source -b .
debian/rules build
debian/rules binary

나는 이 파일을 가지고 있습니다 :

myprog_1.1.0.orig.tar.gz
myprog_1.1.0-1.dsc
myprog_1.1.0-1.debian.tar.xz
myprog_1.1.0-1_all.deb
myprog-doc_1.1.0-1_all.deb

모든 단계가 성공적으로 완료되었습니다. 디렉토리를 열었을 때 myprog-1.1.0/debian데비안 패키지처럼 보이는 것을 발견했습니다. 하지만 내 라이브러리는 그 안에 있지 않고 myprog-1.1.0/debian/tmp/usr/lib/....

그리고 컴파일된 라이브러리는 내 것이 아닙니다 .deb.

  • 이게 정상인가요?
  • 이 패키지를 완료하기 위해 수행해야 할 다른 작업이 있습니까?
  • tar.gz배포하려면 from을 다시 만들어야 합니까 myprog-1.1.0?

답변1

귀하의 빌드에서 누락된 중요한 것은 make installHonor Makefile변수 DESTDIR(패키징 대상에서 이와 유사해야 함 ./debian/myprog)라고 생각합니다.

빌드 후 패키징하기 전에 라이브러리 myprog-1.1.0/debian/myprog/usr/libtmp.

참고: 다음은 최소한의 작업 예제와 패키지를 가져오는 데 사용하는 명령입니다. 모든 파일을 이 디렉토리에 넣으십시오 myprog-1.0.1.


Makefile:

CFLAGS += -O2 -Wall
LIBS += -L$(BUILDDIR)/usr/lib -lfunc

ifeq ($(BUILDDIR),)
BUILDDIR = build
endif

all: $(BUILDDIR)/usr/bin/myprog $(BUILDDIR)/usr/lib/libfunc.so

install: $(BUILDDIR)/usr/bin/myprog $(BUILDDIR)/usr/lib/libfunc.so
    mkdir -p $(DESTDIR)/usr/bin $(DESTDIR)/usr/lib
    cp $(BUILDDIR)/usr/bin/myprog $(DESTDIR)/usr/bin
    cp $(BUILDDIR)/usr/lib/libfunc.so $(DESTDIR)/usr/lib

dir-stamp:
    mkdir -p $(BUILDDIR)/usr/bin $(BUILDDIR)/usr/lib
    touch $@

$(BUILDDIR)/usr/bin/myprog: myprog.c $(BUILDDIR)/usr/lib/libfunc.so
    $(CC) $(CFLAGS) -o $@ $< $(LIBS)

$(BUILDDIR)/usr/lib/libfunc.so: func.c dir-stamp
    $(CC) $(CFLAGS) -shared -o $@ $<

clean:
    -rm -fr dir-stamp $(BUILDDIR)

myprog.c:

#include <stdio.h>
#include <stdlib.h>
#include "func.h"
int main(int argc, char **argv) {
    printf("%d\n", func(atoi(argv[1]), atoi(argv[2])));
    return 0;
}

func.h:

#ifndef FUNC_H
#define FUNC_H
int func(int a, int b);
#endif

func.c:

#include "func.h"
int func(int a, int b) {
    return a + b;
}

명령은 다음과 같습니다.

dh_make --createorig
#choose type of package (single)
rm debian/*.ex debian/*.EX (if not needed)
# update: depcheck against the built command
dpkg-depcheck -d ./build/usr/bin/myprog 1 1
#edit debian/control (add Build-Depends)
dpkg-buildpackage -us -uc -rfakeroot
dpkg --contents ../myprog_1.0.1-1_i386.deb

./
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/myprog/
./usr/share/doc/myprog/changelog.Debian.gz
./usr/share/doc/myprog/copyright
./usr/share/doc/myprog/README.Debian
./usr/lib/
./usr/lib/libfunc.so
./usr/bin/
./usr/bin/myprog

사용 cmake:

확신할 수 cmake는 없지만 빠른 테스트는 효과가 있습니다.

유일한 이상한 점은 Makefile명령줄에서 생성된 접두사가 프로젝트의 복잡성에 따라 문제를 일으킬 수 있다는 것입니다.

기본적으로 를 접두사로 cmake사용하면 에서 패키지를 빌드할 때 오류가 발생 하지만 를 사용하면 오류가 발생합니다 ./usr/localrmdir/usr

OWNER_WRITE또한 rpath 를 제거할 때 오류가 발생했기 때문에 이것을 추가했습니다 myprog. 필요한 권한을 적절하게 설정하는 더 좋은 방법이 있을 수 있습니다.

CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(myprog C)
ADD_DEFINITIONS(-O2 -Wall)
ADD_EXECUTABLE(myprog myprog.c)
ADD_LIBRARY(func SHARED func.c)
TARGET_LINK_LIBRARIES(myprog func)
INSTALL(TARGETS myprog DESTINATION "bin"
        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
INSTALL(TARGETS func DESTINATION "lib"
        PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)

다음을 사용하여 생성 Makefile:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .

관련 정보