私はPerlでUbuntuのインストール後のスクリプトを書いています(hereと同じスクリプト)。手順の1つは、パッケージのリストをインストールすることです。問題は、apt-get install
が、いずれかのパッケージに対してさまざまな方法で失敗した場合、スクリプトはひどく死ぬということです。私はそれが起こらないようにしたいと思います。apt-getでインストールするパッケージのリストを確認してください
これは、好きではないパッケージに対して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
ではなく、パッケージ名が廃止された場合など
$ 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
(PPAからハンドブレーキを取り付ける)
、apt-cache
とapt-get -s install
の結果を解析してインストールを実行しようとしましたが、実際のインストールシステムコマンドに失敗するような新しい方法を見つけ続けるようです。
私の質問は、Perlにいくつかの機能があります(モジュールなどですが、可能であればモジュールをインストールしないようにしたいと思いますが、これはUbuntuの新規インストール後に最初に実行されるはずです) *またはdpkgを使用すると、パッケージをインストールする前にインストールすることができます。また、何らかの方法でうまく失敗していないと、ユーザーは何をすべきかを決めることができます。
N.B.あなたがapt-cache policy
を試みる場合があります
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);
空白でないバージョンのものであっても、インストールされている他のパッケージと競合することがあります。 – ysth
ええと、その場合は、ドライランの出力を解析して解析する方が意味があります( 'apt-get -s install ...') – cam
@cam、ありがとう、私はこれを行っていきます。パッケージがディストリビューションの標準パッケージと矛盾しない限り、インストール後に最初に実行することになるので、これは大丈夫かもしれません。 –