소스에서 Debian / Ubuntu 패키지를 빌드하는 방법은 무엇입니까?


116

프로그램의 소스 (cvs / svn / git / ...에서 가져옴)가 있고 데비안 / 우분투 패키지를 빌드하고 싶습니다. 패키지는 저장소에 있지만 다음과 같습니다.

  • 이전 버전입니다 (필요한 기능이 없음).
  • 기본값과 약간 다른 컴파일 옵션이 필요합니다.

가장 쉬운 방법은 무엇입니까? 나는 몇 가지에 대해 걱정하고 있습니다

  • 모든 종속성을 올바르게 나열했는지 어떻게 확인할 수 있습니까? (이전 버전이 무엇에 의존했는지 살펴보면 힌트를 얻을 수 있지만 새로운 의존성이 추가되었을 수 있습니다.)
  • 업데이트시 리포지토리에 이전 버전을 설치하는 업데이트 시스템을 방지하려면 어떻게해야합니까?
  • 시스템이 최신 버전 (출시 된 경우)을 설치하여 사용자 지정 패키지를 덮어 쓰는 것을 방지하려면 어떻게해야합니까?

답변:


78

아직 debian / ubuntu에없는 모든 패키지에 대해 특수 패키지 "checkinstall"을 사용할 수 있습니다.

"uupdate"( apt-get install devscripts)를 사용하여 기존 데비안 소스로 소스에서 패키지를 빌드 할 수 있습니다.

libdrm2의 예 :

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc

감사! 방금 Subversion 1.6.6을 사용 가능한 최신 버전으로 1.6.5 만있는 Ubuntu 설치로 포팅하는 데 이것을 사용했으며 완벽하게 작동했습니다. 땜질하는 데 꽤 많은 시간을 절약했습니다! :)
Carlos Villela 2010 년

이 명령에 대해 좀 더 컨텍스트를 제공 할 수 있습니까? libdrm-2.3.1정확히 어디 입니까? 또한 어디에서 libdrm-2.4.1.tar.gz왔 습니까? (내 초기 가정은 deb로 패키징하려는 응용 프로그램의 컴파일 된 바이너리이지만 기존 버전을 대체하는 것이 맞습니까?)
wheeler

오류가 발생 You must put some 'source' URIs in your sources.list하면 deb-src 행의 주석 처리를 제거하십시오/etc/apt/sources.list
Christian

27

먼저 제목 질문 : debian 디렉토리가 이미 있다고 가정하고 소스 디렉토리 (debian 디렉토리가 포함 된 디렉토리)에 있고 dpkg-buildpackage를 호출합니다. 다음 옵션으로 실행하고 싶습니다.

dpkg-buildpackage -us -uc -nc

결과에 서명하지 않고 청소하지 않는다는 뜻입니다.

모든 종속성을 올바르게 나열했는지 어떻게 확인할 수 있습니까?

의존성을 얻는 것은 검은 예술입니다. "공식적인"방법은 빌드 의존성을 확인하는 것입니다. 패키지가 기본 시스템, "빌드 필수"패키지 및 지정한 빌드 종속성으로 만 빌드되는지 여부입니다. 일반 종속성에 대한 일반적인 대답을 모르고 그냥 들어가십시오 :)

업데이트시 리포지토리에 이전 버전을 설치하는 업데이트 시스템을 방지하려면 어떻게해야합니까? 시스템이 최신 버전 (출시 된 경우)을 설치하여 내 사용자 지정 패키지를 덮어 쓰는 것을 방지하려면 어떻게해야합니까?

내 지식은 이것에 대해 구식 일 수 있지만 둘 다 해결하려면 dpkg --set-selections를 사용하십시오. nullidentd가 그대로 유지하려는 패키지라고 가정하고 루트로 실행하십시오.

echo 'nullidentd hold' | dpkg --set-selections

또는 소스에서 빌드하기 때문에 epoch 를 사용하여 버전 번호를 인위적으로 높게 설정하고 다시는 신경 쓰지 않을 수 있습니다. epoch를 사용하려면 debian / changelog 파일에 새 항목을 추가하고 버전 번호 앞에 99 :를 입력합니다. nullidentd 예제가 주어지면 업데이트 된 변경 로그의 첫 번째 줄은 다음과 같습니다.

nullidentd (99:1.0-4) unstable; urgency=low

Bernard의 링크 는 좋습니다. 특히 데비안 디렉토리를 직접 만들어야한다면 개발자 참조일반 리소스 페이지 도 도움이 됩니다 . Adam의 링크 도 좋아 보이지만 익숙하지 않습니다.


1
"dpkg --set-selections"는 여전히 작동하지만 요즘 더 나은 방법은 "적성 보유 nullidentd"입니다.
Mark Baker

6

원하는 작업을 위해 데비안 소스 차이를 사용하고 싶을 것이므로 패키지는 사용 된 업스트림 버전을 제외하고 공식 패키지와 유사합니다. packages.debian.org 에서 소스 diff를 다운로드 하거나 "apt-get source"를 사용하여 .dsc 및 원본 소스 아카이브와 함께 가져올 수 있습니다.

그런 다음 새 버전의 업스트림 소스의 압축을 풀고 해당 디렉토리로 변경 한 다음 다운로드 한 diff를 다음과 같이 적용합니다.

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

그런 다음 컴파일 옵션을 변경하고 다음을 수행하여 패키지를 빌드하십시오.

dpkg-buildpackage -rfakeroot -us -uc


3
  • 원본 패키지의 "debian"디렉토리를 소스 디렉토리에 넣습니다.
  • " dch "를 사용하여 패키지 버전 업데이트
  • "debuild"를 사용하여 패키지 빌드

2

나는 생각 '성경'데비안 패키지입니다.

글쎄, 이것은 데비안의 새로운 관리자 가이드이므로 많은 부분이 적용되지 않지만 어디로 가는지 다룹니다.



1

다음 은 데비안 패키지 빌드를위한 튜토리얼입니다.

기본적으로 다음을 수행해야합니다.

  1. 폴더 구조 설정
  2. 제어 파일 만들기
  3. 선택적으로 postinst 또는 prerm 스크립트 생성
  4. dpkg-deb 실행

보통 Makefile에서이 모든 작업을 수행하므로 make 를 입력 하여 바이너리를 추출하고 한 번에 패키지화 할 수 있습니다.


1

모든 종속성을 올바르게 나열했는지 어떻게 확인할 수 있습니까?

pbuilderchroot 환경에서 깨끗한베이스 시스템을 설정하여 빌드 의존성과 종속성을 모두 확인하기위한 훌륭한 도구입니다. pbuilder 내에서 패키지를 컴파일하면 빌드 종속성을 쉽게 확인할 수 있으며 pbuilder 환경에서 테스트하여 종속성을 확인할 수 있습니다.


1

빌드 종속성을 빠르고 더러운 방법으로 설치하려면 다음을 사용하십시오.

apt-get build-dep

그러면 종속성이 설치됩니다. 이를 위해 sources.list에 소스 라인이 필요합니다.

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

테스트에서 안정으로 패키지를 백 포팅하는 경우 종속성이 변경되었을 수 있습니다. apt-get build-deb 명령은 현재 저장소의 소스 패키지에 대한 종속성을 설치합니다.

그러나 물론 dpkg-buildpackage -us -uc는 제거 된 종속성을 표시합니다.

더 자주 컴파일하려면 cowbuilder를 사용하십시오.

apt-get install cowbuilder

그런 다음 빌드 영역을 만듭니다.

sudo DIST = squeeze ARCH = amd64 cowbuilder --create

그런 다음 소스 패키지를 컴파일합니다.

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

cowbuilder가 결과 패키지를 어디에 두는지 확인하십시오.

행운을 빕니다!

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