'자세한'apt-get 종료 코드를 어떻게 얻을 수 있습니까?


12

apt-get이와 같은 오류가 발생하도록 '자세한'종료 코드를 얻는 방법

Package google-chrome is a virtual package provided by:
  google-chrome-stable 29.0.1547.76-r223446
  google-chrome-beta 30.0.1599.47-1
You should explicitly select one to install.

E: Package 'google-chrome' has no installation candidate

이와 같은 다운로드 오류와 다른 종료 코드가 있습니다.

Err http://dl.google.com/linux/chrome/deb/ stable/main google-chrome-stable amd64 29.0.1547.76-r223446
  Something wicked happened resolving 'dl.google.com:http' (-11 - System error)

현재 두 오류 모두 100

기본적으로 다운로드 오류가 첫 번째 오류와 다른 코드로 종료되도록하고 싶습니다. 가능한 경우 각 특정 오류에 다른 종료 코드가 필요하지만 위의 예가 필요한 최소값입니다. 추가 소프트웨어없이 바닐라 우분투 설치에서 어떻게 할 수 aptitude있습니까?


apt-get 명령을 출력을 구문 분석하는 스크립트로 랩핑 할 수 있습니다. 아니면 "추가 소프트웨어"로 간주됩니까? 또한 다운로드 오류를 감지하려면 apt-get --download-only먼저 수행하십시오 .
Jos

아, 말이 되네요. 아마도 apt-cache policy X? 를 수행하여 패키지 X의 존재를 먼저 확인할 수 있습니다 .
Jos

다시, 출력을 grep해야합니다. 나는 그렇게한다고해서 apt-cache policy google-chrome"Candidate"라는 단어가 나오지 않는다고 가정합니다 apt-cache policy google-chrome-stable.
Jos

확인. 이 토론을 채팅으로 옮기고이 제안을 (부분) 답변으로 입력하고 있습니다.
Jos

답변:


1

완전한 대답은 아니지만 apt-cache policy X"Candidate (none)"또는 "Could n't find package X"등에 대한 출력을 수행 하고 grepping하여 패키지가 있는지 테스트 할 수 있습니다 .


지금은 찬성했지만 말했듯이 부분적입니다. 답변에있는 모든 의견을 자유롭게 삭제하십시오. 도와 주셔서 감사합니다
kiri

15

나는 이것이 XY의 경우가 아니라고 생각하며, 일반적으로 말하는 apt-get을 디버그 할 수 있기를 원합니다. 그러한 가정 아래에 내 대답이 있습니다.

에서 man apt.conf:

디버그 옵션

Debug :: 섹션에서 옵션을 활성화하면 디버깅 정보가 apt 라이브러리를 사용하는 프로그램의 표준 오류 스트림으로 보내지거나 apt의 동작을 디버깅하는 데 주로 유용한 특수 프로그램 모드가 활성화됩니다.

따라서 다음의 각 디버깅 동작에 대한 규칙 만 활성화하면됩니다 apt-get.

  • Debug :: pkgProblemResolver : dist-upgrade, upgrade, install, remove, purge에 의해 내려진 결정에 대한 출력을 가능하게합니다.
  • Debug :: NoLocking : 모든 파일 잠금을 비활성화합니다. 루트가 아닌 사용자로 일부 작업 (예 : apt-get -s install)을 실행하는 데 사용할 수 있습니다.
  • Debug :: pkgDPkgPM : apt가 dpkg (1)를 호출 할 때마다 실제 명령 줄을 인쇄합니다.

이 3은 맨 페이지에서 권장하는 첫 번째이며 첫 번째는 표시하는 첫 번째 오류를 디버깅하는 데 도움이됩니다. 두 번째로는 다음이 필요할 수 있습니다.

  • Debug :: Acquire :: http : HTTP를 사용하여 패키지 다운로드와 관련된 정보를 인쇄합니다. 도있다 https, ftp, cdrom.

매뉴얼 페이지에는 더 많은 것이 있으며을 사용하여 쉽게 나열 할 수 있습니다 man apt.conf | grep -A5 -i debug.

이 모든 것은 올바른 구문을 사용하여 작성해야하며 부울 값을 허용합니다.

Debug::*::*  "true";

또는 여러 줄을 사용하려는 경우 :

Debug {
  Acquire {
    http "true";
    ftp "true";
  };
  NoLocking "true";
};

apt-get 인스턴스에 대해서만 실행하려면 -o/ --option스위치를 사용할 수 있습니다 .

sudo apt-get -o Debug::pkgProblemResolver=true -o Debug::Acquire::http=true -f install 

다른 방법은 개인화 된 구성 파일을 작성하고 -c/ --config-file스위치로 로드하는 것입니다 .

sudo apt-get -c debug-apt.conf install hello

종료 코드 변경에 대해서는 소스 코드를 변경하지 않으면 불가능합니다. apt-getA는 예술의 상태 소프트웨어의 조각, 등이 종료 코드의 의존하지 않고 프로세스를 디버깅하는 고급 방법이있다.


실제로이 명령을 무인으로 실행할 수있는 스크립트에 넣으려고합니다. bash 스크립트에서 이것을 사용하여 첫 번째 오류가 발생했는지 어떻게 알 수 있습니까?
kiri

또한 특정 인스턴스에 대해서만이 작업을 수행하고 싶습니다 apt-get.
kiri

@ minerz029 -o옵션을 사용하여 임시 명령을 실행할 수 있습니다 . 내 답변을 업데이트했습니다.
Braiam

첫 번째 주석에 대해서는 출력을 구문 분석하여 영리한 작업을 수행해야합니다. 어떻게 할 수 있을지 모르겠습니다.
Braiam

apt-cache policy PACKAGEJos가 말한 것처럼 실제로의 출력을 grepping하는 것이 좋습니다. 패키지를 설치할 수 있는지 확인하려고했는데 질문을 제대로하지 않았을 수도 있지만 좋은 답변입니다
kiri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.