Je suis en train d'écrire un script post-installation pour Ubuntu en Perl (même script que celui vu aquí ). L'une des étapes consiste à installer une liste de paquets. Le problème est que si apt-get install
échoue de l'une des nombreuses manières différentes pour n'importe lequel des paquets, le script meurt gravement. Je voudrais éviter que cela ne se produise.
Cela arrive à cause de la façon dont apt-get install
échoue pour les paquets qu'il n'aime pas. Par exemple, lorsque j'essaie d'installer un mot absurde (c'est-à-dire que j'ai tapé le mauvais nom de paquet)
$ sudo apt-get install oblihbyvl
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package oblihbyvl
mais si, au contraire, le nom du paquet a été obsolète (installation de handbrake depuis 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
etc, etc ...
J'ai essayé d'analyser les résultats de apt-cache
y apt-get -s install
pour essayer de prendre en compte toutes les possibilités avant de procéder à l'installation, mais il semble que je continue à trouver de nouvelles façons de permettre aux échecs de se poursuivre jusqu'à la commande d'installation du système.
Ma question est la suivante : existe-t-il une fonction, soit en Perl (par exemple un module, bien que j'aimerais éviter d'installer des modules si possible, car c'est censé être la première chose lancée après une nouvelle installation d'Ubuntu), soit dans apt-* ou dpkg, qui me permettrait d'être sûr que les paquets sont tous disponibles pour être installés avant l'installation et, si ce n'est pas le cas, d'échouer gracieusement d'une manière qui laisse l'utilisateur décider de ce qu'il doit faire ?
N.B. Je fais quelque chose du genre :
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);