Проверьте список пакетов для установки с помощью apt-get - PullRequest
2 голосов
/ 07 января 2011

Я пишу постустановочный скрипт для Ubuntu на Perl (тот же скрипт, что и здесь ).Одним из шагов является установка списка пакетов.Проблема заключается в том, что если apt-get install не удается каким-либо из множества различных способов для любого из пакетов, сценарий плохо умирает.Я хотел бы предотвратить это.

Это происходит из-за того, что apt-get install терпит неудачу для пакетов, которые ему не нравятся.Например, когда я пытаюсь установить бессмысленное слово (то есть набрать неправильное имя пакета)

$ sudo apt-get install oblihbyvl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package oblihbyvl

, но если вместо этого имя пакета устарело (установка ручного тормоза из ppa)

$ sudo apt-get install handbrake
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package handbrake is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'handbrake' has no installation candidate
$ apt-cache search handbrake
handbrake-cli - versatile DVD ripper and video transcoder - command line
handbrake-gtk - versatile DVD ripper and video transcoder - GTK GUI

и т. Д. ...

Я попытался проанализировать результаты apt-cache и apt-get -s install, чтобы попытаться использовать все возможности перед установкой, но мне кажется, что я продолжаю искать новые способы разрешения сбоевчтобы продолжить фактическую команду установки системы.

Мой вопрос: есть ли какая-либо возможность в Perl (например, модуль, хотя я хотел бы избежать установки модулей, если это возможно, так как это должно быть первым делом)запустить после новой установки Ubuntu) или apt- * или dpkg, что позволило бы мне быть уверенным, что все пакеты доступны для установки перед установкой, и если нет, то изящно завершить работу каким-либо образом, что позволит пользователю решить, что делать?

NB Я делаю что-то вроде:

my @list_of_install_candidates = (...);
my @to_install = grep { my $output = qx{ apt-get -s install $_ }; parse_output($output); } @list_of_install_candidates;
system('apt-get', 'install', @to_install);

1 Ответ

2 голосов
/ 07 января 2011

Вы можете попробовать apt-cache policy. Примеры:

$ apt-cache policy handbrake
handbrake:
  Installed: (none)
  Candidate: (none)
  Version table:

$ apt-cache policy foo
N: Unable to locate package foo

$ apt-cache policy openbox
openbox:
  Installed: 3.4.11.1-1
  Candidate: 3.4.11.1-1
  Version table:
 *** 3.4.11.1-1 0
        500 http://mirrors.xmission.com/ubuntu/ maverick/universe i386 Packages
        100 /var/lib/dpkg/status

Все с непустой таблицей версий должно быть установлено.

...