bash スクリプトで apt-get が失敗しますか?

bash スクリプトで apt-get が失敗しますか?

同じ方法で構成する必要があるマシン (Ubuntu LTS 12.4 64 ビットを実行) が複数あるため、マシンの初回起動時に自動的に実行されるシェル スクリプトを作成しました。ほとんどの場合は機能しますが、apt-get の呼び出しはすべて失敗します。例として、実行したいコマンドを 2 つ示します。

debconf-set-selections ./files/ldap.preseed
apt-get -y install ldap-auth-client

これらの行を直接入力した場合の結果は次のとおりです。

root@spare:/tmp/scripts# debconf-set-selections ./files/ldap.preseed
root@spare:/tmp/scripts# apt-get -y install ldap-auth-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be installed:
  ldap-auth-config libnss-ldap libpam-ldap
The following NEW packages will be installed:
  ldap-auth-client ldap-auth-config libnss-ldap libpam-ldap
0 upgraded, 4 newly installed, 0 to remove and 67 not upgraded.
Need to get 0 B/200 kB of archives.
After this operation, 877 kB of additional disk space will be used.
Preconfiguring packages...
[and so on...]

しかし、それらの行のみを含むシェル スクリプトを実行すると、次のようになります。

root@spare:/tmp/scripts# ./ldap.cr
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package ldap-auth-client

sudo を使用してスクリプトを実行した場合、または最初に chown して root にした場合も同じことが起こります。プログラムが直接呼び出された場合とシェル スクリプトを介して呼び出された場合の違いは何ですか? また、それ以外の方法でスクリプトを説得することは可能ですか?

編集: 詳細情報:

root@spare:/tmp/scripts# apt-cache policy ldap-auth-client
ldap-auth-client:
  Installed: (none)
  Candidate: 0.5.3
  Version table:
    0.5.3.0
       500 http://us.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

答え1

スクリプトを実行する前に dos2unix で実行すると、スクリプトは正常に動作するようになりました。apt-get が行末の余分な \r をパッケージ名の一部として読み取り、ldap-auth-client (存在する) ではなく ldap-auth-client\r (存在しない) を探していたのではないかと思います。

答え2

次のコマンドを実行してみてください

apt-get update         

実行する前にapt-get インストール指示

また、URLが/etc/apt/sources.listご利用いただけます。

関連情報