-dbg, -dev, -doc 패키지를 작성하는 방법과 이유는 무엇입니까?


15

필자는 다른 소프트웨어를 빌드하는 데 사용되는 많은 라이브러리와 헤더를 제공하는 패키지 용 Ubuntu 패키지를 작성 중입니다. 패키지는 또한 상호 의존적 인 작은 하위 패키지로 나뉩니다. 이런 의미에서 패키지는 부스트와 매우 유사합니다.

부스트와 같은 패키지가

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

그러나 이름 boost이나 libboost.

  • 이 뒤에 아이디어는 무엇입니까?
  • 상기의 목적은 무엇입니까 -dbg, -dev그리고 -doc패키지는?
  • 해당 패키지의 빌드 파일을 작성하는 방법에 대한 지시 사항이 있습니까?

답변:


13

아이디어 및 목적

이러한 다른 패키지를 분리하는 주된 이유는 디스크 공간 및 다운로드 속도와 관련이 있습니다. 특히, 이는 데이터의 여러 사본을 분배하는 것을 의미하므로 미러 공간에 대한 큰 관심사입니다. 제작하여 foo-common, foo-data또는 foo-doc패키지를 Architecture: all, 우리는 하나의 아카이브에서 데이터의 복사 대신이 각 아키텍처로 복사 한 유지 (예 : I386, AMD64, 요법 ...). 디버깅 기호는 대부분의 사용자에게 필요하지 않으며 결국 패키지 다운로드 시간이 더 오래 걸립니다.

공식 우분투 아카이브에있는 패키지의 경우 실제로 -dbg패키지를 수동으로 생성 할 이유가 없습니다 . 빌드 머신은 자동으로 디버깅 심볼을 제거 -dbgsym하여 ddebs.ubuntu.com에서 호스팅 되는 패키지에 넣습니다. (참조 : 디버그 기호 패키지 ) -dbg일반적으로 단순히 데비안에서 이월되는 존재 할 패키지를.

명령

구현에 관해서는이 질문을 살펴보십시오.

간단히, debian/control각 패키지마다 새 스탠자를 작성해야 합니다. 그때debian/foo-*.install 파일도 작성해야합니다. 이를 dh_install통해 올바른 내용을 올바른 패키지에 넣을 수 있습니다.

foo.install처럼 보일 수 있습니다 주요 바이너리 패키지 :

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, 또는 무엇이든 :

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

그리고위한 foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

만들기] foo-dbg패키지 것은 편집을 필요 debian/rules로 일반적으로 dh_strip디버깅 심볼을 제거합니다. 따라서 해당 동작을 재정의해야합니다.

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg

12

Boost는 복잡한 예입니다. 먼저 간단한 것을 살펴 보겠습니다.

정확하게 openssl 소스 패키지는 5 가지 바이너리 패키지를 제공합니다.

  • libssl1.0.0OpenSSL 동적 라이브러리 버전 1.0.0을 포함합니다. 이것이이 라이브러리에 연결된 프로그램이 실행되어야하는 것입니다. 다른 버전의 라이브러리가 동시에 설치되어있을 수 있으므로 패키지 이름에 버전 번호가 포함되어 있습니다. 다른 프로그램이 1.0.0과 이진 호환되지 않는 다른 버전에 연결되어있는 경우입니다.
  • opensslOpenSSL 라이브러리를 사용하는 명령 행 도구를 포함합니다. 여러 버전의 라이브러리가 있더라도 이러한 도구의 여러 버전이 필요하지 않습니다. 하나의 /usr/bin/openssl도구와 관련 도구, 데이터 및 문서 만 있습니다.
  • libssl-devOpenSSL에 링크되는 프로그램을 컴파일하려는 경우 필요한 파일이 들어 있습니다. C 헤더 파일 ( *.h), 링크를위한 라이브러리 ( *.a, *.so) 및 여러 파일이 있습니다.
  • libssl-docOpenSSL 라이브러리에 대한 설명서가 들어 있습니다. 라이브러리를 사용하는 프로그램을 작성하려는 경우에만이 패키지가 필요합니다.
  • libssl1.0.0-dbg디버깅 기호를 포함합니다. OpenSSL 라이브러리 또는이를 사용하는 프로그램을 디버그하는 사람들에게만 유용합니다. andrewsomething의 답변 에는 이러한 -dbg패키지 에 대한 자세한 정보가 있습니다 .

또한 precision에는 이전 버전의 라이브러리가 포함되어 있습니다. libssl0.9.8 링크 된 프로그램이 있기 때문에 .

다른 패키지는 C 이외의 언어에 대한 바인딩입니다. OpenSSL에는 제공되지 않습니다 (다른 언어의 OpenSSL에는 바인딩이 있지만 동일한 소스에서 제공되지는 않음). 예를 들어 sqlite3TCL 바인딩 과 함께 제공됩니다 .

이와 같이 패키지를 분할하는 주된 이유는 패키지마다 대상이 다른 대상이 있기 때문입니다. 아무 것도 컴파일하지 않는 시스템에는 핵심 lib패키지와 명령 줄 도구 만 있으면됩니다 . 필요한 경우 종속성에서 자동으로 설치됩니다. 누군가 라이브러리를 사용하는 프로그램을 컴파일하려면 -dev패키지 가 필요합니다 . 누군가 라이브러리를 사용하는 프로그램을 작성하려면 -doc패키지 가 필요합니다 .

부스트는 어떻습니까? 그것은 동일한 구조를 따르지만 부스트 거대한 라이브러리를하기 때문에, 그것은 많은 작은 패키지로 헤어 졌 것 : libboost-*1.46.1libboost-*1.46-dev. 정확히 말하면 Boost 버전은 1.46 이지만 oneiric은 1.421.46이 있습니다. 메타 패키지 부스트 기본값도 있습니다버전이 지정된 패키지를 종속성으로 가져 오는 .

libhangul을 살펴보면 동적 라이브러리 패키지 libhangul1및 개발 패키지 libhangul-dev외에도 package가 libhangul-data있습니다. 이 패키지에는 라이브러리에 필요한 추가 데이터가 포함되어 있습니다. 여러 버전의 라이브러리가 있더라도 -data패키지를 공유 할 수 있습니다 . 또한이 패키지는 아키텍처와 무관합니다. 대량의 아키텍처 독립적 인 데이터가 포함 된 소프트웨어는 아키텍처 종속 및 아키텍처 독립적 패키지로 분할되어 배포 사이트의 공간을 절약합니다. 비슷한 의미의 다른 접미사입니다 -common.

우분투와 데비안 패키징 규칙은 매우 유사하므로 데비안 패키지 만들기에 관한 자료도 우분투에도 적용됩니다. 실제로 데비안과 우분투에 대해 동일한 소스 패키지를 가질 수 있습니다. 데비안과 우분투 패키지를 다르게 만드는 유일한 것은 다른 라이브러리 버전에 대해 패키지를 컴파일하는 것 뿐이며, 우분투의 다른 릴리스 간의 차이에 지나지 않습니다. 이 데비안 개발자 문서 손에서, 특히 데비안 정책 매뉴얼개발자 참조 ; 소개 는 새 관리자 안내서 를 참조하십시오 . 데비안 프로젝트 작업에 관한 부분은 무시하고 패키지 만들기에 관한 부분을 읽으십시오.dh_make deb 패키지를 시작하는 좋은 방법입니다 ( "라이브러리"를 선택하고 싶을 것입니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.