DEB 파일을 수동으로 작성하는 방법은 무엇입니까?


46

DEB 파일을 수동으로 작성하고 싶습니다. 설치할 데이터가 들어있는 폴더와 설치 후 실행할 스크립트를 제공하고 싶습니다.

이게 가능해?


당신이 선택한 좋은 대답이 아니십니까?
Gigamegs 2012 년

@David, 실제로 "dpkg-deb"로 만들었습니다. 훨씬 쉽습니다. 그래서 패키지 폴더에 파일을 나열하여 Gilles를 선택했습니다. 파일을 명확하게 볼 수 있습니다. 그래서 나는 그의 대답이 더 낫다고 생각합니다 ..
daisy

패키지의 모든 파일도 나열했습니다.
Gigamegs 2018 년

11
@David 제 말은 그의 대답이 파생적이라고 주장하는 것이지만 "아주 좋은 대답은 아닙니다"? Gilles의 답변은 훌륭합니다. 당신의 대답이 처음인지는 중요하지 않습니다. 그의 대답은 훨씬 더 완전합니다. 그리고 기존 답변을 취하고 확대하는 데 아무런 문제가 없습니다. 그것은 좋은 것입니다
Michael Mrozek

답변:


57

소스 패키지 만들기

나의 추천은 소스 패키지를 만드는 것입니다. 설치 빌드 - 필수 , debhelper , DH-메이크업을 . 설치하려는 파일이있는 디렉토리로 변경하고 ( $PACKAGE-$VERSION예 : myapp-4.2-1Myapp V4.2 패키징 시도시 디렉토리 이름의 형식이어야 함 ) 다음을 실행하십시오 dh_make --createorig. 질문에 대답하십시오. Debhelper는라는 서브 디렉토리 ( debian일부 필수 파일 및 선택적 파일 용 템플리트)에 파일 을 생성하여 패키지를 빌드하는 데 필요한 기본 인프라를 작성 합니다. 다음 파일 중 일부를 수정해야 할 수도 있습니다.

  • debian/rules올바른 위치에 파일을 빌드하고 설치해야하는 것을 빌드하도록 편집하십시오 . 일부 파일을 복사하고 컴파일하지 않아도되는 경우 파일 debian/install을 편집하여 설치할 파일 을 지정하십시오.
  • debian/copyright패키지에 대한 라이센스 정보와 최신 버전을 구할 수있는 위치에 관한 정보를 추가하려면 편집하십시오 (관련된 경우).
  • debian/changelogITP에 대한 참조를 제거하도록 편집하십시오 (데비안 프로젝트에서 작업하는 경우에만 해당). 설치 후 이름 debian/postinst.ex을 바꾸고 debian/postinst설치 후 명령을 추가하십시오. 나중에 패키지를 업데이트 debchange -i하는 경우 변경 로그 항목을 추가하거나 Emacs ( dpkg-dev-el이 설치된 상태) 에서 파일을 편집하기 위해 실행 하십시오 .

패키지 dpkg-buildpackage -rfakeroot -us -uc를 빌드하기 위해 실행하십시오 .deb( -us -ucPGP 키로 패키지에 서명하려는 경우 제거 ).

이진 패키지를 직접 만들기

소스 패키지에서 바이너리 패키지를 빌드하지 않고 직접 바이너리 패키지를 작성하기로 결정한 경우 프로세스를 용이하게하는 도구가 많지 않기 때문에 실제로는 쉽지 않습니다. deb 패키지 형식에 대한 기본 지식이 필요합니다. 그것은에서 설명 데비안 정책 안내서 (Debian Policy Manual) 특히, CH. 3 (이진 패키지의 형식) , ch. 5 (제어 파일) , ch. 6 (설치 스크립트)부록 B (이진 패키지 조작) .

패키지가 예상 파일 /usr/share/doc/copyright(패키지 내용의 라이센스 및 최신 버전의 패키지를 찾을 수있는 위치 /usr/share/doc/changelog.Debian.gz포함 )과 (deb 패키지의 변경 로그 포함 )를 설치했는지 확인하십시오 . 사내에서만 패키지를 사용하려는 경우에는 필요하지 않지만 패키지를 사용하는 것이 좋습니다.

데비안 및 파생 상품

데비안 도구를 사용할 수 있으면 dpkg-deb패키지를 구성하는 데 사용 하십시오. 설치할 데이터가 포함 된 디렉토리 DEBIAN에서 제어 파일 및 유지 보수 스크립트가 포함 된 최상위 레벨에서 호출 된 디렉토리를 추가하십시오 .

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

어려운 방법

데비안 도구가없는 경우 패키지하려는 파일의 아카이브 data.tar.gz, control.tar.gz(하위 디렉토리 없음) 라는 제어 파일의 별도 아카이브 , debian-binary및을 포함하고 텍스트를 포함 하는 텍스트 파일을 빌드 하십시오 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

당신은 적어도 필요한 제어 파일 필드와 Package, Maintainer, Priority, Architecture, Installed-Size, Version, 및 필요한 의존성 선언.

설치 후 실행될 스크립트를 호출 postinst합니다. 실행 가능하게 만드십시오. 그것은 함께 간다 control.

이진 패키지를 다른 형식으로 변환

다른 배포판의 이진 패키지가 이미있는 경우 외계인 을 사용 하여 변환 할 수 있습니다 .


3
IMO 내 anwser의 사본입니까? 어떻게 생각해?
Gigamegs 2012 년

1
대답은 OP가 emacs를 사용하는 방법을 알고 있다고 전제합니다. 이맥스가 정말로 필요한가요? 변경 로그를 편집하기 위해 사용할 수 있다고 생각합니다 dch -i.
Faheem Mitha

무엇입니까 ar그 일을 tar되지 않는 이유는 무엇입니까?
mmstick

@mmstick 다른 형식입니다. deb 형식의 디자이너가 ar을 사용하기로 선택한 이유를 모르겠습니다.
Gilles 'SO- 악마 그만'

1
이름을 변경하고 이메일을하려면 dh_make --createorig용도를, 당신이 필요 export DEBEMAIL="me@example.com"하고 export DEBFULLNAME="Firstname Lastname"사전.
Ryan

10

먼저 빌드 폴더와 파일의 아카이브를 만들어야합니다. tar czvf data.tar.gz files

그런 다음 빌드 폴더에서 원하는 정보가 포함 된 제어 파일을 작성해야합니다.

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <xxx@xxx.xx>
 Description: This is optional, but creates warnings if left out

그런 다음 독립적으로 preinst, postint, prerm 및 postrm 셸 스크립트를 추가하여 .deb 파일의 사전 및 사후 설치 및 사전 및 사후 제거 동작을 제어 할 수 있으며 tar를 사용하여 제어 아카이브를 만들 수 있습니다. tar czvf control.tar.gz control preinst postinst prerm postrm

그런 다음 데비안 바이너리 파일이 필요합니다 : echo 2.0 > debian-binary. 빌드 폴더에 다음 파일이 있어야합니다. debian-binary control.tar.gzdata.tar.gz.

마지막으로 ar.deb 파일을 만들려면 패키지가 필요 합니다.ar -r xxx.deb debian-binary control.tar.gz data.tar.gz


1
정보 ar -r xxx.deb debian-binary control.tar.gz data.tar.gz가 순서를 강조 할 가치가있을 수 있습니다 중요 : 제어 데이터 앞에 와야합니다.
Hibou57

@Bytemain, 가장 많이 투표 된 답변은 텍스트를 기반으로 한 부분적으로 표시되지만 세부 정보를 추가하므로 더 잘 읽을 수 있습니다. 복사 / 붙여 넣기 할 수있는 순서는 특히 더 잘 생겼습니다.
mariotomo

3

나는 많은 패키지를 수행하고 전체를 수행하는 것은 사소한 문제가 아닙니다. 긍정적으로 말하면, 파일과 스크립트는 훨씬 덜 작동합니다. debreate로 알려진 도구를 사용하여 이러한 패키지를 매우 간단하게 만들 수 있습니다 .

Debreate는 단순한 DEB 패키지를 만들기위한 정말 간단한 GUI입니다. 파일 위치, 위치 및 사후 / 사전 설치 / 제거시 실행할 파일 여부를 지정할 수 있습니다. 예전에는 모든 패키지를 표준 방식으로 사용했지만이 도구를 사용하기 시작한 후에는 필요할 때만 되돌아갑니다.



1

데비안의 Zimbra 7에서 우분투 패키지를 사용하여이 문제를 해결했습니다. (나는 짐 브라가 우분투에 대해서만 공개했지만 데비안> 부분 투를 좋아한다.) 내가이 문제를 어떻게 해결했는지 확실하지 않다.

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

모든 새 .deb 파일은에 있습니다 new/.

참고 : 이것은 압박에 빠졌습니다. wheezy의 dpkg에는 이제 --force-bad-version이 있습니다.


1

패키지를 빠르게 작성하기 위해 사용자는 설치 프로그램을 점검 할 수 있습니다. 프로그램을 설치하고 변경 사항을보고 deb 또는 rpm 패키지를 만듭니다.


소스에서 설치해야하는 패키지를 추적하기위한 훌륭한 옵션 인 것 같습니다. 더 자세한 정보를 제공 할 수 있습니까? 예를 들어, 설치 과정에서 심볼릭 링크 변경, 파일 삭제, 구성 파일 편집, 데몬 추가 등을 수행 할 수 있습니다. prerm 및 postrm 스크립트를 추가하기 위해 출력을 쉽게 수정할 수 있습니까?
AatG

wiki.debian.org/CheckInstall 당신이 중 변경 일을하려는 경우 설치 - 가장 쉬운 방법은 설치 섹션을 변경 Makefile을 수정합니다. prerm / postrm-나는 그것을 수정할 방법을 찾지 못했습니다. 작은 프로그램만으로 간단하게 제거 할 수 있습니다.
undefine

-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e youremail@site.org -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.