Как я могу получить «подробный» код выхода apt-get?

7

Как я могу получить «подробный» код выхода для 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 )?

    
задан minerz029 20.09.2013 в 07:42
источник

2 ответа

1

Не полный ответ, но вы можете проверить наличие пакетов сначала, выполнив apt-cache policy X и grepping вывод для «Candidate (none)» или «Не удалось найти пакет X» и т. д.

    
ответ дан Jos 20.09.2013 в 08:53
источник
8

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

Из man apt.conf :

  

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ

     

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

Следовательно, вам нужно только активировать правила для каждого поведения отладки apt-get :

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

Те 3 являются первыми, которые рекомендует справочная страница, и первая поможет вам отладить первую ошибку, которую вы показываете. Для второго вам может понадобиться:

  • Отладка :: Приобретение :: 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 / --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 - это современное программное обеспечение, поэтому оно имеет расширенные методы для отладки процесса без необходимости использования кодов выхода.

    
ответ дан Braiam 21.09.2013 в 00:20