스크립트 또는 이진 파일로 .deb 패키지 만들기


73

컴파일 할 소스 코드가없는 것 (구성, 셸 스크립트, 독점 소프트웨어)에 대해 .deb 패키지를 만드는 간단한 방법을 검색했습니다. 대부분의 패키지 튜토리얼에서 컴파일하려는 소스 tarball이 있다고 가정하기 때문에 이것은 상당히 문제가되었습니다. 그런 다음 짧은 자습서 (독일어)를 찾았습니다 .

그 후 간단한 리포지토리를 만들기 위해 작은 스크립트를 만들었습니다. 이처럼 :

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

적절한 키 링에 키를 추가하고 다음과 같이 소스를 포함했습니다.

deb http://my.default.com/my-repository/ ./

repo 자체가 잘 작동하는 것처럼 보입니다 (일부 문제가 발생하여 수정하기 위해 패키지를 두 번 추가하고 릴리스 파일의 임시 파일 해결 방법을 만들어야 함). 또한 다운로드 한 .deb를 리포지토리에 넣었습니다. 문제없이 작동하는 것처럼 보입니다. 그러나 내 자체 제작 패키지는 ... Wenn i do sudo apt-get update, 이렇게 오류가 발생했습니다.

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

내가 잘못한 것을 아는 사람이 있습니까?

업데이트 2012-03-06 : DEB를 만드는 쉬운 방법을 찾고있는 다른 사람을위한 힌트 : FPM을 살펴보십시오 .


DEBIAN / control 파일을 패키지에 추가 했습니까? 여기에는 Depends :? 필드가 포함되어 있습니다.
Bilal Akhtar

5
Btw. 지금은 내 포장 요구에 FPM을 사용하고 있습니다 : github.com/jordansissel/fpm을
토마스 독일어

FWIW, 종속성 중 하나를 잘못 지정했기 때문에 빌드 한 패키지에서 동일한 오류 메시지가 나타납니다. "foo (> = 2.1)"이어야 할 때 "foo> = 2.1"을 작성했습니다. 나는 오류의 상반부가 정확히 무엇이 잘못되었는지를 깨닫기 전에 한 시간 동안 오류의 마지막 절반을 보았습니다 ... (PS : FPM rocks. 당신도 Aptly를 봅니다.)
Mark E. 하세

2
나는 타르볼 (tar ball)에서 만들어지지 않은 것을 패키징 파일 등으로 패키징하기위한 튜토리얼이나 가이드가 없다는 것에 강력히 동의한다. 우리는 몇 가지 스크립트와 리퀴베이스로 전쟁을 배포하고 싶지만 데비안 시스템 관리자 나 데비안 관리자가 아닌 자바 개발자와 같은 사람들을위한 가이드가 필요합니다. FPM은이 경우 패키지화 할 수있는 방법을 이미 알고 있어야하므로 도움이되지 않습니다.
John Little

1
fpm에 대한 정보를 공유해 주셔서 감사합니다. 그것은 매력처럼 작동합니다!
Damian Nadales

답변:


70

연결 한 자습서는 패키지 작성을 위해 낮은 수준의 접근 방식을 사용합니다. 이러한 접근 방식은 일반적으로 권장되지 않으며 신중하게 수행하지 않으면 모든 종류의 문제가 발생할 수 있습니다.

패키징 기본 사항을 이해하면 스크립트의 .deb 작성은 매우 간단합니다. 간단히 말해서 :

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

더 많은 스크립트를 추가하려면 스크립트를 디렉토리에 복사하고 debian / install 파일에 추가 한 다음 debuild를 다시 실행하면됩니다. 필요에 따라 debian / * 파일을 확인하고 업데이트해야합니다.

당신이 그 사람 페이지를 읽어야 dh_make, dh_installdebuild


3
데비안 / 컨트롤, "아키텍처 : 모두"를 "아키텍처 : 모두"로 변경해야합니다. 질문에 답변 된대로 설정하는 것을 잊지 마십시오.)
João Pinto

3
디렉토리 이름을 바꾸고 debian / changelog를 업데이트하는 것 외에도 새 버전에 해당하는 .orig 아카이브를 만들어야합니다 (debian /을 포함하지 않은 소스 디렉토리 내용).
João Pinto

1
include 디렉토리를 사용하면 일반적으로 다음과 같은 작업이 수행됩니다. cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto

1
--indep플래그를 추가하면 dh_make"아키텍처 : 모두"패키지가됩니다. 또한 -b플래그는 11.04 이상에는 존재하지 않습니다.
andrewsomething

1
뎁 패키지를 구축 한 후, 당신은으로 오류 및 개선 사항에 대해 확인해야 lintian somescripts_0.1-1_i386.deb또는 lintian package-source.changes- 참조 : packaging.ubuntu.com/html/...
rubo77
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.