소스에서 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.