Intel의 OpenCL SDK를 설치하려고하지만 DEB 파일은 RPM에서 버그가있는 변환입니다 (참조 : 궁금하신 분은 여기 를 참조하세요. 제공하는 DEB에서 postinst 스크립트를 편집해야합니다.

기존 DEB를 가져 와서 콘텐츠 (제어 정보 포함)를 추출한 다음 나중에 새 DEB를 만들기 위해 내용을 다시 패키징 하시겠습니까? 파일 편집 만하고 파일을 추가하거나 제거하지 않습니다.

댓글

  • 풀기 부분은 자정 사령관 (apt install mc) — deb 파일에서 Enter 키를 누르기 만하면됩니다.

답변

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 에서 스크립트를 실행하는 것입니다. . 각 dpkg-deb이 아닌 fakeroot에서 전체 시퀀스를 실행해야합니다. cf29dd4d0f “>

생성 할 수없는 파일의 권한을 그대로 유지하는 프로세스입니다.

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.11.2.3-4.1~johnjumper1가됩니다.

셸 도구를 사용하는 대신 Emacs를 사용할 수 있습니다. dpkg-dev-el 패키지 (기본 Debian 패키지이므로 자체 업스트림 임)에는

파일 및 Debian 변경 로그를 편집합니다. Emacs는 대화식으로 사용하거나 스크립트로 사용할 수 있습니다.

댓글

  • 또한 -e 스위치를 사용할 수 있습니다. 제어 파일을 변경하려면 fpm : fpm -e -s deb -t deb ../old.deb. 그러면 편집기에서 제어 파일이 열립니다.
  • btw, fakeroot bash 명령을 실행하면 소유권과 관련하여 작동하지 않으며 ar 메소드는 큰 deb 파일의 경우 매우 빠릅니다!
  • 감사합니다. 이것은 유용했습니다. dpkg-deb -R를 사용하면 모드가 유지되고 dpkg-deb -b 추출 된 파일의 uid:gid0:0. ' Fakeroot가 필요하지 않았습니다 (아카이브 내에 설정된 {u, g} id 파일이 있었는데 문제가있을 수 있다고 생각하지만 ' 내 상황에서는 그렇지 않습니다.
  • @PSkocik setxid 파일뿐만 아니라 /etc 또는 /var 특정 그룹에 속해야합니다.
  • 좋은 답변에 감사드립니다. 다시 빌드 된 패키지와 원래 패키지가 동일한 md5sum을 갖도록 할 수있는 방법이 있습니까?

Answer

fpm 을 iv id와 함께 사용할 수 있습니다. 다음과 같이 postinst 스크립트를 대체하는 = “42b9be306a”>

옵션 :

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

댓글

  • Debian / Ubuntu에 fpm을 설치하려면 : sudo apt-get install ruby-dev build-essential; sudo gem install fpm

답변

.deb 파일에서만 파일을 추출하려는 경우 르, 7-Zip이 편리합니다. 7-Zip은 “압축 풀기 전용”을위한 “ar”파일을 지원합니다. (파일 이름을 바꿀 필요가 없습니다. * .deb가 “ar”로 열리고 내부에 “data.tar”가 표시됩니다.)

댓글

  • 사이트에 오신 것을 환영합니다. 기여해 주셔서 감사합니다.OP에서 특별히 " DEB 압축을 풀고 DEB를 다시 포장하도록 요청했습니다 ". 해당 주제를 다루기 위해 게시물을 수정 할 수도 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다