Як я можу отримати код довідкового виходу 'verbose'?


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?
Жос

Знову ж таки, вам потрібно буде вивести результат. Я припускаю, що apt-cache policy google-chromeце не дає тобі рядка зі словом "Кандидат", тоді як apt-cache policy google-chrome-stableби.
Жос

ГАРАЗД. Я рухаю цю дискусію до чату і ввожу цю пропозицію як (часткову) відповідь.
Жос

Відповіді:


1

Не повна відповідь, але ви можете apt-cache policy Xспробувати перевірити наявність пакунків спочатку, зробивши та переглянувши вихід для "Candidate (none)" або "Не вдалося знайти пакет X" тощо.


Наразі затверджено, але, як ви вже сказали, це частково. Не соромтеся видалити всі ваші коментарі, що це відповідь зараз. Дякую за допомогу
kiri

15

Я вважаю, що це не випадок XY, і ви просто хочете мати можливість налагоджувати apt-get взагалі кажучи. Під такими припущеннями ось моя відповідь.

З man apt.conf:

ВАРІАНТИ ДЕБУГИ

Увімкнення параметрів у розділі Debug :: призведе до надсилання інформації про налагодження у стандартний потік помилок програми, що використовує бібліотеки apt, або включить спеціальні програмні режими, які в першу чергу корисні для налагодження поведінки apt.

Отже, вам потрібно лише активувати правила для кожної поведінки налагодження apt-get:

  • Налагодження :: pkgProblemResolver : дає змогу виводити рішення про рішення, прийняті dist-модернізацією, оновленням, встановленням, видаленням, очищенням.
  • Налагодження :: NoLocking : вимикає блокування всіх файлів. Це можна використовувати для запуску деяких операцій (наприклад, apt-get -s install) як некористувальницького користувача.
  • Debug :: pkgDPkgPM : друкує фактичний командний рядок кожного разу, коли apt викликає dpkg (1).

Ці 3 - це перше, що рекомендує сторінка man, і перше допоможе вам налагодити першу виявлену помилку. Для другого вам можуть знадобитися:

  • Налагодження :: Придбати :: http : Роздрукувати інформацію, що стосується завантаження пакетів за допомогою HTTP. Існує також https, ftp, cdrom.

Сторінка man має ще багато інших, ви можете легко перелічити їх, використовуючи man apt.conf | grep -A5 -i debug.

Все це слід записати, використовуючи правильний синтаксис, і вони приймають булеві значення:

Debug::*::*  "true";

або якщо ви хочете використовувати кілька рядків:

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

Якщо ви хочете запустити лише екземпляр apt-get, ви можете скористатися -o/ --optionswitch:

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, щоб виявити, чи не відбулася перша помилка?
kiri

Я також хотів би зробити це лише для конкретного примірника apt-get, а не весь час.
kiri

@ minerz029 ви можете використовувати -oопцію для запуску спеціальних команд. Оновлено мою відповідь.
Брайам

Щодо першого коментаря, вам слід зробити щось розумне з розбором результатів. Я не маю уяви, як це можна зробити.
Брайам

Я фактично змусив його працювати з прив'язкою до результатів apt-cache policy PACKAGE, як сказав Джос. Я намагався перевірити, чи встановлено пакет, я, можливо, не задав своє запитання правильно, але це хороша відповідь
kiri
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.