dpkg: aviso: 'ldconfig' não encontrado no PATH ou não executável - Ubuntu 12 - Vagrant

5

Estou trabalhando na configuração de uma instalação do Vagrant / Puppet para que novos desenvolvedores possam ter um ambiente de desenvolvimento limpo para o nosso projeto Rails.

Os comandos básicos de configuração do Vagrant são:

  config.vm.box      = 'precise32'
  config.vm.box_url  = 'http://files.vagrantup.com/precise32.box'

No geral, a instalação parece estar indo bem. Eu tenho RVM, Postgres e Ruby instalados e funcionando.

No entanto, sempre que eu tento instalar o "Heroku Toolbelt" usando este comando:

su -l vagrant -c 'wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh'

Eu me deparo com esse problema:

... Lots of Hits and downloads...
The following extra packages will be installed:
  foreman heroku libruby1.9.1 ruby1.9.1
Suggested packages:
  ruby1.9.1-examples ri1.9.1 graphviz ruby1.9.1-dev
The following NEW packages will be installed:
  foreman heroku heroku-toolbelt libruby1.9.1 ruby1.9.1
0 upgraded, 5 newly installed, 0 to remove and 132 not upgraded.
Need to get 0 B/4,997 kB of archives.
After this operation, 13.1 MB of additional disk space will be used.
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)

( Nota ) Isso acontece se eu executar o comando manualmente após o ssh vagante. Além disso, a configuração real do shell recebe o erro quando é executada inicialmente.

Como esta é uma caixa vagabunda, é fácil "destruir vagabundo" e tentar novamente, mas recebo o mesmo problema de forma consistente.

O mais estranho é que o meu PATH definitivamente inclui essas pastas:

echo $PATH
/home/vagrant/.rvm/gems/ruby-1.9.3-p194/bin:/home/vagrant/.rvm/gems/ruby-1.9.3-p194@global/bin:/home/vagrant/.rvm/rubies/ruby-1.9.3-p194/bin:/home/vagrant/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/vagrant_ruby/bin

o arquivo 'ldconfig' está em / sbin e é um executável:

cd /sbin
ls -l l*
-rwxr-xr-x 1 root root    465 Apr 20  2012 ldconfig

Mesmo com o daemon start-stop:

-rwxr-xr-x 1 root root 26752 Apr 12  2012 start-stop-daemon

Então, não tenho certeza do que realmente está reclamando ... Alguma sugestão? Algumas permissões são emitidas com o Vagrant?

    
por Dave Collins 19.08.2013 / 22:25

1 resposta

3

Como você está canalizando seu wget para um novo shell, o ambiente não é preservado.

Para provar isso, tente o seguinte de dentro da sua caixa vagabunda

root@lucid32:~# export PATH=$PATH:/foo
root@lucid32:~# echo $PATH  
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/vagrant_ruby/bin:/foo

Agora, execute o mesmo comando que um usuário diferente

root@lucid32:~# su -l vagrant -c 'echo $PATH' 
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/opt/vagrant_ruby/bin

Compare a saída de ambos os comandos e você verá que o ambiente não é preservado no shell filho. (/ foo desapareceu)

Para tornar o ambiente persistente, use --preserve-environment ou -p ou -m . Todos os 3 são equivalentes.

root@lucid32:~# export PATH=$PATH:/foo
root@lucid32:~# su --preserve-environment -l vagrant -c 'echo $PATH' 
-su: /root/.bash_profile: Permission denied
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/vagrant_ruby/bin:/foo:/opt/vagrant_ruby/bin

Não se preocupe com o erro de permissão negada, que é esperado

Soluções

Solução 1.

Use -p , -m ou --preserve-environment

su --preserve-environment -l vagrant -c   'wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh'

Testado no lucid32 vagrant box (10.04)

Solução 2.

Se o seu manifesto de marionetes for executado antes de seu script heroku, basta adicionar / sbin ao caminho do usuário vagabundo através do fantoche

Testado lucid32 com os seguintes comandos

root@lucid32:~# su --preserve-environment -l vagrant -c 'wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh'
-su: /root/.bash_profile: Permission denied
This script requires superuser access to install apt packages.
You will be prompted for your password by sudo.
--2013-08-20 07:40:13--  https://toolbelt.heroku.com/apt/release.key
....
root@lucid32:~# su vagrant -
vagrant@lucid32:/root$ heroku login
Enter your Heroku credentials.
Email:
    
por 20.08.2013 / 01:07