dpkg --dry-run 옵션이 설치를 올바르게 시뮬레이션하지 않습니다.

dpkg --dry-run 옵션이 설치를 올바르게 시뮬레이션하지 않습니다.

임의의 .DEB 파일이 주어지면 실제로 장치에 설치하지 않고 설치가 성공적으로 완료되는지 어떻게 확인할 수 있습니까? 다음 코드 조각을 참조하세요.

root@VirtualBox:/Folder# dpkg -i mysql-workbench_6.2.3+dfsg-7_armhf.deb 
Selecting previously unselected package mysql-workbench.
(Reading database ... 48937 files and directories currently installed.)
Preparing to unpack mysql-workbench_6.2.3+dfsg-7_armhf.deb ...
Unpacking mysql-workbench (6.2.3+dfsg-7) ...
dpkg: dependency problems prevent configuration of mysql-workbench:
 mysql-workbench depends on libatkmm-1.6-1 (>= 2.22.1); however:
  Package libatkmm-1.6-1 is not installed.
 mysql-workbench depends on libcairo2 (>= 1.14.0); however:
  Package libcairo2 is not installed.
 mysql-workbench depends on libcairomm-1.0-1 (>= 1.6.4); however:
  Package libcairomm-1.0-1 is not installed.
 mysql-workbench depends on libctemplate2; however:
  Package libctemplate2 is not installed.
 mysql-workbench depends on libgdal1h (>= 1.8.0); however:
  Package libgdal1h is not installed.
 mysql-workbench depends on libgdk-pixbuf2.0-0 (>= 2.22.0); however:
  Package libgdk-pixbuf2.0-0 is not installed.
 mysql-workbench depends on libgl1-mesa-glx | libgl1; however:
  Package libgl1-mesa-glx is not installed.
  Package libgl1 is not installed.
 mysql-workbench depends on libglibmm-2.4-1c2a (>= 2.42.0); however:
  Package libglibmm-2.4-1c2a is not installed.
 mysql-workbench depends on libgnome-keyring0 (>= 2.22.2); however:
  Package l
dpkg: error processing package mysql-workbench (--install):
 dependency problems - leaving unconfigured
Processing triggers for mime-support (3.58) ...
Processing triggers for shared-mime-info (1.3-1) ...
Errors were encountered while processing:
 mysql-workbench
root@VirtualBox:/Folder# echo $?
1
root@VirtualBox:/Folder# dpkg --dry-run -i mysql-workbench_6.2.3+dfsg-7_armhf.deb 
(Reading database ... 49115 files and directories currently installed.)
Preparing to unpack mysql-workbench_6.2.3+dfsg-7_armhf.deb ...
root@VirtualBox:/Folder# echo $?
0
root@VirtualBox:/Folder# dpkg --dry-run --simulate -i mysql-workbench_6.2.3+dfsg-7_armhf.deb 
(Reading database ... 49115 files and directories currently installed.)
Preparing to unpack mysql-workbench_6.2.3+dfsg-7_armhf.deb ...
root@VirtualBox:/Folder# echo $?
0
root@VirtualBox:/Folder# 

해당 옵션을 사용하면 dpkg -i명령이 실패하고 값 1을 반환하지만 동일한 명령을 사용하면 --dry-run0이 반환됩니다. 해당 --simulate옵션을 추가해도 동작이 변경되지 않는 것 같습니다. 실제로 패키지를 설치하지 않고 .DEB 파일이 올바르게 설치되었는지 지속적으로 확인하는 방법에 대한 조언이 있습니까?

저는 Raspberry Pi 에뮬레이터에서 실행하고 있습니다.

root@VirtualBox:/Folder# cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

답변1

추가 종속성을 설치할 필요 없이 패키지를 설치할 수 있는지 확인하려면 "에뮬레이션" 모드를 사용하는 것이 가장 좋습니다 apt.

apt -s install ./mysql-workbench_6.2.3+dfsg-7_armhf.deb

( ./어느 것이 중요한지 확인하세요). 그러면 dpkg실제 설치가 수행할 작업이 출력됩니다. 패키지 설치에는 가 표시됩니다 Inst. 패키지가 두 개 이상인 경우 패키지를 개별적으로 설치할 수 없습니다.

이제 중요한 부분은... 종속성을 모르기 dpkg때문이 아니라 (확실히 그렇습니다) 종속성이 충분히 강하지 않기 때문에 사용할 수 없다는 것입니다. dpkg패키지가 다른 패키지에 종속되는 경우 종속성으로 인해 패키지가설치됨만족스럽지 않으면 만족할 수 없게 됩니다.구성된. 바라보다데비안 정책 섹션 7.2:

필드 Depends가 적용됩니다.오직패키지 구성에 관해서. 종속성이 충족되지 않는 경우 패키지가 구성되지 않은 상태로 남아 있는 것을 방지하지 않으며, 종속성이 충족되는 올바르게 설치된 패키지는 종속성이 충족되지 않거나 충족될 수 없는 다른 버전으로 교체될 수 있습니다. , 종속 패키지는 구성되지 않은 상태로 유지되며(구성하려고 하면 오류가 발생하므로) 제대로 작동하지 않습니다.

자체 테스트에서 이를 확인할 수 있습니다. 프로세스가 다음과 같이 실패합니다.

dpkg: dependency problems prevent configuration of mysql-workbench

"설치"가 아닌 "구성"에 유의하십시오. 출력을 보면 패키지가 설치되었지만 아직 구성되지 않았음을 의미한다는 것을 dpkg -l mysql-workbench알 수 있습니다 .iU

에서 "에뮬레이션" 모드를 활성화하면 dpkg기본적으로 읽기 전용 모드로 실행됩니다. 플래그를 설정하여 이를 수행합니다 f_noact. 소스 코드에서 이를 찾을 수 있습니다. 소프트웨어 패키지를 설치할 때 아무것도 작성하지 않고 설치 작업을 시뮬레이션한 다음 구성 단계로 들어갑니다.그냥 되는 척 해봐이는 모의 작업이 수행할 수 있는 유일한 작업입니다. 구성에는 패키지에서 유지 관리 스크립트를 실행하는 작업이 포함되며 해당 스크립트가 변경되지 않았는지 확인하거나 변경을 허용하지 않고 성공적인 변경을 확인할 수 있는지 확인하기가 어렵습니다. 따라서 귀하의 경우 모의는 (모의가 아닌 테스트에서와 같이) 성공한 패키지를 설치하고 구성을 위조합니다. 그래서 오류가 발견되지 않았습니다 ...

답변2

이것은 기술적으로 대답은 아니지만 좋은 질문입니다.

man dpkg를 보면 테스트할 옵션에 대해 나와 있는 것을 볼 수 있습니다. 실제 데비안 전문가가 좀 더 권위 있는 답변을 제공할 수 있다면 좋을 것 같습니다. 아니면 내용에 오류가 있으면 수정해주세요.

   --no-act, --dry-run, --simulate
          Do everything which is supposed to be done, but don't write any changes. This is used to see what would happen with the specified
          action, without actually modifying anything.

확실하지는 않지만 본질적으로 모든 dpkg가 테스트하는 것은 명령에 결함이 있는지 여부라고 생각합니다. 예를 들어, 다음과 같은 경우:

#dpkg --dry-run -i nonexistent.deb || echo $?
dpkg: error: cannot access archive 'nonexistent.deb': No such file or directory
2

이것이 결과입니다. 제가 알아차린 한 가지 사실은 루트 권한이 필요한 --dry-run을 사용하더라도 dpkg가 로그 파일을 사용할 수 없다고 불평한다는 것입니다. 이는 --dry-run우리가 예상한 대로 전혀 수행되지 않음을 의미합니다. 를 사용하면 apt-get일반 사용자처럼 --simulate를 사용할 수 있습니다.

dpkg는 매우 낮은 수준의 apt 도구이며 테스트 결과에서 볼 수 있듯이 실제로 .deb 파일을 설치할 때까지 apt 데이터베이스 및 종속성 트리에 대한 지식이 없습니다. 따라서 종속성 등이 아닌 실제 리터럴 명령 데이터를 추론 dpkg --dry-run하거나 --simulate테스트합니다.

이는 apt-get에서는 합리적으로 잘 실행되지만 완벽하지는 않은 동일한 명령처럼 보이지만 실제로는 전혀 동일하지 않음을 보여줍니다. 실제로 무엇을 하는지 이해하려면 dpkg --simulate의 코드를 읽어야 합니다.

이 질문을 조사해 보면 제가 생각했던 것이 사실인 것 같습니다.

https://lists.ubuntu.com/archives/ubuntu-devel/2005-November/013049.html

기능이 있는 경우 .deb dpkg -i를 시도하거나(그리고 구성이 부족한 패키지로 끝나는 경우) dpkg -f종속성을 하나씩 수동으로 확인하는 대신 .deb의 종속성을 자동으로 확인하는 방법이 있습니까?

dpkg-buildpackage의 "Unmet build dependency: ..." 확인과 같은 것을 찾고 있는데 .debs에 대한 것입니다.

다음 위치에서 "gdebi"라는 새로운 애플리케이션을 사용할 수 있습니다. http://people.ubuntu.com/~mvo/gdebi/

deb 패키지 종속성을 직접 해결할 수 있어야 합니다. 여기에는 gdebi-gtk 및 gdebi(및 cli 버전)가 포함되어 있습니다. 이것이 당신이 원하는 것일 수도 있습니다. 그렇지 않은 경우 알려주시면 추가될 수 있습니다 :) 사용/테스트하시면 피드백(개인 메일을 통해)을 보내주시면 매우 감사하겠습니다.

이것은 아주 오래된 스레드이고 여러분이 GUI 도구를 찾고 있지 않을 것이라고 확신합니다. 하지만 이 질문은 2005년에 존재했고 누군가 종속성을 확인할 수 있는 GUI 솔루션을 만들었다는 점은 주목할 가치가 있습니다. 이는 실제로 dpkg - - 시뮬레이션 번호 나는 또한 Debian apt와 dpkg에 대한 자동화 스크립트를 많이 작성했는데 둘은 매우 다르게 작동하고 작동할 것이라고 기대하지 않습니다.

dpkg를 사용하여 종속성을 결정하기 위한 다양한 옵션

https://lists.debian.org/debian-user/2006/09/msg00292.html

여기에 동일한 문제에 대한 오래된 Debian 스레드가 있습니다. dpkg --dry-run이 일반적으로 종속성을 처리하지 않는다는 것을 알 수 있습니다.

https://lists.debian.org/debian-user/2006/09/msg00297.html

dpkg-deb -I package.deb

어떤 제안이 있으십니까? 이는 본질적으로 와 동일함을 보여줍니다 apt-cache show package-name.

따라서 최소한 종속성을 직접 확인할 수 있습니다.

 dpkg -I perl_5.26.0-8_i386.deb
 ....
 Pre-Depends: dpkg (>= 1.17.17)
 Depends: perl-base (= 5.26.0-8), perl-modules-5.26 (>= 5.26.0-8), libperl5.26 (= 5.26.0-8)
....

https://lists.debian.org/debian-user/2006/09/msg00312.html

을 사용하면 dpkg --control pkg_file종속성을 포함하여 패키지에 대한 모든 제어 정보가 표시됩니다.

테스트했지만 아무 것도 표시되지 않았습니다. 최신 버전이 아닐 수도 있습니다. 모르겠습니다.

보시다시피 데비안 개발자는 몇 가지 제안을 했지만 그 중 어느 것도 dpgk --dry-run원하는 것을 수행하는 방법을 나타내지 않았습니다.

결론적으로

몇 가지 옵션이 있습니다. 하나는 종속성을 수동으로 결정하는 것입니다. 나중에 자신의 deb를 만든 다음 스크립트 설치를 사용하거나 해당 종속성을 설치하는 데 효과가 있다고 생각하는 모든 것을 사용하고 설치 후 패키지하면 확실히 작동합니다. .deb .

테스트를 위해 스냅샷이 있는 가상 머신을 사용하는 것도 좋은 선택입니다.

관련 정보