dpkg:警告:在 PATH 中找不到“ldconfig”或不可執行 - Ubuntu 12 - Vagrant
我正在設置 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: