şef-solo ile kök değil, vagrant kullanıcı olarak "yürütmek"?


11

Aşağıdaki şef komutunu çalıştırmaya çalışıyorum:

# install zombiejs, q (promises), should, coffee-script & mocha                 
execute "install q and zombiejs" do                                             
  cwd "/home/vagrant"                                                           
  user "vagrant"                                                                
  action :run                                                                   
  command "npm install -g q zombie should mocha coffee-script"                  
end

Ama başarısız olmaya devam ediyor çünkü bulamıyor npm:

execute [q ve zombiejs'i yükle] (chef-redtail :: varsayılan satır 205) bir hata verdi: Errno :: ENOENT: Böyle bir dosya veya dizin yok - npm install -gq zombi mocha kahve komut dosyası yapmalı

Vagrant'ta oturum açmak vagrant sshve komutu manuel olarak çalıştırmak mükemmel şekilde çalışır. Kök olarak oturum açmak sudo -i, komutun çalıştırılması ve çalıştırılması, şef tarifinin başarısız olmasından dolayı başarısız olur (npm yerel olarak yalnızca vagrant kullanıcısı için kurulur, kök için değil: bu istediğim şey).

Öyleyse ... bu şef executebloğunu kök kullanıcı olarak değil, vagrant kullanıcı olarak çalışacak şekilde nasıl belirleyebilirim ?


GÜNCELLEME : Sanırım bu benim sorunumu özetliyor:

(ssh) /vagrant git:backbone ❯ whoami
vagrant

(ssh) /vagrant git:backbone ❯ which npm
/home/vagrant/.local/bin/npm

(ssh) /vagrant git:backbone ❯ echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i which npm
npm not found

http://tickets.opscode.com/browse/CHEF-2517 aracılığıyla


BAŞKA BİR GÜNCELLEME : Yani bu tutarsızlığı fark ettim:

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i export
HOME=/home/vagrant
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LOGNAME=vagrant
MAIL=/var/mail/vagrant
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
SHELL=/bin/zsh
SSH_AUTH_SOCK=/tmp/ssh-uJUopA4146/agent.4146
SUDO_COMMAND='/bin/zsh -c export'
SUDO_GID=1001
SUDO_UID=1000
SUDO_USER=vagrant
TERM=xterm
USER=vagrant

Farkı fark ettiniz PATHmi? Dışa aktarma işleminde /home/vagrant/.local/bindizin listelenmiyor ... neden ilk yankı PATHonunla geri dönüyor ve ikinci dışa aktarım PATHolmadan geri dönüyor ? Sorun bu mu?

Yanıtlar:


13

Bir komut dosyasını veya komutu kullanıcı olarak yürütmek için su -l ve bash -i'yi birleştirmeniz gerekir :

 execute "npm_install" do
    command "su vagrant -l -c 'cd /shared-with-host/helperScripts/ && bash -i npm install -g q zombie should mocha coffee-script'" 
    action :run
  end

Bazı hatalar nedeniyle , şef yürütülen belirtilen kullanıcı için ortamı düzgün ayarlamıyor . Narced133'ün çözümü çalışmaz.


7

environmentYürütme bloğunuzdaki HOME ve USER ortam değişkenlerini ayarlamak için kullanabilirsiniz .

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    environment ({'HOME' => '/home/vagrant', 'USER' => 'vagrant'})                                                             
    command "npm install -g q zombie should mocha coffee-script"                  
end

VM'lerim içinde vagrant kullanıcısı olarak vagrant eklentilerini yüklemek için bunu sık sık kullanıyorum. Ayrıca, yürütmeye çalıştığınız herhangi bir komut için gerekirse diğer ortam değişkenlerini de ayarlayabilirsiniz.


Bu çok temiz bir cevap IMHO.
Ben Liyanage

2

Şef kulağa vagrant kullanıcı olarak çalışıyor ama kabuk ile aynı PATH arama değil gibi görünüyor. Kullanarak giriş yapın vagrant sshve çalıştırın which npm. Gibi bir şey dönecektir /path/to/bin/npm. Chef'i /path/to/bin/uygun dizini aramaya zorlamak için aşağıyı değiştirin .

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    path ["/path/to/bin/"]                                                               
    command "npm install -g q zombie should mocha coffee-script"                  
end

Sadece denedim; nafile. Yayında aynı hatayla hala başarısız oluyor. Başka öneriniz var mı?
neezer

Yolu doğru bulmaya çalışmak yerine komutu doğrudan npm symlink'inde göstermeyi deneyebiliriz. command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script
narced133

"Yol" un hiçbir şey yapmadığını doğrulayabilirim, ama komutu doğrudan ikili dosyaya yönlendirmek hile yapar. Bu Chef bir hata gibi görünüyor.
FRKT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.