Bagaimana saya bisa mendapatkan kode keluar apt-get 'verbose'?

12

Bagaimana saya bisa mendapatkan kode keluar 'verbose' untuk apt-getsehingga kesalahan seperti ini

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

memiliki kode keluar yang berbeda dari kesalahan unduhan seperti ini

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)

Saat ini, kedua kesalahan keluar bersama 100

Pada dasarnya, saya ingin agar kesalahan unduhan keluar dengan kode yang berbeda dari kesalahan seperti yang pertama. Jika memungkinkan, saya ingin setiap kesalahan spesifik memiliki kode keluar yang berbeda, tetapi contoh di atas adalah minimum yang saya butuhkan. Bagaimana saya bisa melakukan ini dalam pemasangan vanilla Ubuntu tanpa perangkat lunak tambahan (dengan pengecualian aptitude)?

kiri
sumber
Anda bisa membungkus perintah apt-get dalam skrip yang mem-parsing output. Atau apakah itu dianggap sebagai "perangkat lunak tambahan"? Juga, untuk mendeteksi kesalahan unduhan, pertimbangkan untuk melakukan apt-get --download-onlylebih dulu.
Jos
Ah, itu masuk akal. Mungkin Anda bisa memverifikasi keberadaan paket X terlebih dahulu dengan melakukan apt-cache policy X?
Jos
Sekali lagi, Anda perlu menangkap output. Saya berasumsi bahwa melakukan apt-cache policy google-chrometidak memberi Anda garis dengan kata "Calon", sedangkan apt-cache policy google-chrome-stableakan.
Jos
BAIK. Saya menggerakkan diskusi ini untuk mengobrol dan memasukkan saran ini sebagai jawaban (sebagian).
Jos

Jawaban:

1

Bukan jawaban yang lengkap, tetapi Anda dapat menguji keberadaan paket terlebih dahulu dengan melakukan apt-cache policy Xdan menerima output untuk "Calon (tidak ada)" atau "Tidak dapat menemukan paket X", dll.

Jos
sumber
Terpilih untuk saat ini, tetapi seperti yang Anda katakan, sebagian. Jangan ragu untuk menghapus semua komentar Anda yang ada di jawaban sekarang. Terima kasih atas bantuan Anda
kiri
15

Saya percaya ini bukan kasus XY, dan Anda hanya ingin dapat men-debug apt-get secara umum. Di bawah asumsi seperti ini, inilah jawaban saya.

Dari man apt.conf:

OPSI DEBUG

Opsi yang diaktifkan di bagian Debug :: akan menyebabkan informasi debug dikirimkan ke aliran kesalahan standar program menggunakan pustaka apt, atau mengaktifkan mode program khusus yang terutama berguna untuk debugging perilaku apt.

Karenanya, Anda hanya perlu mengaktifkan aturan untuk setiap perilaku debugging dari apt-get:

  • Debug :: pkgProblemResolver : memungkinkan keluaran tentang keputusan yang dibuat oleh dist-upgrade, upgrade, instal, hapus, bersihkan.
  • Debug :: NoLocking : menonaktifkan semua penguncian file. Ini dapat digunakan untuk menjalankan beberapa operasi (misalnya, apt-get -s install) sebagai pengguna non-root.
  • Debug :: pkgDPkgPM : mencetak baris perintah aktual setiap kali apt memanggil dpkg (1).

Mereka 3 adalah yang pertama yang direkomendasikan oleh halaman manual, dan yang pertama akan membantu Anda untuk men-debug kesalahan pertama yang Anda tampilkan. Untuk yang kedua Anda mungkin perlu:

  • Debug :: Acquire :: http : Mencetak informasi terkait dengan mengunduh paket menggunakan HTTP. Ada juga https, ftp,cdrom .

Halaman manual memiliki lebih banyak, Anda dapat membuat daftar dengan mudah menggunakan man apt.conf | grep -A5 -i debug .

Semua ini harus ditulis menggunakan sintaks yang benar dan mereka menerima nilai boolean:

Debug::*::*  "true";

atau jika Anda ingin menggunakan beberapa baris:

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

Jika Anda ingin menjalankan hanya untuk instance apt-get, Anda dapat menggunakan -o/ --optionswitch:

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

Metode lain adalah membuat file konfigurasi pribadi Anda dan memuatnya dengan -c/ --config-fileswitch:

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

Tentang mengubah kode keluar, saya yakin Anda tidak bisa kecuali Anda mengubah kode sumber. apt-getadalah keadaan seni perangkat lunak, karena itu memiliki metode canggih untuk debug proses tanpa perlu mengandalkan dari kode keluar.

Braiam
sumber
Saya sebenarnya mencoba untuk menempatkan perintah-perintah ini dalam sebuah skrip yang dapat dijalankan tanpa pengawasan. Bagaimana saya menggunakan ini dalam skrip bash untuk menemukan jika kesalahan pertama terjadi?
kiri
Saya juga ingin melakukan ini hanya untuk contoh spesifik apt-get, tidak setiap saat.
kiri
@ minerz029 Anda dapat menggunakan -oopsi untuk menjalankan perintah ad-hoc. Memperbarui jawaban saya.
Braiam
Tentang komentar pertama, Anda harus melakukan sesuatu yang pintar dengan parsing output. Saya tidak tahu bagaimana saya bisa melakukan itu.
Braiam
Saya benar-benar membuatnya bekerja dengan menangkap output apt-cache policy PACKAGE, seperti kata Jos. Saya mencoba memeriksa apakah suatu paket dapat diinstal, saya mungkin tidak menanyakan pertanyaan saya dengan benar tetapi ini adalah jawaban yang bagus
kiri