Apt-get не работает в скрипте bash?

Apt-get не работает в скрипте bash?

У меня есть несколько машин (работающих под управлением Ubuntu LTS 12.4 64-bit), которые нужно настроить одинаково, поэтому я создал скрипт оболочки, который будет автоматически запускаться при первой загрузке машины. Он работает по большей части, но любой вызов apt-get завершается неудачей. В качестве примера, вот две команды, которые я хочу выполнить.

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. Какая разница для программы, если она вызывается напрямую или через скрипт оболочки? И можно ли убедить ее в обратном?

EDIT: Дополнительная информация:

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\r (который не существует) вместо ldap-auth-client (который существует).

решение2

Попробуйте выполнить следующую команду

apt-get update         

перед выполнениемapt-get установитькоманда

Также убедитесь, что URL-адреса в/etc/apt/sources.listдоступны.

Связанный контент