소스에서 데비안 / 우분투 패키지를 빌드하는 방법?
프로그램 소스 (cvs / svn / git / ...에서 가져 왔습니다)가 있으며 데비안 / 우분투 패키지를 만들고 싶습니다. 패키지는 리포지토리에 있지만 다음과 같습니다.
- 이전 버전입니다 (필요한 기능 부족).
- 기본값과 약간 다른 컴파일 옵션이 필요합니다.
가장 쉬운 방법은 무엇입니까? 몇 가지 일이 걱정됩니다
- 모든 종속성을 올바르게 나열했는지 어떻게 확인할 수 있습니까? (이전 버전의 의존성을 살펴보면 힌트를 얻을 수 있지만 새로운 의존성이 추가되었을 수 있습니다.)
- 업데이트 시스템이 업데이트의 저장소에 이전 버전을 설치하지 못하게하려면 어떻게해야합니까?
- 시스템이 최신 버전을 설치하지 않고 사용자 정의 패키지를 덮어 쓰지 못하게하려면 어떻게해야합니까?
아직 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
먼저, 제목 질문 : debian 디렉토리가 이미 있다고 가정하고 소스 디렉토리 (debian 디렉토리를 포함하는 디렉토리)에 있고 dpkg-buildpackage를 호출하십시오. 다음 옵션으로 실행하고 싶습니다.
dpkg-buildpackage -us -uc -nc
결과에 서명하지 않고 깨끗하지 않음을 의미합니다.
모든 종속성을 올바르게 나열했는지 어떻게 확인할 수 있습니까?
의존성을 얻는 것은 검은 예술입니다. 빌드를 확인하는 "공식적인"방법은 패키지가 기본 시스템, "빌드 필수"패키지 및 지정한 빌드 종속성으로 만 빌드하는 경우입니다. 일반적인 의존성에 대한 일반적인 대답을 모른다.
업데이트 시스템이 업데이트의 저장소에 이전 버전을 설치하지 못하게하려면 어떻게해야합니까? 시스템이 최신 버전을 설치하지 않고 사용자 정의 패키지를 덮어 쓰지 못하게하려면 어떻게해야합니까?
내 지식이 오래되었지만 둘 다 해결하려면 dpkg --set-selections를 사용하십시오. nullidentd가 그대로 유지하려는 패키지라고 가정하고 루트로 실행
echo 'nullidentd hold' | dpkg --set-selections
또는 소스에서 빌드하기 때문에 에포크 (epoch) 를 사용하여 버전 번호를 인위적으로 높게 설정하고 다시는 신경 쓰지 않아도됩니다. 신기원을 사용하려면 debian / changelog 파일에 새 항목을 추가하고 버전 번호 앞에 99를 입력하십시오. 내 nullidentd 예제가 주어지면 업데이트 된 변경 로그의 첫 번째 줄은 다음과 같습니다.
nullidentd (99:1.0-4) unstable; urgency=low
Bernard의 링크 는 특히 데비안 디렉토리를 직접 만들어야하는 경우에 유용합니다. 개발자 참조 및 일반 리소스 페이지 도 도움이 됩니다 . Adam의 링크 도 좋아 보이지만 익숙하지 않습니다.
당신이하고 싶은 일을 위해, 데비안 소스 diff를 사용하고 싶을 것이므로 패키지는 사용 된 업스트림 버전을 제외하고 공식 패키지와 비슷합니다. packages.debian.org 에서 소스 diff를 다운로드 하거나 "apt-get source"를 사용하여 .dsc 및 원본 소스 아카이브와 함께 가져올 수 있습니다.
그런 다음 새 버전의 업스트림 소스를 풀고 해당 디렉토리로 변경 한 다음 다운로드하여 diff를 적용하십시오.
zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules
그런 다음 옵션을 컴파일하려는 변경을 수행하고 다음을 수행하여 패키지를 빌드하십시오.
dpkg-buildpackage -rfakeroot -us -uc
ccache 용 샘플 우분투 기반 빌드 :
sudo apt-get update
sudo apt-get build-dep ccache
apt-get -b source ccache
sudo dpkg -i ccache*.deb
자세한 내용은 http://blog.aplikacja.info/2011/11/building-packages-from-sources-in-debianubuntu/
- "debian"디렉토리를 원본 패키지에서 소스 디렉토리로
- " dch "를 사용하여 패키지 버전을 업데이트하십시오.
- "debuild"를 사용하여 패키지 작성
나는 이것이 데비안 패키지 '성경' 이라고 생각 합니다 .
글쎄, 그것은 데비안 새로운 관리자 안내서이므로 많은 것들을 적용 할 수는 없지만 어디로 가는지 다룹니다.
Ubuntu를 사용하는 경우 pkgcreator 프로젝트를 확인하십시오 ( http://code.google.com/p/pkgcreator).
다음 은 데비안 패키지를 만들기위한 튜토리얼입니다.
기본적으로 다음을 수행해야합니다.
- 폴더 구조 설정
- 컨트롤 파일 만들기
- 선택적으로 postinst 또는 prerm 스크립트를 작성하십시오
- dpkg-deb 실행
I usually do all of this in my Makefile so I can just type make to spit out the binary and package it in one go.
How can I check if I have listed all the dependencies correctly?
The pbuilder
is an excellent tool for checking both build dependencies and dependencies by setting up a clean base system within a chroot environment. By compiling the package within pbuilder, you can easily check the build dependencies, and by testing it within a pbuilder environment, you can check the dependencies.
If you want a quick and dirty way of installing the build dependencies, use:
apt-get build-dep
This installs the dependencies. You need sources lines in your sources.list for this:
deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free
If you are backporting packages from testing to stable, please be advised that the dependencies might have changed. The command apt-get build-deb installs dependencies for the source packages in your current repository.
But of course, dpkg-buildpackage -us -uc will show you any uninstalled dependencies.
If you want to compile more often, use cowbuilder.
apt-get install cowbuilder
Then create a build-area:
sudo DIST=squeeze ARCH=amd64 cowbuilder --create
Then compile a source package:
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
Watch where cowbuilder puts the resulting package.
Good luck!
참고URL : https://stackoverflow.com/questions/130894/how-to-build-a-debian-ubuntu-package-from-source
'IT story' 카테고리의 다른 글
Moq에서 Verifiable ()의 목적은 무엇입니까? (0) | 2020.07.26 |
---|---|
iOS 7 스타일 흐림보기 (0) | 2020.07.26 |
Java Collections가 프리미티브 유형을 직접 저장할 수없는 이유는 무엇입니까? (0) | 2020.07.26 |
자바 제네릭 T vs Object (0) | 2020.07.26 |
의사 요소가 'img'요소와 작동하지 않는 이유는 무엇입니까? (0) | 2020.07.26 |