Ubuntu

dpkg:警告:在 PATH 中找不到“ldconfig”或不可執行 - Ubuntu 12 - Vagrant

  • August 20, 2013

我正在設置 Vagrant / Puppet 安裝,以便新開發人員可以為我們的 Rails 項目提供一個乾淨的開發環境。

基本的 Vagrant 配置命令是:

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

總的來說,安裝似乎進展順利。我已經安裝並執行了 RVM、Postgres 和 Ruby。

但是,每當我嘗試使用此命令安裝“Heroku Toolbelt”時:

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

我遇到了這個問題:

... 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)

注意)如果我在 vagrant ssh 之後手動執行命令,就會發生這種情況。此外,實際的 shell 配置在最初執行時會出現錯誤。

由於這是一個 vagrant box,很容易“vagrant destroy”然後再試一次,但我一直遇到同樣的問題。

奇怪的是,我的 PATH 確實包含這些文件夾:

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

文件 ’ldconfig’ 在 /sbin 中並且是一個執行檔:

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

與 start-stop-daemon 相同:

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

所以,不確定它到底在抱怨什麼……有什麼建議嗎?Vagrant 的一些權限問題?

因為您將 wget 管道傳輸到新外殼,所以不會保留環境。

為了證明這一點,請從您的 vagrant box 中嘗試以下操作

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

現在以不同的使用者執行相同的命令

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

比較兩個命令的輸出,您會看到環境沒有保留在子 shell 上。(/foo 消失了)

要使環境持久化,請使用--preserve-environment or-p-m。3個都是等價的。

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

不要擔心權限被拒絕錯誤,這是預期的

解決方案


解決方案 1。

使用-p,-m--preserve-environment

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

在 lucid32 vagrant box (10.04) 上測試

解決方案 2。

如果您的 puppet 清單在您的 heroku 腳本之前執行,只需將 /sbin 通過 puppet 添加到 vagrant 使用者的路徑


使用以下命令測試了 lucid32

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:

引用自:https://unix.stackexchange.com/questions/87379