저는 새로운 개발자가 Rails 프로젝트를 위한 깔끔한 개발 환경을 가질 수 있도록 Vagrant/Puppet 설치를 설정하는 작업을 하고 있습니다.
기본 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 이후 수동으로 명령을 실행하면 이런 일이 발생합니다. 또한 처음 실행 시 실제 셸 구성이 올바르지 않습니다.
vagrant box이기 때문에 "vagrant break"를 하고 다시 시도하기는 쉽지만 항상 같은 문제가 발생합니다.
이상하게도 내 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
시작-중지-데몬과 동일:
-rwxr-xr-x 1 root root 26752 Apr 12 2012 start-stop-daemon
그래서, 그것이 실제로 무엇에 대해 불평하는지 잘 모르겠습니다... 어떤 제안이 있습니까? Vagrant에 일부 권한 문제가 있습니까?
답변1
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
이 두 명령의 출력을 비교하면 환경이 하위 쉘에 보존되지 않는다는 것을 알 수 있습니다. (/foo가 사라졌습니다)
환경을 지속적으로 만들려면 --preserve-environment
또는 를 사용하십시오 -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.
꼭두각시 매니페스트가 heroku 스크립트보다 먼저 실행되는 경우 꼭두각시를 통해 방랑자 사용자의 경로에 /sbin을 추가하세요.
다음 명령을 사용하여 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: