2011-01-07 8 views
2

私は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-cacheapt-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); 

答えて

2

:私はの線に沿って何かをしています。例:

$ 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 

空白でないバージョンのテーブルを持つものはすべてインストール可能です。

+0

空白でないバージョンのものであっても、インストールされている他のパッケージと競合することがあります。 – ysth

+0

ええと、その場合は、ドライランの出力を解析して解析する方が意味があります( 'apt-get -s install ...') – cam

+0

@cam、ありがとう、私はこれを行っていきます。パッケージがディストリビューションの標準パッケージと矛盾しない限り、インストール後に最初に実行することになるので、これは大丈夫かもしれません。 –

関連する問題