「詳細な」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

基本的に、最初のようなエラーとは異なるコードでダウンロードエラーを終了させたいと思います。可能であれば、特定のエラーごとに異なる終了コードを使用したいのですが、上記の例が最低限必要です。追加のソフトウェアなしでバニラのUbuntuインストールでこれを行うにはどうすればよいaptitudeですか?


出力を解析するスクリプトでapt-getコマンドをラップできます。それとも「追加ソフトウェア」としてカウントされますか?また、ダウンロードエラーを検出するには、apt-get --download-only最初に行うことを検討してください。
ジョス

ああ、それは理にかなっています。おそらく、最初にパッケージXの存在を確認できapt-cache policy Xますか?
ジョス

繰り返しますが、出力をgrepする必要があります。そうすることapt-cache policy google-chromeは、「候補」という単語を含む行を提供しないと思いますapt-cache policy google-chrome-stable
ジョス

OK。このディスカッションをチャットに移動し、この提案を(部分的な)回答として入力しています。
ジョス

回答:


1

完全な答えではありませんが、apt-cache policy X「候補(なし)」または「パッケージXが見つかりませんでした」などの出力を実行してgrep することにより、最初にパッケージの存在をテストできます。


今のところ賛成ですが、あなたが言ったように、それは部分的です。今すぐ回答にあるコメントをすべて削除してください。ご協力ありがとうございます
キリ

15

これはXYの場合ではなく、一般的に言えばapt-getをデバッグしたいだけだと思います。そのような仮定の下で、ここに私の答えがあります。

からman apt.conf

デバッグオプション

Debug ::セクションでオプションを有効にすると、aptライブラリを使用するプログラムの標準エラーストリームにデバッグ情報が送信されるか、主にaptの動作のデバッグに役立つ特別なプログラムモードが有効になります。

したがって、次の各デバッグ動作のルールのみをアクティブ化する必要がありますapt-get

  • Debug :: pkgProblemResolver:dist-upgrade、upgrade、install、remove、purgeによる決定に関する出力を有効にします。
  • Debug :: NoLocking:すべてのファイルロックを無効にします。これを使用して、非rootユーザーとして一部の操作(たとえば、apt-get -s install)を実行できます。
  • Debug :: pkgDPkgPM:aptがdpkg(1)を呼び出すたびに、実際のコマンドラインを出力します。

これら3つは、manページが推奨する最初のものであり、最初に表示される最初のエラーのデバッグに役立ちます。2番目の場合、必要になる場合があります。

  • Debug :: Acquire :: http:HTTPを使用したパッケージのダウンロードに関連する情報を出力します。ありhttpsftpcdrom

manページにはさらに多くの機能があり、を使用して簡単にリストできます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-getは、最先端のソフトウェアです。そのため、終了コードに依存することなくプロセスをデバッグする高度な方法があります。


実際、これらのコマンドを無人で実行できるスクリプトに入れようとしています。最初のエラーが発生したかどうかを見つけるために、bashスクリプトでこれをどのように使用しますか?
キリ

apt-get常にではなく、の特定のインスタンスに対してのみこれを行いたいと思います。
キリ

@ minerz029 -oオプションを使用して、アドホックコマンドを実行できます。私の答えを更新しました。
Braiam

最初のコメントについては、出力の解析で何か賢いことをする必要があります。どうすればそれができるのか、私には見当もつかない考えがあります。
Braiam

apt-cache policy PACKAGEJosが言ったように、実際に、の出力をgrepすることで動作するようにしました。私はパッケージがインストール可能だったかどうかを確認しようと、私は右の私の質問をしていない可能性がありましたが、これは良い答えです
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.