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-deb
fakeroot
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"가 표시됩니다.)