쉽게 DEB 압축 풀기, postinst 편집 및 DEB 재패키징

쉽게 DEB 압축 풀기, postinst 편집 및 DEB 재패키징

Intel의 OpenCL SDK를 설치하려고 하는데 DEB 파일이 RPM에서 변환된다는 오류가 발생합니다.여기궁금하신 분들을 위해). postinst그들이 제공하는 DEB에서 스크립트를 편집 해야 합니다 .

기존 DEB를 가져와 콘텐츠(제어 정보 포함)를 추출한 다음 콘텐츠를 다시 패키지하여 새 DEB를 만들려면 어떻게 해야 하나요? 파일 편집만 하고 파일 추가나 삭제는 하지 않습니다.

답변1

deb 패키지를 작동하는 주요 명령은 다음과 같습니다.dpkg-deb.

패키지의 압축을 풀려면 빈 디렉터리를 만들고 해당 디렉터리로 변경한 다음 실행하여 dpkg-deb제어 정보와 패키지 파일을 추출합니다. 패키지를 다시 빌드하는 데 사용됩니다 dpkg-deb -b.

mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb

스크립트를 루트로 실행하지 않으면 추출 단계에서 파일의 권한과 소유권이 손상됩니다. 이를 방지하는 한 가지 방법은 아래 스크립트를 실행하는 것입니다.fakeroot. 프로세스는 있는 그대로 생성할 수 없는 파일에 대한 권한이 있는 메모리를 유지 하므로 각 시퀀스를 개별적으로 실행하는 fakeroot대신 전체 시퀀스를 실행해야 합니다 .dpkg-debfakeroot

fakeroot sh -c '
  mkdir tmp
  dpkg-deb -R original.deb tmp
  # edit DEBIAN/postinst
  dpkg-deb -b tmp fixed.deb
'

권한을 조작하는 대신 데이터 아카이브를 그대로 유지하고 제어 아카이브만 수정할 수 있습니다. dpkg-deb이를 수행하는 방법은 제공되지 않습니다. 다행히도 deb 패키지는 표준 형식을 따릅니다.ar파일. 따라서 를 사용 ar하여 제어 아카이브를 추출하고 해당 파일을 수정한 다음 ar제어 아카이브를 새 버전으로 다시 바꿀 수 있습니다.

mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz

당신은해야하나 추가로그 항목 변경그리고 변화버전 번호패키지의 내용을 수정한 경우. Debian 패키지를 운영하기 위한 인프라는 두 패키지의 이름과 버전이 동일할 경우 동일한 패키지로 가정합니다. 접미사 추가debian_revision버전 번호 끝에 있는 부분. 주문상의 이유로 접미사는 로 시작 ~해야 1.2.3-4.1합니다 1.2.3-4.1~johnjumper1.

쉘 도구를 사용하는 대신 Emacs를 사용할 수 있습니다. 이것dpkg-dev-el(이것은 기본 Debian 패키지이므로 자체 업스트림입니다.) .deb파일 편집 및 Debian 변경 로그 편집을 위한 모드가 포함되어 있습니다. Emacs는 대화형으로 사용하거나 스크립트로 사용할 수 있습니다.

답변2

당신은 그것을 사용할 수 있습니다불소 PM선택적으로 스크립트를 다음과 같이 --after-install바꿀 수 있습니다 .postinst

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb

답변3

.deb 파일에서 파일을 추출하려는 경우 7-Zip이 유용합니다. 7-Zip은 "ar" 파일의 "압축해제"만 지원합니다. (파일 이름을 바꿀 필요는 없습니다. *.deb가 "ar"로 열리고 내부적으로 "data.tar"가 표시됩니다.)

관련 정보